-
-
-
-_Harvest Finance propose plusieurs vaults pour simplifier le farming [(source gif)](https://twitter.com/risk22_/status/1307304283415560193?s=20)_
-
-
Les vaults sont faits pour **abstraire la complexité pour les utilisateurs finaux**. Vous déposez des tokens et attendez qu'ils élaborent une stratégie pour vous. Voyons donc quelles sont les options disponibles.
{{< notice note >}}
-Cet article va droit au but et met en évidence les différents vaults disponibles. Pour en savoir plus sur les débuts de Yearn Finance, [**lisez cet article**]({{< relref path="/content/posts/2020/yearn-finance-YFI.fr.md" >}}). Pour en savoir plus sur les forks de Yearn, [**celui-ci**]({{< relref path="/content/posts/2020/yearn-waifus.fr.md" >}})
+Cet article va droit au but et met en évidence les différents vaults disponibles. Pour en savoir plus sur les débuts de Yearn Finance, [**lisez cet article**](https://tokenbrice.xyz/fr/yearn-finance/). Pour en savoir plus sur les forks de Yearn, [**celui-ci**](https://tokenbrice.xyz/fr/yearn-finance-forks/)
{{< /notice >}}
## Le plus simple : les vaults basiques
@@ -85,7 +81,7 @@ Avec Harvest.Finance, vous pouvez déposer directement le wBTC ou le renBTC, ou
Les vaults sur BTC et stablecoins sont intéressants mais peut-être aimeriez-vous conserver une exposition au prix de l'ETH ?
-Vous pouvez obtenir un tel résultat par vous-même en tirant parti de votre ETH. Vous les utiliserez comme collateral pour générer ou emprunter des stablecoins / WBTC qui sont ensuite déployés pour produire un rendement supérieur à votre coût d'emprunt : voici un article que j'ai écrit et qui fournit des conseils et des outils pour tirer efficacement parti de l'ETH - [**🎚 ETH ou DeFi : pourquoi choisir?**]({{< relref path="/content/posts/2020/leveraging-ETH.fr.md" >}})
+Vous pouvez obtenir un tel résultat par vous-même en tirant parti de votre ETH. Vous les utiliserez comme collateral pour générer ou emprunter des stablecoins / WBTC qui sont ensuite déployés pour produire un rendement supérieur à votre coût d'emprunt : voici un article que j'ai écrit et qui fournit des conseils et des outils pour tirer efficacement parti de l'ETH - [**🎚 ETH ou DeFi : pourquoi choisir?**](https://tokenbrice.xyz/fr/leveraging-eth/)
Toutefois, avec une telle position, vous pouvez être exposé à des liquidations si le prix de l'ETH devait baisser.
diff --git a/content/posts/2020/vaults.md b/content/post/2020/vaults.md
similarity index 93%
rename from content/posts/2020/vaults.md
rename to content/post/2020/vaults.md
index 0893d983..bbfd8150 100644
--- a/content/posts/2020/vaults.md
+++ b/content/post/2020/vaults.md
@@ -2,8 +2,11 @@
title: "🤖 Vaults: DeFi Investing Streamlined?"
description: "Vaults enable easy DeFi investments with a streamlined management of the position for the end-users. What are the options and their tradeoffs?"
date: '2020-09-30T01:13:50.191Z'
-categories: [🌌 DeFi, 💸 Practical DeFi]
-tags: [DeFi, Ethereum, Curve, yVault, Yearn, Yearn Finance, YFV, Uniswap, UNI, YFII, FARM, Harvest Finance]
+categories: [Yield]
+tags: [DeFi, Ethereum, Curve, Yearn Finance, YFV, Uniswap, Harvest Finance]
+image: /img/2020/vaults/harvest.png
+difficulty: "beginner"
+url: vaults
---
As the ecosystem of decentralized financial services on Ethereum grows and matures, the service offering is becoming more dense and sometimes hard to understand. While the most technically savvy users can chase the latest releases and hedge their risk appropriately, less-seasoned investors might feel left out.
@@ -18,18 +21,11 @@ The base idea is simple as 1, 2, 3:
So if you'd like to **avoid the headaches** of chasing the latest farm, managing the claim of the profits you earn, when and how to reinvest them, without forgetting, of course, to account for the gas costs of all these operations in the calculation of your profits, vaults are a credible alternative.
-
-
-
-_Harvest Finance offers several vaults to simplify farming [(gif source)](https://twitter.com/risk22_/status/1307304283415560193?s=20)_
-
-
-
Vaults are made to **abstract the complexity for the end-users**. You deposit some tokens and wait while they are farming a set strategy for you. So let's see what options are available.
{{< notice note >}}
-This article is straight to the point and highlights the different vaults available. To learn more about Yearn Finance debuts, [**read this piece**]({{< relref path="/content/posts/2020/yearn-finance-YFI.md" >}}). For more context on Yearn’s forks, [**check this one**]({{< relref path="/content/posts/2020/yearn-waifus.md" >}}).
+This article is straight to the point and highlights the different vaults available. To learn more about Yearn Finance debuts, [**read this piece**](https://tokenbrice.xyz/yearn-finance/). For more context on Yearn’s forks, [**check this one**](https://tokenbrice.xyz/yearn-finance-forks/).
{{< /notice >}}
## Simplest: Basic Vaults
@@ -86,7 +82,7 @@ With Harvest.Finance, you can deposit wBTC or renBTC directly, or the CRVRENWBTC
BTC & Stablecoins positions are interesting, but maybe you'd like to keep an exposure to the price ETH?
-You can achieve such a result by yourself by leveraging your ETH. You'll use them as collateral to mint or borrow stablecoins/wBTC that are then deployed to produce a return superior to your borrowing cost: here's an article I wrote providing tips and tools to leverage ETH efficiently - [**🎚 ETH exposure or DeFi yields: why choose?**]({{< relref path="/content/posts/2020/leveraging-ETH.md" >}})
+You can achieve such a result by yourself by leveraging your ETH. You'll use them as collateral to mint or borrow stablecoins/wBTC that are then deployed to produce a return superior to your borrowing cost: here's an article I wrote providing tips and tools to leverage ETH efficiently - [**🎚 ETH exposure or DeFi yields: why choose?**](https://tokenbrice.xyz/leveraging-eth/)
However, with such a position, you can be exposed to liquidations if the price of ETH was to drop.
diff --git a/content/posts/2020/yearn-finance-YFI.fr.md b/content/post/2020/yearn-finance-YFI.fr.md
similarity index 98%
rename from content/posts/2020/yearn-finance-YFI.fr.md
rename to content/post/2020/yearn-finance-YFI.fr.md
index 8fa9d0ba..bd932244 100644
--- a/content/posts/2020/yearn-finance-YFI.fr.md
+++ b/content/post/2020/yearn-finance-YFI.fr.md
@@ -2,8 +2,11 @@
title: "YearnFinance - La DeFi avec pilote automatique ?"
description: "Il n'aura fallu que quelques jours après la sortie de Yearn Finance V2 pour que cela devienne un des lancements les plus critiques de la DeFi – prenons le temps de comprendre ce qu'il s'est passé et pourquoi c'est important."
date: '2020-08-11T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Prêts, Aave, Compound, BzX, Curve, yVault, Stablecoins, Leveraging, YFI, Yearn, Yearn Finance]
+categories: [Yield]
+tags: [DeFi, Ethereum, Lending, Aave, Compound, Curve, Lending, Leveraging, Yearn Finance]
+image: /img/2020/yearn-finance-YFI/wifeys.jpg
+difficulty: "beginner"
+url: yearn-finance
---
Il y a quelques semaines, la sortie de Yearn v2 et le lancement du jeton YFI (prononcé "Waifu") ont ébranlé le monde de la finance décentralisée. En effet, toute la recette était là : Yearn est comme un conseiller automatique, il vous aide à économiser et à faire fructifier un capital - évidemment l'un des cas d'utilisation les plus en vogue.
@@ -12,8 +15,6 @@ Plus que le produit lui-même, c'est son fondateur André Cronje qui a été in
Avec cette article, je veux partager aujourd'hui quelques indications pour comprendre pourquoi Yearn a vu le jour, comment il fonctionne et pourquoi il est important.
-
-
## Qu'est-ce que Yearn ?
La première version de Yearn a débuté par une simple promesse : elle vous permettait d'obtenir le meilleur taux d'intérêt disponible à tout moment sur un stablecoin donné. En effet, comme il existait de plus en plus d'options pour prêter des stablecoins (Compound, Aave, dYdX, etc.), l'optimisation du rendement est rapidement devenue essentielle.
diff --git a/content/posts/2020/yearn-finance-YFI.md b/content/post/2020/yearn-finance-YFI.md
similarity index 97%
rename from content/posts/2020/yearn-finance-YFI.md
rename to content/post/2020/yearn-finance-YFI.md
index e3d17e33..0b9803c5 100644
--- a/content/posts/2020/yearn-finance-YFI.md
+++ b/content/post/2020/yearn-finance-YFI.md
@@ -2,8 +2,11 @@
title: "YearnFinance - DeFi on autopilot?"
description: "Yearn Finance V2 is just a few weeks old, yet it is already one of the most influential releases of the year for DeFi - let’s unpack what happened, and why it matters."
date: '2020-08-11T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Lending, Aave, Compound, BzX, Curve, yVault, Lending, Leveraging, YFI, Yearn, Yearn Finance]
+categories: [Yield]
+tags: [DeFi, Ethereum, Lending, Aave, Compound, Curve, Lending, Leveraging, Yearn Finance]
+image: /img/2020/yearn-finance-YFI/wifeys.jpg
+difficulty: "beginner"
+url: yearn-finance
---
A few weeks ago, Yearn v2 release and the launch of the YFI token (pronounced "Waifu") shook decentralised finance. Indeed, the whole recipe was there: Yearn is like a robo advisor, it helps you save and grow a capital - obviously one of the most thought after use cases.
@@ -12,7 +15,6 @@ More than the product itself, core to defining what Yearn became was its founder
With this piece today, I want to share some pointers to understand why Yearn came to be, how it works, and why it matters.
-
## What is Yearn?
diff --git a/content/posts/2020/yearn-merger-spree.fr.md b/content/post/2020/yearn-merger-spree.fr.md
similarity index 92%
rename from content/posts/2020/yearn-merger-spree.fr.md
rename to content/post/2020/yearn-merger-spree.fr.md
index 61f54833..7d355fc4 100644
--- a/content/posts/2020/yearn-merger-spree.fr.md
+++ b/content/post/2020/yearn-merger-spree.fr.md
@@ -2,8 +2,11 @@
title: "Les fusions de Yearn Finance"
description: "L'équipe Yearn joint ses forces avec 5 autres projets de la DeFi. Qu'est-ce que cela signifie pour l'ecosystème Yearn Finance ?"
date: '2020-12-09T01:13:50.191Z'
-categories: [🌌 DeFi]
-tags: [DeFi, Ethereum, Prêts, Aave, Compound, BzX, Curve, yVault, Stablecoins, Leveraging, YFI, Yearn, Yearn Finance, Pickle Finance, Cover Protocol, Cream Finance, Akropolis, SushiSwap]
+categories: [Yield]
+tags: [DeFi, Ethereum, Curve, Lending, YFI, Yearn, Yearn Finance, SushiSwap]
+image: /img/2020/yearn-merger/y-among-us.gif
+difficulty: "intermediate"
+url: yearn-finance-mergers
---
L'équipe de Yearn Finance a fait parler d'elle ces derniers temps avec l'annonce de **plusieurs acquisitions** comme Pickle Finance ou SushiSwap. Elle joint ses forces de développement à celles de cinq autres projets de DeFi.
@@ -18,9 +21,9 @@ Pour arriver aux derniers événements - la vague de fusions -, examinons d'abor
### Lancement, waifus et l'écosystème
-En juin dernier, le lancement du token de Yearn a été un moment unique, initiant ce que l'on appelle désormais un "lancement équitable". Essentiellement, le token **YFI a été distribué pendant une semaine aux utilisateurs** qui ont effectué des dépôts dans plusieurs pools liés aux produits de Yearn. N'hésitez pas à consulter **[mon premier article sur Yearn]({{< relref path="/content/posts/2020/yearn-finance-YFI.fr.md" >}})** pour en savoir plus sur ce moment.
+En juin dernier, le lancement du token de Yearn a été un moment unique, initiant ce que l'on appelle désormais un "lancement équitable". Essentiellement, le token **YFI a été distribué pendant une semaine aux utilisateurs** qui ont effectué des dépôts dans plusieurs pools liés aux produits de Yearn. N'hésitez pas à consulter **[mon premier article sur Yearn](https://tokenbrice.xyz/fr/yearn-finance/)** pour en savoir plus sur ce moment.
-Cela s'est traduit par une sensibilisation croissante au projet, une appréciation rapide du prix du token et a incité des utilisateurs actifs de la DeFi à contribuer à Yearn par le biais des discussions du DAO. Le lancement a été si réussi qu'il est devenu un modèle reproduit avec plus ou moins de succès par de nombreux autres projets : **[les waifus (fork de Yearn)]({{< relref path="/content/posts/2020/yearn-waifus.fr.md" >}})**.
+Cela s'est traduit par une sensibilisation croissante au projet, une appréciation rapide du prix du token et a incité des utilisateurs actifs de la DeFi à contribuer à Yearn par le biais des discussions du DAO. Le lancement a été si réussi qu'il est devenu un modèle reproduit avec plus ou moins de succès par de nombreux autres projets : **[les waifus (fork de Yearn)](https://tokenbrice.xyz/fr/yearn-finance-forks/)**.
Au départ, Yearn se concentrait sur ses propres produits, les principaux étant les vaults permettant un déploiement simplifié de stratégies d'investissement. Les vaults ont également évolué au-delà de Yearn pour devenir un produit proposé par de nombreux services de DeFi.
@@ -36,13 +39,9 @@ Dans ce contexte, examinons maintenant les différents projets qui s'associent
Note : Certaines de ces fusions sont encore en attente d'un vote des détenteurs de tokens des communautés concernées pour être validées.
-
-
*Un membre de la communauté francophone a créé un NFT pour commémorer l'évènement : [yAmong us, par Cryptouf - dispo sur Rarible](https://app.rarible.com/token/0xd07dc4262bcdbf85190c01c996b4c06a461d2430:90731:0xac6d5c44c7a089101c53735211b12f5f722c7688).*
-
-
#### Pickle Finance (11/24)
_Token_ : PICKLE
@@ -51,10 +50,6 @@ _Service_ : Produits d'investissement simplifiés (vaults)
La "relation symbiotique" avec Pickle Finance a été la première à être introduite le 24 novembre. L'idée est de fusionner les efforts des deux projets qui offrent actuellement des produits similaires. Pickle va maintenant fournir un **mécanisme d'incitation au dessus des vaults de Yearn** par le biais de jauges, similaire au modèle actuel de Curve.
-
-{{< tweet 1334474169942159361 >}}
-
_Pourquoi le modèle Yearn / $YFI intégré verticalement est-il intéressant ?_
_Parce que le succès des applications DeFi repose sur la liquidité. Si vous en disposez, vos services ont tendance à être plus utiles aux utilisateurs._
diff --git a/content/posts/2020/yearn-merger-spree.md b/content/post/2020/yearn-merger-spree.md
similarity index 91%
rename from content/posts/2020/yearn-merger-spree.md
rename to content/post/2020/yearn-merger-spree.md
index 3163847f..4ad9be3f 100644
--- a/content/posts/2020/yearn-merger-spree.md
+++ b/content/post/2020/yearn-merger-spree.md
@@ -2,8 +2,11 @@
title: "Yearn Finance's Merger Spree"
description: "Yearn has joined forces with several DeFi projects. What does it mean for its ecosystem?"
date: '2020-12-09T01:13:50.191Z'
-categories: [🌌 DeFi]
-tags: [DeFi, Ethereum, Curve, yVault, Lending, YFI, Yearn, Yearn Finance, Pickle Finance, Cover Protocol, Cream Finance, Akropolis, SushiSwap]
+categories: [Yield]
+tags: [DeFi, Ethereum, Curve, Lending, YFI, Yearn, Yearn Finance, SushiSwap]
+image: /img/2020/yearn-merger/y-among-us.gif
+difficulty: "intermediate"
+url: yearn-finance-mergers
---
Yearn Finance has been making headlines lately with the announcement of **several acquisitions** like Pickle Finance or SushiSwap. The Yearn team has joined its development forces with five other DeFi projects already.
@@ -18,9 +21,9 @@ So to better understand the latest events - the merger spree, let's first quickl
### Yearn's Backstory: Launch, waifus & the ecosystem
-Last June, Yearn's token launch was a unique moment, initiating what is now called a "fair launch". Essentially, the **YFI token was distributed over a week to users** depositing to several pools related to Yearn's products. Feel free to check **[my first story on Yearn]({{< relref path="/content/posts/2020/yearn-finance-YFI.md" >}})** to learn more about this moment.
+Last June, Yearn's token launch was a unique moment, initiating what is now called a "fair launch". Essentially, the **YFI token was distributed over a week to users** depositing to several pools related to Yearn's products. Feel free to check **[my first story on Yearn](https://tokenbrice.xyz/yearn-finance/)** to learn more about this moment.
-It translated into a growing awareness for the project, a rapid price appreciation of the token, and attracted involved DeFi users to contribute to Yearn through the DAO's discussions. The launch was so successful that it actually became a template replicated more or less successfully by many other projects: **[the Yearn's waifus (forks)]({{< relref path="/content/posts/2020/yearn-waifus.md" >}})**.
+It translated into a growing awareness for the project, a rapid price appreciation of the token, and attracted involved DeFi users to contribute to Yearn through the DAO's discussions. The launch was so successful that it actually became a template replicated more or less successfully by many other projects: **[the Yearn's waifus (forks)](https://tokenbrice.xyz/yearn-finance-forks/)**.
Initially, Yearn was focusing on its own products, the main ones being the vaults enabling streamlined implementations of farming strategies. The vaults too grew beyond Yearn to become a product offered by many DeFi services.
@@ -37,12 +40,8 @@ With the context set, let's now look at the different projects joining forces wi
Note: Some of these mergers are still pending a token holder vote to be validated.
-
-
-
*A NFT was made to immortalize this moment of Yearn's history: [yAmong us, by Cryptouf - available on Rarible](https://app.rarible.com/token/0xd07dc4262bcdbf85190c01c996b4c06a461d2430:90731:0xac6d5c44c7a089101c53735211b12f5f722c7688).*
-
#### Pickle Finance (11/24)
@@ -52,10 +51,6 @@ _Service_: Streamlined investment products (vaults)
The "symbiotic relationship" with Pickle Finance was the first to be introduced on November 24. The idea is to merge the efforts of the two projects currently offering similar products. Pickle will now deliver an **incentive mechanism on top of the Yearn vaults** through gauges, similar to Curve's current model.
-
-{{< tweet 1331222558536998914 >}}
-
-
By joining forces, it creates additional options for Yearn vaults depositors while securing the assets deposited in the Pickle jars, one of which was subject to a [$20 million exploit ](https://cointelegraph.com/news/pickle-in-a-pickle-as-attacker-swipes-20-million-in-evil-jar-exploit)shortly before the merge.
@@ -99,10 +94,6 @@ Sushi is now **the second DEX by volume** with roughly half ($889M) of the total
This could allow Yearn to **incentivize liquidity providing for critical pairs of the Yearn ecosystem**, such as a CRV <> yyveCRV to drive deposit into this vault which can provide additional returns for other Yearn deposits on Curve. The team joins efforts so that Sushi/0xMaki can lead the AMM efforts amongst the ecosystem.
-
-{{< tweet 1333765583788191744 >}}
-
-
### What does it mean for Yearn?
While this merger spree is a **massive increase in Yearn's firepower**, it's also a **form of recentering**: some key parts of the ecosystem are delegated, such as the AMM (swaps) to Sushiswap's team, or the lending markets to Cream. It should enable the team to move faster on its core products.
@@ -113,10 +104,4 @@ In DeFi, composability is key and Yearn is yet another demonstration of what it

-With these 5 acquisitions, Yearn will roughly triple its total value of assets locked across its ecosystem. Along with the synergies, it could help Yearn develop a moat that will be hard to beat:
-
-DCInvestor expresses it better that I would do:
-
-
-{{< tweet 1334474169942159361 >}}
-
\ No newline at end of file
+With these 5 acquisitions, Yearn will roughly triple its total value of assets locked across its ecosystem. Along with the synergies, it could help Yearn develop a moat that will be hard to beat.
\ No newline at end of file
diff --git a/content/posts/2020/yearn-waifus.fr.md b/content/post/2020/yearn-waifus.fr.md
similarity index 97%
rename from content/posts/2020/yearn-waifus.fr.md
rename to content/post/2020/yearn-waifus.fr.md
index 14c776d0..5d3ba853 100644
--- a/content/posts/2020/yearn-waifus.fr.md
+++ b/content/post/2020/yearn-waifus.fr.md
@@ -2,13 +2,15 @@
title: "Les forks de Yearn Finance : présentation de la famille des Waifus"
description: "Au-delà de son succès retentissant, Yearn Finance a inspiré de nombreux projets qui l'ont forké. Cet article le tour des forks de YFI les plus pertinents."
date: '2020-09-18T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Curve, yVault, Lending, YFI, Yearn, Yearn Finance, YFV, YFII, YFL, FARM, Harvest Finance]
+categories: [Yield]
+tags: [DeFi, Ethereum, Curve, Lending, YFI, Yearn, Yearn Finance, Harvest Finance]
+image: /img/2020/yearn-waifus/cover.jpg
+difficulty: "intermediate"
+url: yearn-finance-forks
---
À chaque jour son nouveau fork de Yearn Finance : comment les suivre ? Il n'y a pas de réponse simple, mais je pense pouvoir **vous fournir quelques éléments pour vous aider à repérer les fork de YFI à fort potentiel**. Pour ce faire, je vais couvrir trois (+1) fork YFI et essayer de mettre le doigt sur ce qui les rend intéressants.
-
Yearn est plus que le produit Yearn.Finance lui-même : il est devenu un modèle pour lancer un projet, parfois appelé "lancement équitable". Yearn a été le pionnier de cette méthode qui repose sur trois éléments clés :
@@ -31,7 +33,7 @@ Dans les premiers temps de Yearn, les gens ne savaient pas très bien comment pr
En effet, bien qu'il ait à peine quelques mois, **Yearn a déjà été forké, beaucoup**. Il y a maintenant toute une famille de wifeys construite sur une base similaire, chaque projet ajustant différents paramètres pour tenter de mieux s'adapter au cas d'utilisation envisagé. Beaucoup de ces forks étaient inutiles, mais **plusieurs ont réussi à apporter quelque chose de nouveau et d'excitant** - ceux dont nous parlerons aujourd'hui.
{{< notice note >}}
-Ce contenu suppose une bonne compréhension de Yearn, afin d'approfondir le sujet, je recommande la lecture de [**mon précédent article sur Yearn**]({{< relref path="/content/posts/2020/yearn-finance-YFI.fr.md" >}}).
+Ce contenu suppose une bonne compréhension de Yearn, afin d'approfondir le sujet, je recommande la lecture de [**mon précédent article sur Yearn**](https://tokenbrice.xyz/fr/yearn-finance/).
{{< /notice >}}
### [DFI.Money (YFII)](http://dfi.money/)
diff --git a/content/posts/2020/yearn-waifus.md b/content/post/2020/yearn-waifus.md
similarity index 96%
rename from content/posts/2020/yearn-waifus.md
rename to content/post/2020/yearn-waifus.md
index 31fa11b0..b9d3c3f7 100644
--- a/content/posts/2020/yearn-waifus.md
+++ b/content/post/2020/yearn-waifus.md
@@ -2,14 +2,15 @@
title: "Yearn Finance's Forks: The State of the Waifus Family"
description: "On top of being one of the most succesful DeFi protocols, Yearn is also forked alot. Today, we have a look at the top YFI forks and what made them stick!"
date: '2020-09-18T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Curve, yVault, Lending, YFI, Yearn, Yearn Finance, YFV, YFII, YFL, FARM, Harvest Finance]
+categories: [Yield]
+tags: [DeFi, Ethereum, Curve, Lending, YFI, Yearn, Yearn Finance, Harvest Finance]
+image: /img/2020/yearn-waifus/cover.jpg
+difficulty: "intermediate"
+url: yearn-finance-forks
---
Every day a new Yearn fork is popping up: how to keep track with them? There is no simple answer to this dilemma, however, I believe I can **provide you with some clues to help you spot YFI fork with high potential.** To do so, I’ll cover three (+1) YFI forks and try to pinpoint the changes to the secret sauce that made them stick.
-
-
Yearn is more than Yearn.Finance product itself: it became a template to kickstart a project, sometimes called "fair launch". Yearn pioneered the method which stands on three key elements:
1. **Liquidity Mining Fair Launch**: the initial distribution of the token of the platform (ex: YFI) happens through liquidity mining. Supporters can stake tokens like yCRV to earn the governance token.
@@ -31,7 +32,7 @@ In the early days of Yearn, people were unclear on how to pronounce "YFI". [A di
Indeed, despite being barely a few months old, **Yearn has already been forked, a lot**. There is now a whole family of wifeys built upon similar premises, each project adjusting different parameters to attempt to better fit their envisioned use case. Many of these forks were unnecessary, however, **several managed to bring something new and exciting to the table** — the ones we will consider today.
{{< notice note >}}
-This content assumes an understanding of Yearn, to brush up on the topic I'd recommend [**my previous article on Yearn**]({{< relref path="/content/posts/2020/yearn-finance-YFI.md" >}}).
+This content assumes an understanding of Yearn, to brush up on the topic I'd recommend [**my previous article on Yearn**](https://tokenbrice.xyz/yearn-finance/).
{{< /notice >}}
### [DFI.Money (YFII)](http://dfi.money/)
diff --git a/content/posts/2020/yield-farmer-tier-list.fr.md b/content/post/2020/yield-farmer-tier-list.fr.md
similarity index 97%
rename from content/posts/2020/yield-farmer-tier-list.fr.md
rename to content/post/2020/yield-farmer-tier-list.fr.md
index 58208f86..fb471c90 100644
--- a/content/posts/2020/yield-farmer-tier-list.fr.md
+++ b/content/post/2020/yield-farmer-tier-list.fr.md
@@ -2,14 +2,15 @@
title: "💦 Pools de Liquidité avec programmes d'incitation - La Tier List"
description: "Une liste hiérarchisée qui présente différents **programmes d'incitation au dépôt de liquidité Balancer, Uniswap, et Curve Finance.**"
date: '2020-07-07T01:13:50.191Z'
-categories: [🌌 DeFi, 💸 DeFi pratique]
-tags: [DeFi, Ethereum, Prêts, Apports de liquidités, Actifs synthétiques, Balancer, Curve, Programme d'incitation, Liquidity Mining, Ampleforth]
+categories: [Practical, Yield]
+tags: [DeFi, Ethereum, Lending, Liquidity Providing, Balancer, Curve]
toc: true
tocNum: true
+image: /img/2020/yield-farmer-tier-list/cover.png
+difficulty: "intermediate"
+url: yieldfarmer-tierlist
---
-
-
La DeFi est comme un gâteau à plusieurs étages. Lorsque vous passez sa porte pour la première fois, faire un dépôt sur Aave et voir votre solde augmenter vous laisse bouche bée. Peu de temps après, grâce à vos propres recherches ou à vos discussions avec la communauté, vous vous rendez compte qu'il y a plus que cela **- il pourrait aussi y avoir une cerise sur le gâteau !**
Il existe de nombreuses façons d’obtenir des rendements sur un capital donné en utilisant la finance décentralisée sur Ethereum. **Aujourd'hui, nous excluons toute stratégie impliquant un effet de levier** - la manière la plus simple de réaliser un tel exploit. Il y a encore beaucoup de cultures de haute qualité à planter !
@@ -26,8 +27,8 @@ Dans les jeux de stratégies ou de combat, on utilise des tiers lists pour étab
-1. Ce document ne couvrira pas les stratégies d'investissement de base de DeFi, détaillées dans le **[📖 Guide des services DeFinanciers]({{< relref path="/content/posts/2020/definancial-services-guide.fr.md" lang="fr" >}})**.
-2. Pour plus d'informations concernant les outils que vous pouvez utiliser pour mettre en œuvre et gérer ces stratégies, veuillez consulter la **[🧰 Trousse à outils du cultivateur DeFi]({{< relref path="/content/posts/2020/defi-farmer-toolbox.fr.md" lang="fr" >}})**.
+1. Ce document ne couvrira pas les stratégies d'investissement de base de DeFi, détaillées dans le **[📖 Guide des services DeFinanciers](https://tokenbrice.xyz/fr/definancial-guide/)**.
+2. Pour plus d'informations concernant les outils que vous pouvez utiliser pour mettre en œuvre et gérer ces stratégies, veuillez consulter la **[🧰 Trousse à outils du cultivateur DeFi](https://tokenbrice.xyz/fr/defi-farmer-toolbox/)**.
**_Il ne s'agit pas de conseils en matière d'investissement et ce document ne doit pas être lu comme autre chose qu'une liste structurée de pools de liquidités avec programmes d'incitation._**
@@ -118,8 +119,6 @@ Note : le prix du token JRT a été assez actif ces derniers temps. Faites vos p
⚡ Mise à jour (_08 Juillet_): les JRT supplémentaires sont désormais distributés sur TOUTES les pools Balancer vérifiées (whitelisted):
-{{< tweet 1280887456339046400 >}}
-
### AMPL Geyser
L'AMPL est une bête à part entière, je vous invite donc à en lire plus [^3] avant de vous plonger dans celui-ci. Ici, l'exposition est de 50 % d'ETH et 50 % d'AMPL. En plus de vos commissions, vous avez droit à des AMPL supplémentaires & ainsi qu'aux habituels rééquilibrages d'AMPL (sur vos AMPL = 50 % du capital total).
diff --git a/content/posts/2020/yield-farmer-tier-list.md b/content/post/2020/yield-farmer-tier-list.md
similarity index 97%
rename from content/posts/2020/yield-farmer-tier-list.md
rename to content/post/2020/yield-farmer-tier-list.md
index 36bd0dd6..23c37c03 100644
--- a/content/posts/2020/yield-farmer-tier-list.md
+++ b/content/post/2020/yield-farmer-tier-list.md
@@ -2,14 +2,15 @@
title: "💦 The Yield Farmer Tier List"
description: "A structured list of **incentivised liquidity pools on Balancer Labs, Curve Finance and Uniswap**, ranked by their yield earning potential: let's stack!"
date: '2020-07-07T01:13:50.191Z'
-categories: [🌌 DeFi, 💸 Practical DeFi]
-tags: [DeFi, Ethereum, Lending, Liquidity Providing, Balancer, Curve, Liquidity Incentives, Liquidity Mining, Ampleforth, mUSD]
+categories: [Practical, Yield]
+tags: [DeFi, Ethereum, Lending, Liquidity Providing, Balancer, Curve]
toc: true
tocNum: true
+image: /img/2020/yield-farmer-tier-list/cover.png
+difficulty: "intermediate"
+url: yieldfarmer-tierlist
---
-
-
DeFi is like a layered yield cake. When you first walk through the door, making a deposit on Aave and seeing your balance grow puts you in awe. Shortly thereafter, through your own research or discussions with the community, you realize there is more to it **- there could be icing on the cake too!**
There are many ways you could find several streams of yields on a given capital utilizing Ethereum's decentralized finance. **Today, we'll exclude out of the box any strategy involving leverage** - the easiest way to achieve such a feat. There are still a lot of high-quality crops to plant, even without leverage!
@@ -24,8 +25,8 @@ In video games, tier lists are useful to navigate the different types of charact
ℹ Please note - This content assumes a basic understanding of the world of Ethereum's decentralized finance. Refer to my earlier articles if that's the first time you've heard of it:
-1. This piece will not cover basic DeFi investment strategies, detailed in the **[📖 DeFinancial Services Guide]({{< relref path="/content/posts/2020/definancial-services-guide.md" >}})**.
-2. For more information regarding the tools you can use to implement and manage these strategies, please check **[🧰 The DeFinancial Farming Toolbox]({{< relref path="/content/posts/2020/defi-farmer-toolbox.md" >}})**.
+1. This piece will not cover basic DeFi investment strategies, detailed in the **[📖 DeFinancial Services Guide](https://tokenbrice.xyz/definancial-guide/)**.
+2. For more information regarding the tools you can use to implement and manage these strategies, please check **[🧰 The DeFinancial Farming Toolbox](https://tokenbrice.xyz/defi-farmer-toolbox/)**.
**_This is not investment advice and reading this document as anything more than a structured list of incentivised liquidity pools would be a misrepresentation._**
@@ -115,8 +116,6 @@ _Please note: JRT price's action has been quite explosive lately. DYOR._
⚡ Update (_July 08_): JRT rewards are now distributed to ANY Balancer pool (whitelisted):
-{{< tweet 1280887456339046400 >}}
-
### AMPL Geyser
AMPL is a beast of its own, so I invite you to read more on it [^3] before you dive into this one. Here, the exposure is 50 % ETH and 50 % AMPL. On top of your commissions, you're eligible for extra AMPL & as well as the AMPL rebalances (on your AMPL = 50% of the exposure).
diff --git a/content/post/2021/aave-governance-platform.md b/content/post/2021/aave-governance-platform.md
new file mode 100644
index 00000000..97b32921
--- /dev/null
+++ b/content/post/2021/aave-governance-platform.md
@@ -0,0 +1,121 @@
+---
+title: "Calling for your support to keep Aave's governance community-driven"
+description: "It's time for me to get more involved in the governance of a decentralized protocol to uphold DeFi's grassroots values: today, I'm calling for your vote delegations in Aave's governance."
+date: '2021-07-27T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized finance, Aave, Governance, Delegation]
+url: aave-governance-program
+image: /img/2021/aave-governance-platform/cover.png
+difficulty: "beginner"
+---
+
+Hello, I'm TokenBrice, and this post is my formal platform to solicit delegation in the Aave governance. While calling for delegations and explaining my vision for Aave, I'd also like to set a new standard for DAO delegates.
+
+You'll find in the post details about my long-term vision for Aave, who I am, why I'm asking for your AAVE vote delegations today, as well as all relevant disclosures to help you make sure this responsibility is not conflicting or overlapping with any other ongoing ones I have.
+
+You'll find my vote delegate disclosure, [following the template proposed by Erich Dylus & Sarah Brennan (Open Source Law)](https://github.com/ErichDylus/Open-Source-Law/blob/main/forms/legal/Vote%20Delegate%20Disclosure.md) at [the end of this document](#vote-delegate-disclosure).
+
+## Why me, why now, why Aave?
+
+While I've been actively involved in the growth of DeFi, I've never actively committed to get involved in DAO's politics. However, the recent developments in the space led me to believe that now more than ever, the community needs to come together and offer credible governance alternatives to the existing structures, mostly enabled by venture capitalists.
+
+Since my early involvement in DeFi, I have fought to maximize accessibility and make sure the fundamentals of DeFi (transparency, trustlessness, permissionlessness & open-source) are preserved as the ecosystem grows.
+
+I'm now ready to uphold this vision at the Aave DAO level with an active participation in the governance. After reading [the first proposal for the extension of the liquidity mining program](https://governance.aave.com/t/arc-extend-aave-liquidity-mining-rewards/4852) on Aave, I realized that we needed to be proactive and lead the efforts for a counter-proposal if we do not want more structured, organized and better funded interest groups to make the decisions for us.
+
+Critical decisions for major protocols are increasingly decided by a limited number of participants sharing similar interests, as we've seen with [Uniswap's DeFi Education Fund vote](https://tokenbrice.xyz/defi-janus/#uniswap-1m-uni-here-1m-uni-there). I'd like to at least try to prevent a similar scenario from unfolding on Aave's governance.
+
+ or received most of their voting power thanks to a delegation from such actor, such as BlockchainHEC or CalBlockchain")
+
+---
+
+## My vision for Aave
+
+Money markets are at the heart of DeFi. I think Aave established itself as both the most innovative and secure service available in the vertical, and the observed track record aligns with this view. Relative to other money markets, Aave managed to so far avoid any failure resulting in loss of funds for users (others did not). If that was to happen, thanks to the Safety Module, affected users could be reimbursed.
+
+Regarding the liquidity mining extension, the ongoing proposal that motivated me to get more involved in the governance, my main concerns are the sizable budget currently proposed (27% of the total ecosystem reserve for a year) & the fact that it is allocated "blindly" based on set budget per assets with no other adjustments.
+
+I'm now calling for delegation to thrive to uphold the following principles in Aave's governance:
+
+1. Thrive to provide comprehensive breakdowns of the challenges pertaining to the main votes
+2. Fight to ensure that the Ecosystem Reserve is used in the best long-term interest of the protocol.
+3. Articulate key concepts and ideas voiced by the community to make sure they are answered.
+4. Provide a documented and motivated position for each main issue, with a particular attention given their impact on the protocol's safety and resiliency.
+5. Use, as much as possible, my existing network and presence to document Aave's governance and make it more accessible, particularly to FR-speaking audiences.
+
+---
+
+## How to delegate?
+
+You can use Sybil.org to check your voting power on various DAOs and handle delegations.
+
+
+
+1. Go on [Sybil.org - Aave](https://sybil.org/#/delegates/aave): once you connect your wallet you'll see your voting power on the right panel
+2. You can self-delegate to use that voting power yourself (default) or delegate it to another wallet.
+3. If you wish to delegate your voting power to me, simply delegate to `tokenbrice.eth`
+
+### Following my activity
+
+To follow my contributions to Aave's governance,
+
+- Check my [profile on Sybil.org](https://sybil.org/#/delegates/aave/0xAA7A9d80971E58641442774C373C94AaFee87d66) to view my votes and delegations.
+- Check [my profile on the Aave governance forum](https://governance.aave.com/u/tokenbrice/summary) to follow my comments and proposals.
+- Or simply [follow me on Twitter](https://twitter.com/tokenbrice/) where I'll share about it.
+
+---
+
+## Who am I?
+
+I've been following DeFi since before it bore its name and experimented with all the landmark protocols. With Mounir (ParaSwap) & Arthur, we created the DeFi France movement and helped it grow. I keep up with DeFi on a daily basis and share my research on a [FR/EN blog](http://tokenbrice.xyz/), and host [🇫🇷 weekly live sessions](https://www.twitch.tv/tokenbrice) to discuss the latest developments in DeFi.
+
+With the help of French-speaking Aave team members, we produced what is widely recognized as one of the most comprehensive resources covering the protocol in French: [🇫🇷 the Aave marathon (3h)](https://www.youtube.com/watch?v=XSL0JbBxvRM&list=PLreQl_vxgtPh-13wNlEWui7RTioCOFweN&index=2) with Marc Zeller, Alex & Statelayer. After the publication of a comprehensive [🇺🇸 guide helping users to assess risks on money markets](https://tokenbrice.xyz/money-markets-risk/), Alex also joined me for [🇫🇷 another live session dedicated to risk assessment for money markets & her job as actuary](https://www.youtube.com/watch?v=0L9DiHOouaY&list=PLreQl_vxgtPhSZeMiTbzXAjL_U-_NnQwD&index=23).
+
+On the media I control (this blog), I enforced some basic principles which I think give insight as to where I stand and what matters for me:
+
+* **Privacy-preservation**: the data collection is minimal and done using a self-hosted open-source service (Matomo).
+* **Accessibility**: the website is static & optimized to the best of my ability
+* **Transparency**: the content lives in a github repo, all edits are publicly logged.
+* **Including transparent funding**: the only source of funding accepted for this activity is the related [gitcoin grants](https://gitcoin.co/grants/811/tokenbrice-evangelizing-defi-in-fr-en).
+
+I see Aave as a protocol here for the decades to come and will fight to make sure the DAO keeps a long-term focus. While the ecosystem reserve are significant, the current burn rate will empty them in a few years, for ~ $50M worth of stablecoins accrued in the protocol reserves (extrapolating the current rate).
+
+While my engagement in Aave governance started with the discussion on the liquidity mining program, I believe several other adjustments are also needed to maximize its long-term resiliency such as updates to the safety module budget and mechanisms, as well as a diversification of the protocol's treasury.
+
+---
+
+## Vote Delegate Disclosure
+
+_Last updated: 07/27/2021_
+
+Please be advised:
+
+I control the private key for the externally owned account:
+
+0xAA7A9d80971E58641442774C373C94AaFee87d66 associated to the tokenbrice.eth ENS,
+
+I intend to participate in the governance of Aave, whether by proposing, voting, abstaining, or engaging in related discourse or otherwise, in accordance with its applicable parameters and guidelines. I understand that other externally owned accounts and addresses may delegate their voting power to me from time to time and intend that this disclosure will generally govern my actions as a delegate.
+
+I have instituted policies and procedures with respect to delegations in the interest of transparency, which may be subject to update from time to time and are available here. Though I do not have a formal policy, in participating in the governance of Aave, I intend to act on the following principles:
+
+
+
+* I will seek to remain informed about governance proposals and vote on matters from time to time using my independent judgment unless otherwise disclosed;
+* I will act in good faith and use reasonable care in participating in governance, including in making proposals and in voting;
+* I will endeavor to provide transparent, good faith, and honest information as to my motivations and reasoning in carrying out my role as a delegate, or when soliciting the delegation of voting power;
+* I am not a party to any voting bloc, trust, or other group and will not engage in vote-buying, vote-selling, bribery, manipulation, or other undisclosed vote solicitation or coordination; and
+* To the extent I am aware of a material non-public conflict of interest that exists for a Delegator with respect to a proposal, I will refrain from voting in my capacity as a delegate for such Delegator with respect to such proposal
+
+
+### Conflict Disclosure
+
+I currently have economic interest in ParaSwap (part-time contributor), and may engage in the DeFi France community from time to time. I may have direct or indirect economic interests in the various projects, entities, networks, and protocols related to the foregoing, and I also use and hold various other cryptocurrencies, tokens, stablecoins and other digital assets from time to time, including but not limited to ETH, CRV, CVX, LINK, LQTY, BAL, PNK.
+
+Except as disclosed herein, in participating in the governance of Aave, I am not acting on behalf of ParaSwap nor on behalf of any client, nor any voting power delegator, whether or not such delegation was solicited. If my views expressed in governance contexts are interpreted or used in a manner that leads to some injury or detriment, there will be no legal recourse against me as a vote delegate or otherwise, nor will there be any coverage or indemnity from any applicable insurance or similar mechanism.
+
+
+### Disclaimer of Duty to Update
+
+I assume no duty and provide no guarantee of keeping these disclosures up to date, nor of adjusting these disclosures for each applicable governance process, but will endeavor to act in good faith when soliciting the delegation of voting power and when acting in my capacity as a delegate.
+
+You may contact me at me@tokenbrice.com, though I assume no duty for, and cannot guarantee my responsiveness to, or any action upon, any individual question, feedback, or request from a vote delegator or otherwise.
\ No newline at end of file
diff --git a/content/posts/2021/badger-digg.fr.md b/content/post/2021/badger-digg.fr.md
similarity index 89%
rename from content/posts/2021/badger-digg.fr.md
rename to content/post/2021/badger-digg.fr.md
index c0bb5a69..5867d57c 100644
--- a/content/posts/2021/badger-digg.fr.md
+++ b/content/post/2021/badger-digg.fr.md
@@ -2,17 +2,17 @@
title: "L'histoire de BadgerDAO : une intro via DIGG"
description: "BadgerDAO se trouve en première ligne sur deux thèmes très tendance : le gestion d'actifs en DeFi (vaults/setts) & BTC sur Ethereum. Voyons donc qu'implique le projet et quel est son plan."
date: '2021-01-30T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Finance décentralisées, Badger, BadgerDAO, DIGG, monaies élastiques, wBTC, renBTC, Curve BTC pools, gitcoin, Meme, vault, setts, farming, liquidity providing, LP, BTC, BTC on Ethereun, platformisation de la DeFi]
+categories: [Yield]
+tags: [DeFi, Ethereum, Decentralized finance, Badger, BadgerDAO, DIGG]
toc: true
tocNum: true
url: badger-digg
+image: /img/2021/badger-digg/cover.png
+difficulty: "beginner"
---
Malgré son lancement il y a à peine quelques semaines, BadgerDAO s'est rapidement transformé en une centrale DeFi **hébergeant maintenant > 1,2 milliard de dollars d'actifs**. Bien que j'ai rapidement évoqué Badger dans des articles ou des émissions précédentes, je pense qu'il est temps de consacrer un article à DIGG, sans oublier son contexte.
-
-
## Une introduction à Badger DAO
BadgetDAO est un projet communautaire avec une proposition de valeur claire : aider **à construire l'infrastructure nécessaire pour relayer BTC dans la DeFi**. Cette vision fondamentale se manifeste à travers tous leurs produits, tous centrés autour de représentations de Bitcoin sur Ethereum comme wBTC ou sBTC et les tokens natifs - BADGER et maintenant DIGG.
@@ -21,7 +21,7 @@ BadgetDAO est un projet communautaire avec une proposition de valeur claire : ai
La première couche de cet oignon est assez simple : Badger offre un service de type Yearn pour les BTC sur Ethereum : les utilisateurs peuvent déposer des tokens représentant une position dans un pool de BTC Curve pour gagner BADGER & DIGG en plus de l'APY natif.
-
+
Il existe également des vaults (appelés "setts") pour BADGER et DIGG eux-mêmes, ainsi que leurs tokens LP respectifs sur Uniswap et SushiSwap.
@@ -35,9 +35,9 @@ Cette proposition de valeur n'est pas nouvelle en soi et aurait pu être fournie
Depuis le début, la communauté a été mise au centre avec Badger. C'est clairement visible simplement en regardant les distributions de tokens [^1] :
-
+
-
+
En effet, les deux plus grandes parts du total circulant des deux tokens ont été allouées au programme de liquidity mining - récompensant les utilisateurs actifs du protocole ainsi que la trésorerie du DAO chargée de structurer les opérations à long terme du protocole et sa croissance.
@@ -49,7 +49,10 @@ En plus de l'élan créé par le lancement et la distribution initiale, la commu
Au total, 6 NFTs différents étaient disponibles et le premier à les collecter pouvait réclamer une prime BADGER. Le fait d'être détenteur ou farmer de ces NFT a été reconnu dans la distribution initiale de DIGG et leur inclusion dans Badger comme multiplicateur de rendement est en cours de discussion.
-
+
+
+ Your browser does not support video. View GIF
+
{{< notice tip >}}
Si vous êtes très optimiste sur le prix d'un token à court terme, c'est généralement une mauvaise idée d'entrer dans une position à 50/50 fournissant des liquidités sur celui-ci, surtout si vous vous attendez à ce que l'autre actif de la paire (ETH, stablecoins ou ici wBTC) reste relativement stable sur la même période. Si vous craignez que ce scénario se produise avec Badger ou DIGG, vous pouvez déposer dans les coffres-forts de BADGER ou de DIGG uniquement (pas de risque de perte impermanente).
@@ -69,7 +72,7 @@ Le lancement de DIGG était un événement très attendu. Alors que de l'extéri
Après discussion au sein de la communauté, il a été décidé de partir avec une offre de départ relativement faible (4000) permettant un **test de stress dès le début du mécanisme de rebase**. Les rebases ont également commencé dès le tout début - 24h après le lancement du token.
-
+
Badger étant Badger, la machine à hype était bien sûr au point avec un concours de mèmes "Wen DIGG ?" pour s'assurer que tout le monde soit au courant.
@@ -86,19 +89,13 @@ Tout comme pour l'AMPL, avec DIGG, tous les détenteurs (y compris les tokens de
Les rebases se font à une heure fixe, pour DIGG c'est 15h EST, c'est 21h pour mes chers lecteurs français.
{{< notice tip >}}
-Les tokens de rebasage exploitent des mécanismes similaires à ceux impliqués dans les stablecoins algorithmiques / tokens de seigneuriage, alors n'hésitez pas à lire mon **[précédent billet sur le sujet]({{< relref path="/content/posts/2021/seigniorage-basis-vs-esd.fr.md" >}})** pour plus d'informations.
+Les tokens de rebasage exploitent des mécanismes similaires à ceux impliqués dans les stablecoins algorithmiques / tokens de seigneuriage, alors n'hésitez pas à lire mon **[précédent billet sur le sujet](https://tokenbrice.xyz/fr/seigniorage-basis-esd/)** pour plus d'informations.
{{< /notice >}}
Par exemple, après le premier jour, la rebase de genèse était positive et a déclenché une production et une redistribution d'environ 12% de l'offre initiale. Plusieurs rebases positives ont suivi.
Pour l'instant, le mécanisme de rebase est assez simple, mais il pourrait être mieux aligné sur les incitations de l'ensemble à l'avenir pour aider le DIGG à maintenir son ancrage.
-
-
-{{< tweet 1354963274387886090 >}}
-
-
-
### Prochaine étape pour les Setts
@@ -124,7 +121,9 @@ Cette logique est plus grande que Badger, comme on l'observe ailleurs aussi, on
De plus, pour revenir à Badger, l'adoption d'un tel modèle pourrait signifier des revenus natifs et durables qui pourraient être liés à au token BADGER ou son sett. Si l'on considère que la plupart des rendements proviennent actuellement d'incitations à l'apport des liquidités, il serait assez synergique d'en tirer parti.
-Compte tenu **[du succès du modèle Curve / CRV]({{< relref path="/content/posts/2021/dex-value-capture.fr.md" >}})**, il est logique de voir de plus en plus de protocoles en adopter les éléments : l'essentiel étant de donner à vos détenteurs la possibilité d'engager leurs tokens pour participer à la gouvernance, de puiser dans les flux de revenus de la plateforme et d'augmenter leurs propres rendements obtenus par l'utilisation du service.
+Compte tenu **[du succès du modèle Curve / CRV](https://tokenbrice.xyz/fr/dex-echanges-decentralisees-capture-valeur/)**, il est logique de voir de plus en plus de protocoles en adopter les éléments : l'essentiel étant de donner à vos détenteurs la possibilité d'engager leurs tokens pour participer à la gouvernance, de puiser dans les flux de revenus de la plateforme et d'augmenter leurs propres rendements obtenus par l'utilisation du service.
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
{{< notice tip >}}
diff --git a/content/posts/2021/badger-digg.md b/content/post/2021/badger-digg.md
similarity index 87%
rename from content/posts/2021/badger-digg.md
rename to content/post/2021/badger-digg.md
index 7b61b01f..1ca4e386 100644
--- a/content/posts/2021/badger-digg.md
+++ b/content/post/2021/badger-digg.md
@@ -2,17 +2,17 @@
title: "BadgerDAO's story: an intro through DIGG"
description: "Badger sits at the forefront of two highly trendy themes: DeFi & BTC on Ethereum. Let's digg in to better understand what the end game plan looks like."
date: '2021-01-30T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Decentralized finance, Badger, BadgerDAO, DIGG, Elastic Currencies, wBTC, renBTC, Curve BTC pools, gitcoin, Meme, vault, farming, liquidity providing, setts, LP, BTC, BTC on Ethereun, Platformization of DeFi]
+categories: [Yield]
+tags: [DeFi, Ethereum, Decentralized finance, Badger, BadgerDAO, DIGG]
toc: true
tocNum: true
url: badger-digg
+image: /img/2021/badger-digg/cover.png
+difficulty: "beginner"
---
Despite launching barely a few weeks ago, BadgerDAO quickly grew into a DeFi powerhouse now **hosting > $1.2B of assets farming**. While I've quickly touched on Badger in previous articles or shows, I think it's about time for a dedicated piece focusing on DIGG but not forgetting about its context.
-
-
## A quick intro to Badger DAO
BadgetDAO is a community-driven project with a clear value proposition: to help **build the infrastructure needed to relay BTC into DeFi**. This core vision manifests through all their products, all centered around representations of Bitcoin on Ethereum like wBTC or sBTC and the native tokens - BADGER and now DIGG.
@@ -21,7 +21,7 @@ BadgetDAO is a community-driven project with a clear value proposition: to help
The first layer of this onion is pretty straightforward: Badger offers a Yearn-like service for BTCs on Ethereum: users can deposit tokens representing a position in a Curve BTC pool to earn BADGER & DIGG on top of the native APY.
-
+
There are also vaults (called "setts") available for BADGER and DIGG themselves, as well as their respective LP tokens on both Uniswap and SushiSwap.
@@ -35,9 +35,9 @@ This value proposition by itself is nothing new and could have been delivered by
Since the start, the community has been put at the center with Badger. It's clearly visible simply by looking at the token distributions[^1]:
-
+
-
+
Indeed, the two largest shares of the supply of both tokens were allocated to the liquidity mining program - rewarding active users of the protocol as well as the DAO's treasury tasked with structuring the long-term operations of the protocol and its growth.
@@ -49,7 +49,10 @@ On top of the momentum created by the launch and initial distribution, the commu
A total of 6 different NFTs were available and the fist one to collect them was able to claim a neat BADGER bounty. Being a holder or farmer of these NFTs was acknowledged in the initial DIGG distribution & their inclusion to Badger as yield multiplier is being discussed.
-
+
+
+ Your browser does not support video. View GIF
+
{{< notice tip >}}
If you are very bullish on a token price short-term wise, it's usually a bad idea to enter a 50/50 liquidity providing position on it. You'll be much better off simply holding your stack and selling it. If you are worried about this scenario unfolding with Badger or DIGG, you can deposit to the BADGER or DIGG only vaults (no risk of impermanent loss).
@@ -69,7 +72,7 @@ DIGG's launch was a highly anticipated event. While from the outside it looks li
After discussion within the community, it was decided to go with a relatively low starting supply (4000) allowing for a **stress test from the start of the rebase mechanism**. The rebases also started from the very beginning - 24h after the launch of the token.
-
+
Badger being Badger, the hype machine was of course on point with a "Wen DIGG?" meme contest to make sure everyone was aware.
@@ -86,19 +89,13 @@ Just like with AMPL, with DIGG all holders (liquidity pool tokens included) are
Rebases happen at a set time, for DIGG it's 3pm EST, that's 9 pm for my dear French readers.
{{< notice tip >}}
-Rebase tokens harness mechanisms similar to the ones involved in algorithmic stablecoins / seigniorage tokens, so feel free to read my **[previous post on the topic]({{< relref path="/content/posts/2021/seigniorage-basis-vs-esd.md" >}})** for more information.
+Rebase tokens harness mechanisms similar to the ones involved in algorithmic stablecoins / seigniorage tokens, so feel free to read my **[previous post on the topic](https://tokenbrice.xyz/seigniorage-basis-esd/)** for more information.
{{< /notice >}}
For instance, after the first day, the genesis rebase was positive and triggered a production and redistribution of about 12% of the initial supply. Several positive rebases followed and DIGG is still trading above peg.
Right now the rebase mechanism is quite straightforward but it might be better aligned with the setts incentives in the future to help DIGG maintain its peg.
-
-
-{{< tweet 1354963274387886090 >}}
-
-
-
### Next step for the setts
With DIGG launched, the next big step for Badger as the protocol is to start increasing its capital efficiency: to put it in simple words - to allow its users to borrow from their setts positions.
@@ -123,8 +120,10 @@ This logic is bigger than Badger, as it's observed elsewhere too, we could call
Moreover, to go back to Badger, moving towards a model like this could mean native & sustained revenue feeds to potentially tie back to Badger. Considering that most of the yields currently come from liquidity mining incentives, that would be quite synergistic to grow out of it.
-Considering the **[success of the Curve & CRV model]({{< relref path="/content/posts/2021/dex-value-capture.md" >}})**, it makes sense to see more and more protocol adopting elements of it: the gist being giving your holders the options to commit their tokens to participate in governance, tap into the platform revenue streams & boost their own returns obtained by the usage of the service.
+Considering the **[success of the Curve & CRV model](https://tokenbrice.xyz/decentralized-exchange-value-capture/)**, it makes sense to see more and more protocol adopting elements of it: the gist being giving your holders the options to commit their tokens to participate in governance, tap into the platform revenue streams & boost their own returns obtained by the usage of the service.
[^1]: The graphs are coming from [Badger's DAO liquidity mining launch announcement](https://badgerdao.medium.com/badger-dao-liquidity-mining-launch-b2415301bd31#:~:text=Tokens%20distributed%3A%20%24BADGER%20and%20%24,2nd%20product%20of%20the%20DAO.).
[^2]: **[Meme](https://dontbuymeme.com/collections/badger)** is a distribution mechanism for NFT where users stake a given token (bBADGER in our case) to earn points - pineapples. They can them redeem the pineapples for the NFT of their choice.
-[^3]: This is not purerly speculative as BadgerDAO is already exploring how it could [harness synergies with UMA and SushiSwap](https://twitter.com/spadaboom1/status/1354826775801561091?s=20) to achieve a similar end.
\ No newline at end of file
+[^3]: This is not purerly speculative as BadgerDAO is already exploring how it could [harness synergies with UMA and SushiSwap](https://twitter.com/spadaboom1/status/1354826775801561091?s=20) to achieve a similar end.
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/post/2021/crv-wars.fr.md b/content/post/2021/crv-wars.fr.md
new file mode 100644
index 00000000..5937372e
--- /dev/null
+++ b/content/post/2021/crv-wars.fr.md
@@ -0,0 +1,276 @@
+---
+title: "⚔ Guerre du CRV : comprendre la course à l'accumulation de la capacité à influencer le protocole Curve Finance"
+description: "Un guide concis pour suivre la course à l'accumulation CRV par tous les moyens possibles y compris l'achat de vote (bribes), et pour évaluer les stratégies Curve des protocoles DeFi"
+date: '2021-09-28T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Curve Finance, CRV, Convex, CVX, Votium, veCRV, bribe.crv]
+toc: true
+tocNum: true
+url: crv-wars
+image: /img/2021/crv-wars/curve-wars-cover-tokenbrice.png
+difficulty: "intermediate"
+---
+
+Depuis les premiers jours de Curve Finance et du lancement du token CRV, on attend, on envisage et on présume sur ce que la guerre des CRV pourrait amener. Désormais, avec le lancement de Convex puis de Bribe.crv et enfin Votium, tout s'accélère : les votes VeCRV, ça s'achète désormais ! Voyons donc comment cela impacte Curve et la DeFi dans son intégralité.
+
+
+À première vue, la question est plutôt simple et directe :
+
+1. Curve est le plus grand échange décentralisé de la DeFi en terme de valeur totale déposée.
+2. Le token CRV donne accès à 1/ une part des frais collectés 2/ **une capacité de vote pour influencer l'émission de CRV future.**
+3. => Avoir le contrôle d'une grande capacité de vote VeCRV permet de **grandement faciliter le développement d'une pool Curve**, puisque cela offre la possibilité de voter pour des rendements CRV importants sur la pool en question.
+
+Néanmoins comme souvent en DeFi, tout n'est pas si simple et le diable est dans les détails. Pour comprendre les enjeux de la guerre des CRV, il faut avoir avoir **bien compris les différents outils construits dessus**. Cela vous permettra ensuite de juger de la pertinence des stratégies déployées par les différents projets qui cherchent à influencer Curve.
+
+
+## Convex et la séparation du VeCRV
+
+Avant d'analyser les champs de bataille - c'est-à-dire les différents outils utilisés dans cette guerre des CRV, il faut s'attarder plus en profondeur sur un en particulier : Convex. J'en ai déjà parlé sur ce blog, en expliquant [la dimension flywheel de Convex avec le CvxCRV](https://tokenbrice.xyz/fr/defi-flywheel/).
+
+Les interactions de Convex avec Curve vont largement au-delà du CvxCRV qui n'en est qu'un élément.
+
+
+En fait, **on pourrait décrire Convex comme une séparation entre la gouvernance et les rendements sur VeCRV** en amplifiant chacun des éléments sur un token séparé, je m'explique :
+
+
+### CvxCRV = VeCRV-yield++
+
+CvxCRV correspond à un VeCRV possédé par Convex. Ils sont verrouillés à jamais, mais la liquidité disponible sur CvxCRV/CRV permet aux déposants de solder leur position.
+
+**En termes de gouvernance, CvxCRV perd toutes ses capacités**. En effet, un possesseur de VeCRV peut voter sur les gauges (émission CRV) et votes de gouvernance. Un possesseur de CvxCRV n'a aucun autre bénéfice que le rendement.
+
+Néanmoins, **le rendement est amplifié par rapport à une simple possession de VeCRV** :
+
+1. Rendement en token 3pool - la part des frais collectés sur Curve - exactement comme VeCRV
+2. Rendement en CRV (10% de tous les CRV farmés par Convex partagés entre tous les stakers CvxCRV)
+3. Rendement en CVX quasiment équivalent
+4. Potentiels airdrops comme Ellipsis
+
+Ainsi, CvxCRV correspond à un compromis simple par rapport à VeCRV : les capacités de gouvernance sont perdues (-> vlCVX) mais en contrepartie le rendement est grandement amplifié et diversifié.
+
+
+### vlCVX = VeCRV-gov++
+
+À l'autre extrême, Convex propose une autre abstraction intéressante vis-à-vis de Curve. Il s'agit de son token natif CVX. En effet, **chaque CVX correspond à une capacité de vote VeCRV** (qui provient des CvxCRV).
+
+Pour la mobiliser, le déposant doit "vote lock" ses CVX en vlCVX. Ils sont verrouillés pour 16 semaines + 3 jours et donnent ainsi l'accès à la capacité de gouvernance. À l'heure actuelle, le vlCVX est le chemin de loin le plus efficace économiquement pour accumuler de la capacité de vote Curve :
+
+
+
+
+
+
+ Prix
+
+ Capacité de vote
+
+ VeCRV-vote/$
+
+ Engagement
+
+
+
+ VeCRV
+
+ $2.42
+
+ 1 veCRV
+
+ 0.41
+
+ 4 ans
+
+
+
+ vlCVX
+
+ $8.2
+
+ 12,75 VeCRV
+
+ 1.55
+
+ 16 semaines + 3j
+
+
+
+
+
+Outre la rentabilité accrue du CVX pour influencer Curve, l'engagement est également moins conséquent que sur VeCRV. Pour la table de comparaison, je suis parti sur une assomption de vérouillage 4 ans sur CRV. L'écart est encore plus en faveur de vlCVX pour des engagements moins longs.
+
+{{< notice warning >}}
+Le vlCVX a malgré tout un inconvénient : à l'issue des 16 semaines de verrouillage initiales, des pénalités sont appliquées aux déposants si les tokens restent inactifs pendant plus de 4 semaines.
+{{< /notice >}}
+
+Si vous voulez analyser plus en profondeur les rendements offerts par la délégation de CVX et l'achat de vote associé, n'hésitez pas à [lire cet article (EN)](https://medium.com/@portiadog/convex-finance-1cc6c9c1c733) qui propose des calculs plus détaillés :
+
+
+
+
+
+### Bribes : une séparation pas si nette
+
+La situation était claire, mais elle ne l'est pas restée longtemps. En effet, il convient tout d'abord de noter que vlCVX n'est pas dénué de rendement : **les possesseurs de vlCVX se partagent 6% de tous les CRV farmés par Convex, sous forme de CvxCRV**.
+
+En outre, ce n'est potentiellement pas le seul rendement auquel les possesseurs de vlCVX sont éligibles. En effet, **la capacité de gouvernance peut également offrir un rendement conséquent via les mécanismes de bribe** (achat de votes).
+
+Différents projets proposent ainsi des incitations pour voter sur la gauge d'une pool Curve donnée. Par exemple, Alchemix propose des récompenses en ALCX, son token natif, qui peut être claim chaque semaine par tous ceux qui ont utilisé leur VeCRV pour voter afin d'augmenter l'allocation CRV de la pool AlUSD.
+
+À long terme, il n'est pas impossible que la séparation initiale prévue par Convex ne soit pas des plus honnêtes. À l'heure actuelle, le rendement sur cvxCRV est environ 60% tandis qu'il n'est qu'à 15% sur CVX. Néanmoins, **lorsque l'on ajoute les bribes dans l'équation, il n'est pas impossible que le rendement du vlCVX soit bien plus important que celui sur cvxCRV.**
+
+
+## Les champs de bataille
+
+Les services de "bribes" sont ainsi un élément essentiel de l'équation de gouvernance de Curve. Néanmoins avant de les creuser il faut rappeler le chemin de base (veCRV) qui définit le cadre de toutes ses variantes.
+
+VeCRV s'obtient en verrouillant CRV pour une période allant jusqu'à 4 ans. Plus le verrouillage est long, plus le ratio VeCRV/CRV est proche de 1. **Le verrouillage s'épuise progressivement avec le temps ainsi que la capacité de vote**.
+
+C'est pourquoi les vaults construits sur VeCRV opèrent sur une logique de verrouillage perpétuel à 4 ans : afin de préserver une capacité de vote toujours au plus proche du maximum possible, **ils "rafraîchissent" (refresh) le verrouillage fréquemment.**
+
+
+
+
+
+### Bribe v0 : incitation directe sur les pools
+
+Avant de vous parler de bribe, il faut rappeler qu'il existe une forme primitive disponible depuis les premiers jours de Curve : les incitations additionnelles (en plus des CRV) pour les apporteurs de liquidité. Synthetix a ainsi été pionnier avec le programme de liquidity mining en SNX sur la pool sUSD.
+
+Les incitations directes sont cumulables avec les bribes, et c'est même recommandé. On verra plus bas comment MIM par exemple a obtenu beaucoup plus d'activité en partageant son budget entre incitation et bribes (après d'une phase initiale sans bribe).
+
+
+### Bribe.crv de Cronje [sur veCRV]
+
+Vous l'aurez donc compris, les "bribes" sont des achats de votes VeCRV. Ils sont payés à la semaine, généralement le vendredi (jour de prise en compte des votes).
+
+Néanmoins, tout comme il y a plusieurs systèmes pour interagir avec VeCRV, plusieurs mécanismes existent également pour les bribes. On commence donc par celui qui a été disponible en premier : [http://bribe.crv.finance/](http://bribe.crv.finance/)
+
+Ici, l'unité de base c'est le VeCRV. Bribe.crv est une simple interface qui résume les différentes offres et permet de récolter ses bribes. Le vote se fait directement sur Curve.
+
+Après des débuts un peu timides, le service est de plus en plus utilisé et de nombreux projets proposent désormais des bribes. Les rendements des premières semaines ont été excellents, à voir s'ils dureront. Par exemple, j'ai touché **environ 10% de retour sur mes VeCRV (/ prix actuel) en 5 semaines** en votant pour la pool MIM et recevant des tokens SPELL en bribes.
+
+On reviendra sur les résultats obtenus un peu plus bas.
+
+
+### Votium [sur vlCVX]
+
+L'alternative disponible, c'est [Votium](http://votium.app/). Ici, l'unité de base c'est le vlCVX, les deux services ne sont donc pas concurrents mais complémentaires.
+
+Votium est plus récent donc les bribes disponibles sont encore moins nombreuses. Par contre, **Votium contrôle déjà une capacité de vote impressionnante : environ 8M CVX soit plus de 102M VeCRV**.
+
+Ici le système est potentiellement plus passif qu'avec bribe.crv puisque les déposants peuvent déléguer à Votium qui se chargera de voter chaque semaine pour eux et récolter les bribes correspondants.
+
+Même avec une délégation active, un déposant peut à tout moment reprendre le contrôle et voter pour une pool donnée, directement sur snapshot (-> pas de coût en gas). Le système est donc plus flexible que bribe.crv à ce niveau là.
+
+D'autres services pour gérer les bribes sont également en développement avec une sortie prochaine. Jusqu'à présent le jeu des bribes s'est concentré essentiellement autour de CRV, mais [Paladin](https://www.paladin.vote/), par exemple, entend proposer un mécanisme similaire avec d'autres protocoles également.
+
+
+## Mise en pratique : tactiques et résultats
+
+Les bases conceptuelles sont un peu lourdes sur ce sujet, mais il est essentiel de les comprendre. Pour rendre le tout plus explicite, passons donc à la pratique avec des exemples concrets.
+
+
+### Exemple de Spell/MIM
+
+[Abracadabra](http://abracadabra.money/) est un service de type Maker. Différents actifs sont acceptés en tant que collatéral, dont des actifs productifs comme xSUSHI ou encore cvx3pool.
+
+Tout comme Maker produit le DAI, Abracadabra produit un stablecoin (sur le dollar) baptisé MIM. La liquidité disponible sur MIM, ainsi que les opportunités de rendements sont donc un facteur essentiel du succès de la plateforme.
+
+C'est pourquoi Abracadabra est passé progressivement par toutes les formes de bribes directes ou indirecte sur Curve :
+
+
+
+1. Tout commence avec une incitation en SPELL (token de gouvernance) sur la pool Curve/MIM.
+2. Quand bribe.crv est arrivé, **une partie de cette incitation a été réallouée en bribe** - distribuée donc aux possesseurs de veCRV qui votent pour la gauge MIM.
+3. Désormais, avec l'arrivée du vlCVX, l'équipe considère la redirection du budget par ce biais.
+
+En quelques semaines, la pool MIM a ainsi explosé sur Curve, à tous les niveaux :
+
+
+
+* Les rendements en CRV ont été vraiment excellents certaines semaines
+* Ce qui a attiré de la liquidité et du volume, réduisant légèrement le rendement mais augmentant la capacité à booster la pool
+* Grâce à cette dynamique, MIM est désormais la cinquième pool Curve en terme de volume, avec un beau ratio volume/TVL.
+
+")
+
+En outre, la pool est désormais bien équilibrée et plutôt dense (> $700M liquidité totale).
+
+L'exemple de Abracadabra est extrêmement instructif, puisqu'il démontre toute la pertinence des abstractions construites sur VeCRV : **sans augmenter son budget total, Abracadabra a été en mesure d'attirer bien plus de liquidité qu'à l'époque de la simple incitation directe en SPELL.**
+
+Vous comprenez donc que les projets DeFi qui tirent habilement profit des mécanismes de veCRV, cvxCRV et vlCVX ont un avantage indéniable (**économique ET politique**) face à ceux qui n'ont pas encore saisi toutes leurs subtilités.
+
+
+### Exemple croisé : sdveCRV VS cvxCRV
+
+En effet, **je considère désormais la compréhension de Curve et la capacité à influencer efficacement sa gouvernance comme une capacité essentielle et requise dans la plupart des projets DeFi, surtout pour les projets de stablecoins.**
+
+Pas besoin de me croire sur parole néanmoins, comparons en pratique deux approches mises en place par des projets avec des enjeux similaires : les stratégies de liquidité sur cvxCRV (de Convex) et sdveCRV (de StakeDAO) - deux abstractions construites sur veCRV.
+
+Bien que les situations soit similaires, il y a des différences de taille :
+
+
+
+1. Commençons déjà par rappeler que Convex contrôle plus de 30 fois la quantité de CRV contrôlé par Stake (102M vs 3M).
+2. En outre, sdveCRV a de graves problèmes avec son peg : 1 sdveCRV ~= 0.5 CRV
+
+
+
+
+#### Plan de liquidité sdveCRV : incompréhension totale et échec cuisant
+
+Passons donc à l'analyse. Initialement la liquidité sdveCRV était contre ETH tout comme pour Yearn. Depuis Convex, l'équipe Stake essaie de réagir pour rendre sdveCRV plus attractif.
+
+Néanmoins, l'équipe n'a clairement pas pris le temps d'analyser la situation et s'est précipitée vers ce qui s'est avéré être **un des échecs de gouvernance les plus cuisants jamais observé sur Curve**.
+
+Après avoir créé une pool sdveCRV/CRV anémique via la Curve Factory, un vote a été soumis pour y ajouter la contrôler gauge (= incentives CRV). Non seulement [le vote a été rejeté massivement](https://dao.curve.fi/vote/ownership/83) mais en outre **la pool sdveCRV est paramétrée de façon aberrante et absolument dangereuse pour les déposants.**
+
+**Inciter les dépôts sur une telle pool serait revenu à envoyer les déposants vers l'abattoir**. En effet, le facteur A (paramètre d'amplification) de la pool est [défini à 200](https://curve.fi/factory/34) --- une valeur correcte pour des actifs qui suivent le même peg, mais délirante si un actif vaut deux fois l'autre.
+
+ sdvecrv et MIM")
+
+Pour vous donner une idée, même la pool MIM mentionnée plus haut, absolument massive (7000x la liquidité de la pool sdveCRV) n'a pas encore atteint 200 de A factor (119 actuellement, en augmentation).
+
+Ainsi, non seulement Stake n'a pas réussi à résoudre son problème de liquidité sur sdveCRV, mais en outre **un tel déroulé des événements soulève clairement la question de la compréhension des subtilités de Curve/Convex par l'équipe Stake**.
+
+Pour faire revenir le sdveCRV au peg et développer sa liquidité, il leur faudra beaucoup d'effort, dans l'ordre :
+
+
+
+* Revoir les paramètres de la pool
+* Incitations directes en SDT sur la pool ?
+
+Une fois ces étapes accomplies, l'équipe aurait alors une chance d'obtenir la gauge CRV sur cette pool, mais pas avant. La situation actuelle ressemble donc à une coûteuse impasse : **pas d'issue à moins de faire chauffer (encore plus) la planche à SDT**.
+
+
+#### Plan de liquidité cvxCRV : décollage immédiat
+
+Le plan de liquidité sur cvxCRV démontre au contraire à quel point le processus peut être efficace. Initialement (et encore aujourd'hui), la pool principale pour cvxCRV est sur Sushiswap, contre CRV.
+
+Cette situation ne fait que très peu de sens : **Sushi est loin d'être optimal pour optimiser la liquidité sur des actifs qui suivent le même peg**. Ainsi, lorsque Curve a lancé les factory pools (V2), la [pool cvxCRV/CRV](https://curve.fi/factory/22) a été une des premières à émerger.
+
+(Notez ici le A Factor à 50 - alors que cvxCRV tient bien plus son peg que sdveCRV...)
+
+ cvxCRV/CRV")
+
+Sans avoir d'incitation de la part de Convex ou Curve, la pool a déjà vu un volume important transiter grâce aux agrégateurs de DEX comme Paraswap. Rapidement, il y a eu un vote pour y ajouter la gauge CRV qui est passé - et cette pool est désormais farmable directement via Convex.
+
+La pool reste légèrement déséquilibrée (il y a tant à faire avec des CRV, qui deviennent de plus en plus rares…) mais elle apporte déjà une alternative compétitive à la pool SLP cvxCRV/CRV avec encore une fraction de sa liquidité.
+
+
+## Conclusion
+
+J'espère que cet article vous aura aidé à saisir les subtilités de l'écosystème étendu de veCRV et leurs conséquences sur la bataille des CRV.
+
+Avant de conclure, je tiens à vous rappeler que comme d'habitude l'alpha se trouve dans les creux. Si vous avez compris cet article, n'hésitez pas à exporter l'analyse de la stratégie de liquidité à d'autres projets : je suis certain qu'elle sera instructive !
+
+Je vous le dis souvent, mais ce sera jamais assez : non seulement Curve est le DEX le plus important en DeFi mais c'est également **le protocole le plus avancé en terme de gouvernance et de tokenomics de très loin par rapport à tout ce qu'il se fait d'autre**. Même si vous n'avez aucun intérêt pour Curve/Convex, il est indispensable de comprendre ces protocoles pour bien envisager ce qu'il se passe en DeFi… En espérant que cet article vous y aidera !
+
+{{< notice tip >}}
+Pour approfondir votre compréhension du CRV, pilier de la DeFi, je vous propose également deux sessions en direct avec Charlie; un membre de l'équipe Curve :
+
+**[Marathon DeFi Curve Finance dans le détail](https://www.youtube.com/watch?v=G5PbqGtjSDQ)**
+{{< /notice >}}
+
+{{< youtube EjuPdHv1bX8 >}}
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/post/2021/crv-wars.md b/content/post/2021/crv-wars.md
new file mode 100644
index 00000000..7116204e
--- /dev/null
+++ b/content/post/2021/crv-wars.md
@@ -0,0 +1,248 @@
+---
+title: "⚔ CRV wars: understanding the race to accumulate power to influence Curve Finance protocol"
+description: "A concise guide to tracking the CRV accumulation race by any means possible including vote buying (Bribes) and evaluating the Curve strategies of DeFi protocols"
+date: '2021-09-28T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Curve Finance, CRV, Convex, CVX, Votium, veCRV, bribe.crv]
+toc: true
+tocNum: true
+url: crv-wars
+image: /img/2021/crv-wars/curve-wars-cover-tokenbrice.png
+difficulty: "intermediate"
+---
+
+Since the early days of Curve Finance and the launch of the CRV token, we have been waiting, contemplating and assuming what the CRV war could bring. Now, with the launch of Convex, then Bribe.crv and finally Votium, everything is accelerating: VeCRV votes can now be bought! So let's see how this impacts Curve and DeFi as a whole.
+
+At first glance, the question is quite simple and straightforward:
+
+1. Curve is the largest decentralized DeFi exchange in terms of total value deposited.
+2. The CRV token provides access to 1/ a share of the fees collected 2/ **a voting power to influence the issuance of future CRVs.**
+3. => Having control over a large CRV voting power makes it **much easier to develop a Curve pool**, since it offers the possibility to vote for large CRV returns on the pool in question.
+
+Nevertheless, as often in DeFi, everything is not so simple and the devil is in the details. To understand the stakes of the CRV war, you need to have **a good understanding of the different tools built on it**. This will allow you to judge the relevance of the strategies deployed by the different projects that seek to influence Curve.
+
+## Convex and the VeCRV separation
+
+Before analyzing the battlefields - i.e. the different tools used in this CRV war - we need to look more deeply at one in particular: Convex. I've already talked about it on this blog, explaining [the flywheel dimension of Convex with the CvxCRV](https://tokenbrice.xyz/defi-flywheel/).
+
+The interactions of Convex with Curve go far beyond the CvxCRV, which is only one element.
+
+In fact, **one could describe Convex as a separation between governance and returns on VeCRV** by amplifying each of the elements on a separate token. Let me explain:
+
+
+### CvxCRV = VeCRV-yield++
+
+CvxCRV corresponds to a VeCRV owned by Convex. They are locked in forever, but the liquidity available on CvxCRV/CRV allows depositors to close out their position.
+
+
+**In terms of governance, CvxCRV loses all its capabilities** : VeCRV owner can vote on gauges (CRV issue) and governance votes. A CvxCRV owner has no other benefit than the return.
+
+Nevertheless, **the return is amplified compared to a simple possession of VeCRV**:
+
+1. Return in 3pool token - the share of fees collected on Curve - exactly like VeCRV
+2. Return in CRV (10% of all CRV farmed by Convex shared between all CvxCRV stakers)
+3. Virtually the same yield in CVX
+4. Potential airdrops like Ellipsis
+
+CvxCRV corresponds to a simple compromise compared to VeCRV: governance capabilities are lost (-> vlCVX) but in return the performance is greatly amplified and diversified.
+
+### vlCVX = VeCRV-gov++
+
+At the other end of the spectrum, Convex offers another interesting abstraction from Curve. It is its native CVX token. Indeed, **each CVX corresponds to a VeCRV** voting capability (which comes from CvxCRV).
+
+To mobilize it, the depositor must "vote lock" his CVX in vlCVX. They are locked for 16 weeks + 3 days and so provide access to governance capacity. Currently, vlCVX is by far the most economically efficient way to accrue Curve voting capacity:
+
+
+
+
+
+
+ Price
+
+ Voting power
+
+ VeCRV-vote/$
+
+ Commitment
+
+
+
+ VeCRV
+
+ $2.42
+
+ 1 veCRV
+
+ 0.41
+
+ 4 years
+
+
+
+ vlCVX
+
+ $8.2
+
+ 12,75 VeCRV
+
+ 1.55
+
+ 16 weeks + 3 days
+
+
+
+
+
+In addition to the increased profitability of CVX to influence Curve, the commitment is also less than on VeCRV. For the comparison table, I assumed a 4-year lock on CRV. The difference is even more in favor of vlCVX for shorter commitments.
+
+{{< notice warning >}}
+The vlCVX does have one drawback: after the initial 16 weeks of lock-in, penalties are applied to depositors if the tokens remain inactive for more than 4 weeks.
+{{< /notice >}}
+
+If you want to further analyze the returns offered by the delegation of CVX and the associated vote buying, feel free to [read this article](https://medium.com/@portiadog/convex-finance-1cc6c9c1c733) which offers more detailed calculations :
+
+
+
+### Bribes: a not so clean separation
+
+The situation was clear, but it did not remain so for long. Indeed, it should first be noted that vlCVX is not without returns: **vlCVX owners share 6% of all CRVs farmed by Convex, in the form of CvxCRV**.
+
+Furthermore, this is potentially not the only return for which vlCVX owners are eligible. Indeed, **governance capacity can also offer a substantial return via bribe mechanisms** (vote buying).
+
+Different projects offer incentives for voting on the gauge of a given Pool Curve. For example, Alchemix offers rewards in ALCX, its native token, which can be claimed each week by all those who used their VeCRV to vote to increase the CRV allocation of the AlUSD pool.
+
+In the long run, it is not impossible that the initial separation planned by Convex is not the most honest. Currently, the yield on cvxCRV is about 60% while it is only 15% on CVX. Nevertheless, **when you add the bribes into the equation, it is not impossible that the yield on vlCVX is much higher than on cvxCRV.**
+
+## The battlefields
+
+"Bribes" services are an essential part of the Curve governance equation. However, before digging into them, we need to recall the basic path (veCRV) that defines the framework for all its variants.
+
+VeCRV is obtained by locking CRV for up to 4 years. The longer the lock, the closer the VeCRV/CRV ratio is to 1. **The lock gradually depletes over time as does the voting capacity**.
+
+This is why vaults built on VeCRV operate on a 4-year perpetual locking logic: in order to preserve a voting capacity that is always as close to the maximum possible, **they "refresh" the locking frequently.**
+
+
+
+
+### Bribe v0 : direct incentive on pools
+
+Before we talk about bribes, it is worth remembering there is a primitive form that has been available since the early days of Curve: additional incentives (on top of CRVs) for liquidity providers. Synthetix pioneered this with the SNX liquidity mining program on the sUSD pool.
+
+Direct incentives can be combined with bribes, and are even recommended. We will see below how MIM, for example, obtained much more activity by sharing its budget between incentives and bribes (after an initial phase without bribes).
+
+
+### Bribe.crv by Cronje [with veCRV]
+
+As you can see, the "bribes" are purchases of VeCRV votes. They are paid by the week, generally on Friday (the day the votes are taken into account).
+
+However, just as there are several systems for interacting with VeCRV, there are also several mechanisms for bribes. So we start with the one that was available first: [http://bribe.crv.finance/](http://bribe.crv.finance/)
+
+
+The basic unit is the VeCRV. Bribe.crv is a simple interface that summarizes the different offers and allows to collect its bribes. Voting is done directly on Curve.
+
+After a somewhat timid start, the service is being used more and more and many projects are now proposing bribes. The returns in the first few weeks have been excellent, it remains to be seen if they will last. For example, I got **about 10% return on my VeCRV (/ current price) in 5 weeks** by voting for the MIM pool and receiving SPELL tokens in bribes.
+
+We'll come back to the results below.
+
+### Votium [with vlCVX]
+
+The alternative available is [Votium](http://votium.app/). Here, the basic unit is the vlCVX, so the two services are not competitors but complementary.
+
+Votium is more recent so the available bribes are more limited. On the other hand, **Votium already controls an impressive voting power: about 8M CVX or more than 102M VeCRV**.
+
+The system is potentially more passive than with bribe.crv since depositors can delegate to Votium who will take care of voting each week for them and collect the corresponding bribes.
+
+Even with an active delegation, a depositor can at any time take back control and vote for a given pool, directly on snapshot (-> no gas cost). The system is therefore more flexible than bribe.crv in this respect
+
+Other services to handle bribes are also in development with a release in the near future. So far the bribe game has focused mainly on CRV, but [Paladin](https://www.paladin.vote/), for example, intends to offer a similar mechanism with other protocols as well.
+
+## Putting it into practice: tactics and results
+
+The conceptual bases are a bit heavy on this subject, but it is essential to understand them. To make it more explicit, let's move on to the practical side with concrete examples.
+
+### The Spell/MIM case
+
+[Abracadabra](http://abracadabra.money/) is a Maker service. Various assets are accepted as collateral, including productive assets such as xSUSHI or cvx3pool.
+
+Just as Maker produces DAI, Abracadabra produces a stablecoin (on the dollar) called MIM. The liquidity available on MIM, as well as the opportunity for returns, is therefore a key factor in the platform's success.
+
+This is why Abracadabra has progressively gone through all forms of direct or indirect bribes on Curve :
+
+1. It started with a SPELL incentive (governance token) on the Curve/MIM pool.
+2. When bribe.crv arrived, **a portion of that incentive was reallocated to bribe** - thus distributed to veCRV owners who vote for the MIM gauge.
+3. Now, with the arrival of vlCVX, the team is considering reallocating the budget through this.
+
+In a few weeks, the MIM pool has exploded on Curve, at all levels:
+
+* CRV yields were really good in some weeks
+* This has attracted liquidity and volume, slightly reducing the yield but increasing the ability to boost the pool
+* As a result of this momentum, MIM is now the fifth largest pool curve in terms of volume, with a nice volume/TVL ratio.
+
+")
+
+Moreover, the pool is now well balanced and rather dense (> $700M total liquidity).
+
+The example of Abracadabra is extremely instructive, as it demonstrates the relevance of the abstractions built on VeCRV: **without increasing its total budget, Abracadabra has been able to attract much more liquidity than at the time of the simple direct incentive in SPELL.**
+
+You therefore understand that DeFi projects that take advantage of the veCRV, cvxCRV and vlCVX mechanisms have an undeniable advantage (**economic AND political**) over those who have not yet grasped all their subtleties.
+
+### sdveCRV VS cvxCRV
+
+Indeed, **I now consider understanding Curve and the ability to effectively influence its governance to be an essential and required capability in most DeFi projects, especially for stablecoin projects.**
+
+No need to take my word for it though, let's compare in practice two approaches implemented by projects with similar issues: liquidity strategies on cvxCRV (from Convex) and sdveCRV (from StakeDAO) - two abstractions built on veCRV.
+
+Although the situations are similar, there are some important differences:
+
+1. Let's start by recalling that Convex controls more than 30 times the amount of CRV controlled by Stake (102M vs 3M).
+2. Furthermore, sdveCRV has serious problems with its peg: 1 sdveCRV ~= 0.5 CRV
+
+
+
+
+#### sdveCRV liquidity plan: total misunderstanding and abject failure
+
+So let's move on to the analysis. Initially the liquidity of sdveCRV was against ETH just like Yearn. Since Convex, the Stake team is trying to react to make sdveCRV more attractive.
+
+Nevertheless, the team clearly did not take the time to analyze the situation and rushed into what turned out to be **one of the biggest governance failures ever seen on Curve**
+
+After creating an anemic sdveCRV/CRV pool via the Curve Factory, a vote was taken to add the gauge control (= CRV incentives). Not only was [the vote overwhelmingly rejected](https://dao.curve.fi/vote/ownership/83) but also **the sdveCRV pool is set up in an aberrant and absolutely dangerous way for depositors.**
+
+Indeed, the factor A (amplification parameter) of the pool is [set to 200](https://curve.fi/factory/34) --- a correct value for assets that follow the same peg, but **delusional if one asset is worth twice the other**.
+
+ sdvecrv and MIM comparison")
+
+To give you an idea, even the aforementioned absolutely massive MIM pool (7000x the liquidity of the sdveCRV pool) has not yet reached 200 of A factor (119 currently, increasing).
+
+Thus, not only did Stake fail to solve its liquidity problem on sdveCRV, but **such a course of events clearly raises the question of the Stake team's understanding of the intricacies of Curve/Convex**.
+
+To get sdveCRV back to peg and develop its liquidity, they will need a lot of effort, in order:
+
+* Review the pool parameters
+* Direct incentives in SDT on the pool?
+
+Once these steps are completed, the team would then have a chance to get the CRV gauge on this pool, but not before. So the current situation looks like a costly dead end: **no way out unless the SDT board is heated (even more)**.
+
+#### cvxCRV liquidity plan: immediate take-off
+
+On the contrary, the liquidity plan on cvxCRV demonstrates how effective the process can be. Initially (and still today), the main pool for cvxCRV is on Sushiswap, against CRV.
+
+This situation does not really make sense: **Sushi is far from optimal for optimizing liquidity across assets that follow the same peg**. So when Curve launched factory pools (V2), the [cvxCRV/CRV pool](https://curve.fi/factory/22) was one of the first to emerge.
+
+(Note here the A Factor at 50 - while cvxCRV holds its peg much better than sdveCRV...)
+
+ cvxCRV/CRV")
+
+Without any incentive from Convex or Curve, the pool has already seen significant volume flow through DEX aggregators like Paraswap. Soon, there was a vote to add the CRV gauge which passed - and this pool is now farmable directly through Convex.
+
+The pool remains slightly unbalanced (there is so much to do with CRVs, which are becoming increasingly rare...) but it already brings a competitive alternative to the SLP cvxCRV/CRV pool with still a fraction of its liquidity.
+
+## Conclusion
+
+I hope this article has helped you grasp the intricacies of the extended veCRV ecosystem and their implications for the CRV battle.
+
+Before concluding, I would like to remind you that as usual the alpha is in the nooks and crannies. If you have understood this article, feel free to export the liquidity strategy analysis to other projects: I am sure it will be instructive!
+
+I tell you often, but it will never be enough: not only Curve is the most important DEX in DeFi but it is also **the most advanced protocol in terms of governance and tokenomics by far compared to anything else**. Even if you have no interest in Curve/Convex, it's essential to understand these protocols in order to properly consider what's going on in DeFi... Hopefully this article will help you!
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/post/2021/defi-flywheel.fr.md b/content/post/2021/defi-flywheel.fr.md
new file mode 100644
index 00000000..9b41099c
--- /dev/null
+++ b/content/post/2021/defi-flywheel.fr.md
@@ -0,0 +1,160 @@
+---
+title: "🎡 Flywheel DeFi : synergies de protocoles à protocoles, par tokens interposés
+"
+description: "On analyse la course à l'accumulation des CRV avec le lancement de Convex pour comprendre le concept de flywheel en DeFi : des protocoles qui évoluent en synergie grâce à leur tokenomics."
+date: '2021-06-08T01:13:50.191Z'
+categories: [DEX, Yield]
+tags: [DeFi, Ethereum, DeFi, Money Markets, Liquity, Curve Finance, CRV, Polygon, Convex, CVX, Yearn Finance]
+toc: true
+tocNum: true
+url: defi-flywheel
+image: /img/2021/defi-flywheel/defi-flywheel-cover.png
+difficulty: "beginner"
+---
+
+En trois semaines, le protocole Convex a attiré plus de $ 3 milliards de dépôts, tout en devenant la plus grande 🐳 baleine de CRV, aujourd'hui et à priori pour toujours. La chance n'est jamais un facteur négligeable, mais avec une entrée aussi fracassante dans les sommets de la DeFi il faut chercher bien plus loin. En effet, la clef de compréhension de l'ascension fulgurante de Convex c'est la tokenomics, et c'est donc notre sujet du jour !
+
+En DeFi, outre les caractéristiques techniques il faut aussi être fin sociologue, ou plutôt "game theorist" comme on dit par ici : savoir anticiper les réactions des foules à un jeu de règles données.
+
+L'émergence des programmes d'incitations de liquidité (liquidity mining) l'année dernière a démontré qu'un jeu de règles approprié peut mettre des quantités colossales de capital en mouvement. La question est désormais de savoir le faire à bon escient, c'est-à-dire en étant conscient des enjeux **sur le long terme.**
+
+En effet, le liquidity mining par lui-même n'attire à priori que des **dépôts mercenaires et opportunistes**. En soit, le liquidity mining est davantage un outil qui sert à faire connaître un projet qu'à sa pérennisation.
+
+Durer en DeFi, c'est une affaire de tokenomics : c'est-à-dire les mécaniques des tokens natifs des protocoles. **La tokenomics, c'est en quelque sorte le gameplay d'un protocole DeFi**.
+
+Vous le savez sans doute, je suis un grand admirateur du modèle CRV. Ça tombe à pic, puisque le jeu autour du token CRV n'a jamais été aussi vif que ces dernières semaines. Certains parlent même de #lockening pour décrire **la course à l'accumulation de VeCRV** à laquelle se livrent Convex, Yearn et StakeDAO.
+
+On va rentrer dans le détail pour bien comprendre le concept de flywheel avec l'exemple de Convex / Curve. Je finirai par l'analyse de protocoles qui pourraient se prêter à un scénario similaire.
+
+
+## L'émergence de la première 🎡 flywheel DeFi
+
+Avec le lancement de Convex, on a commencé à utiliser un nouveau terme pour décrire son fonctionnement et sa tokenomics : 🎡 flywheel.
+
+Il n'a pas vraiment de définition précise encore mais je me mouille : cela décrit un protocole qui réussit un triptyque gagnant :
+
+1. Une tokenomics qui offre des opportunités intéressantes aux possesseurs du token optimistes sur le futur du modèle.
+2. Un protocole qui est lui-même pertinent et répond à un vrai besoin, idéalement en synergie directe avec un autre protocole.
+3. Un programme de liquidity mining (+airdrop) pour lancer la boucle et attirer les premiers possesseurs du token.
+
+J'ai généralisé le modèle de Convex, mais il a une particularité supplémentaire : Convex est en quelque sorte un "meta-protocole" : il est **construit entièrement sur Curve Finance et en synergie avec celui-ci.**
+
+Ainsi, l'ancêtre de la flywheel serait sans doute à chercher parmi les protocoles construits en synergie avec d'autres. Par exemple, bien qu'il soit construit sur BSC et [ait subi une attaque conséquente récemment](https://rekt.news/pancakebunny-rekt/), le protocole Bunny a bien aidé le DEX PancakeSwap à se développer.
+
+En effet, Bunny propose de gérer les positions d'apport de liquidité Pancake, tout en émettant son propre token en fonction des rendements générés. Cela permet de simplifier la gestion des positions des apporteurs de liquidité sur Pancake tout en générant une source de rendement supplémentaire (token BUNNY).
+
+Alors pour bien comprendre le concept de 🎡 flywheel, on va analyser la meilleure qu'on ait eu l'occasion de voir à ce jour : Convex. Elle s'avère un peu plus compliquée car elle s'appuie sur Curve, il faut donc déjà avoir saisi les enjeux à ce niveau là.
+
+
+## CRV : Une tokenomics qui appelle les 🎡 flywheels ?
+
+La tokenomics de Curve Finance a bientôt un an et pourtant elle est encore souvent mal comprise.
+
+La grande élégance de la tokenomics CRV, c'est qu'elle **aligne les intérêts de plusieurs acteurs mieux que tout autre connue à ce jour** : les apporteurs de liquidité sur Curve, les holdeurs de CRV et le protocole Curve lui-même.
+
+En effet, le modèle tend avec le temps à confondre les deux populations (CRV holdeurs et LP) grâce à deux mécaniques :
+
+
+
+1. Les apporteurs de liquidité sont rémunérés en CRV.
+2. Les stakers de CRV (holdeurs VeCRV) peuvent "booster" le rendement en CRV de leur position d'apport de liquidité sur Curve.
+
+Le modèle crée ainsi un chemin intéressant pour les utilisateurs du protocole, qui sont **fortement incités à s'engager dans la durée**. En effet, verrouiller des CRV en VeCRV devient de plus en plus efficace plus l'engagement est long - le maximum étant 4 ans.
+
+Pour aller plus loin tout en français, je vous invite à suivre le [direct-marathon Curve Finance avec Charlie.](https://www.youtube.com/watch?v=G5PbqGtjSDQ) Sinon, [cet article en anglais est aussi utile.](https://stakecapital.substack.com/p/curve-tokenomics-and-first-mover)
+
+
+
+Néanmoins, le modèle CRV connait aussi ses limites, la plus évidente étant l'impact des frais de transaction Ethereum : des sommes importantes peuvent être requises pour que le jeu commence à faire du sens.
+
+Le truc, c'est que depuis longtemps, les plus grands apporteurs de liquidité sur Curve ne sont plus des utilisateurs mais **d'autres protocoles**. Mutualiser les fonds permet ainsi de réduire l'impact des frais en gaz tout en développant potentiellement une stratégie d'accumulation de VeCRV.
+
+C'est ainsi que différentes solutions sont apparues pour **gérer les positions d'apport de liquidité sur Curve**, la plus connue étant Yearn, mais il y a aussi Harvest et StakeDAO. Bien qu'elles puissent être utiles pour les déposants, elles souffrent de deux grandes limites : les frais de gestions élevés ainsi que leur approche proche de celle d'un parasite. Yearn, Harvest ou StakeDAO vendent immédiatement tout token farmé. Cela résulte en une pression vendeuse grandissante sur le token natif des protocoles utilisés pour produire le rendement.
+
+
+## Le modèle de Convex, première flywheel 🎡
+
+Fonctionnellement, Convex propose un service similaire à Yearn aux apporteurs de liquidité sur Curve : la **gestion automatisée de leur position afin d'en optimiser le rendement**. Tout comme Yearn, Convex a une stratégie d'accumulation de VeCRV afin de maximiser le rendement des déposants en CRV grâce au mécanisme de boost.
+
+Néanmoins, l'approche sous-jacente est totalement différente de Yearn et s'inscrit dans une synergie vertueuse avec Curve :
+
+
+
+1. **Pas de vente systématique** : contrairement à Yearn, Convex ne vend pas les tokens farmés. Les apporteurs de liquidité sont ainsi rémunérés en CRV mais aussi en CVX, le token natif de Convex.
+2. Les **frais collectés par Convex sont dédiés à 100% au protocole**, tandis que Yearn par exemple paie des "strategists" - de toute évidence assez redondants sur une stratégie simple comme celle-ci.
+3. Grâce à la distribution des frais collectés, Convex crée deux **opportunités de staking intéressantes** pour composer ses rendements, détaillées plus bas.
+4. Enfin, **la liquidité** sur le token qui représente un CRV dans Convex (CvxCRV) est **plus** **optimale** que l'équivalent Yearn : CvxCRV s'échange dans une pool directement contre le CRV, avec un programme d'incitation en CVX.
+
+
+### Les frais : le nerf de la guerre
+
+Bien comprendre la structure des frais est essentiel pour arriver à saisir ce qu'il s'est passé avec Convex. Le protocole contrôle désormais plus de 32M de VeCRV, soit **presque deux fois le total de Yearn, et ce à peine après trois semaines d'existence**.
+
+
+
+Convex prélève un frais total de 16% sur l'ensemble des CRV farmés sur le protocole (contre 20/2 sur tous les tokens pour Yearn, ou 30% pour Harvest par exemple). Sur les 16%, 1% sert à couvrir les frais opérationnels comme le coût en gas des collectes.
+
+
+
+Le plus intéressant s'opère au niveau de la redistribution des 15% restants, soit 15% de tous les CRV farmés par Convex (**plus de 400 000 CRV par jour** au rythme actuel). Vous pouvez consulter la [position Curve de Convex via CurveMarketCap par ici.](https://curve.fi/pools?see=0x989aeb4d175e16225e39e87d0d97a3360524ad80) Deux populations de stakers sont éligibles à ce juteux gâteau :
+
+1. **10% sont reversés aux stakers de CvxCRV**, sous forme de CRV, en plus de leur rendement en token 3pool et CVX (+airdrops VeCRV holder). Posséder du CvxCRV devient ainsi bien plus attractif que du VeCRV pour un simple déposant.
+2. **5% sont reversés aux stakers de CVX**, sous forme de CvxCRV. Cela signifie donc que 5% de tous les CRV farmés par Convex sont capturés et verrouillés au sein du protocole. Cela permet d'augmenter mécaniquement la réserve de VeCRV même si aucun dépôt de CRV par un tiers n'a lieu.
+
+La situation est encore en plein développement et on observe encore des écarts surprenants : par exemple à l'heure où j'écris ces lignes (07 juin) la capitalisation totale du token CVX ne représente même pas la moitié de la valeur des CRV que possède le protocole ($30M vs $80M). Je pense que la situation va s'harmoniser sur le long terme.
+
+
+## Anticiper les prochaines flywheels ?
+
+Avec quelques notions sur Curve et une analyse de la flywheel 🎡 Convex, on a désormais les cartes en mains pour se risquer au jeu de la prospective. Avant cela néanmoins je vous propose plutôt d'aller regarder dans le passé pour analyser une presque flywheel ratée : Pickle Finance.
+
+
+### Pickle Finance : une flywheel arrivée trop tôt
+
+Sur le papier, Pickle a tout d'une flywheel : c'est un système pour augmenter les rendements des dépôts Yearn grâce à l'émission additionnelle de token PICKLE. PICKLE reprend des éléments du système VeCRV, avec un mécanisme de verrouillage (DILL) qui permet de stimuler les rendements en PICKLE des dépôts sur Pickle Finance.
+
+Sauf que… Pickle n'apporte techniquement strictement rien en plus de Yearn, en dehors de l'émission de PICKLE. En outre, Pickle ne se spécialise pas : des fermes sont proposées sur les vault Yearn mais aussi certaines paires Sushi. À l'inverse de Convex, Pickle n'est donc pas en mesure de développer un avantage unique (moat) sur les services farmés.
+
+En DeFi rien n'est définitif. La situation de Pickle pourrait évoluer, si les tokenomics des protocoles sous-jacents (YFI et SUSHI) évoluent. Les deux protocoles semblent s'orienter vers une réappropriation du modèle VeCRV donc c'est tout à fait possible. Un modèle qui mèle la logique de burn Adamant/Ellipsis et le boosting Curve a même été proposé pour Sushi : **[oSUSHI](https://forum.sushi.com/t/sushinomics-introducing-osushi/4055)**.
+
+")
+
+
+### Adamant Finance : 🎡 flywheel sur les LP Polygon ?
+
+Adamant est un protocole encore récent qui existe sur la sidechain Polygon. Il permet la gestion facilitée des positions d'apport de liquidité sur les principaux services d'échanges : QuickSwap, Cometh, SushiSwap, etc.
+
+Outre la composition automatique des rendements, Adamant offre aussi des récompenses supplémentaires en ADDY (en fonction des profits générés). Tous les ADDY obtenus sont vested (verrouillés) pendant 3 mois et peuvent être retirés plus tôt avec une pénalité de 50%. Celle-ci est redistribué à ceux qui acceptent de staker + locker leur ADDY pendant 3 mois.
+
+En outre, tous les stakers de ADDY (même ceux vested) bénéficient d'une part des frais collectés par la plateforme, distribués en wMATIC. Le protocole dispose donc d'une tokenomics déjà assez élaborée avec différents mécanismes de rétention, mais il lui reste encore quelques améliorations à trouver pour devenir une flywheel.
+
+La première consisterait à introduire une plus grande incitation à verrouiller ses ADDY grâce à un système de boost similaire à Curve. Les déposants possédant des ADDY en stake+lock disposeront ainsi d'un meilleur rendement en ADDY sur leur position LP. C'est déjà en discussion voir même en développement.
+
+Reste à Adamant à développer une synergie avec les protocoles farmés aussi solide que Convex avec Curve. C'est pour l'instant difficile voir impossible car aucun d'entre eux ne dispose d'une tokenomics aussi subtile que CRV.
+
+
+### Un service X sur Liquity : 🎡 flywheel sur un marché monétaire ?
+
+Jusqu'à présent, on a discuté de flywheels construits sur des services d'échange décentralisés, cela semble le plus évident. Néanmoins on peut envisager des modèles similaires sur d'autres types de service, comme les marchés monétaires.
+
+Je vous propose donc de finir avec une flywheel théorique maison. À ma connaissance un tel protocole n'existe pas encore : c'est à vous de jouer !
+
+L'équation de base est simple :
+
+1. Il y a une forte demande pour des **produits "passifs ETH"** - des produits qui développent des stratégies sur ETH en vue d'accumuler des ETH.
+2. Pour se faire, une des options est d'emprunter des stablecoins en utilisant les ETH comme collatéral. Les stablecoins peuvent ainsi produire un rendement supplémentaire.
+3. Pour cette stratégie, Liquity serait **la plateforme de prédilection sans contestation possible**. En effet, le coût d'emprunt y est le plus bas du marché (presque 12x moins cher que Maker sur une année) et les opportunités de rendement sur le stablecoin LUSD ne manquent pas.
+
+")
+
+L'enjeu sur une telle stratégie mutualisée c'est de **gérer le ratio de collatéralisation** et d'être en mesure de l'équilibrer rapidement si le marché venait à bouger. Là encore, Liquity s'y prête bien puisque la stability pool offre un rendement attractif sur le LUSD tout en permettant de **mobiliser rapidement les LUSD pour rembourser la dette si besoin**.
+
+Le protocole X en question proposerait ainsi **un produit passif de rendement sur l'ETH** pour les utilisateurs finaux qui n'auraient pas à gérer la position eux-même. On peut également envisager que le protocole X ait son propre token avec une tokenomics qui vient adresser un des principaux dangers de la stratégie : le manque de prédictibilité. Ainsi le token natif de protocole X pourrait servir à inciter les dépôts longs et d'une durée prévisible (les utilisateurs verrouillent leur ETH sur 3/6/9/12 mois par ex).
+
+Des engagements longue durée permettent également de **développer une stratégie sur les LQTY farmés par les LUSD.** Ainsi en engageant des ETH pendant un an dans le protocole par exemple, l'utilisateur accumulera un droit sur une portion des LQTY farmés par l'ensemble du protocole, et donc un droit, à vie, aux LUSD et ETH qu'ils génèrent. La synergie du protocole avec Liquity ainsi que les rendements long-terme sont maximisés si le protocole X ne vend aucun LQTY, comme c'est le cas dans le concept proposé ci-dessus.
+
+J'espère que cet article vous aidera à mieux comprendre ce qu'il s'est joué avec Convex, Yearn et Curve ces dernières semaines et utiliser les leçons tirées de cet épisode pour identifier les prochaines opportunités similaires.
+
+Ce qui est chouette avec les différents mécanismes d'incitation, c'est qu'ils précèdent l'action. En game theory, il n'y a pas de certitudes, mais certains comportements sont quasiment mécaniques - pour qui comprend réellement les incitations et leurs enjeux. C'est à vous de jouer !
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/post/2021/defi-flywheel.md b/content/post/2021/defi-flywheel.md
new file mode 100644
index 00000000..f70ca946
--- /dev/null
+++ b/content/post/2021/defi-flywheel.md
@@ -0,0 +1,157 @@
+---
+title: "🎡 DeFi Flywheel : engineering protocol to protocol synergies through tokens"
+description: "We analyze the race to accumulate CRV with the launch of Convex to understand the flywheel concept in DeFi: protocols that evolve in synergy thanks to their tokenomics."
+date: '2021-06-17T01:13:50.191Z'
+categories: [DEX, Yield]
+tags: [DeFi, Ethereum, DeFi, Money Markets, Liquity, Curve Finance, CRV, Polygon, Convex, CVX, Yearn Finance]
+toc: true
+tocNum: true
+url: defi-flywheel
+image: /img/2021/defi-flywheel/defi-flywheel-cover.png
+difficulty: "beginner"
+---
+
+In three weeks, the Convex protocol attracted over $3 billion in deposits, while becoming the largest 🐳 whale of CRV, today and probably forever. Luck is never a negligible factor, but with such a smashing entry into DeFi top protocols, we must look much further. Indeed, the key to understanding the meteoric rise of Convex is tokenomics, and this is our topic of the day!
+
+In DeFi, besides the technical, you also have to be a fine sociologist, or rather a "game theorist" as we say around here: to know how to anticipate the reactions of crowds to a given set of rules.
+
+The emergence of liquidity mining programs last year showed that the right set of rules can move huge amounts of capital. The question now is how to do it wisely, i.e. with an awareness of what is at stake **in the long run.**
+
+Indeed, liquidity mining by itself only attracts **mercenary and opportunistic deposits**. In fact, liquidity mining is more a tool to make a project known than to perpetuate it.
+
+To last in DeFi, it is a matter of tokenomics: i.e. the mechanics of the native tokens of protocols. **Tokenomics is in a way the gameplay of a DeFi protocol**.
+
+As you probably know, I am a big fan of the CRV model. It's perfect, since the game around the CRV token has never been as lively as it has been in the last few weeks. Some people even talk about #lockening to describe **the race to accumulate CRVs** that Convex, Yearn and StakeDAO are engaged in.
+
+Let's go into details to understand the concept of flywheel with the example of Convex / Curve. I will finish by analyzing protocols that could be used in a similar scenario.
+
+## The rise of the first 🎡 DeFi flywheel
+
+With the launch of Convex, a new term began to be used to describe its operation and tokenomics: 🎡 flywheel.
+
+There isn't a precise definition yet, but I'll try one: it describes a protocol that achieves a winning trifecta:
+
+1. A tokenomics that offers interesting opportunities to token owners optimistic about the future of the model.
+2. A protocol that is itself relevant and meets a real need, ideally in direct synergy with another protocol.
+3. A liquidity mining program (+airdrop) to start the loop and attract the first token owners.
+
+I generalized the Convex model, but it has an additional feature: Convex is a kind of "meta-protocol": it is **built entirely on top of Curve Finance and in synergy with it.**
+
+Thus, the forerunner of the flywheel would probably be found among protocols built in synergy with others. For example, although it is built on top of BSC and [suffered a significant attack recently](https://rekt.news/pancakebunny-rekt/), the Bunny protocol helped the DEX PancakeSwap to develop.
+
+Bunny offers to manage Pancake liquidity provider positions, while issuing its own token based on the returns generated. This simplifies the management of liquidity providers positions on Pancake while generating an additional source of return (BUNNY token).
+
+So to fully understand the concept of 🎡 flywheel, let's analyze the best one we've had the opportunity to see so far: Convex. It turns out to be a bit more complicated because it relies on Curve, so you first need to understand the curve tokenomics.
+
+## CRV: a tokenomics for 🎡 flywheels?
+
+Curve Finance's tokenomics is almost a year old and yet it is still often misunderstood
+
+The great elegance of the CRV tokenomics resides in **aligning the interests of several actors better than any other tokenomics known to date**: the liquidity providers, the CRV holders and the Curve protocol itself.
+
+Indeed, the model tends over time to merge the two populations (CRV holders and LP) through two mechanics:
+
+1. Liquidity providers are incensitivised in CRV.
+2. CRV stakers (VeCRV holders) can "boost" the CRV yield of their liquidity provision on Curve.
+
+This model creates an interesting path for protocol users, who are **strongly encouraged to make a long-term commitment**. Indeed, locking CRVs into VeCRVs becomes more and more efficient the longer the commitment is - the maximum being 4 years.
+
+To go further, I invite you to read [this article](https://stakecapital.substack.com/p/curve-tokenomics-and-first-mover)
+
+
+
+Nevertheless, the CRV model also has its limitations, the most obvious one being the impact of Ethereum transaction fees: large sums of money can be required for the game to start making sense.
+
+The thing is, for a long time now, the biggest contributors of liquidity on Curve have not been users but **other protocols**. Pooling funds reduces the impact of gas fees while potentially developing a VeCRV accumulation strategy.
+
+As a result, various solutions have emerged to **manage liquidity positions on Curve**, the best known being Yearn, but there are also Harvest and StakeDAO. While they can be useful for depositors, they suffer from two major limitations: high management fees and a parasitic approach. Yearn, Harvest or StakeDAO immediately sell any farmed tokens. This results in increasing selling pressure on the native token of the protocols used to produce the return.
+
+## The Convex model : the first flywheel 🎡
+
+The Convex way to operate offers a "Yearn-like" service to liquidity providers on Curve: automated management of their position to maximize returns. Like Yearn, Convex has a VeCRV accumulation strategy to maximize the return of depositors in CRV through the boost mechanism.
+
+Nevertheless, the underlying approach is totally different from Yearn and is part of a virtuous synergy with Curve :
+
+1. **No systematic selling**: unlike Yearn, Convex does not sell the tokens it farms. Liquidity providers are thus remunerated in CRV but also in CVX, the native token of Convex.
+
+2. **The fees collected by Convex are 100% dedicated to the protocol**, while Yearn for example pays strategists - obviously quite redundant on a simple strategy like this.
+
+3. Thanks to the distribution of the collected fees, Convex creates two **interesting staking opportunities** to compose its returns, detailed below.
+
+4. Finally, **the liquidity** on the token that represents a CRV in Convex (CvxCRV) is more optimal than the Yearn equivalent: CvxCRV trades in a pool directly against the CRV, with an incentive program in CVX.
+
+### Fees : the lifeblood of success
+
+Understanding the fee structure is key to get what has happened with Convex. The protocol now controls over 32M VeCRVs, which is **almost twice Yearn's total, and that's just after three weeks of existence**.**
+
+
+
+Convex charges a total fee of 16% on all CRVs farmed on the protocol (compared to 20/2 on all tokens for Yearn, or 30% for Harvest for example). Of the 16%, 1% is used to cover operational costs such as the gas cost of collections.
+
+
+
+The most interesting part is the redistribution of the remaining 15%, i.e. 15% of all CRVs farmed by Convex (**over 400,000 CRVs per day** You can view the [Convex Curve position via CurveMarketCap here](https://curve.fi/pools?see=0x989aeb4d175e16225e39e87d0d97a3360524ad80))
+
+Two staker populations are eligible for this juicy pie:
+
+1. **10% is paid back to CvxCRV** stakers, in CRV, in addition to their return in 3pool and CVX tokens (+airdrops VeCRV holder). Owning CvxCRV becomes much more attractive than VeCRV for a simple depositor.
+
+2. **5% is returned to the CVX stakers**, in the form of CvxCRV. This means that 5% of all CRVs farmed by Convex are captured and locked within the protocol. This mechanically increases the pool of VeCRVs even if no third party CRV deposits are made.
+
+**The situation is still ongoing and there are still surprising gaps: for example, at the time of writing (June 07) the total capitalization of the CVX token is not even half of the value of the CRVs that the protocol has ($30M vs $80M). I think the situation will harmonize in the long run.**
+
+## How to anticipate the next flywheels?
+
+With some notions about Curve and an analysis of the flywheel 🎡 Convex, we now have the cards in hand to venture into the game of foresight. Before that however I propose instead to go look into the past to analyze an almost failed flywheel : Pickle Finance.
+
+### Pickle Finance : the wrong timing
+
+On paper, Pickle has all the makings of a flywheel: it is a system to increase the returns on Yearn deposits through the additional issue of PICKLE tokens. PICKLE has elements of the VeCRV system, with a locking mechanism (DILL) that allows to boost PICKLE returns on deposits on Pickle Finance.
+
+Except that... Pickle does not technically add anything to Yearn, apart from issuing PICKLE. Moreover, Pickle does not specialize: farms are offered on Yearn vaults but also some Sushi pairs. Unlike Convex, Pickle is therefore not able to develop a unique advantage (moat) on farmed services.
+
+In DeFi, nothing is definitive. Pickle's situation could evolve, if the tokenomics of the underlying protocols (YFI and SUSHI) evolve. Both protocols seem to be moving towards a reappropriation of the VeCRV model, so it is quite possible. A model that combines the Adamant/Ellipsis burn logic and the Curve boosting has even been proposed for Sushi: **[oSUSHI](https://forum.sushi.com/t/sushinomics-introducing-osushi/4055)**.
+
+")
+
+### Adamant Finance : 🎡 a flywheel on Polygon's LP ?
+
+Adamant is a still new protocol that exists on the Polygon sidechain. It allows the easy management of liquidity positions on the main exchange services: QuickSwap, Cometh, SushiSwap, etc.
+
+In addition to automatic compounding of returns, Adamant also offers additional ADDY rewards (based on profits generated). All ADDY earned are vested (locked) for 3 months and can be withdrawn earlier with a 50% penalty. This is redistributed to those who agree to staker + lock their ADDY for 3 months.
+
+In addition, all ADDY stakers (even vested ones) benefit from a share of the fees collected by the platform, distributed in wMATIC. The protocol thus has a tokenomics already quite elaborate with different retention mechanisms, but it still has some improvements to find to become a flywheel.
+
+The first one would be to introduce a greater incentive to lock in ADDYs through a boost system similar to Curve. Depositors with ADDYs in stake+lock will have a better return in ADDYs on their LP position. This is already under discussion or even in development.
+
+Adamant still has to develop a synergy with the farmed protocols as strong as Convex with Curve. This is difficult or impossible for the moment because none of them have tokenomics as subtle as CRV.
+
+### An "X" Liquity service : 🎡 money market flywheel
+
+So far, we have discussed flywheels built on decentralized exchange services, which seems the most obvious. Nevertheless, we can consider similar models on other types of services, like money markets.
+
+So I propose to finish with a theoretical flywheel of my own. To my knowledge, such a protocol does not exist yet: it's up to you!
+
+The basic equation is simple:
+
+1. There is a strong demand for "ETH passive" products - products that develop strategies on ETH in order to accumulate ETH.
+
+2. One option is to borrow stablecoins using ETH as collateral. This way, stablecoins can earn an additional return.
+
+3. For this strategy, Liquity would be **the platform of choice without question**. Indeed, the cost of borrowing is the lowest in the market (almost 12x cheaper than Maker over a year) and there is no shortage of opportunities for yield on the LUSD stablecoin.**
+
+")
+
+The challenge of such a pooled strategy is to **manage the collateralization ratio** and to be able to balance it quickly if the market moves. Here again, Liquity lends itself well to this since the stability pool offers an attractive return on the LUSD while allowing **the rapid mobilization of LUSD to repay the debt if necessary**.
+
+The X protocol in question would offer **a passive ETH investment product** for users who would not have to manage the position themselves. We can also consider that the X protocol has its own token with a tokenomics that addresses one of the main dangers of the strategy: the lack of predictability. Thus the native token of protocol X could be used to encourage long deposits of a predictable duration (users lock their ETH over 3/6/9/12 months for example).
+
+Long term commitments also allow to **develop a strategy on the LQTY farmed by the LUSDs.** By committing ETH for one year in the protocol for example, the user will be able to claim a portion of the LQTYs farmed by the whole protocol, and benefited, for life, from the LUSDs and ETHs they generate. The synergy of the protocol with Liquity as well as the long term returns are maximized if protocol X does not sell any LQTY, as is the case in the concept proposed above.
+
+I hope this article will help you better understand what has been going on with Convex, Yearn and Curve over the past few weeks and use the lessons learned from this episode to identify similar opportunities in the future.
+
+The nice thing about different incentive mechanisms is that they precede action. In game theory, there are no certainties, but some behaviors are almost mechanical - for those who really understand incentives and their issues.
+
+Try it for yourself !
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/post/2021/defi-janus.fr.md b/content/post/2021/defi-janus.fr.md
new file mode 100644
index 00000000..dd5a2fd5
--- /dev/null
+++ b/content/post/2021/defi-janus.fr.md
@@ -0,0 +1,203 @@
+---
+title: "Janus : le nouvel ennemi juré des protocoles DeFi ?"
+description: "Au sein de la finance décentralisée, véritable laboratoire à ciel ouvert, les enjeux de gouvernance sont complexes et souvent contradictoires. Dans cet article, j'examine les potentiels antagonismes entre les utilisateurs d'un protocole donné et les possesseurs du token natif."
+date: '2021-07-05T01:13:50.191Z'
+categories: [Thesis]
+tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Liquity, Curve Finance, CRV, MakerDAO, Convex, CVX, Yearn Finance, Uniswap]
+toc: true
+tocNum: true
+url: defi-janus
+image: /img/2021/defi-janus/defi-janus-cover.png
+difficulty: "intermediate"
+---
+
+La mythologie est souvent utilisée pour illustrer la DeFi. Par exemple, on évoque souvent le dieu cananéen Moloch pour symboliser les enjeux de coordination. Aujourd'hui, je vais identifier avec vous une nouvelle divinité du panthéon DeFi : Janus.
+
+Dans cet article, on analyse les mécanismes des gouvernances ouvertes des protocoles DeFi qui peuvent conduire à l'émergence d'un nouveau genre de défi pour la DeFi, un ennemi juré que je vous propose d'incarner dans la divinité romaine Janus.
+
+Tout comme le dieu aux deux visages, **un protocole Janus souffre d’une ambivalence profonde** : bien qu'il puisse être un succès incontestable en termes d'utilisation, il fait face à de sérieux antagonismes entre ses différentes parties prenantes qui mettent en jeu la pérennité du protocole (utilisateurs, holdeurs, investisseurs, équipe et communauté étendue).
+
+Pour comprendre les Janus, il faut saisir la complexité inhérente de la DeFi et comment elle peut s’accommoder de **consensus sur des décisions pourtant délétères ou non optimales**. Une fois le contexte posé, on pourra analyser trois Janus, chacun à leur manière : MakerDAO, Yearn Finance et Uniswap.
+
+## Complexité et enjeux de gouvernance : un terreau fertile pour Janus
+
+L'émergence de protocoles Janus dans la situation actuelle est due à de nombreux facteurs difficiles à hiérarchiser. Je les ai regroupés en trois thématiques :
+
+### Mécanismes de gouvernance et vote
+
+La gouvernance des protocoles DeFi se fait **de manière ouverte et transparente**, en plusieurs étapes.
+
+Au fil des discussions sur différents supports comme Discord, la communauté converge vers différentes idées qui peuvent aboutir à des propositions. Les propositions sont formalisées, généralement sur les forums de gouvernance et amendées avant d'atteindre un **consensus informel**.
+
+Des mécanismes de **signalement** (Snapshot) permettent d'identifier les propositions les plus pertinentes. Elles sont par la suite **soumises au vote des détenteurs des tokens** via le mécanisme de gouvernance principal.
+
+La plupart des systèmes de gouvernance fonctionnent encore sur la logique du **1 token = 1 vote**, attribuant ainsi le même poids à tous les possesseurs de tokens quelque soit leur attitude vis-à-vis du projet ou niveau d'engagement par rapport à celui-ci.
+
+
+
+_Mesurer l'influence dans la gouvernance des protocoles DeFi - [source](https://twitter.com/Lsquaredleland/status/1411031620748943360)_
+
+Certains protocoles ont pourtant réussi à remettre en cause cette approche en ajoutant une logique d'engagement temporel : interagir avec la DAO de Curve nécessite d'engager ses CRV pour une période allant de 1 à 4 ans. Un engagement de longue durée augmente le pouvoir de vote effectif obtenu (veCRV).
+
+Malgré tout, la **participation est généralement basse**, même lorsque des mécanismes de délégation sont utilisés.
+
+### Complexité des décisions
+
+Pour évaluer des propositions de gouvernance d'un protocole de finance décentralisée, il faut avoir **une compréhension de tout un ensemble de notions de base relative à Ethereum**, la blockchain et la DeFi.
+
+À partir de là, il faut idéalement une compréhension approfondie du protocole en question, ainsi que ses **interactions avec les autres protocoles, synergies**, etc. On peut également désormais rajouter à cela toute la complexité additionnelle liée à la multiplication des solutions de scalabilité : sidechains et L2.[^mkrgov]
+
+En outre, la formulation des propositions sur les forums de gouvernance est généralement assez technique, ce qui **rend leur compréhension** difficile et ouvre la porte aux manipulations.
+
+Enfin, la gouvernance souffre d'un véritable effet de masse : au fur et à mesure que les protocoles se développent, la quantité d'informations à digérer pour avoir un vote éclairé augmente en conséquence.
+
+Un membre du forum de gouvernance MakerDAO a estimé son travail hebdomadaire de suivi et de participation à environ 40h par semaine, en augmentation constante :
+
+
+
+### Supports de la gouvernance
+
+Bien que la gouvernance soit ouverte et transparente, **elle s'appuie encore souvent sur différents services propriétaires et donc administrés,** le plus souvent par l'équipe elle-même. Cela pose de sérieux problèmes.
+
+Ainsi, les discussions relatives à la gouvernance se font généralement sur Discord et sur le forum de gouvernance - les **deux supports sont généralement modérés directement par l'équipe du projet**.
+
+En outre, l'équipe peut avoir **un contrôle sur les mécanismes de signalement** comme [Snapshot](https://snapshot.org/). Le cumul de toutes ces limitations des systèmes de gouvernance décentralisée peut amener aux situations observées dernièrement, où les possesseurs de tokens ne votent pas dans leurs meilleurs intérêts.
+
+Ce tour rapide des limites actuelles des systèmes de gouvernance était nécessaire pour avoir le contexte pour la suite. Voyons donc les trois Janus que j'ai repérés :
+
+
+## Uniswap : 1M d'UNI par ci, 1M d'UNI par là
+
+
+### La proposition 05 en résumé
+
+Un vote précipité qui abouti à la signature d'un chèque quasiment en blanc de 1M UNI pour un groupe de directeurs juridiques de gros projets décentralisés chargés de déployer une stratégie de lobbying DeFI. Très peu de mécanismes de transparence ont été déployés et l'influence de la communauté des UNI holder sur le groupe financé est restreinte.
+
+[Proposition 05 Uniswap Gouvernance - DeFi Education Fund](https://gov.uniswap.org/t/governance-proposal-005-defi-education-fund/12963)
+
+
+### Compression de la gouvernance
+
+Dans le cas d'Uniswap, tout y était. Tout commence avec un vote précipité alors que des membres de la communauté avaient de **très nombreuses questions ignorées**. La communauté s'inquiète du manque de contrôle sur les fonds alloués sans aucune condition. Chris Blec a regroupé les principales questions et inquiétudes dans [une lettre](https://twitter.com/ChrisBlec/status/1409857319144394758 ) et a réussi à obtenir quelques réponses de l'équipe dans un [Twitter space](https://odysee.com/@ChrisBlec:8/chrisblec-june24-twitterspace:9?r=DeLsAYctGhcLFvkGBKYgE2tN17fUXA9u).
+
+En outre, **l'organisation qui va recevoir les 1M UNI est composée de membres proches de l'équipe Uniswap** et on suspecte également des investisseurs du projet comme a16z d'avoir été décisif dans l'adoption de la décision. La proposition bénéficiait également du soutien direct de l'équipe.
+
+Finalement, la proposition se veut plus large qu'Uniswap puisqu'ils sont officiellement mandatés pour faire du lobbying DeFi, mais on peut se poser la question de la vision de la DeFi portée par de tels profils.
+
+### Transparence ? Peut être. Contrôle ? Non !
+
+Après les réactions aux premières itérations de la proposition, différents mécanismes ont été ajoutés pour apporter plus de transparence sur les agissements du DeFi Education Fund. L'équipe s'est également engagée à implémenter [FailSafe](https://github.com/withtally/safeguard) dès que possible. Cela permettrait à la DAO (holdeurs UNI) de pouvoir exercer un veto sur les transactions réalisées par le multisig.
+
+Néanmoins à l'heure d'aujourd'hui **le contrôle effectif de la DAO reste limité** : le vote est passé et [les 1M UNI sont désormais alloués](https://etherscan.io/address/0x1C95930Dfc1139381265ce45B5f480F1EFae09A1).
+
+Edit du 17 Juillet : peu après avoir reçu les fonds, le multisig [a déjà vendu la moitié de ceux-ci](https://thedefiant.io/sale-of-usdc-raises-concerns-regarding-newly-formed-defi-education-fund/) pour des stablecoins qui restent encore dans le wallet pour l'instant.
+
+Cet épisode correspond pour moi à l'équivalent d'un détournement de fonds publics, sauf qu'ici les fonds proviennent d'une DAO. L'aventure et ses péripéties mettent également en lumière le pouvoir effectif exercé par les différentes parties prenantes du protocole.
+
+## MakerDAO : déséquilibre d'intérêts antagonistes
+
+Le problème avec Maker est plus général et remonte bien plus loin. C'est un problème courant en DeFi d'alignement d'intérêts divergents de différents participants. En outre, pour répondre rapidement à la demande grandissante pour le DAI, **la multiplication des collatéraux (mise à jour MCD) a grandement impacté la trustlessness et la décentralisation effective de DAI.**
+
+Plus de 60% des garanties du DAI sont des tokens qui nécessitent une forme de confiance comme USDC, wBTC ou TUSD. Le problème existe depuis longtemps et n'est pas prêt de se résoudre, si jamais. J'ai déjà discuté de ce problème sur ce blog, je vous renvoie vers cet article :
+**[Actifs à vocation stable sur Ethereum : quelles approches et quels enjeux ?](https://tokenbrice.xyz/fr/actifs-stables-ethereum/)**
+
+### Des frais d'utilisation abusifs
+
+Ici, on va plutôt creuser le problème des frais excessifs qui illustre **un cas classique de maximisation de rente sur une clientèle pensée captive**.[^makerclientelecaptive] DAI étant un stablecoin synthétique frappé directement par l'utilisateur, son frais d'emprunt annuel ne devrait pas excéder 2-3% et cela reste encore coûteux. [Liquity](http://liquity.org/), une alternative à Maker, charge un frais qui revient à 0.5% annuel sur les LUSD empruntés.
+
+Avant la dernière mise à jour, le principal vault ETH de maker (ETH-A) chargeait 5.5% de frais annuel. C'est désormais descendu à 3.5%, mais les frais sur le vault le plus proche des conditions d'emprunt de Liquity (ETH-B, collatéralisation minimale = 130% // 110% sur Liquity) reste à 9% annuel, soit **18 fois plus coûteux que son alternative**.
+
+{{< notice info >}}
+Liquity est construit avec une approche de minimisation de la gouvernance, contrairement à Maker, ce qui peut expliquer une partie de l'écart immense observé entre les frais appliqués par les deux plateformes.
+{{< /notice >}}
+
+### Une rente pour les holdeurs MKR ?
+
+Les frais de MakerDAO sont habituellement élevés, même s'ils ont été à zéro ou proches à de courtes périodes pour stimuler la demande. Alors **pourquoi la DAO Maker vote systématiquement des frais excessifs** ? La réponse est aussi simple que 1+1=2 :
+
+1. Les frais prélevés sur les vaults Maker sont utilisés pour acheter des MKR tokens sur les marchés et les brûler, rendant le token MKR plus rare.
+2. Ils sont votés par la DAO de Maker, en proportion donc des tokens MKR possédés.
+
+La conception même du protocole incite ainsi les possesseurs de MKR à voter pour **extraire les frais maximaux tolérés par les utilisateurs**, et pas un centime de moins. En effet, chaque point de base[^bps] en frais supplémentaire se traduit par plus de MKR brûlés et donc à priori un capital qui s'apprécie pour les possesseurs du token.
+
+Ça peut sembler fabuleux en termes de tokenomics car cela optimise pour le meilleur prix possible sur MKR (théoriquement), mais **cela se fait au détriment des utilisateurs du service** que la plateforme propose - et donc va contre l'intérêt long-terme du protocole.
+
+Il faut également garder en tête que contrairement à la plupart des protocoles, Maker n'a jamais mis en place de mécanisme pour transformer ses utilisateurs en holdeurs (liquidity mining). Je vois donc difficilement comment Maker peut être compétitif avec une telle structure.
+
+## Le cas ambigu de Yearn Finance
+
+Yearn est sans doute l'exemple le plus simple et direct d'un Janus. En à peine un an, Yearn est devenu un **protocole majeur de la DeFi avec $4B d'actifs déposés** et surtout **une profitabilité délirante** que l'équipe aime mettre en avant.
+
+Néanmoins, l'histoire n'est pas aussi rose en fonction de votre perspective. On va donc étudier la situation de Yearn sous 3 angles : du point de vue d'un utilisateur, pour un autre protocole et pour la DAO Yearn elle-même.
+
+### Coté utilisateurs : des frais délirants
+
+Le succès de Yearn s'obtient à quel prix ? Encore une fois, essentiellement **des utilisateurs qui se font littéralement dépouiller par Yearn** - les frais comptent parmis les plus élevés observés pour un gestionnaire d'actif en DeFi, tout en étant complexe :
+
+1. Yearn prend **2% de frais de gestion annuel sur l'ensemble du dépôt**.
+2. Yearn prélève également un frais sur la performance de 20% : 20% de tous les actifs farmés partent vers la trésorerie.[^yearnfrais]
+
+Les premier frais est le plus problématique puisque cela signifie que les frais excessivement gourmands de Yearn amène à des vaults qui… perdent de l'argent !
+
+En effet, tout vault qui ne réalise pas au minimum 2% de retour annuel sur Yearn finit dans le rouge une fois les frais de gestion prélevés, sans même prendre en compte les frais de performance...
+
+
+### Coté protocoles : le câlin de la mort de Yearn
+
+Yearn permet à ses utilisateurs de farmer différents protocoles comme Curve en gérant automatiquement la composition de leurs rendements.
+
+C'est pratique pour l'utilisateur, mais cela signifie également que **Yearn vend systématiquement tous les tokens farmés** par ses vaults : on peut donc se poser la question de l'impact et de la pertinence pour le protocole farmé, qui subit donc une pression vendeuse sur son token natif.
+
+L'arrivée de Convex a démontré qu'un protocole mieux structuré en termes de tokenomics et spécifique à Curve peut proposer une alternative synergistique où les rendements sont largement supérieurs, tout en évitant la vente systématique des tokens farmés. J'analyse la "flywheel" de Convex dans cet article : **[🎡 Flywheel DeFi : synergies de protocoles à protocoles, par tokens interposés](https://tokenbrice.xyz/fr/defi-flywheel/)**
+
+Ainsi, l'arrivée de Convex a mis Yearn face à ses contradictions et Yearn a essentiellement capitulé en intégrant Convex pour optimiser le rendement de ses vaults. Cela signifie désormais que **les utilisateurs de Yearn paient des frais à Convex et aident le protocole à accumuler plus de VeCRV** et creuser ainsi son écart avec Yearn - échec et mat pour Yearn sur Curve.
+
+
+
+_Aperçu des veCRV possédés par les différentes DAO - source [Dune Analytics / Banteg](https://duneanalytics.com/banteg/misc)_
+
+
+### Coté Yearn DAO
+
+Malgré cette situation fondamentale assez inquiétante puisque Yearn propose désormais des **produits essentiellement non compétitifs** (tous les vaults Curve), Yearn se présente comme un des succès incontestables de la DeFi.
+
+En effet, l'équipe semble mesurer le succès du protocole au volume des frais prélevés par celui-ci. L'indicateur est évidemment dangereux puisqu'avec les frais de gestion à 2% annuel, tout dépôt sur Yearn paie systématiquement des frais même si peu ou pas de profit n'est dégagé.
+
+Plutôt que de prendre les frais prélevés comme un indicateur et donc une mesure de succès, le protocole pourrait être optimisé sur la base des profits générés pour les déposants.
+
+Enfin, et même si c'est un sujet plus subjectif, la communication autour du projet est brouillone voire presque dérangeante parfois, par exemple [quand Yearn est comparé](https://thedefiant.io/yearn-revenues-projected-to-surpass-tradfis-fueled-by-thriving-community/) aux gestionnaires d'actifs classiques comme WealthFront ou BlackRock - je trouve ça assez déséquilibré puisque Yearn charge des frais similaires à ces structures mais opère dans un marché bien plus dynamique. En outre, de telles sociétés sont-elles réellement des modèles pertinents à avoir en DeFi ?
+
+
+
+Si Yearn se compare aux gestionnaires d'actifs, c'est peut-être parce que la comparaison avec ses pairs DeFi est sans appel :
+
+
+
+En outre, là où Convex travaille à permettre aux holdeurs cvxCRV de voter dans les décisions de la DAO Curve, Yearn s'octroie le contrôle sur la puissance de vote associée aux CRV déposés par ses utilisateurs sur le yveCRV. La même démarche s'observe sur les airdrops alloués aux holdeurs VeCRV : Yearn se les octroie pour acheter des CRV et sponsoriser son vault yveCRV tandis que Convex les rend accessibles à ses déposants.
+
+## Les Janus sont-ils défendables ?
+
+Maintenant qu'on a posé le décor avec trois Janus, reste la question de leur défendabilité. Tous les trois ont des alternatives crédibles, souvent plus récentes et avec des tokenomics plus équilibrées. Voyons donc comment nos Janus évoluent par rapport à celles-ci.
+
+En à peine deux mois d'existence, Convex a déjà dépassé Yearn en termes de valeur totale des actifs déposés. Pour l'instant, les réactions de Yearn n'ont pas réussi à inverser la tendance, et je pense que **seule une révision profonde du modèle permettra au protocole de rester compétitif sur le long-terme**.
+
+Néanmoins **la machine est lancée** : Convex possède déjà plus de deux fois plus de CRV que Yearn et en accumule bien plus rapidement. Et même si Yearn farme de nombreux autres protocoles, il me semble improbable qu'il puisse redevenir compétitif sur Curve.
+
+Côté Marker, de plus en plus de personnes commencent à souligner l'absurdité de la situation actuelle sur DAI, et les alternatives gagnent du terrain. En quelques semaines et avec seulement ETH comme collatéral accepté, Liquity a déjà attiré l'équivalent de plus de 40% de la valeur total déposée dans MakerDAO :
+
+
+
+Sur Liquity, les frais d'emprunt sont bien plus bas, plus clairs, et distribués directement aux stakers de LQTY. Le service est ainsi plus ouvert et participatif que MakerDAO tout en étant brutalement plus efficace. Là encore, je pense qu'une refonte d'ampleur de MakerDAO serait nécessaire pour que le protocole retrouve sa pertinence et sa compétitivité.
+
+Enfin pour Uniswap, la concurrence est encore plus vive. Le protocole évolue face à des tokenomics matures comme Curve qui a un mécanisme de partage des revenus du protocoles actif depuis bientôt un an, tandis que rien n'est encore proposé sur UNI.
+
+Sur les trois fronts, je pense que la situation forcera Uniswap, Maker et Yearn à se renouveler. Néanmoins avec le rythme de l'industrie, l'étau se resserre et leurs alternatives plus ouvertes, efficaces et synergiques gagnent rapidement du terrain.
+
+Alors que les DAO des trois protocoles se sont désynchronisées de leurs utilisateurs, le meilleur intérêt de ceux-ci leur a été rappelé de la manière la plus simple et efficace que l'on connaisse : avec des mouvements de capitaux conséquents. J'ai hâte de voir ce qui arrive ensuite !
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
+
+[^mkrgov]: Regardez par exemple [cette pré-proposition prise au hasard sur le forum de gouvernance de MakerDAO](https://forum.makerdao.com/t/mip33-maker-stability-price-module/5943)
+[^yearnfrais]: [Documentation Yearn Finance - Structure des frais](https://docs.yearn.finance/yearn-finance/yvaults/overview#yvault-fee-structure)
+[^makerclientelecaptive]: DAI est encore perçu par beaucoup comme un stablecoin décentralisé qui ne nécessite pas de confiance, bien que ce ne soit plus le cas. Il existe encore peu de stablecoins qui ne s'appuient que sur des collatérals trustless (ETH) et crédiblement décentralisés (ou en voie) : j'en connais deux - le LUSD de Liquity et le RAI de Reflexer.
+[^bps]: Les frais des services financiers sont souvent mesurés en point de base (bps / basis point). Un point de base est un centième de pourcent : 1 bps = 0,01%.
\ No newline at end of file
diff --git a/content/post/2021/defi-janus.md b/content/post/2021/defi-janus.md
new file mode 100644
index 00000000..1bf89043
--- /dev/null
+++ b/content/post/2021/defi-janus.md
@@ -0,0 +1,200 @@
+---
+title: "Janus: the new sworn enemy of DeFi protocols?"
+description: "Within decentralized finance, a veritable open-air laboratory, governance issues are complex and often contradictory. In this article, I examine the potential antagonisms between the various stakeholders of a given protocol."
+date: '2021-07-17T01:13:50.191Z'
+categories: [Thesis]
+tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Liquity, Curve Finance, CRV, MakerDAO, Convex, CVX, Yearn Finance, Uniswap]
+toc: true
+tocNum: true
+url: defi-janus
+image: /img/2021/defi-janus/defi-janus-cover.png
+difficulty: "intermediate"
+---
+
+Mythology is often used to illustrate DeFi. For example, the Canaanite god Moloch is often mentioned to symbolize coordination issues. Today, I will identify with you a new deity from the DeFi pantheon: Janus.
+
+In this article, we analyze the mechanisms of open governance of DeFi protocols that can lead to the emergence of a new kind of challenge for DeFi, a sworn enemy that I propose to you to embody in the Roman deity Janus.
+
+Much like the two-faced god, **a Janus protocol suffers from a deep ambivalence**: although it can be an unquestionable success in terms of use, it faces serious antagonisms between its various stakeholders who involve the sustainability of the protocol (users, holders, investors, team and extended community).
+
+To understand the Janus, you have to understand the inherent complexity of DeFi and how it can accommodate **consensus on decisions that are deleterious or not optimal**. Once the context is set, we can analyze three Janus, each in their own way: MakerDAO, Yearn Finance and Uniswap.
+
+## Complexity and governance issues: fertile ground for Janus
+
+The emergence of Janus protocols in the current situation is due to many factors that are difficult to prioritize. I have grouped them into three themes:
+
+### Governance and voting mechanisms
+
+The governance of DeFi protocols takes place **in an open and transparent** way, in several stages.
+
+During discussions on different media such as Discord, the community converges on different ideas that can lead to proposals. Proposals are formalized, usually on governance forums and amended before reaching **informal consensus**.
+
+
+**Signaling** mechanisms (Snapshot) make it possible to identify the most relevant proposals. They are then **submitted to the vote of the token holders** via the main governance mechanism.
+
+Most governance systems still operate on the logic of **1 token = 1 vote**, thus assigning the same weight to all token holders regardless of their attitude towards the project or level of commitment by compared to this one.
+
+
+
+_Measure the influence in the governance of DeFi protocols -[source](https://twitter.com/Lsquaredleland/status/1411031620748943360)_
+
+However, some protocols have succeeded in challenging this approach by adding a logic of time commitment: interacting with Curve's DAO requires engaging its CRVs for a period ranging from 1 to 4 years. A long-term commitment increases the effective voting power obtained (vCRV).
+
+Still, **participation is generally low**, even when delegation mechanisms are used.
+
+### Complexity of decisions
+
+To evaluate governance proposals for a decentralized finance protocol, one must have **an understanding of a whole set of basics relating to Ethereum**, blockchain and DeFi.
+
+From there, ideally, you need a thorough understanding of the protocol in question, as well as its **interactions with other protocols, synergies**, etc. We can also now add to this all the additional complexity linked to the multiplication of scalability solutions: sidechains and L2.[^mkrgov]
+
+In addition, the formulation of proposals on governance forums is generally quite technical, which **makes their understanding** difficult and opens the door to manipulation.
+
+Finally, governance suffers from a real mass effect: as protocols develop, the amount of information to digest to have an informed vote increases accordingly.
+
+A member of the MakerDAO governance forum estimated his weekly monitoring and participation work to be around 40 hours per week, steadily increasing:
+
+
+### Governance supports
+
+Although governance is open and transparent, **it still often relies on various proprietary services and therefore administered**, most often by the team itself. This causes serious problems.
+
+So governance-related discussions are usually done on Discord and the Governance Forum - both **mediums are usually moderated directly by the project team**.
+
+Additionally, the team may have **control over reporting mechanisms** like [Snapshot](https://snapshot.org/). The accumulation of all these limitations of decentralized governance systems can lead to situations observed recently, where token owners do not vote in their best interests.
+
+This quick tour of the current limits of governance systems was necessary to have the context for what follows. So let's see the three Janus that I spotted
+
+## Uniswap: 1M UNI here, 1M UNI there
+
+### Proposal 05 in summary
+
+A rushed vote which resulted in the signing of an almost blank check from 1M UNI for a group of legal directors of large decentralized projects responsible for deploying a DeFI lobbying strategy. Very few transparency mechanisms have been deployed and the influence of the UNI holder community on the funded group is limited.
+
+[Proposition 05 Uniswap Gouvernance - DeFi Education Fund](https://gov.uniswap.org/t/governance-proposal-005-defi-education-fund/12963)
+
+### Compression of governance
+
+In the case of Uniswap, it was all there. It all started with a rushed vote as members of the community had **many, many questions ignored**. The community is concerned about the lack of control over the funds allocated without any conditions. Chris Blec has gathered the main questions and concerns in [a letter](https://twitter.com/ChrisBlec/status/1409857319144394758 ) and managed to get some responses from the team in a [Twitter space](https://odysee.com/@ChrisBlec:8/chrisblec-june24-twitterspace:9?r=DeLsAYctGhcLFvkGBKYgE2tN17fUXA9u).
+
+In addition, **the organization that will receive the 1M UNI is made up of close members of the Uniswap team** and project investors such as a16z are also suspected of having been decisive in the adoption of the decision. The proposal also had direct support from the team.
+
+July 17 edit: quickly after receiving the funds, [the multisig sold half of the total balance (500 000 UNI)](https://thedefiant.io/sale-of-usdc-raises-concerns-regarding-newly-formed-defi-education-fund/) for USDC, currently sitting idle in the wallet - not even farming!
+
+Finally, the proposal wants to be broader than Uniswap since they are officially mandated to lobby DeFi, but we can ask the question of the vision of DeFi carried by such profiles.
+
+
+
+### Transparency? Maybe. Control? Hell no !
+
+After the reactions to the first iterations of the proposal, different mechanisms have been added to bring more transparency to the actions of the DeFi Education Fund. The team is also committed to implementing [FailSafe](https://github.com/withtally/safeguard) as soon as possible. This would allow the DAO (UNI holders) to be able to exercise a veto on the transactions carried out by the multisig.
+
+However at the present time **the effective control of the DAO remains limited**: the vote has passed and the 1M UNI are now allocated.
+
+This episode corresponds for me to the equivalent of an embezzlement of public funds, except that here the funds come from a DAO. The adventure and its adventures also shed light on the effective power exercised by the various stakeholders in the protocol.
+
+## MakerDAO: imbalance of competing interests
+
+The problem with Maker is more general and goes back much further. It is a common problem in DeFi of aligning the divergent interests of different participants. In addition, to respond quickly to the growing demand for DAI, **the multiplication of collateral (MCD update) has greatly impacted the trustlessness and effective decentralization of DAI.**
+
+Over 60% of DAI collateral is tokens that require some form of trust like USDC, wBTC or TUSD. The problem has been around for a long time and is not going to be resolved, if ever. I have already discussed this problem on this blog, I refer you to this article
+
+**[Exploring stable assets on Ethereum: approaches & endgame](https://tokenbrice.xyz/ethereum-stable-assets/)**
+
+### Abusive user fees
+
+Here, we will rather dig into the problem of excessive fees which illustrates **a classic case of rent maximization on customers thought to be captive**. [^makerclientelecaptive] DAI being a synthetic stablecoin struck directly by the user, its annual borrowing fees should not exceed 2-3% and this is still costly. [Liquity](http://liquity.org/), an alternative to Maker, charges 0.5% annually fees on borrowed LUSD.
+
+Prior to the last update, the main maker ETH vault (ETH-A) was charging 5.5% annual fees. It's now down to 3.5%, but the fees on the vault closest to Liquity's borrowing conditions (ETH-B, minimum collateralization = 130% // 110% on Liquity) remains at 9% annually, or **18 times more expensive than its alternative**.
+
+{{< notice info >}}
+Liquity is built with a governance minimization approach, unlike Maker, which may explain part of the huge gap observed between the fees charged by the two platforms.
+{{< /notice >}}
+
+### An annuity for MKR holders?
+
+MakerDAO fees are usually high, even though they've been at zero or close for short periods of time to stimulate demand. So **why does the DAO Maker systematically vote excessive fees**? The answer is as simple as 1 + 1 = 2:
+
+1. Fees taken from Maker vaults are used to buy MKR tokens in the markets and burn them, making the MKR token rarer.
+
+2. They are voted by Maker's DAO, in proportion to the MKR tokens owned.
+
+The very design of the protocol thus encourages MKR owners to vote for **extracting the maximum fees tolerated by users**, and not a penny less. Indeed, each base point [^bps] in additional costs translates into more MKR burned and therefore a priori a capital which is appreciated for the owners of the token.
+
+It may sound fabulous in terms of tokenomics because it optimizes for the best possible price on MKR (theoretically), but **it is done to the detriment of the users of the service** that the platform offers - and therefore goes against the long-term interest- term of the protocol.
+
+You should also keep in mind that unlike most protocols, Maker has never implemented a mechanism to turn its users into holders (liquidity mining). So I hardly see how Maker can be competitive with such a structure.
+
+## The ambiguous case of Yearn Finance
+
+Yearn is arguably the simplest and most straightforward example of a Janus. In barely a year, Yearn has become a **major DeFi protocol with $ 4B in assets deposited** and above all **delusional profitability** that the team likes to highlight.
+
+However, the story is not so rosy depending on your perspective. We are therefore going to study Yearn's situation from 3 angles: from a user's point of view, for another protocol and for the Yearn DAO itself.
+
+### Crazy fees for users
+
+Yearn's success comes at what cost? Again, essentially **users who are literally being robbed by Yearn** - fees are among the highest seen for a DeFi asset manager, yet complex:
+
+1. Yearn takes **2% annual management fee on the entire deposit**.
+2. Yearn also takes a 20% performance fee: 20% of all farmed assets go into cash. [^yearnfrais]
+
+The first charge is the most problematic since it means that Yearn's excessively greedy charges lead to vaults that… lose money!
+
+Indeed, any vault that does not achieve a minimum of 2% annual return on Yearn ends up in the red once the management fees are taken, without even taking into account the performance fees ...
+>
+### Protocol side: Yearn's hug of Death
+
+Yearn allows its users to farm different protocols like Curve by automatically managing the composition of their yields.
+
+This is practical for the user, but it also means that ** Yearn systematically sells all the tokens farmed ** by his vaults: we can therefore ask the question of the impact and relevance for the farmed protocol, which is therefore under selling pressure on its native token.
+
+The arrival of Convex has shown that a better structured protocol in terms of tokenomics and specific to Curve can offer a synergistic alternative where the returns are much higher, while avoiding the systematic sale of farmed tokens. I analyze the Convex "flywheel" in this article:**[🎡 DeFi Flywheel : engineering protocol to protocol synergies through tokens](https://tokenbrice.xyz/defi-flywheel/)**
+
+Thereby, it confronted Yearn with its contradictions and Yearn essentially capitulated by integrating Convex to optimize the performance of its vaults. This now means that **Yearn users pay a fee to Convex and help the protocol accumulate more VeCRV** and thus widen its gap with Yearn - checkmate for Yearn on Curve.
+
+
+
+_Overview of the veCRVs owned by the different DAOs - source[Dune Analytics / Banteg](https://duneanalytics.com/banteg/misc)_
+
+### Concerning Yearn DAO
+
+Despite this rather worrying fundamental situation since Yearn now offers **essentially non-competitive products** (all Curve vaults), Yearn presents itself as one of the undeniable successes of DeFi.
+
+Indeed, the team seems to measure the success of the protocol by the volume of fees collected by it. The indicator is obviously dangerous since with the management fees at 2% per year, any deposit in Yearn systematically pays fees even if little or no profit is made.
+
+Rather than taking the fees charged as an indicator and therefore a measure of success, the protocol could be optimized on the basis of the profits generated for depositors.
+
+Finally, and even if it is a more subjective topic, the communication around the project is muddled or even almost disturbing at times, for example [when Yearn is compared](https://thedefiant.io/yearn-revenues-projected-to-surpass-tradfis-fueled-by-thriving-community/) to traditional asset managers like WealthFront or BlackRock - I find that quite unbalanced since Yearn charges similar fees to these structures but operates in a much more dynamic market. In addition, are such companies really relevant models to have in DeFi?
+
+
+
+If Yearn compares to asset managers, it may be because the comparison with its DeFi peers is clear:
+
+
+In addition, where Convex works to allow cvxCRV holders to vote in decisions of the DAO Curve, Yearn is taking control over the voting power associated with CRVs deposited by its users on the yveCRV. The same approach can be observed with the airdrops allocated to VeCRV holders: Yearn grants them to buy CRVs and sponsor their yveCRV vault, while Convex makes them accessible to its depositors.
+
+## Are the Janus defensible?
+
+Now that we have set the scene with three Janus, the question of their defendability remains. All three have credible alternatives, often more recent and with more balanced tokenomics. So let's see how our Janus evolve in relation to these.
+
+In just two months of existence, Convex has already surpassed Yearn in terms of the total value of assets deposited. So far, Yearn's feedback has failed to turn the tide, and I think **only a major overhaul of the model will allow the protocol to remain competitive in the long run**.
+
+Nevertheless **the machine is launched**: Convex already has more than twice as many CRVs as Yearn and accumulates more quickly. And even though Yearn has lots of other protocols, it seems unlikely to me that he will ever be able to compete again on Curve.
+
+On the Marker side, more and more people are starting to point out the absurdity of the current situation on DAI, and the alternatives are gaining ground. In a few weeks and with only ETH as accepted collateral, Liquity has already attracted the equivalent of more than 40% of the total value deposited in MakerDAO:
+
+
+On Liquity, borrowing costs are much lower, clearer, and distributed directly to LQTY stakers. The service is thus more open and participatory than MakerDAO while being brutally more efficient. Here again, I think a major overhaul of MakerDAO would be necessary for the protocol to regain its relevance and competitiveness.
+
+Finally, for Uniswap, the competition is even fiercer. The protocol is evolving in the face of mature tokenomics like Curve, which has a protocol revenue sharing mechanism active for almost a year, while nothing is yet offered on UNI.
+
+On all three fronts, I think the situation will force Uniswap, Maker and Yearn to renew themselves. However, with the pace of the industry, the noose is tightening and their more open, efficient and synergistic alternatives are rapidly gaining ground.
+
+As the DAOs of the three protocols fell out of sync with their users, the latter reminded them where their interests lay in the simplest and most effective way we know of: with consistent capital movement. I can't wait to see what happens next!
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
+
+[^mkrgov]: Take a look for example [this pre-proposal taken at random from the MakerDAO governance forum](https://forum.makerdao.com/t/mip33-maker-stability-price-module/5943)
+[^yearnfrais]: [Yearn Finance documentation - Fee structure](https://docs.yearn.finance/yearn-finance/yvaults/overview#yvault-fee-structure)
+[^makerclientelecaptive]: DAI is still seen by many as a decentralized stablecoin that doesn't require trust, although it no longer does. There are still few stablecoins that rely only on trustless (ETH) and credibly decentralized (or on track) collateral: I know of two - Liquity's LUSD and Reflexer's RAI.
+[^bps]: Financial services fees are often measured in basis point (bps / basis point). A basis point is one hundredth of a percent: 1 bps = 0.01%.
\ No newline at end of file
diff --git a/content/posts/2021/dex-value-capture.fr.md b/content/post/2021/dex-value-capture.fr.md
similarity index 97%
rename from content/posts/2021/dex-value-capture.fr.md
rename to content/post/2021/dex-value-capture.fr.md
index 33289c2b..20db4f9f 100644
--- a/content/posts/2021/dex-value-capture.fr.md
+++ b/content/post/2021/dex-value-capture.fr.md
@@ -2,17 +2,17 @@
title: "Le volume appelle les frais : comment les principaux échanges décentralisés capturent-ils la valeur ?"
description: "Un regard sur le mécanisme de capture de valeur d'Uniswap, de Sushiswap et de Curve pour mieux comprendre comment la valeur s'accroît pour les détenteurs de leur tokens."
date: '2021-01-23T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Decentralized finance, DEX, Échanges décentralisés, Uniswap, Sushiswap, Curve, Curve Finance, Balancer, Bancor, CRV, UNI, SUSHI]
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized finance, DEX, Decentralized Exchange, Uniswap, Sushiswap, Curve, Balancer, Bancor]
toc: true
tocNum: false
url: dex-echanges-decentralisées-capture-valeur
+image: /img/2021/dex-value-capture/cover-fr.png
+difficulty: "intermediate"
---
J'ai partagé mon point de vue sur de nombreux protocoles DeFi sur ce blog, mais je me suis récemment rendu compte que je n'étais jamais revenu à l'essentiel : les DEX. C'est précisément ce que nous allons faire aujourd'hui, en abordant le sujet principalement en examinant les mécanismes de capture de la valeur.
-
-
Les DEX s'appuyant sur des AMM, comme Uniswap, Curve ou SushiSwap, ont tous connu cette année une croissance énorme, tant en termes de liquidités disponibles que de volume, tout comme les frais qu'ils ont perçus. Pour faire simple : **ces DEX sont maintenant les principaux collecteurs de frais qu'il y a en crypto, juste après le réseau Bitcoin et Ethereum eux-mêmes** :

@@ -142,10 +142,6 @@ Enfin, nous devons considérer une dernière dimension de Curve, car ce n'est pa
Grâce à l'augmentation des liquidités disponibles, Curve exploite maintenant les synergies de DeFi (avec Synthetix) pour proposer des swaps entre les différents actifs pegged disponibles sur Curve, tels que DAI -> wBTC ou USDT -> EURS.
-
-{{< tweet 1352219526495133696 >}}
-
-
C'est une innovation significative car cela ouvre des marchés actuellement peu ou pas couverts ailleurs (EURS) et permet de minimiser le slippage pour les grandes transactions.
Pour rester concis, les bondings curve d'Uniswap et de Sushiswap sont bien adaptées pour **supporter de nombreux swaps de petite ou moyenne taille, en particulier sur les grands pools** avec un faible glissement. Cependant, elles sont moins optimales pour les gros ordres car le slippage augmente proportionnellement à la part de liquidité du pool requise par la transaction.
@@ -197,3 +193,5 @@ Cet article a éveillé votre curiosité ? Vous êtes tombés au bon endroit —
[^1]: Vous trouverez plus d'informations dans la [Documentation Uniswap V2](https://uniswap.org/docs/v2/advanced-topics/fees/).
[^2]: Un concept [d'abord théorisé dans la lettre d'information Bankless]([https://newsletter.banklesshq.com/p/the-life-of-a-protocol-politician]) qui fait référence à une personne ou une entité spécialisée dans l'obtention d'une influence sur divers protocoles décentralisés et qui offre ensuite un accès sur le terrain à cette influence en tant que service.
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/posts/2021/dex-value-capture.md b/content/post/2021/dex-value-capture.md
similarity index 97%
rename from content/posts/2021/dex-value-capture.md
rename to content/post/2021/dex-value-capture.md
index 5ac60a22..bd5ff8df 100644
--- a/content/posts/2021/dex-value-capture.md
+++ b/content/post/2021/dex-value-capture.md
@@ -2,17 +2,17 @@
title: "Volume begets fees: how are the main decentralized exchanges capturing value?"
description: "A look at Uniswap's, Sushiswap's and Curve's value capture mechanism to better understand how value accrues for token holders."
date: '2021-01-23T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Decentralized finance, DEX, Decentralized Exchange, Uniswap, Sushiswap, Curve, Curve Finance, Balancer, Bancor, CRV, UNI, SUSHI]
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized finance, DEX, Decentralized Exchange, Uniswap, Sushiswap, Curve, Balancer, Bancor]
toc: true
tocNum: false
url: decentralized-exchange-value-capture
+image: /img/2021/dex-value-capture/cover-fr.png
+difficulty: "intermediate"
---
I've shared my perspective on many DeFi protocols on this blog, but recently I realized I've never gone back to the basics: the DEXs. That's precisely what we will do today, tackling the topic mostly by looking at value capture mechanisms.
-
-
AMM-based DEXs like Uniswap, Curve or SushiSwap all grew tremendously both in available liquidity and volume this year, and so did the fees they collected. To put it simply: **these DEXs now are the main fee-collectors there are in crypto, right after the Bitcoin and Ethereum network themselves**:

@@ -143,10 +143,6 @@ Finally, we have to consider one last dimension on Curve, as it's not just any D
Thanks to the growing available liquidity, the team is now harnessing DeFi synergies (with Synthetix) to offer swaps between the different pegged assets listed on Curve, such as DAI -> wBTC or USDT -> EURS.
-
-{{< tweet 1352219526495133696 >}}
-
-
It provides incredible value as it covers markets that are currently not broadly available elsewhere (EURS) and enables a minimization of slippage for large trades.
To stay concise, Uniswap and Sushiswap's bonding curves are well suited to **support many small or average swaps, especially on large pools** with a low slippage. However, they are less optimal for large orders as slippage increases in proportion to the share of liquidity of the pool required by the trade.
@@ -188,4 +184,6 @@ We're thrilled to meet 0xMaki to discuss the topic **in French** this Monday on
## Notes & References
[^1]: Find more info in the [Uniswap V2 Documentation](https://uniswap.org/docs/v2/advanced-topics/fees/).
-[^2]: A concept [first theorized in the Bankless newsletter]([https://newsletter.banklesshq.com/p/the-life-of-a-protocol-politician)referring to a person or entity specializing in gaining influence over diverse decentralized protocols & then offering on-the-tap access to this influence as a service.
\ No newline at end of file
+[^2]: A concept [first theorized in the Bankless newsletter]([https://newsletter.banklesshq.com/p/the-life-of-a-protocol-politician)referring to a person or entity specializing in gaining influence over diverse decentralized protocols & then offering on-the-tap access to this influence as a service.
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/post/2021/dffv2.fr.md b/content/post/2021/dffv2.fr.md
new file mode 100644
index 00000000..992322d3
--- /dev/null
+++ b/content/post/2021/dffv2.fr.md
@@ -0,0 +1,134 @@
+---
+title: "🇫🇷 Engagez-vous pour le futur de la France : les débuts de DeFi France v2"
+description: "La communauté DeFi France s'ouvre et devient encore plus horizontale : c'est à vous de jouer désormais !"
+date: '2021-04-27T01:53:50.191Z'
+categories: [Projects]
+tags: [DeFi France, Discord, Communauté]
+url: defi-france-version-2
+image: /img/2021/dffv2/dffv2-cover.png
+difficulty: "beginner"
+---
+
+L'heure est venue pour la prochaine ère de DeFi France ! Cet article explicite la vision ainsi que les différents éléments d'un nouveau système déjà disponible sur le Discord DeFi France. Y'a du blé à se faire avec le prochain chapitre de l'aventure DFF, mais pas seulement celui que vous croyez !
+
+Pendant longtemps, DeFi France a fonctionné de manière purement informelle sans système ou structure explicite et cela nous allait très bien. L'ambition première de DeFi France était de proposer **un lieu permettant aux passionnés de finance décentralisée de rencontrer et d'échanger avec les très nombreux acteurs francophones de l'espace**.
+
+En ce sens, je pense qu'on peut collectivement tous se féliciter : grâce aux discussions sur Telegram, mais aussi aux meetups, lives et aux nombreuses publications des membres de la communauté, **DeFi France est devenu la principale ressource en français pour découvrir la finance décentralisée** et réellement comprendre ses enjeux.
+
+Depuis son lancement, la communauté a grandi et a été à l'origine de très nombreuses initiatives, citons par exemple :
+- 🍕 Les débuts avec des meetups en présentiel de DeFi France et leur légendaires pizzas en provenance de l'Ether. [Toutes les vidéos sont sur YouTube](https://www.youtube.com/watch?v=6rgt-bygKNo&list=PLreQl_vxgtPhhwkYbTHiec_dyG9XqKtT9&index=1).
+- 📰 Les différents medias de la communauté : la version française de Bankless - [BanklessFR](https://banklessfr.substack.com/), puis [TheDailyGweiFR](https://thedailygweifr.substack.com/) et [MetaversalFR](https://twitter.com/metaversalfr) pour les NFTs, ou encore ce blog !
+- 🎥 [Mon lancement sur Twitch](https://twitch.tv/tokenbrice), merci à vous pour votre soutien !
+- 💸 Une campagne de soutien aux projets internationaux sur Gitcoin grâce aux donations des membres de la communauté : plus de 15 000 DAI ont été collectés pour supporter les producteurs de contenus explicatifs de la DeFi en langue non-anglaise.
+
+---
+
+## DeFi France, version 2
+
+La croissance a été rapide l'année dernière et l'esprit organique des débuts devient de plus en plus dur à maintenir avec l'arrivée de très nombreuses nouvelles personnes. Bien qu'on soit ravi de voir l’engouement et le groupe grandir, de nombreuses personnes ont manifesté leur inquiétude face à la baisse de qualité des échanges.
+
+Pour notre prochaine étape, nous cherchions donc une solution qui permettrait de **maintenir l'esprit d'échange convivial et constructif des premiers jours**, même avec 2500 personnes (aujourd'hui) ou 10 000 dans la communauté : DeFi France v2.
+
+C'est **[Nolan](https://twitter.com/NolanVanmoortel)**, un membre de la communauté DeFi France qui a supervisé ce projet. Il a envisagé, conçu, proposé et implémenté un système qui est probablement une première mondiale : il permet de **récompenser les contributeurs du Discord de manière équitable et ouverte**. Tout se passe directement sur le Discord.
+
+{{< notice tip >}}
+
+Si vous n'y êtes pas encore, vous pouvez **[rejoindre le Discord en suivant ce lien](https://discord.gg/3bWZcK2)**.
+
+{{< /notice >}}
+
+L'enjeu est de reconnaître à leur juste valeur les différentes contributions des membres existants ainsi que de susciter une émulation pour que d'autres fassent de même. Pour cela rien de plus simple : lorsque vous répondez à des messages ou réagissez avec des emojis, l'auteur reçoit désormais un peu de 🌾 Blé.
+
+Ainsi, **le 🌾 Blé s'obtient grâce aux autres** : il est impossible de générer du 🌾 Blé par vous-même, mais les autres peuvent vous en donner avec des messages comme ça par exemple :
+
+
+
+---
+
+## Bonjour Déméter, reine du 🌾 Blé
+
+
+
+Alors concrètement comment ça se passe ? Désormais quand vous rejoignez le Discord, **Déméter notre gentil bot vous accueille**. Il suffit de réagir avec l'emoji-logo de DeFi France (`:dff:`) pour qu'elle puisse vous joindre en message privé afin de vous expliquer le fonctionnement du serveur.
+
+Elle vous demandera également une adresse Ethereum qui sera celle utilisée pour recevoir la 🥖 TGC, le token de gouvernance de DeFi France. Mais avant ça, revenons au Blé !
+
+{{< notice info >}}
+
+Cette adresse sera publique donc assurez-vous d'en choisir une qui convient à la situation.
+
+{{< /notice >}}
+
+### 🌾 Blé et Tradition Graine Céréales (🥖 TGC)
+
+**Le 🌾 Blé est un système de point propre à votre compte Discord et non-transférable** : la seule manière d'obtenir du 🌾 Blé c'est de contribuer ! Notez également que vous gagnez un peu de 🌾 Blé en réagissant aux messages pour aider à faire émerger les plus pertinents : même les stalkers auront le droit à leur petite récolte !
+
+**Chaque semaine, c'est la moisson de Déméter : elle vous distribuera un token, la Tradition Graine Céréales (🥖 TGC) proportionnellement à la quantité de 🌾 Blé que vous avez accumulé pendant la semaine**. Le token TGC sera échangeable et transférable et sera le token de gouvernance de DeFi France.
+
+{{< notice note >}}
+
+**Pour l'instant, il n'y pas encore de 🥖 TGC, seulement du 🌾 Blé !**
+
+La TGC arrivera d'ici quelques mois pour s'assurer d'une distribution la plus décentralisée possible. Cela permettra également de vous proposer le token TGC et les mécanismes associés directement sur un L2 afin qu'ils soient accessibles à tous.
+
+{{< /notice >}}
+
+---
+
+## Plus qu'une histoire de 🌾 Blé
+
+Outre le 🌾 Blé, ce système s'accompagne d'une **réorganisation des canaux du Discord** ainsi qu'une **ouverture de la modération**. Réagir avec l'émoji menottes (`:prison:`) sur un message permet de le signaler comme nuisible. Si assez de personnes réagissent, un vote démarre dans le canal `#tribunal` pour sanctionner l'auteur de ce message délétère.
+
+D'autres nouveaux canaux ont également fait leur apparition, comme le `#panthéon`, pour vous permettre de **remercier et féliciter les membres à l'origine d'une contribution particulièrement utile**. Assurez-vous de les citer (@) dans le message pour que ce soit pris en compte dans la distribution de 🌾 Blé.
+
+{{< notice note >}}
+
+Par défaut toutes les emojis ont le même poids, mais certaines emojis ont des fonction spécifiques comme 📜 pour les propositions.
+
+Deux emojis n'ont pas de fonction spécifique mais un point légèrement plus important que les autres vis-à-vis de la distribution de 🌾 Blé, il s'agit de :
+- Notre bien aimé logo, le Coq Intergalactique de DeFi France (`:dff`)
+- La légendaire DeLorean 88MPH (`:delo:`)
+
+Certains salons bénéficient également d'une pondération plus importante comme le `#panthéon` ou encore `#présentation`.
+
+{{< /notice >}}
+
+Nous avons également mis en place trois nouveaux canaux pour s'impliquer plus aisément dans les décisions de la communauté :
+
+1. L'`#agora` permet de **discuter de propositions d'amélioration de DeFi France** avec les autres membres. Si une discussion atteint un consensus en la forme d'une proposition, il est possible de réagir avec l'émoji parchemin (📜 = `:scroll:`). Si suffisamment de personnes font de mêmes, un vote commencera dans #proposition.
+2. Ainsi `#proposition` est le canal qui permet de **voter sur les propositions** établies par la communauté dans l'`#agora`.
+3. Enfin, sur `#job`, vous pouvez signaler que vous souhaitez contribuer ainsi que vos expertises (graphisme, écriture, Solidity, etc.). Les membres de la communauté impliqués dans un projet interne utiliserons également ce canal s'ils ont besoin de nouveaux contributeurs ou compétences spécifiques pour leur projet.
+
+{{< notice tip >}}
+
+Si quelque chose n'est pas clair pour vous, **n'hésitez pas à consulter le `#manuel` sur Discord qui vous explique à peu près tout**. Si malgré tout votre problème persiste, le `#sav` est à votre disposition pour vous aider.
+
+{{< /notice >}}
+
+Nous sommes ravis de vous accueillir dans ce nouvel environnement : à vous désormais de vous l'approprier ! Il s'agit du premier projet interne à DeFi France à voir le jour, mais de nombreux autres sont en développement, comme le site de DeFi France que nous avons hâte d'introduire ainsi qu'un potentiel jeu communautaire s'appuyant sur des NFTs !
+
+Pour en apprendre plus sur ce nouveau système pour notre Discord, on vous invite chaudement à lire le `#manuel`.
+
+📅 On vous retrouvera également ce **Mercredi (28 Avril) à 21h sur le Discord DeFi France** pour un **live audio avec [Nolan](https://twitter.com/NolanVanmoortel)** pour expliquer cette nouvelle étape.
+
+-> [Le replay est ici ](https://www.youtube.com/watch?v=fMpYQYXBrfA)
+
+---
+
+## 🏗 Le mot de Nolan, l'architecte
+
+Comme je vous le disais plus haut, ce projet a été imaginé, porté et délivré par [Nolan](https://twitter.com/NolanVanmoortel), je tenais donc à lui laisser le mot de la fin pour qu'il puisse partager directement sa vision avec vous :
+
+> Si tu veux construire une DAO, ne rassemble pas tes hommes et femmes pour leur donner des ordres, pour expliquer chaque détail, pour leur dire où trouver chaque chose...
+
+> Si tu veux construire une DAO, fais naître dans le coeur de tes hommes et femmes le désir d'un avenir commun.
+
+_Votez Nolan en 2022 pour un avenir horizontal, radieux et décentralisé ! Sinon vous pouvez vous contenter de lui dire merci dans le `#panthéon`._
+
+Merci à vous tous qui avez contribué à DeFi France ! C'est une affaire collective depuis le premier jour et avec cette nouvelle version nous sommes ravis d'ouvrir encore plus la communauté aux participations directes des membres.
+
+**[Rejoignez le Discord pour participer à la discussion et commencer à gagner du 🌾 Blé](https://discord.gg/3bWZcK2)**.
+
+---
+
+*🙏 Un grand merci à HHK, Charles, Thomas, Erwan & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en anglais.*
\ No newline at end of file
diff --git a/content/posts/2021/firp-apwine.fr.md b/content/post/2021/firp-apwine.fr.md
similarity index 92%
rename from content/posts/2021/firp-apwine.fr.md
rename to content/post/2021/firp-apwine.fr.md
index 1d17e5fa..0788971f 100644
--- a/content/posts/2021/firp-apwine.fr.md
+++ b/content/post/2021/firp-apwine.fr.md
@@ -2,11 +2,13 @@
title: "🍷 En oenologie comme en DeFi, la patience paye : introduction aux FIRps avec APWine.FI"
description: "Une introduction aux protocoles de fixation de rendements (FIRP) au travers du prisme d'APWine pour mieux comprendre ce qu'ils permettent de faire et apportent à DeFi"
date: '2021-02-11T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Finance Décentralisée, DEX, Marchés monétaires, Aave, Compound, ApWine, 88MPH, Fixed Interest Rate Protocol, FIRP]
+categories: [Yield]
+tags: [DeFi, Ethereum, Decentralized finance, DEX, Money Markets, Aave, Compound, ApWine, 88MPH, Fixed Interest Rate Protocol, FIRP]
toc: true
tocNum: true
url: fixed-interest-rate-protocol-firp-apwine
+image: /img/2021/firp-apwine/pac-man.png
+difficulty: "intermediate"
---
@@ -18,8 +20,6 @@ Notre sujet d'aujourd'hui frappe au cœur de cette tendance, avec une solution o
## Marché monétaire = PacMan
-
-
Le tranching (sérialisation de risque), l'assurance et les FIRP agissent tous les trois comme des **couches d'abstraction construites sur un marché monétaire** pour fournir des fonctionnalités supplémentaires :
1. **🔪 Tranching** ➡ meilleure séparation des différents types de risques
2. **🛡 Assurance** ➡ couverture contre les défaillances techniques (& plus !)
@@ -45,7 +45,7 @@ Consultez le [rapport complet ici](https://assets.coingecko.com/reports/2020-Yea
C'est précisément là que les FIRP ont une chance de briller : **parce qu'ils rendent l'intérêt prévisible, les FIRP contribuent à promouvoir une attitude plus responsable** pour l'ensemble de l'espace - en facilitant l'utilisation de toutes les méta-structures désormais disponibles pour protéger les dépôts sur les marchés monétaires ou les gestionnaires d'actifs DeFi.
-Cet article traite uniquement des protocoles de taux d'intérêt fixes. Pour une perspective plus large de la gestion des risques liés aux dépôts des DeFi, **[lire mon introduction sur l'assurance, le tranching et les FIRP]({{< relref path="/content/posts/2021/risk-tranching.fr.md" >}})**. Nous y avons abordé la manière dont l'assurance, la sérialisation et les taux d'intérêt fixes pourraient éventuellement être intégrés dans les marchés monétaires, ce qui permettrait de **[envisager des stablecoins porteurs d'intérêts "sans risque"]({{< relref path="/content/posts/2021/risk-tranching.fr.md" >}})**.
+Cet article traite uniquement des protocoles de taux d'intérêt fixes. Pour une perspective plus large de la gestion des risques liés aux dépôts des DeFi, **[lire mon introduction sur l'assurance, le tranching et les FIRP](https://tokenbrice.xyz/fr/tranching-risque-defi/)**. Nous y avons abordé la manière dont l'assurance, la sérialisation et les taux d'intérêt fixes pourraient éventuellement être intégrés dans les marchés monétaires, ce qui permettrait de **[envisager des stablecoins porteurs d'intérêts "sans risque"](https://tokenbrice.xyz/fr/tranching-risque-defi/)**.
Cet article suppose une compréhension minimale du sujet. Si quelque chose n'est toujours pas clair, veuillez vous référer à l'article précédent ☝
@@ -125,4 +125,6 @@ Cet article a éveillé votre curiosité ? Vous êtes tombés au bon endroit —
4. **[🎥 La chaine Youtube DeFi France](https://www.youtube.com/c/DeFiFrance)** pour approfondir avec des lives pointus.
5. & Bien sûr [ce blog](/fr/) qui creuse des sujets spécifiques liés à la pratique de la DeFi.
-{{< /notice >}}
\ No newline at end of file
+{{< /notice >}}
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/posts/2021/firp-apwine.md b/content/post/2021/firp-apwine.md
similarity index 93%
rename from content/posts/2021/firp-apwine.md
rename to content/post/2021/firp-apwine.md
index 54f7dc73..a42bf43c 100644
--- a/content/posts/2021/firp-apwine.md
+++ b/content/post/2021/firp-apwine.md
@@ -2,11 +2,13 @@
title: "🍷 Yields are like fine wines, the secret lies in the brewing process"
description: "An introduction to Fixed Interest Rate Protocols (FIRPs) through the lense of APWine to better understand what they enable and bring to DeFi."
date: '2021-02-11T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
+categories: [Yield]
tags: [DeFi, Ethereum, Decentralized finance, DEX, Money Markets, Aave, Compound, ApWine, 88MPH, Fixed Interest Rate Protocol, FIRP]
+difficulty: "intermediate"
toc: true
tocNum: true
url: fixed-interest-rate-protocol-firp-apwine
+image: /img/2021/firp-apwine/pac-man.png
---
Yields are like fine wines, the secret lies in the brewing process. As DeFi is developing faster than ever, with now more than $ 50 billion of total value locked across all protocols, **the yield offering is diversifying**.
@@ -17,8 +19,6 @@ Our topic today strikes at the heart of this trend, with a solution offering a p
## Money Market = PacMan
-
-
Tranching, insurance, and FIRPs are essentially like **abstraction-layers built on top of a money market** to provide additional features:
1. **🔪 Tranching** ➡ better separation of the different type of risks
2. **🛡 Insurance** ➡ coverage against technical failures (& more!)
@@ -44,7 +44,7 @@ Check the [full report here](https://assets.coingecko.com/reports/2020-Year-End-
This is precisely where FIRPs get a chance to shine: **since they make the interest predictable, FIRPs help promote a more responsible attitude** for the whole space - by making it easier to use all the meta-structure now available to protect deposits on money markets or DeFi asset managers.
-This article addresses fixed interest rate protocols only. For a broader perspective on risk management for DeFi deposits, **[read my introduction piece touching on insurance, tranching and FIRPs]({{< relref path="/content/posts/2021/risk-tranching.md" >}})**. In there, we addressed how insurance, tranching, and fixed interest might eventually be integrated natively into money-markets, enabling to **[envision "risk-free" interest bearing stablecoins]({{< relref path="/content/posts/2021/risk-tranching.md" >}})**.
+This article addresses fixed interest rate protocols only. For a broader perspective on risk management for DeFi deposits, **[read my introduction piece touching on insurance, tranching and FIRPs](https://tokenbrice.xyz/risk-tranching-defi/)**. In there, we addressed how insurance, tranching, and fixed interest might eventually be integrated natively into money-markets, enabling to **[envision "risk-free" interest bearing stablecoins](https://tokenbrice.xyz/risk-tranching-defi/)**.
From now on, this article assume a minimal understanding of the topic. If something is still unclear, please refer to the previous article ☝
diff --git a/content/post/2021/guide-defian.fr.md b/content/post/2021/guide-defian.fr.md
new file mode 100644
index 00000000..48884834
--- /dev/null
+++ b/content/post/2021/guide-defian.fr.md
@@ -0,0 +1,174 @@
+---
+title: "🐥 Le guide du DeFian : prise en main des outils communautaires DeFi France"
+description: "DeFi France est la communauté francophone la plus dynamique pour découvrir la finance décentralisée. Cet article détaille le système d'incitation mis en place sur le Discord et comment y participer."
+date: '2021-05-17T01:53:50.191Z'
+categories: [Projects]
+tags: [DeFi France, Discord]
+url: guide-defian
+toc: true
+tocNum: true
+image: /img/2021/guide-defian/guide-defian-cover.png
+difficulty: "beginner"
+---
+
+La finance décentralisée peut être intimidante pour ceux qui la découvrent tout juste. Même les personnes ayant déjà utilisé des outils financiers classiques peuvent être dépassées face à la multiplicité des options offertes par la DeFi.
+
+Pour réellement comprendre la finance décentralisée, il faut être en mesure de déconstruire des mythes encore bien ancrés et surtout découvrir et manipuler de nouveaux modèles mentaux. Néanmoins, remettre en cause des notions fondamentales en matière d'économie, d'organisation sociale, de collaboration et bien plus encore est une tâche ardue : **et si on le faisait ensemble** ?
+
+Le rythme de l'industrie est tel qu'il est important de disposer des bonnes informations pour prendre des décisions conséquentes. C'est ce que nous efforçons de développer à **DeFi France, la première communauté francophone pour échanger sur le sujet**.
+
+---
+
+## 🐓 DFFv2 : Le coq de la DeFiance
+
+Depuis sa création, DeFi France a pour ambition de rendre cet espace plus accessible en proposant une discussion ainsi que des contenus de haute qualité en français. Outre les 10 rendez-vous mensuels organisés avant le covid, plusieurs espaces se sont structurés :
+
+1. Un espace d'échange avec les experts francophones : le groupe initialement sur Telegram, désormais sur Discord : [👉 rejoignez-nous !](https://discord.gg/3bWZcK2)
+2. Différentes initiatives pour proposer des contenus de qualité en français sur le sujet : [BanklessFR](https://banklessfr.substack.com/), [TheDailyGweiFR](https://thedailygweifr.substack.com/), ce blog, [la chaine youtube DeFi France](https://youtube.com/c/defifrance), etc.
+
+Avec la communauté DeFi France nous avons mis en place un **système unique sur notre serveur (DFF V2) Discord pour reconnaître et mettre en avant les contributions les plus utiles: le 🌾 blé.**
+
+Les mécanismes du système DFF v2 sont simples mais permettent **le contrôle direct par la communauté** à plusieurs niveaux : propositions, curation des messages ou même les sanctions potentielles. Ce système est implémenté directement sur le Discord, tous les membres peuvent y interagir avec `@Déméter` notre gentille déesse-bot reine du 🌾 blé.
+
+Je vous propose donc un guide clair pour en comprendre ses enjeux et son fonctionnement. Pour faciliter sa compréhension, j'y rajouterai autant que possible des **illustrations** et procéderai à des **mises à jour documentées** après des changements majeurs.
+
+---
+
+## Devenir un membre de la communauté DeFi France
+
+Avant de pouvoir participer à la communauté et gagner du 🌾 blé, il faut se valider et enregistrer une adresse ethereum. Voici la procédure à suivre :
+
+1. **[👉 Rejoindre le serveur Discord DeFi France](https://discord.gg/3bWZcK2)**
+2. `@Server Captcha Bot` te contactera en DM pour envoyer un captcha à valider, te permettant de devenir `@🥚Humain.e` et passer à l'étape suivante.
+3. De nouveaux canaux sont désormais disponibles dont #🐣-bienvenue. Il faut réagir avec l'émoji logo DeFi France (:dff:) au message de `@Déméter`.
+4. Elle t'envoie le règlement à valider en répondant !ok pour devenir `@🐣Invité.e`.
+5. Toujours en DM avec `@Déméter`, tu peux désormais enregistrer ton wallet pour devenir `@🐤Membre DeFi France` et pouvoir participer à la gouvernance.
+
+{{< notice tip >}}
+Si tu ne reçois pas les DM de `@Serveur Captcha Bot` ou `@Déméter`, vérifie les réglages vie-privée Discord. Pour que les bots puissent te contacter, il faut permettre les DMs envoyés par membres du serveur DeFi France.
+{{< /notice >}}
+
+Tu es désormais `@🐤Membre DeFi France` et éligible pour les moissons en 🌾 blé. Voyons donc comment le système fonctionne.
+
+---
+
+## Incitation : les bases du 🌾 blé
+
+Le 🌾 blé est un système interne de points non-transférables pour reconnaître les contributions des différents membres de la communauté. Pour gagner du 🌾 blé, il faut impérativement interagir : **le 🌾 blé ça ne se gagne pas, ça se donne !**
+
+En effet, le 🌾 blé est majoritairement alloué lors de réponses ou réactions (émojis) à des messages. Ainsi, les membres qui stimulent la discussion et la nourrissent sont récompensés. Certaines emojis (DeLo et logo DFF) ont un poids légèrement supérieur dans la distribution : elles permettent de mettre un peu plus de poids dans vos réactions pour remercier une contribution particulièrement appréciée par exemple.
+
+Pour bien comprendre le système du 🌾 blé, voici l'anatomie d'un message publié dans un canal spécifique du Discord, le `🏅-panthéon` qui permet de reconnaître les contributions pertinentes des membres :
+
+
+
+Le 🌾 blé distribué est **pondéré en fonction de la source** : si un grand farmeur de blé réagit à un message, cela a plus d'impact qu'un membre récent avec encore peu de 🌾 blé. La distribution de 🌾 blé se fait chaque semaine, et les membres peuvent voir leur récolte dans le canal oracle.
+
+
+
+**Le 🌾 blé sert de mécanisme de pondération pour tous les votes internes**. Le pouvoir de gouvernance est ainsi progressivement distribué aux contributeurs les plus actifs et pertinents.
+
+### Pondération en blé par canal
+
+**Tous les canaux n'ont pas la même pondération en blé** : certains sont favorisés dans le calcul pour reconnaître les contributions qui y sont partagées plus justement. Les membres peuvent voter pour changer cette pondération, comme cela a déjà été fait :
+
+| CANAL | PONDÉRATION 🌾 |
+| ------------------------- | -------------------- |
+| #🔒-admin-blabla | x0 (intialement 2.5) |
+| #📢-annonce | x10 |
+| #🐥-débutants | x1.5 |
+| #🌌-defi | x1 |
+| #🚜-stratégies | x2.5 |
+| #🙍-présentation | x5 |
+| #🎨-art-digital | x1 |
+| #🤑-spéculation | x0.5 |
+| #🍹-bar | x0.7 |
+| #🔨-développement-sécurité | x1.5 |
+| #🤹-meme-defi | x2.5 |
+| #💼-job | x5 |
+| #🏟-agora | x2.5 |
+| #🏅-panthéon | x50 |
+
+---
+
+## Les emojis-réactions
+
+Différentes **décisions communautaires peuvent être initiées en réagissant avec des emojis spécifiques à un message**. Si elles rencontrent un seuil de support fixé à 10 % (pondération blé), elles déclenchent différentes actions.
+
+### Liste des réactions
+
+Avant de détailler les principales emojis-réactions, voici un tableau qui récapitule les principales emojis-actions :
+
+| VISUEL | EMOJI | EFFET | CONDITIONS |
+| ------ | ----------------- | -------------------------------------------------------- | ------------ |
+|  | `:hs_stratégies:` | Déplace le message vers le canal correspondant à l'émoji (une emoji spécifique par canal de destination) | Quorum 10% 🌾 |
+|  | `:floopy_disk:` | Sauvegarde le message dans le canal `#💾-best-of` | Quorum 10% 🌾 |
+|  | `:scroll:` | Permet de soumettre une proposition au vote (seulement dans `#🏟-agora`) | Quorum 10% 🌾 pour commencer le vote |
+|  | `:prison:` | Supprime le message + potentielle sanction si la communauté le décide dans le `#⚖-tribunal` | Quorum 10% 🌾 |
+|  | `:dff:` | Bonus pondération blé | - |
+|  | `:delo:` | Bonus pondération blé | - |
+
+
+### La curation des messages : hors-sujet et 💾 sauvegarde
+
+Deux familles d'emojis-actions permettent à la communauté d'organiser et de prioriser directement les messages :
+
+1. Tout d'abord, les différents emojis hors-sujet permettent de rediriger un message d'un canal à l'autre.
+2. L'emoji `💾:floppy_disk:` permet quant à elle la sauvegarde des messages les plus pertinents.
+
+Voyons comment ces fonctions sont utilisées concrètement :
+
+
+
+### `#🏟-agora` : la gouvernance communautaire
+
+**Les emojis-actions permettent également de s'impliquer directement dans la gouvernance** de DeFi France. Sur un canal spécifique, l'`#🏟-agora`, les membres peuvent discuter de leurs propositions d'améliorations. Lorsqu'ils atteignent un consensus sur une proposition, ils peuvent la formaliser afin de la soumettre à l'`#🏟-agora`.
+
+Notre scribe Disiaque a même proposé une formalisation du processus pour structurer les échanges et le chemin jusqu'au vote :
+
+
+
+Tout comme pour le hors-sujet ou la fonction sauvegarde, **si un minimum de 10% du blé réagit avec l'emoji parchemin 📜**, alors la proposition est soumise au vote de la communauté dans le canal `#📜-proposition`.
+
+
+
+**Le vote est pondéré par le blé** et les membres ont trois jours pour se prononcer. L'implémentation effective se fait dans un délai raisonnable suivant la conclusion du vote, en fonction de la complexité technique de la proposition.
+
+### Les sanctions : `#⚖-tribunal` et prison
+
+Tout comme la curation et la gouvernance se font communautairement, sur DeFi France les sanctions se décident également ensemble. Cela fonctionne comme pour les propositions : les membres peuvent réagir avec l'emoji :prison: sur une contribution dérangeante.
+
+
+
+Si assez de gens réagissent, un vote débutera dans le `#⚖-tribunal` pour décider de la sanction. La récolte de blé de l'utilisateur peut être saisie sur une semaine et d'autres sanctions sont possibles. Jusqu'à présent aucune sanction n'a été prononcée.
+
+---
+
+## Le début de votre aventure
+
+Si tu as lu ce guide jusqu'à présent, merci pour ta patience. Te voilà presque adepte. Il te reste à découvrir les derniers canaux spéciaux et surtout à t'impliquer !
+
+Tout d'abord, je t'invite chaudement à visiter le canal stratégies : tu y retrouveras les plus pertinentes dans les messages épinglés. Le canal `#💾-best-of` permet également de suivre aisément les contributions les plus impactantes.
+
+D'autres canaux spécifiques sont également réservés aux membres DeFi France dans la section "votre-histoire" :
+
+Le canal `#🔮-oracle` permet de suivre votre allocation en 🌾 blé et **participer au système interne de validation (vouch) sur Proof of Humanity**.
+
+**La communauté DFF joue également communautairement à un jeu de rôle NFT** - Legends of Cryptonia. Les membres peuvent voter pour décider les prochaines étapes de l'aventure dans `#🎲-cryptonia-dff`.
+
+Une fonction permet également de tirer au sort des gagnants parmi ceux qui réagissent à un message, avec ou sans pondération en 🌾 blé. Elle a déjà été utilisée pour faire **gagner 2 NFT Cryptonia**.
+
+---
+
+Tu as désormais toutes les informations utiles pour découvrir, débuter et t'épanouir au sein de la communauté DeFi France : il reste à en profiter !
+
+Pour se quitter, voici quelques contenus afin d’aller plus loin dans ta découverte de DeFi France :
+
+* Suivre les décisions communautaires : [📜fil de la gouvernance DeFi France](https://tokenbrice.xyz/fr/categories/communaut%C3%A9-defi-france/).
+* Comprendre les bases : [l'article de présentation DFF v2](https://tokenbrice.xyz/fr/defi-france-version-2/)
+* Retour au source : [📹 Playlist replay des 10 meetups organisés par DeFi France](https://www.youtube.com/watch?v=6rgt-bygKNo&list=PLreQl_vxgtPhhwkYbTHiec_dyG9XqKtT9&index=11)
+* Comprendre la vision : vidéo d'introduction avec Nolan, l'architecte du système 👇
+
+{{< youtube fMpYQYXBrfA >}}
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de cet article._
diff --git a/content/post/2021/liquity-protocol.fr.md b/content/post/2021/liquity-protocol.fr.md
new file mode 100644
index 00000000..28b27bf0
--- /dev/null
+++ b/content/post/2021/liquity-protocol.fr.md
@@ -0,0 +1,272 @@
+---
+title: "⚖️ Liquity : un service d'emprunt inarrêtable, efficace et innovant"
+description: "Liquity est le premier service d'emprunt qui opère sans avoir besoin de gouvernance, tout en étant peu coûteux et très efficace. J'explique le protocol pour comprendre comment il innove et ce qu'il apporte à la DeFi."
+date: '2021-11-30T01:13:50.191Z'
+categories: [Stablecoin, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Liquity, LUSD, LQTY]
+toc: true
+tocNum: false
+url: liquity-protocol
+image: /img/2021/liquity-protocol/cover.png
+difficulty: "intermediate"
+---
+
+[Liquity](https://www.defiscan.info/protocols/liquity/ethereum) est un protocole encore unique en son genre : il permet l'emprunt sur ETH et le mint d'un stablecoin (LUSD) sans pour autant nécessiter de gouvernance ce qui le rend "inarrêtable".
+
+Le terme n’est pas toujours bien compris, alors explicitons : les contrats nécessaires à l'existence de Liquity et du LUSD ont été déployés et comme ils n’ont pas de fonctions administratives, **rien ne peut les arrêter tant que le réseau Ethereum se synchronise**.
+
+Si cela ne suffit pas à exciter votre curiosité, la bonne nouvelle c'est que pour arriver à un tel résultat, Liquity met en œuvre plusieurs nouvelles idées vraiment pertinentes. En effet, outre sa résilience, Liquity est aussi **le protocole le moins coûteux** pour des emprunts long termes sur ETH et également **le plus permissif en levier**, hors “recovery mode”.
+
+Le but de cet article est donc de présenter Liquity tout en explicitant plusieurs dimensions critiques pour tout service de prêt / marché monétaire en DeFi.
+
+---
+
+## FONCTIONNEMENT DU PROTOCOLE
+
+Je vous propose un tour exhaustif du protocole pour en comprendre les enjeux et contributions apportées à la DeFi. Idéalement, il s'agirait de comprendre toute la dynamique. Je réalise cependant que mes explications peuvent être parfois denses, je vous les propose donc par niveau de complexité :
+
+
+### 🏗 Les fondamentaux de Liquity
+
+À un haut niveau, Liquity fonctionne dans une logique similaire à Maker: les utilisateurs créent des "Troves" où ils peuvent déposer des ETH afin d'emprunter des stablecoins, les LUSD, directement au protocole.
+
+
+#### Marché monétaire ou service d'emprunt ?
+
+Liquity tout comme Maker sont des services d'emprunt mais pas des marchés monétaires. La différence ? Qui est-ce qui vous prête ?
+1. Soit le protocole directement (service d’emprunt),
+2. Ou alors d'autres utilisateurs via un modèle de pooling comme Aave ou Compound (marché monétaire).
+
+La différence est extrêmement importante au niveau de la compétitivité du protocole : **il est quasiment impossible, même théoriquement, d'envisager un marché monétaire proposant des coûts d'emprunts sur les stablecoins bas (<3 % annuel) de manière durable**.
+
+En effet, les marchés monétaires doivent offrir un rendement attractif à leurs déposants en stablecoins, qui disposent de très nombreuses alternatives pour produire du rendement. Ainsi, **si l'efficacité est un objectif essentiel, le modèle du service d'emprunt qui ne nécessite pas de dépôts d’autres utilisateurs est foncièrement plus efficace** - l'utilisateur emprunte directement au protocole à un coût plus faible.
+
+Enfin pour conclure, éprouvons la théorie à la dure absurdité de la pratique : ces considérations sont valables pour analyser le design d'un marché monétaire / service d'emprunt. Il existe **des services d'emprunts (à priori donc très efficaces) qui arrivent malgré tout à être coûteux pour les emprunteurs, comme MakerDAO**. Les raisons sont diverses, mais le fait que la DAO décide encore les frais du protocole (de manière potentiellement totalement arbitraire) me semble l'une des principales.
+
+
+#### Emprunter avec Liquity
+
+Du point de vue d'un utilisateur potentiel, Liquity fonctionne donc comme une alternative à Maker ou autre : l'utilisateur arrive avec des ETH qu'il dépose dans son trove pour frapper le montant de LUSD désiré.
+
+Néanmoins, le parallèle s'arrête ici car bien qu'à haut niveau le processus soit similaire, la logique sous-jacente est totalement différente.
+
+
+##### Gestion des frais
+
+Tout d'abord, le nerf de la guerre : les frais d'emprunt. À ce sujet et outre des coûts absolus d'emprunt très bas, Liquity a le mérite d'apporter de **la prédictibilité et de la clarté.** En effet, là où Maker, Aave et Compound par exemple pratiquent un taux annuel variable (via gouvernance pour Maker, conditions du marché pour Aave/Compound), **chez Liquity le taux est fixé et annoncé clairement à l'emprunt**.
+
+En outre, chez Liquity les frais se paient en une fois, lors de la mise en place de l'emprunt : ce sont les “**initiation fees”, par défaut à 0.5%. Ce sont les seul frais que l'emprunteur paie, même s'il garde son trove pendant des années.**
+
+
+
+
+C'est pourquoi Liquity est **idéal pour les positions à long terme**, de tels coûts d'emprunt sont effectivement 5-10x inférieur à ce qu’on peut trouver sur les principales alternatives.
+
+
+#### Stability pool : réserve de liquidité pour liquidations (backstop)
+
+Si le modèle de Liquity apporte déjà des bénéfices pertinents dans la perspective d'un utilisateur, sa conception explore également des solutions pertinentes.
+
+L'un des principaux enjeux pour les services d'emprunts c'est bien sûr que le protocole reste solvable : il y a donc, si nécessaire, des liquidations pour rétablir l'équilibre. Liquider des positions nécessite des fonds propres à disposition et une certaine infrastructure lorsque ce sont les utilisateurs qui le font directement, comme sur Marker ou Aave. Pour optimiser le processus, l'idée d'un "**backstop**" de liquidité a émergé.
+
+Il s'agit d'avoir **une réserve de fonds, généralement des stablecoins que le protocole utilise si nécessaire pour gérer les liquidations** : c'est la Stability Pool sur Liquity. Les utilisateurs qui le souhaitent peuvent déposer leur LUSD dans cette pool : ils sont rémunérés en LQTY (qu'on détaille juste après).
+
+Les fonds de la Stability Pool sont utilisés lorsque cela est nécessaire pour les liquidations. Le système étant désormais assez mature, les liquidations ont surtout tendance à arriver en cas de forte baisse rapide du prix de l'ETH. Une position dans la stability pool permet donc de profiter de ces juteuses liquidations sans avoir les compétences ou l'infrastructure nécessaire pour les exécuter.
+
+
+
+La Stability Pool offre ainsi une option de rendement native sur le LUSD plutôt légère du point de vue du gas et assez attractive. Avec un ratio de collatéralisation prudent, cela peut même convenir pour une position presque entièrement passive.
+
+Bien que le concept de backstop ne soit pas implémenté nativement sur les autres principaux marchés monétaires, [le projet B.Protocol](https://www.bprotocol.org/) agit comme une couche d'abstraction proposant l'équivalent de ce service à Maker, Aave et Compound (sans les bénéfices à l'avoir en interne).
+
+
+#### Token LQTY & staking
+
+Je vous le disais plus haut : Liquity n'a pas de gouvernance. Le système s'ajuste automatiquement en fonction de différents paramètres observés sur les marchés comme on le verra plus bas. Mais alors, à quoi sert LQTY ?
+
+Dans sa forme la plus basique, c'est un mécanisme comptable qui permet d'allouer les revenus générés par le protocole. LQTY peut être staké pour obtenir des LUSD correspondant à sa part des frais d'initiation et des ETH en provenance des frais de redemption :
+
+
+
+
+Voilà pour les points essentiels sur Liquity et ses principales différences avec les solutions existantes. Néanmoins comme toujours le diable est dans les détails, donc maintenant que les bases sont établies je vous propose d'explorer les arcanes du protocole.
+
+---
+
+### 🧙 Compréhension aboutie et utilisation avancée
+
+Jusqu'à présent, on est resté autant que possible dans la perspective d'un utilisateur potentiel. Pour cette section, il va falloir élargir nos horizons pour cerner toute la subtilité de la conception de Liquity. C'est parti !
+
+
+#### Limites et risques du modèle
+
+Maintenant que j'ai votre attention, parlons des risques : ça fait aussi partie des subtilités à connaître pour comprendre et tirer profit de Liquity.
+
+
+##### 🔮 Dépendance à l'oracle
+
+Si vous me lisez depuis un bout de temps, cette phrase vous dira sans doute quelque chose : "**la vérité sur les marchés monétaires, c'est ce que l'oracle dit**". L'oracle est le dispositif qui permet d'obtenir des données nécessaires on-chain, pour être utilisé par des smart contracts. La donnée critique en question ici c'est le prix d'ETH en USD, qui permet de déterminer si une position donnée est solvable ou doit être liquidée.
+
+En l'occurrence, le choix est classique : le flux principal utilisé est [ETH/USD ChainLink](https://data.chain.link/ethereum/mainnet/crypto-usd/eth-usd), avec un fallback sur Tellor ([plus d'infos](https://docs.liquity.org/faq/stability-pool-and-liquidations#what-oracle-are-you-using-to-determine-the-price-of-eth)). ChainLink est très répandu et robuste, mais il faut être conscient du fait qu'un problème avec le flux ETH/USD ChainLink peut rapidement entraîner des conséquences graves sur Liquity (et à peu prêt toute la DeFi).
+
+
+##### ⚖ Le LUSD contre son peg de $1
+
+LUSD est un stablecoin, c'est super de le minter directement pour pousser le plus possible vers le bas les coûts d'emprunt. Mais quid de la stabilité du LUSD ?
+
+
+Le pegging de stablecoin, c'est une science assez dense, on ne va pas forcément faire le détail, juste les grandes lignes. Le LUSD a différentes caractéristiques qui lui permettent a priori d'établir un plancher ainsi qu'un plafond via les arbitrages :
+
+* Plancher : le mécanisme de rédemption : un LUSD peut être racheté contre de l'ETH via un mécanisme qu'on explore juste après
+* Plafond : le protocole garantit en toutes conditions une collatéralisation absolument minimale du LUSD par de l'ETH à 110%
+
+Ainsi, bien que le LUSD tient relativement bien son peg à $1, on observe des fluctuations d'amplitude plus conséquentes que sur un stablecoin centralisé.
+
+
+
+
+Différentes situations extrêmes au niveau du marché (et donc du protocole) peuvent également amener à envisager un LUSD qui s'écarte plus ou moins durablement du peg. Dans l'ensemble, les mécanismes de stabilisation sont là pour ramener l'équilibre sur le long-terme.
+
+
+#### Un jeu "protocol-level"
+
+Liquity nous amène à une notion très intéressante que j'appelle "protocol-level", faute de mieux. Il s'agit des interactions possibles avec le protocole dont les conséquences dépendent des actions des autres joueurs.
+
+En quelque sorte et pour reprendre ma métaphore favorite des MMORPGs :
+
+
+
+1. **PvE = le joueur se bat contre des monstres (IA)**, en DeFi : farming simple & conséquences des autres joueurs seulement secondaires (ex dilution du yield quand une 🐳 arrive)
+2. **PvP = les joueurs se castagnent directement entre eux** et ça, ça ne manque pas même en DeFi !
+3. Mais le plus intéressant aujourd'hui c'est surtout **le RvR (Royaume contre Royaume)**. Là encore il y a bien castagne entre joueurs, mais c'est **une lutte structurée par faction**, avec des objectifs à atteindre. L'équivalent DeFi ici c'est bien sûr le jeu des gauges CRV sur Curve !
+
+On observe ainsi sur Liquity des mécaniques "protocol-level" qui pourraient s'apparenter à du RvR dans cette métaphore, voyons donc comment elles fonctionnent :
+
+
+##### Taux d'initiation/redemption dynamique
+
+Tout d'abord, le plus basique : les frais. Je vous parlais plus haut d'un frais d'initiation à 0.5% : c'est vrai, mais légèrement simplifié. En réalité ce taux peut évoluer entre 0.5% et 5% : c'est le `baseRate` qui gouverne le frais payé à la fois sur les emprunts et les redemptions.
+
+Lors d'une forte utilisation de Liquity, le `baseRate` augmente. C'est également un mécanisme défensif pour le protocole, qui sans ça, pourrait se faire "vider ses ETH" par des arbitrageurs (redemption massive LUSD->ETH). Le taux "decay" lorsque l'utilisation se calme pour revenir gentiment à 0.5% et je vous laisse aller voir [les maths derrière tout ça](https://docs.liquity.org/faq/lusd-redemptions#how-is-the-baserate-calculated) sur la doc pour les curieux.
+
+{{< notice note >}}
+Comme le déposant paie ses frais au moment de l'emprunt sur Liquity, l'évolution du taux par la suite n'a pas de conséquence pour lui.
+{{< /notice >}}
+
+##### "Recovery Mode" : aussi terrifiant qu'efficace ?
+
+En utilisation normale, **Liquity est le protocole le plus permissif pour leverager sur ETH, tolérant un ratio de collatéralisation aussi bas que 110%** (~90% de la valeur nette du collatéral est empruntée). C'est sans commune mesure avec ce qu'on trouve ailleurs en DeFi, quelques références sur ETH :
+
+
+* Maker propose des ratios de collatéralisation allant de 58,8% pour ETH-C à 76,9% pour ETH-B (min collateral ratio de 130% à 170%)
+* Aave est à 82.5% sur ETH
+* Compound à 75%
+
+
+Si le protocole peut être aussi permissif, ce n'est pas parce qu'il prend plus de risques, mais plutôt parce que plusieurs solutions sont implémentées pour pousser les utilisateurs à re-collatéraliser lorsque cela est nécessaire : le recovery mode et les redemptions.
+
+
+
+
+Le recovery mode est un jeu protocol-level sur Liquity : son déclenchement dépend du "Total Collateral Ratio" du protocole : le ratio entre l'ensemble des collatéraux et les LUSD dûs.
+
+Lorsque celui-ci passe **sous la barre des 150%, le Recovery Mode s'enclenche pour rétablir l'équilibre** : le seuil minimal de collatéralisation pour un trove passe à 150%. Les utilisateurs à risques sont ainsi invités à re-collatéraliser ou rembourser de la dette - et/ou seront liquidés si nécessaire lors de la mise en route du recovery.
+
+La mise en route du recovery mode ne se fait néanmoins pas par surprise, puisqu'elle dépend d'un paramètre que tout le monde peut suivre aisément. Un tel système permet de maximiser l'efficacité du protocole la plupart du temps, tout en revenant rapidement vers des paramètres plus conservateurs si cela est nécessaire.
+
+
+##### Le jeu des redemptions
+
+Enfin, il reste une dernière mécanique à détailler : les rédemptions, un mécanisme d'arbitrage pour échanger des LUSD contre des ETH.
+
+Là encore, il s'agit d'un jeu protocol-level : les rédemptions se font en utilisant la liquidité disponible dans les troves des utilisateurs. **Lorsqu'il y a redemption, le protocole commence par utiliser la liquidité du trove le moins collatéralisé sur Liquity** et remonte autant que nécessaire.
+
+Ainsi, être **le** trove le moins collatéralisé de Liquity n'est pas une position très envieuse, puisque votre collatéral est à risque de servir pour les rédemptions. Si c'est le cas, l'utilisateur perdra des ETH, mais il verra aussi sa dette diminuer (proportionnellement aux LUSD échangés).
+
+Ce mécanisme pousse les joueurs à rester raisonnable, même lorsque le recovery mode n'est pas activé : pour éviter les rédemptions, il ne faut pas être le plus agressif. C'est en quelque sorte **un mécanisme de régulation dont le seuil exact dépend de l'appétit moyen pour le levier des autres joueurs** : autrement dit une conception des plus élégantes.
+
+
+##### Décentralisation des front-ends
+
+Enfin, c'est peut-être un détail pour vous mais pour moi ça veut dire beaucoup : **l'équipe de Liquity n'opère pas le site de l'application**. À la place, elle a mis à disposition un [SDK Frontend](https://docs.liquity.org/documentation/sdk) pour aider d'autres développeurs à opérer eux-même une instance d'un front-end Liquity. Il y a également un mécanisme de kickback pour inciter ces intégrateurs.
+
+Cette approche permet à Liquity d'**aller encore plus loin que les autres protocoles en termes de décentralisation** et d'offrir de solides garanties qu'au moins un des front-ends restera disponible quoiqu'il arrive.
+
+**Cette spécificité de Liquity est à l'image du reste du protocole : une approche innovante, différente, et réellement pertinente que vous ne pouvez tout simplement pas ignorer.**
+
+---
+
+## Liquity et LUSD dans l'écosystème DeFi
+
+J'ai écrit cet article car je considère Liquity comme une primitive DeFi essentielle et j'aimerais vous aider à comprendre pourquoi. Je ne suis pas le seul à saisir ce qu'il se joue ici, de nombreux protocoles s'intéressent à Liquity et au LUSD d'une façon ou d'autre autre. Voyons ça.
+
+
+### Intégrations DeFi Liquity
+
+Il y a tout d’abord les différents protocoles qui intègrent une ou plusieurs parties de Liquity et offrent ainsi de nouvelles opportunités aux possesseurs de LQTY ou LUSD.
+
+
+#### Liquidité LUSD/LQTY et farming
+
+[Harvest Finance](https://harvest.finance/) propose ainsi un vault LQTY qui s’appuie sur le staking : les LUSD et ETH obtenus sont fréquemment composés pour plus de LQTY.
+
+[Pickle Finance](https://app.pickle.finance/farms) propose un produit similaire (pJar 0.98l) ainsi qu’un vault particulier en partenariat avec B.Protocol pour maximiser les LQTY obtenus :
+
+
+
+
+
+La source principale de liquidité pour LUSD c’est [la pool Curve](https://curve.fi/lusd), disponible également avec Convex.
+
+Côté liquidité sur le token LQTY, la situation est plus tendue mais s’améliore depuis le lancement du vault Uniswap V3 géré par [Visor](https://www.visor.finance/) qui offre également une nouvelle option pour farmer avec LQTY.
+
+
+
+
+
+Liquity est également supporté sur [DeFiSaver](https://defisaver.com/), pour gérer plus aisément le levier et protéger les troves.
+
+Voilà pour le tour d’horizon rapide des principales intégrations. Les DAOs s'intéressent également au LUSD car c’est le seul stablecoin inarrêtable.
+
+---
+
+### LUSD : un snack pour trésorerie de DAO ?
+
+Les propriétés inhérentes du LUSD lui ont déjà valu de l’attention en DeFi. Par exemple, après avoir accumulé beaucoup de liquidité sur DAI et FRAX, Olympus s’est tourné vers LUSD avec l’accumulation de LUSD et LP Sushi LUSD/OHM via le mécanisme de bonds. LUSD est désormais un des principaux actifs possédés par OlympusDAO ([stats](https://dune.xyz/shadow/Olympus-(OHM))).
+
+
+
+
+
+Les ohmies ne vont pas s’arrêter là : ils adorent les actifs productifs, et Liquity n’en manque pas : [le plan](https://forum.olympusdao.finance/d/177-tap-5-whitelist-liquity-lusd-stability-pool-and-lqty-staking) est donc que le protocole déploie ses LUSD dans la Stability Pool pour accumuler des LQTY qui seront également stakés.
+
+Il y avait même du liquidity mining classique sur la paire LUSD/OHM, mais revisité. Avec le [Crucible ](https://crucible.alchemist.wtf/)d’Alchemist, un smart contract wallet NFT pour gérer facilement ses positions LP, un [programme de 35 jours ](https://www.liquity.org/blog/how-to-earn-rewards-on-the-lusd-ohm-pool-using-alchemists-crucible)était proposé, avec des récompenses en OHM, LUSD et MIST.
+
+ \
+D’autres protocoles en quête de résilience, diversification et stabilité pour leur trésorerie ont également franchi le pas :
+
+
+
+* Fei, un protocole proposant un autre type de stablecoin, a diversifié son collatéral vers LUSD et compte désormais plus de 50 M LUSD : [Analytics Fei Money](https://app.fei.money/analytics)
+* L’équipe de Synthetix s’intéresse également à amener le LUSD sur Optimism, qui pourrait aider pour stabiliser sUSD avec [le wrapper LUSD/sUSD](https://gist.github.com/kaleb-keny/33fd792ac52a70fdf4de00b8830569a4).
+
+[Le top holder LUSD ](https://etherscan.io/token/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0#balances)compte ainsi déjà plusieurs DAOs et **tout comme pour RAI** je pense que la tendance peut s’accentuer :
+
+
+
+
+D’autres intégrations sont encore envisageables, comme par exemple l’intégration directe de la stability pool sur une pool fuse pour permettre une utilisation plus optimale des actifs de la stability pool.
+
+J’espère que cet article aura su éveiller votre curiosité DeFi : Liquity est disponible depuis Avril dernier et pourtant bien peu encore réalisent l'élégance et le minimalisme de ce protocole qui propose des solutions crédibles à de véritables enjeux.
+
+Pour aller plus loin, y’a pas de secrets :
+
+* [La documentation](https://docs.liquity.org/)
+* [Le discord](https://discord.gg/j7hHaR4G6S)
+* Et pour creuser, je vous propose ce live récent où je discute d’emprunts en DeFi :
+
+Have fun !
+
+{{< youtube LXDSxRCMsDE >}}
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/post/2021/liquity-protocol.md b/content/post/2021/liquity-protocol.md
new file mode 100644
index 00000000..742ee71f
--- /dev/null
+++ b/content/post/2021/liquity-protocol.md
@@ -0,0 +1,253 @@
+---
+title: "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service"
+description: "Liquity is the first borrowing service that operates without the need for governance, while being low cost and highly efficient. I explain the protocol to understand how it innovates and what it brings to DeFi."
+date: '2021-12-02T01:13:50.191Z'
+categories: [Stablecoin, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Liquity, LUSD, LQTY]
+toc: true
+tocNum: false
+url: liquity-protocol
+image: /img/2021/liquity-protocol/cover.png
+difficulty: "intermediate"
+---
+
+
+[Liquity](https://www.defiscan.info/protocols/liquity/ethereum) is still a unique protocol: it allows borrowing on ETH and mint of a stablecoin (LUSD) without requiring governance which makes it "unstoppable".
+
+The term is not always well understood, so let's make it clear: the contracts necessary for the existence of Liquity and LUSD have been deployed and since they have no administrative functions, **nothing can stop them as long as the Ethereum network is synchronizing**.
+
+If that's not enough to excite your curiosity, the good news is that to achieve such a result, Liquity implements several new ideas that are really relevant. Indeed, in addition to its resilience, Liquity is also **the least expensive** protocol for long term borrowing on ETH and also **the most permissive in leverage**, outside of recovery mode.
+
+The purpose of this article is therefore to introduce Liquity while expliciting several critical dimensions for any loan/money market service in DeFi.
+## OPERATION OF THE PROTOCOL
+
+I propose an exhaustive tour of the protocol to understand the issues and contributions made to DeFi. Ideally, it would be to understand all the dynamics. However, I realize that my explanations can sometimes be dense, so I will offer them by level of complexity:
+
+### 🏗 Liquity's fundamentals
+
+At a high level, Liquity works in a similar logic to Maker: users create "Troves" where they can deposit ETH in order to borrow stablecoins, LUSD, directly from the protocol.
+
+#### Money market or loan service?
+
+Both Liquity and Maker are borrowing services but not money markets. What's the difference? Who is lending to you?
+1. Either the protocol directly (borrowing service),
+2. Or other users via a pooling model like Aave or Compound (money market).
+
+The difference is extremely important in terms of the competitiveness of the protocol: **it is almost impossible, even theoretically, to envision a money market offering low stablecoin borrowing costs (<3 or 4% annual) on a sustainable basis**.
+
+This is because money markets need to offer an attractive return to their stablecoin depositors, who have many, many alternatives for generating returns. Thus, **if efficiency is a key objective, the borrowing service model that does not require deposits from other users is inherently more efficient** - the user borrows directly from the protocol at a lower cost.
+
+Finally, let's test the theory against the hard absurdity of practice: these considerations are valid for analyzing the design of a money market / borrowing service. There are **borrowing services (which are supposed to be very efficient) which nevertheless manage to be expensive for borrowers, like MakerDAO**. The reasons for this are various, but the fact that the DAO still decides on the protocol fees (potentially in a totally arbitrary way) seems to me to be one of the main ones.
+
+
+#### Borrowing with Liquity
+
+From a potential user's point of view, Liquity basically works as an alternative to Maker or something else: the user arrives with ETH that he deposits in his trove to mint the desired amount of LUSD.
+
+However, the parallel stops here because although at a high level the process is similar, the underlying logic is totally different.
+
+##### Fees management
+
+First, the crux of the matter: borrowing costs. On this subject and in addition to very low absolute borrowing costs, Liquity has the merit of bringing **predictability and clarity.** Indeed, where Maker, Aave and Compound for example practice a variable annual rate (via governance for Maker, market conditions for Aave/Compound), **at Liquity the rate is fixed and clearly announced at the time of the loan**.
+
+In addition, at Liquity the fees are paid in one go, at the time of the loan's implementation: these are the "**initiation fees", by default at 0.5%**. This is the only fee that the borrower pays, even if he keeps his trove for years.
+
+
+
+
+This is why Liquity is **ideal for long term positions**, such borrowing costs are effectively 5-10x lower than what you can find on the main alternatives.
+
+#### Stability pool: liquidations backstop
+
+
+While Liquity's model already provides relevant benefits from a user's perspective, its design also explores relevant solutions.
+
+One of the main issues for borrowing services is of course that the protocol remains solvent: there are therefore, if necessary, liquidations to restore the balance. Liquidation of positions requires equity and a certain infrastructure when it is the users who do it directly, as on Marker or Aave. To optimize the process, the idea of a liquidity "backstop" has emerged.
+
+It is about having **a reserve of funds, generally stablecoins that the protocol uses if necessary to manage liquidations**: it is the Stability Pool on Liquity. The users who wish to do so can deposit their LUSD in this pool: they are remunerated in LQTY (which we will detail next).
+
+The funds in the Stability Pool are used when necessary for liquidations. As the system is now quite mature, liquidations tend to happen mostly in case of a sharp drop in the ETH price. A position in the Stability Pool therefore allows one to profit from these juicy liquidations without having the skills or infrastructure to execute them.
+
+The Stability Pool thus offers a rather gas-light and attractive native return option on the LUSD. With a conservative collateralization ratio, it may even be suitable for an almost entirely passive position.
+
+Although the backstop concept is not implemented natively in the other major money markets, [the B.Protocol project](https://www.bprotocol.org/) acts as an abstraction layer offering the equivalent of this service to Maker, Aave and Compound (without the benefits of having it in-house).
+
+
+#### LQTY token & staking
+
+I told you above: Liquity has no governance. The system automatically adjusts itself according to different parameters observed on the markets as we will see below. But then, what is the purpose of LQTY?
+
+In its most basic form, it is an accounting mechanism for allocating the revenues generated by the protocol. LQTY can be staked to obtain LUSD corresponding to its share of the initiation fee and ETH from the redemption fee:
+
+
+
+That's it for the essential points about Liquity and its main differences with the existing solutions. However, as always, the devil is in the details, so now that the basics are established, I propose to explore the arcana of the protocol.
+
+### 🧙 Complete understanding and advanced use
+
+So far, we have stayed as much as possible in the perspective of a potential user. For this section, we'll have to broaden our horizons to understand the subtleties of Liquity's design. Let's get started!
+
+
+#### Risks & limits
+
+Now that I have your attention, let's talk about risks: this is also part of the subtleties to understand and take advantage of Liquity.
+
+##### 🔮 Dependence on the oracle
+
+If you have been reading me for a while, this sentence will probably tell you something: "**the truth about money markets is what the oracle says**". The oracle is the device that allows to obtain the necessary data on-chain, to be used by smart contracts. The critical data in question here is the price of ETH in USD, which determines whether a given position is solvent or needs to be liquidated.
+
+In this case, the choice is classic: the main stream used is [ETH/USD ChainLink](https://data.chain.link/ethereum/mainnet/crypto-usd/eth-usd), with a fallback to Tellor ([more info](https://docs.liquity.org/faq/stability-pool-and-liquidations#what-oracle-are-you-using-to-determine-the-price-of-eth)). ChainLink is very widespread and robust, but one has to be aware of the fact that a problem with the ETH/USD ChainLink stream can quickly lead to serious consequences on Liquity (and pretty much the whole DeFi).
+
+##### ⚖ The LUSD against its $1 peg
+
+LUSD is a stablecoin, it's great to mine it directly to push down borrowing costs as much as possible. But what about the stability of the LUSD?
+
+Stablecoin pegging is a pretty dense science, so we won't necessarily go into detail, just the basics. The LUSD has various characteristics that allow it to establish a floor and a ceiling via arbitrage:
+
+
+* Floor: the redemption mechanism: an LUSD can be redeemed against ETH via a mechanism that we will explore next
+* Ceiling: the protocol guarantees an absolute minimum collateralization of LUSD with ETH at 110% under all conditions
+
+Thus, although the LUSD is holding its peg at $1 relatively well, the fluctuations in amplitude are more consistent than on a centralized stablecoin.
+
+
+
+
+
+Various extreme situations in the market (and therefore in the protocol) can also lead to the possibility of an LUSD that deviates more or less permanently from the peg. On the whole, the stabilization mechanisms are there to bring back the balance in the long term.
+
+#### A "protocol-level" game
+
+
+Liquity brings us to a very interesting notion that I call "protocol-level", for lack of a better word. It is about the possible interactions with the protocol whose consequences depend on the actions of the other players.
+
+In a way and to use my favorite metaphor of MMORPGs :
+
+1. **PvE = Player versus Environment (AI)**, in DeFi: simple farming & consequences of other players only secondary (e.g. dilution of yield when a 🐳 happens)
+2. **PvP = Player versus Player** and that's not missing even in DeFi!
+3. But the most interesting thing today is **RvR (Realm vs Realm)**. Here again there is fighting between players, but it is **a structured fight by faction**, with objectives to reach. The DeFi equivalent here is of course the CRV game on Curve!
+
+We can see on Liquity some "protocol-level" mechanics that could be similar to RvR in this metaphor, so let's see how they work :
+
+##### Dynamic initiation/redemption rate
+
+First of all, the most basic: fees. I mentioned above that the initiation fee is 0.5%: this is true, but slightly simplified. In reality this rate can vary between 0.5% and 5%: it is the `baseRate` that governs the fee paid on both loans and redemptions.
+
+When Liquity is used heavily, the `baseRate` increases. This is also a defensive mechanism for the protocol, which otherwise could be "emptied" of ETH by arbitrageurs (massive redemption LUSD->ETH). The "decay" rate when the use calms down to come back nicely to 0.5% and I let you go see [the math behind it](https://docs.liquity.org/faq/lusd-redemptions#how-is-the-baserate-calculated) on the doc for the curious.
+
+{{< notice note >}}
+Since the depositor pays his fees at the time of borrowing on Liquity, the evolution of the rate afterwards has no consequence for him.
+{{< /notice >}}
+
+
+##### "Recovery Mode": as terrifying as it is effective?
+
+In normal use, **Liquity is the most permissive protocol for leveraging on ETH, tolerating a collateralization ratio as low as 110%** (~90% of the net collateral value is borrowed). This is out of line with what is found elsewhere in DeFi, some references on ETH:
+
+
+* Maker offers collateralization ratios ranging from 58.8% for ETH-C to 76.9% for ETH-B (min collateral ratio of 130% to 170%)
+* Aave is at 82.5% on ETH
+* Compound at 75%.
+
+
+If the protocol can be so permissive, it is not because it takes more risks, but rather because several solutions are implemented to push users to re-collateralize when necessary: recovery mode and redemptions.
+
+
+
+
+The recovery mode is a protocol-level game on Liquity: its triggering depends on the "Total Collateral Ratio" of the protocol: the ratio between the total collateral and the LUSD due.
+
+When this ratio falls **below 150%, the Recovery Mode is activated to restore the balance**: the minimum collateralization threshold for a trove falls to 110%. Risky users are thus invited to re-collateralize or pay off debt - and/or will be liquidated if necessary when the recovery mode is activated.
+
+The recovery mode is not a surprise, however, since it depends on a parameter that everyone can easily follow. Such a system makes it possible to maximize the efficiency of the protocol most of the time, while quickly reverting to more conservative settings if necessary.
+
+
+##### The redemption game
+
+Finally, there is one last mechanism to detail: redemptions, an arbitrage mechanism to exchange LUSD for ETH.
+
+Again, this is a protocol-level game: redemptions are made using the liquidity available in the users' troves. **When there is a redemption, the protocol starts by using the liquidity of the least collateralized trove on Liquity** and goes up as much as necessary.
+
+Thus, being **the** least collateralized trove on Liquity is not a very enviable position, since your collateral is at risk of being used for redemptions. If this is the case, the user will lose ETH, but they will also see their debt decrease (in proportion to the LUSDs traded).
+
+This mechanism pushes players to remain reasonable, even when the recovery mode is not activated: to avoid redemptions, one should not be the most aggressive. It is a sort of **regulation mechanism whose exact threshold depends on the average leverage appetite of the other players**: in other words, a very elegant design.
+
+
+##### Decentralized front-ends
+
+Finally, this may be a detail for you but for me it means a lot: **the Liquity team does not operate the application site**. Instead, they have made available a [Frontend SDK](https://docs.liquity.org/documentation/sdk) to help other developers operate an instance of a Liquity frontend themselves. There is also a kickback mechanism to encourage these integrators.
+
+This approach allows Liquity to go even **further than other protocols in terms of decentralization** and to offer solid guarantees that at least one of the front-ends will remain available no matter what.
+
+Liquity's uniqueness is just like the rest of the protocol: innovative, different, and truly relevant that you simply can't ignore.
+
+
+## Liquity and LUSD in the DeFi ecosystem
+
+I wrote this article because I see Liquity as an essential DeFi primitive and I'd like to help you understand why. I'm not the only one who understands what's at stake here, many protocols are interested in Liquity and LUSD in one way or another. Let's take a look.
+
+
+### DeFi Liquity Integrations
+
+First of all, there are the various protocols that integrate one or more parts of Liquity and thus offer new opportunities to LQTY or LUSD owners.
+
+
+#### Liquity LUSD/LQTY and farming
+
+[Harvest Finance](https://harvest.finance/) offers an LQTY vault based on staking: the LUSD and ETH obtained are frequently composed of more LQTY.
+
+[Pickle Finance](https://app.pickle.finance/farms) proposes a similar product (pJar 0.98l) as well as a particular vault in partnership with B.Protocol to maximize the obtained LQTY:
+
+
+
+
+
+The main source of liquidity for LUSD is the [Curve Pool](https://curve.fi/lusd), also available with Convex.
+
+
+
+
+Liquity is also supported on [DeFiSaver](https://defisaver.com/), to manage leverage more easily and protect troves.
+
+So much for the quick overview of the main integrations. DAOs are also interested in LUSD because it is the only unstoppable stablecoin.
+
+
+### LUSD: A DAO cash snack?
+
+LUSD's inherent properties have already earned it some attention in DeFi. For example, after accumulating a lot of liquidity on DAI and FRAX, Olympus turned to LUSD with the accumulation of LUSD and LP Sushi LUSD/OHM via the bond mechanism. LUSD is now one of the main assets owned by OlympusDAO ([stats](https://dune.xyz/shadow/Olympus-(OHM)).
+
+
+
+
+
+The ohmies are not going to stop there: they love productive assets, and Liquity is not lacking in them: [the plan](https://forum.olympusdao.finance/d/177-tap-5-whitelist-liquity-lusd-stability-pool-and-lqty-staking) is therefore that the protocol deploys its LUDS in the Stability Pool to accumulate LQTYs which will also be staked.
+
+There was even classic liquidity mining on the LUSD/OHM pair, but revisited. With Alchemist's [Crucible ](https://crucible.alchemist.wtf/)a smart contract wallet NFT to easily manage LP positions, a [35 day program ](https://www.liquity.org/blog/how-to-earn-rewards-on-the-lusd-ohm-pool-using-alchemists-crucible)was offered, with rewards in OHM, LUSD and MIST.
+
+Other protocols seeking resilience, diversification and stability for their cash flow have also taken the plunge:
+
+
+
+* Fei, a protocol offering a different type of stablecoin, has diversified its collateral into LUSD and now has over 50M LUSD: [Analytics Fei Money](https://app.fei.money/analytics)
+* The Synthetix team is also interested in bringing the LUSD onto Optimism, which could help stabilize the LUSD.
+
+[The top holder LUSD ](https://etherscan.io/token/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0#balances) already has several DAOs and **as with RAI** I think the trend may grow:
+
+
+
+
+Other integrations are still possible, like for example the direct integration of the stability pool on a pool fuse to allow a more optimal use of the stability pool's assets.
+
+I hope this article has aroused your curiosity: Liquity has been available since last April and yet very few people realize the elegance and minimalism of this protocol that offers credible solutions to real challenges.
+
+To go further, there are no secrets:
+
+* [The documentation](https://docs.liquity.org/)
+* [The discord](https://discord.gg/j7hHaR4G6S)
+* And to go further, I propose you this recent live where I discuss about borrowing in DeFi (in french of course...)
+
+Have fun!
+
+{{< youtube LXDSxRCMsDE >}}
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
diff --git a/content/post/2021/luchadores-nft.fr.md b/content/post/2021/luchadores-nft.fr.md
new file mode 100644
index 00000000..8b344fb4
--- /dev/null
+++ b/content/post/2021/luchadores-nft.fr.md
@@ -0,0 +1,158 @@
+---
+title: "Vive la lutte libre (et vérifiable onchain)"
+description: "Un article-thèse où je vous explique pourquoi les Luchadores me fascinent et ce que j'en attends"
+date: '2021-10-04T01:13:50.191Z'
+categories: [NFT]
+tags: [Collectibles, NFT, Achat de NFT, Farming NFT, Chainlink VRF]
+toc: true
+tocNum: false
+url: luchadores-nft
+image: /img/2021/luchadores-nft/luchadores-cover.png
+difficulty: "beginner"
+---
+
+Cet article va être plus personnel qu'à mon habitude, mais vu le sujet je ne peux pas faire autrement. On va s'intéresser à un projet NFT dans lequel je suis fortement impliqué : les Luchadores. Ce sont des lutteurs entièrement onchain, bientôt personnages dans un jeu à venir, lui aussi onchain.
+
+Plus que le projet lui-même, je vous expliquerai la thèse que je développe à son sujet. Je pense que cette démarche peut vous intéresser et vous aider à développer des convictions personnelles sur d'autres collections.
+
+Dans cet article, je ne détaille pas les mécanismes des Luchadores ou du jeu associé à venir. N'hésitez pas à lire [le whitepaper désormais disponible en français](https://whitepaper.luchadores.io/v/francais/) pour plus d'infos à ce sujet.
+
+---
+
+## 📑 Ma thèse sur les Luchadores
+
+Si vous n'êtes pas encore des plus informés sur les NFTs et mes activités dans le domaine, n'hésitez pas à aller lire la [page d'introduction](https://tokenbrice.xyz/fr/nft/).
+
+Mon intérêt pour les Luchadores et la raison de mon enthousiasme pour cette collection tient à quatre raisons principales, allons donc droit au but :
+
+
+### 🔮 Un processus de génération innovant et inclusif
+
+La génération des Luchadores était un processus entièrement onchain grâce à l'utilisation de la VRF de Chainlink. Elle permet de **générer des nombres aléatoires de manière vérifiable**. Grâce à cet apport, le minting d'un Luchadores se faisait avec la garantie qu'il n'y avait pas de manipulations possibles, et la preuve du calcul reste disponible.
+
+C'est cette dimension technique innovante qui m'a aidé à repérer le projet initialement. Limité à **10 000 Luchadores au total**, le mint est resté disponible environ **3 mois** (Mai->Août 2021), avec une certaine excitation dans les derniers jours.
+
+La longue période de minting a permis à tous ceux qui le souhaitaient de pouvoir s'impliquer, avec tout le temps nécessaire pour atteindre des coûts de transaction plus opportuns si désirés.
+
+La génération se faisait au prix de 2 LINK (frais nécessaire pour le mécanisme VRF), payé en ETH + les coûts en gas. En fonction du prix du LINK et des coûts de transaction sur le réseau, les minteurs ont payé entre 0.015 et 0.025 ETH par Luchadores.
+
+La génération aléatoire vérifiable à donné lieu à quelques faits de "trivia" sur les Luchadores assez amusants :
+
+
+
+La distribution de la rareté est une courbe normale : on compte plus de 8000 Luchadores (81,3%) dans le groupe des 3, 2 ou 4 attributs, les plus communs. Plus on s'approche des extrêmes, plus les Luchadores se font rares.
+
+ |Commun (3*, 2*, 4*)|Rare (1*, 5*)|Epique (6*, 0*)|Légendaire (7*)
+:--|:--|:--|:--|:--
+**Nombre Générés**|8130|1654|205|11
+**Pourcentage**|81.30%|16.54%|2.05%|0.11%
+
+* Il y aurait pu avoir un Luchador avec 8 attributs, mais ça n'est pas arrivé. Il n'y en aurait très probablement eu qu'un seul : pas de dieu Lucha donc.
+* Parfois, l'attribut "moustache" tombe sur un Luchador dont la couleur de peau est très proche de celle utilisée pour la moustache, créant ainsi une **[moustache cachée](https://luchadores.io/luchador/8085)**. Ces Luchadores font l'objet d'une attention particulière.
+
+
+
+### ⛓ L'approche onchain
+
+Outre la génération faite entièrement onchain, le visuel du Luchadores est dans un format optimisé (svg) qui permet le **stockage directement sur la chaîne Ethereum**, apportant ainsi une résilience conséquente au média associé à chaque NFT.
+
+Ça ne s'arrête pas là puisque le jeu à venir, dont on discute juste après, s'appuiera également sur des **mécanismes de génération aléatoire vérifiable**. Ainsi dans l'arène, les coups critiques ou les esquives seront le fruit d'un hasard vérifiable et très dur à manipuler.
+
+
+
+Je ne suis pas le seul à remarquer cette approche très résiliente, qui a également plu aux Link marines. Les Luchadores sont également le seul projet à 100/100 avec les Avastars sur [ArtForAll, un service qui évalue la résilience de NFTs](https://artforall.io/score?search=).
+
+Ainsi, on pourrait décrire le projet comme "on chain maximaliste" mais ça n'est pas le cas : des compromis, hélas nécessaires, sont envisagés au niveau où il est possible de se le permettre : les tirages aléatoires liés au jeu, seront réalisés sur une sidechain (Polygon) ou un rollup. Cela permettra de **garder le jeu accessible et peu coûteux**, tout en profitant de garanties maximales au niveau du NFT, lui toujours bien au chaud sur la chaîne Ethereum.
+
+
+### 🎮 Le jeu Luchadores
+
+Le jeu en lui-même résonne sans doute avec ma fibre nostalgique. En effet, la lutte se fera au **tour par tour**, avec un système d'attributs (stats), compétences passives et compétences à déclenchement.
+
+
+
+Je vous laisse vous documenter sur l'impact des attributs et des compétences, mais en temps que fan de jeux tour par tour, de stratégies et RPG, je peux vous dire que je suis paré pour le theorycraft 🧙
+
+
+
+**Un token associé** (LUCHA) sera gagnable en jeu. Il sera également distribué la première année aux possesseurs de NFT Luchadores. Le token aura plusieurs formes d'utilisations liées au jeu (respect, système de prodiges, rename ?) et peut également être **staké pour gagner des MASK**, un token non-transférable (↪ seulement in-game) utiles pour équiper ses Luchadores.
+
+
+### 📜 La communauté et son histoire
+
+Le jeu est développé par une seule personne, Luchador, qui a progressivement été rejoint par plusieurs profils nécessaires pour le développement:
+
+* Dès le début, des membres de la communauté ont émergé comme Teh_Griz et LuchaBroy : ils sont devenus les premiers modérateurs du Discord.
+* Je me suis progressivement impliqué, pour aider à faire connaître le projet, développer la communauté francophone et apporter mon aide là où c'est pertinent, plus d'info plus loin.
+* Un game designer et deux pixel artists ([AbueloRetroWave](https://www.instagram.com/AbueloRetroWave/) & [m3r0j](https://www.artstation.com/m3r0j))
+
+On ne parle ici que des implications "formelles". Il ne faut bien sûr pas oublier toutes les initiatives communautaires. Il est impossible de toutes les lister ici, mais je citerai quand même :
+
+* Nicosz qui a créé un [outil en Python pour analyser les données liées aux Luchadores](https://github.com/sznicolas/luchadata).
+* Un [dashboard pour suivre les principales métriques sur les Luchadores](https://dune.xyz/lokhidor/Luchadores), proposé par cnhkp.eth, grâce à Dune Analytics et l'aide de Nicosz.
+* Ou encore OxMule qui a [traduit le whitepaper](https://whitepaper.luchadores.io/v/francais/) en quelques jours.
+* Sans oublier les nombreux collectionneurs et "snipeurs" du Discord qui l'animent tous les jours, comme Chainlinkers, un des premiers membres de la communauté qui a gagné deux giveaways à la suite le jour de son anniversaire et est entré dans la légende.
+
+---
+
+## 🐒 Mon implication
+
+J'ai découvert les Luchadores en Mai, j'en ai minté environ 80 et j'ai suivi le projet assez passivement au début. En juin, lorsque l'engouement a commencé à être plus palpable, je me suis impliqué plus activement, au début comme modérateur pour la communauté francophone puis administrateur du serveur Discord.
+
+Je vois mon implication dans le projet comme une opportunité pour éduquer sur les dimensions techniques des NFTs. Je n'ai pas choisi ce projet au hasard : j'estime que l'approche SVG onchain utilisée par les Luchadores est parmi les plus crédibles, malgré le compromis graphique (-> style pixel).
+
+Concrètement, j'anime la communauté avec différents giveaways et j'aide à faire connaître les Luchadores.
+
+
+### 🃏 Mes Luchadores
+
+J'ai été assez peu chanceux au minting de mes Luchadores, et j'ai donc compensé ma chance par mes acquisitions. Bien que la plupart correspondent à un nettoyage mécanique du prix plancher, surtout entre 0.025 et 0.035 ETH, j'ai aussi acquis quelques Luchadores plus rares dont trois 7 attributs.
+
+Ma plus belle prise est le "Batman", un 7 attributs qui sera l'un de mes principaux combattants dans l'arène :
+
+#### ⭐ Lucha 7 attributs #8956
+
+
+
+Désormais en possession de 3 Luchadores 7 attributs, **je souhaite en remettre un en jeu**. Celui-ci ne partira pas au plus offrant, non.
+
+**Le [Luchador #8956](https://luchadores.io/luchador/8956) se gagnera dans l'arène**, et ira donc au joueur le plus habile. Hâte de vous partager plus de détails sur le mécanisme d'allocation, lorsque le jeu sera disponible.
+
+
+#### 🎁 Les dons
+
+J' ai donc minté environ 80 Luchadores, et acheté plus de 150 sur OpenSea.
+
+J'entends en utiliser une bonne partie comme "budget promotionnel" pour les Luchadores - et c'est déjà le cas. Plusieurs distributions ont eu lieu et une bonne cinquantaine a déjà été donnée, dont 25 aux top farmeurs de blé DeFi France.
+
+Pour le reste, comme je suis fan du concept de skin-in-the-game (implication directe avec conséquences), et vu mon implication dans le projet je ne le voyais pas autrement. Je n'ai pas de Luchadores en ma possession sur d'autres wallets, je centralise tout sur [mon ENS par transparence.](https://opensea.io/tokenbrice?search[sortBy]=LISTING_DATE&search[query]=luchadores)
+
+---
+
+## 📈 La valeur d'un lutteur
+
+{{< notice warning >}}
+
+⚠ Cet article ne constitue pas un conseil en investissement. Choisir quand et quel jpeg/svg acquérir est un choix personnel.
+
+{{< /notice >}}
+
+Les Luchadores se sont d'abord échangé à proximité du coût de revient du minting, avant d'établir un premier plancher autour de 0.03 ETH. Depuis la fin du mois de septembre, avec l'arrivée du whitepaper, l'engouement est palpable et se reflète sur le floor (prix plancher) désormais aux alentours de 0.07 ETH.
+
+Alors un lutteur oui, mais à quel prix ? Ne vous attendez pas à une réponse directe de ma part là-dessus. À ce jour et à ce stade de développement, cela reste encore un pari. Néanmoins l'approche est pertinente et je pense que les Luchadores ont de quoi entrer dans le canon des NFTs, en repoussant toujours plus la frontière de l'interactivité rendue possible avec ces objets numériques.
+
+Acquérir un Luchadores aujourd'hui implique de payer environ trois fois minimum le prix observé il y a quelques semaines - et pourtant ce serait une bonne affaire si la tendance actuelle continue 🔮 : bienvenue dans le monde des NFTs, où le pricing est un mécanisme social et hautement réflexif.
+
+Là-dessus, c'est faites vos jeux, rien ne va plus 🎲.
+
+---
+
+{{< notice note >}}
+
+_Je n'en parle que maintenant sur le blog car je voulais prendre le temps d'articuler ma pensée. Ceux qui me suivent en live ou sur Twitter ont entendu parler du projet dès Mai et ont pu en minter directement, s'ils le désiraient._
+
+{{< /notice >}}
+
+J'espère que cet article vous a permis de comprendre ce qui peut bien me fasciner dans une collection de lutteurs, et plus généralement comment j'analyse une collection et qu'il vous aidera également à évaluer d'autres.
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
\ No newline at end of file
diff --git a/content/post/2021/luchadores-nft.md b/content/post/2021/luchadores-nft.md
new file mode 100644
index 00000000..11a8c5e4
--- /dev/null
+++ b/content/post/2021/luchadores-nft.md
@@ -0,0 +1,157 @@
+---
+title: "Long live to free and on-chain auditable wrestling"
+description: "A thesis article where I explain to you why the Luchadores fascinate me and what I expect from them"
+date: '2021-10-04T01:13:50.191Z'
+categories: [NFT]
+tags: [Collectibles, NFT, Achat de NFT, Farming NFT, Chainlink VRF]
+toc: true
+tocNum: false
+url: luchadores-nft
+image: /img/2021/luchadores-nft/luchadores-cover.png
+difficulty: "beginner"
+---
+
+This article is going to be more personal than usual, but given the subject I can't do otherwise. We're going to focus on an NFT project in which I'm strongly involved: the Luchadores. They are fully onchain wrestlers, soon to be characters in an upcoming game, also onchain.
+
+More than the project itself, I will explain the thesis I am developing about it. I think this approach may interest you and help you develop personal beliefs about other collections.
+
+In this article, I don't detail the mechanics of the Luchadores or the upcoming game. Feel free to read [the whitepaper now available](https://whitepaper.luchadores.io/) for more info on this.
+
+---
+
+## 📑 My thesis on the Luchadores
+
+If you are not yet well informed about NFTs and my activities in this area, feel free to read the [introduction page](https://tokenbrice.xyz/nft/).
+
+There are four main reasons for my interest in the Luchadores and my enthusiasm for this collection, so let's get right to it:
+
+### 🔮 An innovative and inclusive generation process
+
+The generation of the Luchadores was a fully onchain process thanks to the use of Chainlink's VRF. It allows to **generate random numbers in a verifiable way**. Thanks to this feature, the minting of a Luchadores was done with the guarantee that there were no possible manipulations, and the proof of the calculation remains available for verification.
+
+It was this innovative technical dimension that helped me spot the project initially. Limited to **10,000 Luchadores in total**, the mint remained available for about **3 months** (March->June 2021), with some excitement in the last days.
+
+The long minting period allowed everyone who wanted to be involved to do so, with plenty of time to achieve more timely transaction costs if desired.
+
+The generation was done at the price of 2 LINK (fee needed for the VRF mechanism), paid in ETH + gas costs. Depending on the LINK price and the transaction costs on the network, miners paid between 0.015 and 0.025 ETH per Luchadores.
+
+The verifiable random generation has given rise to some rather amusing "trivia" facts about the Luchadores:
+
+
+
+The distribution of rarity is a normal curve: there are more than 8000 Luchadores (81.3%) in the group of 3, 2 or 4 attributes, the most common. The closer we get to the extremes, the rarer the Luchadores become.
+
+ |Common (3*, 2*, 4*)|Rare (1*, 5*)|Epic (6*, 0*)|Legendary (7*)
+:--|:--|:--|:--|:--
+**Generated numbers**|8130|1654|205|11
+**Percentage**|81.30%|16.54%|2.05%|0.11%
+
+* There could have been a Luchador with 8 attributes, but it didn't happen. There would most likely have been only one: no Lucha god.
+* Sometimes the attribute "mustache" falls on a Luchador whose skin color is very close to the one used for the mustache, creating a **[hidden mustache](https://luchadores.io/luchador/8085)**. These Luchadores are given special attention.
+
+
+
+### ⛓ The onchain approach
+
+In addition to the generation done entirely onchain, the visual of the Luchadores is in an optimized format (svg) that allows **storage directly on the Ethereum chain**, thus bringing a consequent resilience to the media associated to each NFT.
+
+
+It doesn't stop there since the upcoming game, which we discuss next, will also rely on **verifiable random generation mechanisms**. So in the arena, critical hits or dodges will be the result of verifiable randomness and very hard to manipulate.
+
+
+
+
+I'm not the only one to notice this very resilient approach, which also appealed to the Link marines. Luchadores is also the only 100/100 project with Avastars on [ArtForAll, a service that evaluates the resilience of NFTs](https://artforall.io/score?search=).
+
+
+Thus, one could describe the project as "on chain maximalist" but it is not the case: compromises, unfortunately necessary, are envisaged at the level where it is possible to afford it: the random draws related to the game, will be realized on a sidechain (Polygon) or a rollup. This will allow **to keep the game accessible and inexpensive**, while taking advantage of maximum guarantees for the NFT, which is always warm on the Ethereum chain.
+
+### 🎮 Luchadores : The Game
+
+
+The game itself probably resonates with my nostalgic side. Indeed, the fight will be **turn by turn**, with a system of attributes (stats), passive skills and triggered skills.
+
+
+
+I'll let you read up on the impact of attributes and skills, but as a fan of turn-based games, strategies and RPGs, I can tell you that I'm ready for theorycraft 🧙
+
+
+
+**An associated token** (LUCHA) will be available to be won. It will also be distributed in the first year to NFT Luchadores owners. The token will have several forms of use related to the game (respect, prodigy system, rename?) and can also be **staked to earn MASK**, a non-transferable token (only in-game) useful to equip your Luchadores.
+
+### 📜 The community and its history
+
+The game is developed by a single person, Luchador, who was gradually joined by several profiles needed for the development:
+
+* From the beginning, community members emerged like Teh_Griz and LuchaBroy: they became the first moderators of the Discord.
+* I got progressively involved, to help make the project known, to develop the French-speaking community and to bring my help where it is relevant, more info later.
+* A game designer and two pixel artists ([AbueloRetroWave](https://www.instagram.com/AbueloRetroWave/) & [m3r0j](https://www.artstation.com/m3r0j))
+
+We are talking here only about "formal" implications. Of course, we must not forget all the community initiatives. It is impossible to list them all here, but I will mention them anyway:
+
+* Nicosz who created a [tool in Python to analyze data related to Luchadores](https://github.com/sznicolas/luchadata).
+* A [dashboard to track key metrics on Luchadores](https://dune.xyz/lokhidor/Luchadores), offered by cnhkp.eth, using Dune Analytics and thanks to Nicosz' help.
+* Or OxMule which has [translated the whitepaper](https://whitepaper.luchadores.io/v/francais/) in a few days.
+* Without forgetting the many collectors and "snipers" of the Discord who animate it every day, like Chainlinkers, one of the first members of the community who won two giveaways in a row on his birthday and became a legend.
+
+---
+
+## 🐒 My involvement
+
+I discovered the Luchadores in May, I minted about 80 of them and I followed the project quite passively at the beginning. In June, when the craze started to be more palpable, I got more actively involved, first as a moderator for the French community and then as an administrator of the Discord server.
+
+I see my involvement in the project as an opportunity to educate about the technical dimensions of NFTs. I didn't choose this project at random: I think that the SVG onchain approach used by the Luchadores is among the most credible, despite the graphical compromise (-> pixel style).
+
+Concretely, I animate the community with different giveaways and I help to make the Luchadores known.
+
+### 🃏 My Luchadores
+
+I've been pretty unlucky at minting my Luchadores, so I've made up for my luck with my acquisitions. Although most of them are a mechanical cleaning of the floor price, mostly between 0.025 and 0.035 ETH, I also acquired some rarer Luchadores including three 7 attributes.
+
+My best catch is the "Batman", a "7 attributes" that will be one of my main fighters in the arena:
+
+#### ⭐ Lucha 7 attributes #8956
+
+
+
+Now in possession of 3 Luchadores 7 attributes, **I wish to put one back into play**. This one will not go to the highest bidder... no way.
+
+**The [Luchador #8956](https://luchadores.io/luchador/8956) will be won in the arena**, so it will go to the most skilled player. Looking forward to sharing more details about the allocation mechanism when the game is available.
+
+#### 🎁 Giveaways
+
+So I have minted about 80 Luchadores, and bought over 150 on OpenSea.
+
+I intend to use a good part of it as a "promotional budget" for the Luchadores - and it is already done. Several distributions have taken place and a good 50 have already been given away, including 25 to the top wheat farmer DeFi France.
+
+For the rest, as I'm a fan of the skin-in-the-game concept (direct involvement with consequences), and given my involvement in the project I couldn't see it any other way. I don't have any Luchadores in my possession on other wallets, I centralize everything on [my ENS by transparency](https://opensea.io/tokenbrice?search[sortBy]=LISTING_DATE&search[query]=luchadores)
+
+---
+
+## 📈 The value of a wrestler
+
+{{< notice warning >}}
+
+⚠ This article does not constitute investment advice. Choosing when and which jpeg/svg to acquire is a personal choice.
+
+{{< /notice >}}
+
+Luchadores first traded near the cost of minting, before establishing a second floor around 0.03 ETH. Since the end of September, with the arrival of the whitepaper, the craze is palpable and is reflected on the floor (price) now around 0.07 ETH.
+
+So a wrestler... great, but at what price? Don't expect a direct answer from me on that. At this point in time and at this stage of development, it is still a gamble. Nevertheless, the approach is relevant and I think that Luchadores has the potential to enter the NFTs canon, pushing the frontier of interactivity made possible with these digital objects.
+
+Acquiring a Luchadores today means paying about three times minimum the price seen a few weeks ago - and yet it would be a good deal if the current trend continues 🔮 welcome to the world of NFTs, where pricing is a social and highly reflective mechanism.
+
+So now place your bets, "rien ne va plus" 🎲.
+
+---
+
+{{< notice note >}}
+
+I'm only talking about it now on the blog because I wanted to take the time to articulate my thoughts. Those who follow me live or on Twitter heard about the project in May and could read about it directly, if they wanted to.
+{{< /notice >}}
+
+
+I hope this article has helped you understand what it is about a collection of wrestlers that fascinates me, and more generally how I analyze a collection, and that it will also help you evaluate others.
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/posts/2021/money-market-innovations.fr.md b/content/post/2021/money-market-innovations.fr.md
similarity index 91%
rename from content/posts/2021/money-market-innovations.fr.md
rename to content/post/2021/money-market-innovations.fr.md
index 1b894c88..ede4ce44 100644
--- a/content/posts/2021/money-market-innovations.fr.md
+++ b/content/post/2021/money-market-innovations.fr.md
@@ -2,19 +2,19 @@
title: "Comprendre les innovations sur les marchés monétaires pour envisager leur avenir"
description: "Quelles sont les prochaines étapes pour les marchés monétaires ? On aborde différent thèmes avec un projet emblématique : ré-appropriation des liquidations avec Bprotocol, prêts qui se remboursent avec le temps avec Alchemix, et bien plus !"
date: '2021-04-14T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Finance décentralisée, Marchés Monétaires, Aave, Compound, Liquity, Mimo Capital, Reflexer, BProtocol, Liquidation]
+categories: [Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Aave, Compound, Liquity, Reflexer, BProtocol, Liquidation]
toc: true
tocNum: false
url: marche-monetaire-innovations
+image: /img/2021/money-market-innovations/cover.png
+difficulty: "intermediate"
---
-Les marchés monétaires comme Aave, Compound ou Maker sont au centre de la DeFi. Pour l'utilisateur final, ils remplissent des fonctions similaires à ce qu'offre une banque dans la finance classique : pouvoir emprunter ou rendre productif des actifs en les prêtant à d'autres.
+Les marchés monétaires comme [Aave](https://www.defiscan.info/protocols/aave/ethereum), [Compound](https://www.defiscan.info/protocols/compound-v3/ethereum) ou [Maker](https://www.defiscan.info/protocols/sky/ethereum) sont au centre de la DeFi. Pour l'utilisateur final, ils remplissent des fonctions similaires à ce qu'offre une banque dans la finance classique : pouvoir emprunter ou rendre productif des actifs en les prêtant à d'autres.
Néanmoins, **l'analogie s'arrête immédiatement à la comparaison fonctionnelle**. En effet, la logique sous-jacente des marchés monétaires n'a rien à voir avec le fonctionnement d'une banque. Les marchés monétaires bénéficient de tous les avantages de la DeFi, et notamment la transparence de toutes les opérations ainsi que son accessibilité.
-
-
Lorsqu'un utilisateur emprunte sur Aave, **le service n'a pas besoin de connaître son âge ou son identité**: il suffit que les conditions soient remplies, c'est-à-dire que le collatéral apporté soit suffisant par rapport à la somme empruntée.
De la même manière, un utilisateur qui dépose des stablecoins sur Aave pour produire un rendement en les prêtant à d'autres ne fait confiance à personne : il peut vérifier à tout moment quelles adresses empruntent quels montants et **s'assurer ainsi de la solvabilité du système tout entier**.
@@ -25,9 +25,9 @@ Cela peut sembler basique pour un DeFian, mais c'est un véritable changement de
## Découvrir les marchés monétaires
-On a déjà beaucoup parlé de marchés monétaires sur ce blog, notamment avec l'article qui propose une méthodologie qualitative pour évaluer leurs risques : **[De l'évaluation du risque sur les marchés monétaires en finance décentralisée]({{< relref path="/content/posts/2021/money-market-risks.fr.md" >}})**
+On a déjà beaucoup parlé de marchés monétaires sur ce blog, notamment avec l'article qui propose une méthodologie qualitative pour évaluer leurs risques : **[De l'évaluation du risque sur les marchés monétaires en finance décentralisée](https://tokenbrice.xyz/fr/marche-monetaire-risque/)**
-Ou encore celui qui s'intéresse aux différents services d'abstraction et de distribution du risque inhérent aux marchés monétaires : **[🗡 Du risque ? Oui, mais juste un doigt]({{< relref path="/content/posts/2021/risk-tranching.fr.md" >}})**
+Ou encore celui qui s'intéresse aux différents services d'abstraction et de distribution du risque inhérent aux marchés monétaires : **[🗡 Du risque ? Oui, mais juste un doigt](https://tokenbrice.xyz/fr/tranching-risque-defi/)**
Néanmoins, les marchés monétaires évoluent sans cesse, autant par leurs mises à jour que par l'apport de services tiers construits sur leurs protocoles. En outre, de nouveaux marchés monétaires ambitieux se lancent pour couvrir des besoins encore insatisfaits.
@@ -43,7 +43,7 @@ Les marchés monétaires peuvent sembler complexes au premier abord. Les curieux
De très nombreux utilisateurs de DeFi n'ont pas encore bien compris les enjeux à ce niveau là. Nombreux encore sont ceux qui pensent que la liquidation peut être totale et soudaine. Outre l'information et l'éducation, des outils de gestion de ses positions aident les utilisateurs à se sentir plus en confiance.
-Heureusement, très vite, des outils facilitant et automatisant la gestion des positions d'emprunts sur les marchés monétaires sont apparus, comme DeFi Saver. Je vous en parlais déjà l'année dernière dans l'article **[🎚 Ether ou DeFi : Pourquoi choisir ?]({{< relref path="/content/posts/2020/leveraging-ETH.fr.md" >}})**
+Heureusement, très vite, des outils facilitant et automatisant la gestion des positions d'emprunts sur les marchés monétaires sont apparus, comme DeFi Saver. Je vous en parlais déjà l'année dernière dans l'article **[🎚 Ether ou DeFi : Pourquoi choisir ?](https://tokenbrice.xyz/fr/leveraging-eth/)**
DeFiSaver agit comme une interface (proxy) entre l'utilisateur et le marché monétaire. Il permet de nouvelles fonctionnalités comme la bien aimée "Save" : lorsque la position passe sous un seuil de collatéralisation défini par l'utilisateur, **DeFiSaver se charge de rééquilibrer automatiquement la position grâce à un flash loan.**
@@ -104,7 +104,7 @@ Différents paramètres du système Reflexer s'ajustent pour **faire converger l
Pour mieux comprendre Reflexer, je vous invite à consulter mon précédent article sur les actifs à vocation stable :
-**[Actifs à vocation stable sur Ethereum : quelles approches et quels enjeux ?]({{< relref path="/content/posts/2021/pegged-assets.fr.md" >}})**
+**[Actifs à vocation stable sur Ethereum : quelles approches et quels enjeux ?](https://tokenbrice.xyz/fr/actifs-stables-ethereum/)**
---
@@ -139,17 +139,11 @@ Voici Bob, un fermier DeFi qui a bien travaillé : il souhaite désormais profit
C'est tellement puissant et novateur que beaucoup ont encore du mal à le croire. Les retours d'expérience des utilisateurs d'Alchemix attirent encore de nombreux sceptiques :
-
-
-{{< tweet 1380631352316428291 >}}
-
-
-
### Liquity : l'efficacité à tout prix
[Liquity](https://www.liquity.org/) est un autre marché monétaire qui innove à plusieurs niveaux. Le concept fondamental à comprendre ici est que **les liquidations sont automatisées et donc beaucoup plus prédictibles et rapides.**
-Cela permet à Liquity de proposer **des ratios de collatéralisation inférieurs** à d'autres systèmes, ou pour le dire autrement : les utilisateurs de Liquity peuvent mobiliser plus de dollars par ETH déposé que sur un système comme Maker :
+Cela permet à [Liquity](https://www.defiscan.info/protocols/liquity/ethereum) de proposer **des ratios de collatéralisation inférieurs** à d'autres systèmes, ou pour le dire autrement : les utilisateurs de Liquity peuvent mobiliser plus de dollars par ETH déposé que sur un système comme Maker :
{{< notice info >}}
Le ratio prêt/valeur maximum (LTV maximum) détermine le pouvoir d'emprunt des collatéraux. Un prêt à valeur maximale de 50 % signifie que l'on peut emprunter jusqu'à la moitié de la valeur en dollars des collatéraux déposés.
@@ -180,8 +174,8 @@ J'espère que cette découverte des dernières innovations sur les marchés mon
Pour finir, permettez moi de vous rappeler qu'outre les fonctionnalités, **la gestion du risque est l'élément essentiel qui différencie les différents marchés monétaires**. Avant de commencer à déployer des sommes conséquentes sur ceux-ci, je vous invite à vous familiariser avec les risques associés. Ça tombe bien, j'ai écrit ce qui reste à ce jour **la synthèse la plus exhaustive et compréhensible pour comprendre les risques encourus au niveau des marchés monétaires**, je vous invite à la lire :
-**[De l'évaluation du risque sur les marchés monétaires en finance décentralisée]({{< relref path="/content/posts/2021/money-market-risks.fr.md" >}})**
+**[De l'évaluation du risque sur les marchés monétaires en finance décentralisée](https://tokenbrice.xyz/fr/marche-monetaire-risque/)**
-*🙏 Un grand merci à HHK, Charles, Thomas, Erwan & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en anglais.*
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
-[^LQTY]: Retrouvez [plus d'infos sur la distribution de LQTY](https://docs.liquity.org/faq/lqty-distribution-and-rewards) dans la doc.
\ No newline at end of file
+[^LQTY]: Retrouvez [plus d'infos sur la distribution de LQTY](https://docs.liquity.org/faq/lqty-distribution-and-rewards) dans la doc.
diff --git a/content/posts/2021/money-market-innovations.md b/content/post/2021/money-market-innovations.md
similarity index 90%
rename from content/posts/2021/money-market-innovations.md
rename to content/post/2021/money-market-innovations.md
index 3339ef1d..13e5fb70 100644
--- a/content/posts/2021/money-market-innovations.md
+++ b/content/post/2021/money-market-innovations.md
@@ -2,19 +2,19 @@
title: "Understanding innovations in money markets to envision their future"
description: "What are the next steps for money markets? We're tackling different themes with an emblematic project: re-appropriation of liquidations with Bprotocol, loans that pay back over time with Alchemix, and much more!"
date: '2021-04-19T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Aave, Compound, Liquity, Mimo Capital, Reflexer, BProtocol, Liquidation]
+categories: [Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Aave, Compound, Liquity, Reflexer, BProtocol, Liquidation]
toc: true
tocNum: false
url: money-market-innovations
+image: /img/2021/money-market-innovations/cover.png
+difficulty: "intermediate"
---
-Money markets like Aave, Compound or Maker are the heart of the DeFi ecosystem. For the final user, these protocols have the same function than a classic bank : borrowing or putting sleepy money at work by lendind it.
+Money markets like [Aave](https://www.defiscan.info/protocols/aave/ethereum), [Compound](https://www.defiscan.info/protocols/compound-v3/ethereum) or [Maker](https://www.defiscan.info/protocols/sky/ethereum) are the heart of the DeFi ecosystem. For the final user, these protocols have the same function than a classic bank : borrowing or putting sleepy money at work by lendind it.
Nevertheless, **the analogy stops immediately at this functional comparison**. Indeed, the underlying logic of money markets has nothing to do with the functioning of a bank. Money markets benefit from all the advantages of DeFi and, in particular, the transparency and accessibility of all operations.
-
-
When a user borrows on Aave, **the protocol does not need to know his age or identity**: validate all conditions is enough ! It means that you just have to put enough collateral.
In the same way, a user who deposits stablecoins on Aave to generate a return by lending them to others does not trust anyone: he can check at any time which amounts are borrowed by each address to **ensure the solvency of the entire system.**
@@ -26,9 +26,9 @@ This may seem basic to a DeFian, but it is a real paradigm shift. In traditional
## Discovering money markets
-We have already talked a lot about money markets on this blog, especially in the article that offers a qualitative methodology to evaluate their risks : **[Assessing risk in decentralized finance: a handbook for money markets]({{< relref path="/content/posts/2021/money-market-risks.md" >}})**
+We have already talked a lot about money markets on this blog, especially in the article that offers a qualitative methodology to evaluate their risks : **[Assessing risk in decentralized finance: a handbook for money markets](https://tokenbrice.xyz/money-markets-risk/)**
-Or the one about the different services of abstraction and distribution of the inherent risks in money markets: **[Risk? Yes please, but exactly how I like it]({{< relref path="/content/posts/2021/risk-tranching.md" >}})**
+Or the one about the different services of abstraction and distribution of the inherent risks in money markets: **[Risk? Yes please, but exactly how I like it](https://tokenbrice.xyz/risk-tranching-defi/)**
However, money markets are constantly evolving, both through their updates and through the contribution of third-party services built on top. In addition, new and more challenging money markets are being launched to cover needs that are still unsatisfied.
@@ -44,7 +44,7 @@ Money markets may seem really complex at first glance. The curious are most ofte
Many DeFi users have not yet fully understood the issues at stake here. Many still think that liquidation can be total and sudden. In addition to information and education, tools for managing one's positions help users to feel more confident.
-Fortunately, tools that facilitate and automate the management of borrowing positions on money markets have emerged very quickly, such as DeFi Saver. I already talked about it last year in this article **[🎚 ETH exposure or DeFi yields: why choose?]({{< relref path="/content/posts/2020/leveraging-ETH.md" >}})**
+Fortunately, tools that facilitate and automate the management of borrowing positions on money markets have emerged very quickly, such as DeFi Saver. I already talked about it last year in this article **[🎚 ETH exposure or DeFi yields: why choose?](https://tokenbrice.xyz/leveraging-eth/)**
DeFiSaver works as a proxy between the user and money markets. It allows new features such as the well-loved "Save": when the position falls below a user-defined collateralization limit, DeFiSaver automatically rebalances the position with a flash loan.
@@ -104,7 +104,7 @@ Various parameters in the Reflexer system adjust to **converge the two prices ov
To better understand Reflexer, I recommend you to read my previous article on stable assets:
-**[Exploring stable assets on Ethereum: approaches & endgame?]({{< relref path="/content/posts/2021/pegged-assets.md" >}})**
+**[Exploring stable assets on Ethereum: approaches & endgame?](https://tokenbrice.xyz/ethereum-stable-assets/)**
---
@@ -139,17 +139,12 @@ This is Bob, a DeFi farmer who has worked hard: he now wants to enjoy the fruits
It is so powerful and innovative that many still find it hard to believe. The feedback from Alchemix users still attracts many skeptics:
-
-
-{{< tweet 1380631352316428291 >}}
-
-
### Liquity: efficiency at all costs
[Liquity](https://www.liquity.org/) is another money market that innovates on several levels. The fundamental concept to understand here is that **liquidations are automated and therefore much more predictable and quick.**
-This allows Liquity to offer **lower collateralization ratios** than other systems, or to put it another way: Liquity users can raise more dollars per ETH deposited than on a system like Maker:
+This allows [Liquity](https://www.defiscan.info/protocols/liquity/ethereum) to offer **lower collateralization ratios** than other systems, or to put it another way: Liquity users can raise more dollars per ETH deposited than on a system like Maker:
{{< notice info >}}
The maximum loan-to-value ratio (maximum LTV) determines the borrowing power of a collateral. A maximum loan-to-value of 50% means that up to half of the dollar value of the deposited collateral can be borrowed.
@@ -180,8 +175,8 @@ I hope you have found this introduction to the latest innovations in the money m
Finally, let me remind you that in addition to functionality, **risk management is the essential element that differentiates each money market**. Before you start spending large sums of money on them, I invite you to familiarize yourself with the associated risks. It's a good thing, I wrote what remains to this day **the most exhaustive and comprehensible synthesis to understand the risks incurred in the money markets**, I invite you to read it:
-**[Assessing risk in decentralized finance: a handbook for money markets]({{< relref path="/content/posts/2021/money-market-risks.md" >}})**
+**[Assessing risk in decentralized finance: a handbook for money markets](https://tokenbrice.xyz/money-markets-risk/)**
-*🙏 Huge thanks to HHK, Charles, Thomas, Erwan & FrenchTony for proofreading the French version of this article and translating it integrally into English.*
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
-[^LQTY]: You'll find more info [regarding the LQTY token distribution](https://docs.liquity.org/faq/lqty-distribution-and-rewards) in the official documentation.
\ No newline at end of file
+[^LQTY]: You'll find more info [regarding the LQTY token distribution](https://docs.liquity.org/faq/lqty-distribution-and-rewards) in the official documentation.
diff --git a/content/post/2021/money-market-recipes.fr.md b/content/post/2021/money-market-recipes.fr.md
new file mode 100644
index 00000000..c3d1f780
--- /dev/null
+++ b/content/post/2021/money-market-recipes.fr.md
@@ -0,0 +1,182 @@
+---
+title: "🌽 Livre de recettes pour les marchés d'actifs DeFi"
+description: "Les marchés d'actifs comme Aave ou Alchemix sont des outils essentiels en DeFi. Cet article explique et illustre quelques stratégies pour tirer parti des différentes options qu'ils offrent."
+date: '2021-04-29T01:13:50.191Z'
+categories: [Practical, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Aave, Curve, Liquity, Alchemix, Aave, Liquidation]
+toc: true
+tocNum: true
+url: recettes-marches-actifs
+image: /img/2021/money-market-recipes/recettes-marché-d'actif-cover-tokenbrice.png
+difficulty: "expert"
+---
+
+Sur ce blog, je discute fréquemment des marchés monétaires ou marchés d'actifs en DeFi. Fondamentalement, ils vous permettent de **prêter et d'emprunter des tokens**. Ces deux actions sont devenues comme **des verbes de la DeFi** : ils sont mobilisés directement ou indirectement dans quasiment toutes les stratégies.
+
+Ainsi, bien qu'il soit crucial de comprendre les protocoles que vous utilisez et surtout **les différents [risques encourus sur les marchés monétaires](https://tokenbrice.xyz/fr/marche-monetaire-risque/)**, je vous propose aujourd'hui de nous concentrer plutôt sur le pourquoi et le comment :
+
+1. Quelles stratégies peut-on mettre en place en utilisant les marchés d'actifs ?
+2. Comment concrètement les déployer ?
+
+Nous allons donc décortiquer différentes "recettes" pour tirer parti des marchés d'actifs. Prenez ces recettes comme **des inspirations pour développer vos propres stratégies**.
+
+{{< notice warning >}}
+Cet article ne constitue pas du conseil en investissement : je ne suis pas habilité à en dispenser. Plutôt que de reproduire mécaniquement les stratégies présentées en exemple, je vous invite surtout à chercher à en comprendre la démarche.
+{{< /notice >}}
+
+---
+
+## Pari avec effet de levier sur un marché d'actif via le marché d'actif lui même
+
+Les marchés d'actifs ont tous un token associé, par exemple le token AAVE pour Aave. Il sert généralement pour la gouvernance du protocole et permet parfois également de capturer une partie de la valeur que celui-ci génère. Avec cette stratégie, on va donc **utiliser un marché d'actif pour emprunter des actifs qui serviront ensuite à s'exposer au token natif de la plateforme désirée**.
+
+* **⚙ Condition :** Optimisme sur l'avenir d'un marché d'actif donné. Il dispose d'un token natif qui dans ce scénario devrait s'apprécier parallèlement à la croissance du marché d'actifs sur moyen/long terme.
+* **📅 Horizon temporel :** 3 - 24 mois. ~3 mois est un minimum recommandé pour que les frais en gas et les coûts d'emprunt n'impactent pas trop les retours de la stratégie.
+* **🔮 Résultat espéré** : le token acquis s'apprécie ce qui permet de rembourser la dette (+intérêts éventuels) à terme en revendant une partie de la position initiale. Une fois la dette remboursée, une partie des tokens acquis peut être conservée.
+* **🃏 Bonus / Facilitateur :** Si le token en question peut produire un rendement (par ex AAVE dans le Safety Module), cela permettra de rembourser la dette encore plus rapidement ou d'accumuler "gratuitement" du token en question si le scénario d'appréciation de son prix se vérifie.
+
+Bien que cette stratégie soit assez basique, il s'agit d'une de mes préférées. Je vous proposais récemment sur Twitter un exemple de sa mise en pratique que nous détaillerons ici :
+
+Ici, le protocole en question c'est [Liquity](https://liquity.org) et la mise en place de la stratégie est assez simple, mais connaît deux variations :
+
+### Exposition directe au token natif
+
+Soit en s'exposant directement au token LQTY, ce qui est bien sûr plus risqué :
+
+
+
+1. Dépôt d'ETH sur [Liquity](https://www.liquity.org/) via un des frontends, ils serviront de collatéral pour la position.
+2. Emprunt de LUSD
+3. Swap de LUSD (via ParaSwap pour le meilleur taux !) pour du LQTY, le token natif de Liquity
+4. Staking du LQTY, qui génère des LUSD et un peu d'ETH
+5. À terme remboursement de la dette (2) via le rendement LUSD (4) et la revente d'une partie des LQTY acquis à l'étape 3 après une appréciation de leur prix.
+
+Ou alors de manière plus prudente, avec une stratégie qui revient à utiliser Liquity pour emprunter des LUSD et les rendre productifs :
+
+### Exposition essentiellement en stablecoins
+
+
+
+1. Dépôt d'ETH sur [Liquity](https://www.liquity.org/) via un des frontends, ils serviront de collatéral pour la position.
+2. Emprunt de LUSD
+3. Staking du LUSD via soit la Stability Pool (-> LQTY + ETH) ou encore la pool LUSD sur Curve Finance (-> Natif + LQTY + CRV).
+4. À terme remboursement de la dette (2) via le rendement (3)
+
+{{< notice note >}}
+Yearn Finance propose également un vault LUSD qui gère automatiquement la position sur Curve.
+{{< /notice >}}
+
+---
+
+## Investir du temps plutôt que de l'argent
+
+L'arrivée d'Alchemix a ouvert de nouvelles perspectives en termes de stratégie. Sur Alchemix, la dette se rembourse toute seule avec le temps. En effet, **le collatéral utilisé (yDAI) est un stablecoin qui produit un rendement (via Yearn)**. Ainsi avec les conditions actuelles l'emprunt est auto-remboursé en trois ans.
+
+Je vous propose donc une stratégie simple pour tirer profit d'Alchemix afin de réaliser un profit. Le principal inconvénient est que **seulement la moitié de la quantité de DAI placées initialement dans Alchemix peut être empruntée en AlUSD** puis investie. Néanmoins comme cette stratégie s'appuie sur stablecoins, elle ne comporte - à priori (⚠ oracles) pas de risque de prix et ne nécessite donc pas de suivi quotidien.
+
+* **⚙ Condition :** Des DAI qui seront bloqués pendant ~3ans. Seulement la moitié de la somme déposée est mobilisable.
+* **📅 Horizon temporel :** ~3 ans (dépend du taux de retour DAI sur Yearn)
+* **🔮 Résultat espéré** : Dans 3 ans, la dette en AlUSD est entièrement remboursée et les DAI initialement mobilisés sur Alchemix sont à nouveaux libres. Reste à voir ce qu'il s'est passé avec l'investissement réalisé avec les AlUSD empruntés : tout dépend des choix réalisés, je ne prédis pas le futur.
+* **🃏 Bonus / Facilitateur :** Utiliser l'emprunt en AlUSD pour investir dans un token qui peut produire un rendement. Cela permet de réaliser un investissement composé ou bien encore de rembourser la dette Alchemix plus rapidement.
+
+### Long ALCX via Alchemix
+
+Pour illustrer le concept, je vous propose à nouveau une stratégie simple qui revient à long Alchemix via son token ALCX :
+
+
+
+1. Dépôt de DAI en collatéral sur Alchemix. Alchemix le déploie sur Yearn Finance pour produire un rendement.
+2. Emprunt jusqu'à 50% de la valeur initiale déposée en AlUSD, un stablecoin.
+3. Investissement des AlUSD dans le token désiré. Ici pour l'exemple c'est ALCX le token natif de gouvernance d'Alchemix.
+4. Stake du token acquis pour produire un rendement
+5. Le remboursement de la dette en AlUSD contracté sur Alchemix se fait automatiquement avec le temps. Il est possible de rembourser en avance grâce aux rendements générés (4).
+
+---
+
+## Mettre au travail un collatéral holdé sur le long terme
+
+Je suis arrivé à la DeFi il y a plusieurs années avec une ambition simple : je voulais mettre au travail mes Ether. À l'époque ça n'était pas une mince affaire mais aujourd'hui il existe de nombreuses solutions très intéressantes. Je vais me concentrer sur l'une d'entre elles : Aave pour deux raisons.
+
+1. Aave a lancé **un programme de liquidity mining** payé en StkAave[^aaveLMmainnet] sur le mainnet.
+2. Aave est accessible sur la **sidechain Polygon** où les frais minimes permettent de déployer des stratégies DeFi de manière efficace même avec des petits capitaux. Il y a là aussi un programme de liquidity mining, en MATIC.[^aaveLMmatic]
+
+Pour que cette stratégie soit la plus accessible possible, on va développer l'exemple sur la sidechain Polygon. Elle est donc possible en utilisant n'importe lequel des tokens supportés en collatéral sur le marché Aave/Polygon : MATIC, AAVE, wETH, wBTC, USDC, et DAI.
+
+### Conditions d'implémentation
+
+La stratégie consiste à **produire des rendements grâce à l'emprunt de stablecoins utilisés pour apporter de la liquidité sur le service d'échange Curve**. Grâce au programme de liquidity mining sur Aave, chaque étape du processus est potentiellement lucrative au moins en MATIC.
+
+* **⚙ Condition :** Avoir des tokens acceptés commes collatéral sur Aave, et les ramener sur Polygon par exemple en utilisant [le bridge POS](https://wallet.matic.network/bridge/).
+* **📅 Horizon temporel :** Court / moyen terme.
+* **🔮 Résultat espéré** : Rendements en MATIC, stablecoins et ETH.
+* **🃏 Bonus / Facilitateur : /**. Prospectif : mining CRV & effet de levier potentiel quand les tokens LP Curve Polygon sont acceptés en collatéral sur Aave.
+
+### Mettre des ETH au travail sur Polygon
+
+Pour illustrer la stratégie, je pars de l'hypothèse de générer un rendement à partir d'ETH.
+
+
+
+1. Dépôt d'ETH en collatéral sur Aave/Polygon (+natif +MATIC)
+2. Emprunt de stablecoins (-APR +MATIC)
+3. Dépôt et staking des stablecoins sur Curve/Polygon (+natif +MATIC)
+
+À noter que les tokens LP Curve Polygon sont considérés pour un ajout potentiel comme collatéral sur le marché Aave. On peut aussi s'attendre à un potentiel en CRV sur les positions LP sur Polygon si la DAO le décide.
+
+Pour approfondir sur Aave, **[je vous propose un live marathon récemment réalisé avec plusieurs membres de l'équipe](https://www.twitch.tv/videos/994454624)**.
+
+{{< notice note >}}
+Il est possible de mettre en œuvre cette stratégie en gardant les tokens utilisés comme collatéraux sur le L1 Aave afin de bénéficier du mining de StkAAVE. Il faudra migrer les stablecoins empruntés du réseau Ethereum vers Polygon en utilisant par exemple [le bridge POS de Matic](https://wallet.matic.network/bridge/).
+{{< /notice >}}
+
+---
+
+## Se prémunir contre le risque sur le prix du $ : farming en €
+
+En DeFi, tout se passe en dollar. Ça fait du sens, tout le monde connaît, mais pour un utilisateur européen cela peut poser un vrai risque. En effet, si votre ambition est de générer de quoi vivre avec la DeFi, alors cela signifie que votre sortie se fera éventuellement en Euro.
+
+
+
+Pour un fermier Européen, il peut donc être **intéressant d'avoir une exposition DeFi en € pour éviter ce risque supplémentaire**. Pour l'instant, il n'y a tout simplement aucune option d'emprunt en Euro autre que [Mimo Capital](https://mimo.capital/).
+
+Le service vous permet d'emprunter des PAR depuis ETH, wBTC ou USDC. Le token de gouvernance MIMO est également distribué aux possesseurs de vaults actifs ainsi qu'aux apporteurs de liquidité sur les pools Balancer PAR/ETH et PAR/USDC.
+
+Néanmoins le protocole est encore récent et le token PAR n'est pas encore supporté dans l'écosystème, en tant que collatéral sur Aave ou dans une pool Curve par exemple. La situation n'est donc pas encore idéale mais elle a le mérite d'exister !
+
+D'autres solutions DeFi-€ sont en cours de développement. MakerDAO par exemple a mentionné un Euro-DAI, tandis que Jarvis Network travaille sur un € stablecoin synthétique, le jEUR.
+
+### Conditions d'implémentation
+
+Pour farmer nativement en Euros, la meilleure option reste encore ce qu'il est possible de faire avec du EURS. Depuis le lancement de la pool sur Curve, les options sont multiples.
+
+* **⚙ Condition :** Posséder des EURS / sEUR
+* **📅 Horizon temporel :** 1 mois - années
+* **🔮 Résultat espéré** : Faire fructifier un capital en Euro-stables
+* **🃏 Bonus / Facilitateur :** Posséder des VeCRV.
+
+
+
+* La **pool Curve** directement offre un rendement attractif en CRV même lorsqu'il n'est pas boosté.
+* Pour revendre automatiquement les CRV farmés afin de composer le rendement, un vault est idéal. **[Yearn](https://yearn.finance) propose un vault sur EURS**.
+* Le farming est également possible via le vault EURS de [StakeDAO](https://stakedao.org/), afin d'accumuler aussi des SDT.
+* Ou bien encore, [Harvest](https://harvest.finance) propose également un vault qui compose l'essentiel des rendements tout en rémunérant en FARM.
+
+J'espère que ces différentes recettes sauront vous inspirer. Assurez-vous d'être **[conscient des différents risques liés aux marchés monétaires](https://tokenbrice.xyz/fr/marche-monetaire-risque/)**, utilisés pour toutes ces stratégies.
+
+---
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
+
+
+## Ensemble, le 🌾 Blé foisonne
+
+La DeFi, ça marche encore mieux en communauté ! Pour aller plus loin dans votre découverte, **[rejoignez le Discord DeFi France](https://discord.gg/3bWZcK2)**. Vous pourrez échanger avec plus de 1500 DeFians francophones de différentes expériences et horizons.
+
+En outre, les contributions sont désormais reconnues - en 🌾 Blé ! La gouvernance de la communauté se décentralise, c'est un excellent moment pour s'impliquer.
+
+Enfin pour mieux comprendre ce nouveau système communautaire, le replay de notre direct de présentation est disponible :
+
+{{< youtube fMpYQYXBrfA >}}
+
+[^aaveLMmainnet]: Le programme de liquidity mining StkAAVE a été lancé le 26 Avril suite à vote de gouvernance. [Plus d'infos ici](https://twitter.com/AaveAave/status/1386753673104134155?s=20)
+[^aaveLMmatic]: Polygon sponsorise un programme de liquidity mining en MATIC, à la fois [sur Aave](https://blog.polygon.technology/defiforall-kicking-off-l2-defi-summer-with-40-million-usd-in-liquidity-mining-rewards-from-4937d7c6e287) et sur [Curve](https://blog.polygon.technology/continuing-scalability-defi-summer-with-5-million-usd-in-liquidity-mining-rewards-from-polygon-e73a76c5a8ad?gi=9a7b7e130606)
\ No newline at end of file
diff --git a/content/post/2021/money-market-recipes.md b/content/post/2021/money-market-recipes.md
new file mode 100644
index 00000000..2cac1784
--- /dev/null
+++ b/content/post/2021/money-market-recipes.md
@@ -0,0 +1,182 @@
+---
+title: "🌽 Defi money markets cookbook"
+description: "Money markets like Aave or Alchemix are essential in DeFi. This article explains and illustrates some strategies to take advantage of the different options they offer."
+date: '2021-05-10T01:13:50.191Z'
+categories: [Practical, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Money Markets, Aave, Curve, Liquity, Alchemix, Aave, Liquidation]
+toc: true
+tocNum: true
+url: money-market-recipes
+image: /img/2021/money-market-recipes/recettes-marché-d'actif-cover-tokenbrice.png
+difficulty: "expert"
+---
+
+On this blog, I frequently discuss about money markets and assets market in DeFi. Basically, they allow you to **loan and borrow tokens**. These two actions have become like **deFi verbs**: they are used directly or indirectly in almost every strategy.
+
+So while it is crucial to understand the protocols you are using and especially **the different [money market risks](https://tokenbrice.xyz/money-markets-risk/)**, Today, I would like to focus on the why and the how:
+
+1. Which strategies can be implemented using money markets?
+
+2. How can they be deployed in practice?
+
+We're going to break down different "recipes" to take advantage of the money markets. Take these recipes as **inspiration to develop your own strategies**.
+
+
+{{< notice warning >}}
+
+**This article does not constitute investment advice: I am not authorized to dispense it. Rather than mechanically reproducing the strategies presented as examples, I invite you to try to understand the approach.**
+
+{{< /notice >}}
+
+---
+## Leveraged bets on a money market via the market itself
+
+
+Every money markets have an associated token, for example the AAVE token for Aave. It is generally used for the governance of the protocol and sometimes also allows to capture part of the value it generates. With this strategy, we will **use a money market to borrow assets that will then be used to gain exposure to the native token of the desired platform**.
+
+* **⚙ Condition:** Optimism about the future of a given money market. It's native token in this scenario is expected to appreciate in line with the growth of the market over the medium/long term.
+* **📅 Time horizon:** 3 - 24 months. ~3 months is a recommended minimum so that gas fees and borrowing costs don't impact the returns of the strategy too much.
+* **🔮 Expected result**: the acquired token appreciates, which allows to pay back the debt (+ possible interest) at term by reselling part of the initial position. Once the debt is repaid, part of the acquired tokens can be kept.
+* **🃏 Bonus / Facilitator:** If the token in question can produce a return (e.g. AAVE in the Safety Module), this will allow the debt to be repaid even faster or to accumulate "free" tokens if the scenario of its price appreciation is verified.
+
+Although this strategy is quite basic, it is one of my favorites. I recently shared with you on Twitter an example of how to put it into practice, which we will detail here:
+
+
+Here, the concerned protocol is [Liquity](https://liquity.org) and the implementation of the strategy is quite simple, but has two variations:
+
+### Direct exposure to the native token
+
+Either by directly exposing yourself to the LQTY token, which is of course more risky:
+
+
+
+---
+1. Deposit ETH on [Liquity](https://www.liquity.org/) via one of the frontends, they will serve as collateral for the position.
+2. Borrow LUSD
+3. Swap LUSD (via ParaSwap for the best rate!) for LQTY, the native token of Liquity
+4. Stake LQTY, which generates LUSD and some ETH
+5. Eventually repayment of debt (2) via LUSD yield (4) and resale of some of the LQTY acquired in step 3 after price appreciation.
+
+
+Or more conservatively, with a strategy using Liquity to borrow LUSDs and make them productive:
+
+### Exposure mainly in stablecoins
+
+
+
+1. Deposit ETH on [Liquity](https://www.liquity.org/) via one of the frontends, they will serve as collateral for the position.
+2. Borrow LUSD
+3. Stake LUSD via either the Stability Pool (-> LQTY + ETH) or the LUSD pool on Curve Finance (-> Native + LQTY + CRV).
+4. Eventually repayment of debt (2) via yield (3)
+
+{{< notice note >}}
+Yearn Finance also offers a LUSD vault that automatically manages the position on Curve.
+{{< /notice >}}
+
+---
+
+## Investing time rather than money
+
+
+Alchemix arrival has opened up new perspectives in terms of strategy. On Alchemix, the debt repays itself over time. Indeed, **the collateral used (yDAI) is a stablecoin that produces a return (via Yearn)**. Thus with the current conditions the loan is self-repaying in three years.
+
+I suggest a simple strategy to take advantage of Alchemix to make a profit. The main drawback is that **only half of the amount of DAI initially placed in Alchemix can be borrowed in AlUSD** and then invested.
+Nevertheless, as this strategy is based on stablecoins, it does not - (⚠ oracles) - involve any price risk and therefore does not require daily monitoring.
+
+* **⚙ Condition:** DAI that will be locked in for ~3 years. Only half of the deposited amount is mobilizable.
+* **📅 Time horizon:** ~3 years (depends on DAI return rate on Yearn).
+* **🔮 Expected result**: In 3 years, the AlUSD debt is fully repaid and the DAI initially mobilized on Alchemix are free again. It remains to be seen what happened with the investment made with the borrowed AlUSD: it all depends on the choices made, I do not predict the future.
+* **🃏 Bonus / Facilitator:** Use the borrowed AlUSD to invest in a token that can produce a return. This allows you to make a compound investment or even pay off Alchemix debt faster.
+
+### Long ALCX via Alchemix
+
+To illustrate the concept, I propose another simple strategy which is equivalent to long Alchemix via its token ALCX :
+
+
+
+1. Deposit DAI as collateral on Alchemix. Alchemix deploys it on Yearn Finance to generate a return.
+2. Borrow up to 50% of the initial value deposited in AlUSD, a stablecoin.
+3. Invest the AlUSD in the desired token. Here for the example it is ALCX the native governance token of Alchemix.
+4. Stake the acquired token to produce a return
+5. The repayment of the debt in AlUSD contracted on Alchemix is done automatically with time. It is possible to repay in advance thanks to the generated returns (4).
+
+---
+## Putting a "hodl" collateral to work over the long term
+
+I came to DeFi several years ago with a simple ambition: I wanted to put my Ethers to work. At the time it was not an easy task but nowadays there are many very interesting solutions. I will focus on one of them, Aave, for two reasons.
+
+1. Aave has launched **a liquidity mining** program paid in StkAave[^aaveLMmainnet] (Aave V2 - Mainnet).
+2. Aave is accessible on the **sidechain Polygon** where the low fees allow to deploy DeFi strategies efficiently even with small capital. There is also a liquidity mining program there, in MATIC [^aaveLMmatic].
+
+To make this strategy as accessible as possible, we will develop the example on the Polygon sidechain. It is therefore possible to use any of the tokens supported as collateral on the Aave/Polygon market: MATIC, AAVE, wETH, wBTC, USDC, and DAI.
+
+
+### How-to
+
+
+The strategy is to **produce returns through the borrowing of stablecoins used to provide liquidity on the Curve exchange service**. With the liquidity mining program on Aave, every step of the process is potentially lucrative at least in MATIC.
+
+
+* **⚙ Condition:** Having tokens accepted as collateral on Aave, and bring them back to Polygon for example using [the POS bridge](https://wallet.matic.network/bridge/).
+* **📅 Time horizon:** Short / medium term.
+* **🔮 Expected outcome:** Returns in MATIC, stablecoins and ETH.
+* **🃏 Bonus / Facilitator:/**. Prospective: mining CRV & potential leverage when LP Curve Polygon tokens are accepted as collateral on Aave.
+
+### Putting ETH to work on Polygon
+
+To illustrate this strategy, I start with the assumption of generating a return from ETH.
+
+
+
+1. ETH deposit as collateral on Aave/Polygon (+native +MATIC)
+2. Borrowing stablecoins (-APR +MATIC)
+3. Deposit and staking of stablecoins on Curve/Polygon (+natif +MATIC)
+
+Note that Curve LP Polygon tokens are being considered for potential addition as collateral in the Aave market. We can also expect potential CRV rewards on Polygon LP positions if the DAO decides to do so.
+
+{{< notice note >}}
+It is possible to implement this strategy by keeping the tokens used as collateral on the L1 Aave in order to benefit from the mining of StkAAVE. It will be necessary to migrate the borrowed stablecoins from the Ethereum network to Polygon using for example [Matic's POS bridge](https://wallet.matic.network/bridge/).
+{{< /notice >}}
+
+---
+
+## Protect yourself against the price risk of the $: farming in €.
+
+In DeFi, everything is done in dollars. It makes sense, everyone knows, but for a European user it is a significant additional risk. Indeed, if your ambition is to generate enough to live on with DeFi, then this means your output will eventually be in Euro.
+
+
+
+For a European farmer, it may therefore be **interesting to have a DeFi exposure in € to avoid this risk**. At the moment, there are simply no Euro borrowing options other than [Mimo Capital](https://mimo.capital/).
+
+This service allows you to borrow PAR from ETH, wBTC or USDC. The MIMO governance token is also distributed to owners of active vaults as well as to liquidity providers on the PAR/ETH and PAR/USDC Balancer pools.
+
+Nevertheless, the protocol is still recent and the PAR token is not yet supported in the ecosystem, as a collateral on Aave or in a Curve pool for example. So the situation is not yet ideal but it has the merit to exist!
+
+Other DeFi-€ solutions are in development. MakerDAO, for example, has mentioned a Euro-DAI, while Jarvis Network is working on a synthetic stablecoin €, the jEUR.
+
+### How-to
+
+To farm natively in Euros, the best option is still what you can do with EURS. Since the launch of the pool on Curve, there are many options.
+
+* **⚙ Condition:** Owning EURS / sEUR
+* **📅 Time horizon:** 1 month - years
+* **🔮 Expected result:** Growing a capital in Euro-stable
+* **🃏 Bonus / Enabler:** Owning VeCRVs.
+
+
+
+* The **pool Curve** directly offers an attractive yield in CRV even when it is not boosted.
+* To automatically sell the farmed CRVs to compound the return, a vault is ideal. **[Yearn](https://yearn.finance) offers a vault on EURS**.
+* Farming is also possible via the EURS vault of [StakeDAO](https://stakedao.org/), in order to accumulate SDT as well.
+* Or [Harvest](https://harvest.finance) also offers a vault that makes up the bulk of the returns while paying in FARM.
+
+---
+
+I hope these different recipes will inspire you. Make sure you are **[aware of the different money market risks](https://tokenbrice.xyz/money-markets-risk/)**, used for all these strategies.
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
+
+---
+
+[^aaveLMmainnet]: The liquidity mining program StkAAVE was launched on Mars 26 following a governance vote. [More info here](https://twitter.com/AaveAave/status/1386753673104134155?s=20)
+[^aaveLMmatic]: Polygon sponsors a liquidity mining program in MATIC, both on [Aave](https://blog.polygon.technology/defiforall-kicking-off-l2-defi-summer-with-40-million-usd-in-liquidity-mining-rewards-from-4937d7c6e287) and [Curve](https://blog.polygon.technology/continuing-scalability-defi-summer-with-5-million-usd-in-liquidity-mining-rewards-from-polygon-e73a76c5a8ad?gi=9a7b7e130606)
\ No newline at end of file
diff --git a/content/posts/2021/money-market-risks.fr.md b/content/post/2021/money-market-risks.fr.md
similarity index 95%
rename from content/posts/2021/money-market-risks.fr.md
rename to content/post/2021/money-market-risks.fr.md
index 575d44c1..fe30f6e2 100644
--- a/content/posts/2021/money-market-risks.fr.md
+++ b/content/post/2021/money-market-risks.fr.md
@@ -2,30 +2,30 @@
title: "De l'évaluation du risque sur les marchés monétaires en finance décentralisée"
description: "L'évaluation du risque dans la DeFi est actuellement à coté de la plaque ; cet article vous montre pourquoi avec une proposition claire pour évaluer les risques des marchés monétaires. La plupart des observations sont également applicables aux protocoles DeFi de manière plus générale."
date: '2021-02-18T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Finance décentralisée, DEX, Marchés Monétaires, Aave, Compound, risque DeFi, évaluation du risque, risques marchés monétaires, risque aave, risque compound, risque cream, DeFiScore, CREAM, AAVE, COMP, Oracles, Liquidation, Assurance, Safety Module]
+categories: [Analysis, Lending]
+tags: [DeFi, Ethereum, Decentralized finance, DEX, Money Markets, Aave, Compound, Risk Scoring, Risk assessment, money market risk, aave risk, compound risk, cream risk, DeFiScore, CREAM, AAVE, COMP, Oracles, Liquidation, Insurance, Safety Module]
toc: true
tocNum: false
url: marche-monetaire-risque
+image: /img/2021/risk-tranching/cover.gif
+difficulty: "expert"
---
Les marchés monétaires sont au cœur de DeFi. D'un point de vue de haut niveau, oui, ils permettent simplement d'emprunter et de prêter divers actifs. Pourtant **ces fonctions sont comme les deux verbes primitifs de DeFi** à la base de presque tous les cas d'utilisation.
Il y a actuellement trois grands marchés monétaires dans DeFi : Aave, Compound & Cream. Pourtant, tous les services suivants les utilisent, d'une manière ou d'une autre : Yearn Finance, Curve Finance, Alpha Finance, Harvest Finance, DeFiSaver, Saffron, 88MPH, Idle Finance, etc. Pour dire les choses simplement - **les marchés monétaires sont l'un des niveaux de base du DeFi**.
-
-
Les marchés monétaires sont étonnants - à la fois simples et très complexes. Dans cet article, j'essaie de fournir un cadre et quelques indices pour évaluer le risque à différents niveaux.
Pour en savoir plus sur la couche de services qui est en train de se construire sur les marchés monétaires, n'hésitez pas à lire mes articles précédents :
1. Une introduction au tranching via Saffron Finance :
-**[🗡 Du risque ? Oui, mais juste un doigt]({{< relref path="/content/posts/2021/risk-tranching.fr.md" >}})**
+**[🗡 Du risque ? Oui, mais juste un doigt](https://tokenbrice.xyz/fr/tranching-risque-defi/)**
2. Une présentation des protocoles de taux d'intérêt fixes à travers le prisme d'APWine :
-**[🍷 En oenologie comme en DeFi, la patience paie]({{< relref path="/content/posts/2021/firp-apwine.fr.md" >}})**
+**[🍷 En oenologie comme en DeFi, la patience paie](https://tokenbrice.xyz/fr/fixed-interest-rate-protocol-firp-apwine/)**
---
@@ -33,13 +33,7 @@ Pour en savoir plus sur la couche de services qui est en train de se construire
Avant de nous plonger dans le cadre de l'analyse des risques, examinons rapidement la principale solution actuellement utilisée pour évaluer les risques dans le cadre de la DeFi : Consensys CodeFi DeFiScore [^defiscore].
-**DeFiScore est incontestablement compromis puisqu'il donne toujours un score sur DAI plus élevé sur Compound que sur Aave** même avec l'échec de l'oracle du côté du Compound et l'arrivée du module de sécurité du côté d'Aave :
-
-
-
-{{< tweet 1361623363228209152 >}}
-
-
+**DeFiScore est incontestablement compromis puisqu'il donne toujours un score sur DAI plus élevé sur [Compound](https://www.defiscan.info/protocols/compound-v3/ethereum) que sur [Aave](https://www.defiscan.info/protocols/aave/ethereum)** même avec l'échec de l'oracle du côté du Compound et l'arrivée du module de sécurité du côté d'Aave :
L'équipe de Consensys CodeFi a été avertie il y a quelques jours [^1], a reconnu le problème [^8] mais a pourtant **refusé toute mise à jour immédiate du site web, même avec un simple avis ou une clause de non-responsabilité**. À la place, un de leurs membres a proposé une prime de 500 USDC ouverte à toute personne souhaitant mettre à jour la formule [^2]. Cette prime n'a pas encore été réclamée.
@@ -124,7 +118,7 @@ En termes simples, les oracles sont la source de "vérités extérieures". **Les
C'est essentiel, car le **prix perçu** délivré par l'oracle est la **source de vérité pour les décisions de liquidation du protocole**. Si l'oracle dit que le DAI vaut 1,30, alors vous êtes liquidé même si votre position d'emprunt DAI était sûre avec un DAI de 1 $ et que le DAI vaut toujours en réalité 1 $ sur les marchés. C'est déjà arrivé avec Compound, donc ce n'est pas une préoccupation théorique [^4].
-La bonne nouvelle ici est que la réponse est assez simple : ChainLink est largement reconnu comme la solution décentralisée la plus crédible pour les oracles, donc tout marché monétaire qui n'utilise pas au moins en partie ses flux de prix joue avec l'argent de ses utilisateurs, comme l'a fait Compound avec de lourdes pertes. Il semble que la situation ne se soit pas améliorée - malgré le problème, Compound utilise toujours le même oracle centralisé (Coinbase)[^compoundoracle].
+La bonne nouvelle ici est que la réponse est assez simple : [ChainLink](https://www.defiscan.info/protocols/chainlink-oracles/ethereum) est largement reconnu comme la solution décentralisée la plus crédible pour les oracles, donc tout marché monétaire qui n'utilise pas au moins en partie ses flux de prix joue avec l'argent de ses utilisateurs, comme l'a fait Compound avec de lourdes pertes. Il semble que la situation ne se soit pas améliorée - malgré le problème, Compound utilise toujours le même oracle centralisé (Coinbase)[^compoundoracle].
#### Évaluer les oracles
@@ -331,7 +325,7 @@ Sur un tel sujet, encore une fois, aucune mesure ne vous aidera à elle seule. L
Une autre conséquence d'une communauté saine est **l'appui et l'utilisation généralisés dans tout l'écosystème**, avec de nombreux services et produits construits sur le protocole examiné. Ici, malgré le fait que Compound ait été le premier, Aave est aussi maintenant un choix de premier ordre pour tout nouveau protocole construisant une nouvelle primitive financière.
-En effet, les équipes peuvent délibérément favoriser un tel environnement simplement en ayant des membres accessibles et impliqués dans l'espace. En outre, Aave a une initiative de **subventions d'écosystème** [^aavegrants] qui aide à financer des projets construits sur Aave tels qu'[APWine]({{< relref path="/content/posts/2021/firp-apwine.fr.md" >}}). D'autres initiatives liées à la communauté sont un bon exemple, comme les hackathons, les AMA, les livestreams, etc.
+En effet, les équipes peuvent délibérément favoriser un tel environnement simplement en ayant des membres accessibles et impliqués dans l'espace. En outre, Aave a une initiative de **subventions d'écosystème** [^aavegrants] qui aide à financer des projets construits sur Aave tels qu'[APWine](https://tokenbrice.xyz/fr/fixed-interest-rate-protocol-firp-apwine/). D'autres initiatives liées à la communauté sont un bon exemple, comme les hackathons, les AMA, les livestreams, etc.
Ici encore, assurez-vous d'évaluer la qualité et non la quantité. Il est facile de se précipiter sur toutes les initiatives énumérées ci-dessus. Mais il est beaucoup plus difficile de le faire correctement, d'une manière qui ait un sens pour la communauté et qui la fasse avancer.
@@ -392,7 +386,7 @@ Si vous n'êtes pas d'accord avec cette déclaration, **n'hésitez pas à me con
---
-Rappel : ce blog est **[l'un des rares sites web de l'espace à ne pas piller vos données]({{< relref path="/content/posts/2020/hello-world.fr.md" >}})** : je n'utilise pas Google Analytics & autres trackers intrusifs.
+Rappel : ce blog est **[l'un des rares sites web de l'espace à ne pas piller vos données](https://tokenbrice.xyz/fr/hello-world/)** : je n'utilise pas Google Analytics & autres trackers intrusifs.
{{< notice tip >}}
@@ -434,4 +428,4 @@ Vous pouvez trouver des informations complémentaires sur les fait, événements
1. **Simplification** : les aTokens maintiennent un ratio de 1:1 par rapport à l'actif de base tandis que les cTokens ont un taux de change croissant par rapport à leur actif de base.
2. **Comptabilité et intégrations plus faciles** : la correspondance 1:1 des aTokens facilite grandement leur intégration - il n'est pas nécessaire d'aller chercher des données supplémentaires. Avec Compound, tout service interagissant avec des cTokens doit rechercher le taux de change cToken / jeton de base correspondant.
3. **Intérêts dynamiques et compréhensibles** : les tokens a et c produisent des intérêts de manière dynamique. Cependant, là encore, en raison du design plus élégant et plus simple des aTokens, l'expérience est plus fluide avec les aTokens (dépôt, rassuré par la correspondance 1:1, le nombre augmente)
- 4. **Intégrations plus puissantes** : aToken permet de nouveaux cas d'utilisation, surtout si vous prenez en compte les autres caractéristiques d'Aave. Par exemple, il existe un vault de Yearn qui utilise aLINK pour emprunter de l'USDC sur les dépôts des utilisateurs afin de farmer avec eux et de régler les revenus pour plus d'aLINK.
\ No newline at end of file
+ 4. **Intégrations plus puissantes** : aToken permet de nouveaux cas d'utilisation, surtout si vous prenez en compte les autres caractéristiques d'Aave. Par exemple, il existe un vault de Yearn qui utilise aLINK pour emprunter de l'USDC sur les dépôts des utilisateurs afin de farmer avec eux et de régler les revenus pour plus d'aLINK.
diff --git a/content/posts/2021/money-market-risks.md b/content/post/2021/money-market-risks.md
similarity index 95%
rename from content/posts/2021/money-market-risks.md
rename to content/post/2021/money-market-risks.md
index c3fe1d6a..97214666 100644
--- a/content/posts/2021/money-market-risks.md
+++ b/content/post/2021/money-market-risks.md
@@ -2,30 +2,30 @@
title: "Assessing risk in decentralized finance: a handbook for money markets"
description: "DeFi risk scoring is broken; this article shows you why with a clear breakdown of how to assess the risks of money markets; most of the observations are also applicable to DeFi protocols more broadly."
date: '2021-02-18T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
+categories: [Analysis, Lending]
tags: [DeFi, Ethereum, Decentralized finance, DEX, Money Markets, Aave, Compound, Risk Scoring, Risk assessment, money market risk, aave risk, compound risk, cream risk, DeFiScore, CREAM, AAVE, COMP, Oracles, Liquidation, Insurance, Safety Module]
toc: true
tocNum: false
url: money-markets-risk
+image: /img/2021/risk-tranching/cover.gif
+difficulty: "expert"
---
Money markets are at the heart of DeFi. From a high-level perspective, yes, they simply enable the borrowing and lending of various assets. Yet **those functions are like the two primitive verbs of DeFi** at the base of pretty much all use cases.
There are three major money markets right now in DeFi: Aave, Compound & Cream. Yet all the following services use them, one way or another: Yearn Finance, Curve Finance, Alpha Finance, Harvest Finance, DeFiSaver, Saffron, 88MPH, Idle Finance, etc. To put it simply - **money markets are one of the root-level of DeFi**.
-
-
Money markets are amazing - simple yet very intricate. In this article, I try to provide a framework and some clues to assess the risk at different levels.
To dive more into the service layer currently being built on top of money markets, feel free to read my previous articles:
1. An introduction to tranching focusing on Saffron Finance:
-**[🗡 Risk? Yes please, but exactly how I like it]({{< relref path="/content/posts/2021/risk-tranching.md" >}})**
+**[🗡 Risk? Yes please, but exactly how I like it](https://tokenbrice.xyz/risk-tranching-defi/)**
2. A presentation of fixed interest rate protocols through the lense of APWine:
-**[🍷 Yields are like fine wines, the secret lies in the brewing process]({{< relref path="/content/posts/2021/firp-apwine.md" >}})**
+**[🍷 Yields are like fine wines, the secret lies in the brewing process](https://tokenbrice.xyz/fixed-interest-rate-protocol-firp-apwine/)**
---
@@ -33,13 +33,7 @@ To dive more into the service layer currently being built on top of money market
Before we dive into the risk analysis framework, let's quickly discuss the current leading solution used to evaluate risk in DeFi: Consensys CodeFi DeFiScore.[^defiscore]
-**DeFiScore is undisputedly compromised since it's still giving DAI a higher rate on Compound than Aave** even with the oracle failure on the Compound side and the arrival of the Safety Module on Aave's side:
-
-
-
-{{< tweet 1361623363228209152 >}}
-
-
+**DeFiScore is undisputedly compromised since it's still giving DAI a higher rate on [Compound](https://www.defiscan.info/protocols/compound-v3/ethereum) than [Aave](https://www.defiscan.info/protocols/aave/ethereum)** even with the oracle failure on the Compound side and the arrival of the Safety Module on Aave's side:
The Consensys CodeFi team was notified a few days ago[^1], acknowledged the issue[^8] but yet **refused any immediate to update the website even with just notice or disclaimer**. Instead, one of their members proposed a 500 USDC bounty open for anyone willing to update the formula[^2]. It has yet to be claimed.
@@ -124,7 +118,7 @@ Simply put, the oracles are the source for "outside truths". **Blockchains are o
It's essential, as the **perceived price** delivered by the oracle is the **source of truth for the protocol's liquidation decisions**. If the oracle says DAI is worth 1.30, then you are liquidated even if your DAI-borrowing position was safe on a $1 DAI and DAI is still actually worth $1 on the markets: the oracle is the source of truth. It happened already with Compound, so it's not a theoretical concern.[^4]
-The good news here is that the answer is quite simple: ChainLink is widely recognized as the most credible decentralized oracle solution, so any money market not using at least partly their price feeds is gambling with its users' money, as Compound did with significant lossses. It seems like the situation has not improved - despite the failure Compound still uses the same centralized oracle (Coinbase) and a proposal suggesting a switch to ChainLink was refused. [^compoundoracle]
+The good news here is that the answer is quite simple: [ChainLink](https://www.defiscan.info/protocols/chainlink-oracles/ethereum) is widely recognized as the most credible decentralized oracle solution, so any money market not using at least partly their price feeds is gambling with its users' money, as Compound did with significant lossses. It seems like the situation has not improved - despite the failure Compound still uses the same centralized oracle (Coinbase) and a proposal suggesting a switch to ChainLink was refused. [^compoundoracle]
#### Assessing oracles
@@ -219,7 +213,7 @@ On top of insurance, money markets can also have reserves. Compound is the pione
So looking at the available numbers, here are our quick maths:
`Safety Ratio = USD value of insurance / Total borrow on the money market`
-1. **🛡 Aave = 53%** | $1.765 B in the Safety Module for $1.1B borrowed accross V1+V2 ($572M V1, $437M V2)
+1. **🛡 Aave = 53%** | $1.765 B (600M can be mobilized) in the Safety Module for $1.1B borrowed accross V1+V2 ($572M V1, $437M V2)
2. **🕯 Compound = 0.24%** | $4.3B borrowed on a $10M safety capital.
3. **💀 Cream = 0%** | As far as I know, Cream has no or highly limited (low amounts) native insurance module.
@@ -324,7 +318,7 @@ On such a topic, again, no metrics will help you just by themselves. The gist is
Another consequence of a healthy community is **widespread support and usage across the ecosystem**, with many services and products built "on top of" the protocol examined. Here despite Compound's lead being the first mover, Aave is also now a prime choice for any new protocol building a new financial primitive.
-Indeed, teams can purposely foster such an environment simply by having members accessible and involved in the space. Besides, Aave has an **ecosystem grants**[^aavegrants] initiative helping to fund projects built on top of Aave such as [APWine offering fixed yields]({{< relref path="/content/posts/2021/firp-apwine.md" >}}). Other community-related initiatives are a healthy tell, such as hackathons, AMAs, livestreams, etc.
+Indeed, teams can purposely foster such an environment simply by having members accessible and involved in the space. Besides, Aave has an **ecosystem grants**[^aavegrants] initiative helping to fund projects built on top of Aave such as [APWine offering fixed yields](https://tokenbrice.xyz/fixed-interest-rate-protocol-firp-apwine/). Other community-related initiatives are a healthy tell, such as hackathons, AMAs, livestreams, etc.
Again here - make sure to **assess the quality, not the quantity**. It's easy to rush out all the initiatives listed above. But doing it right, in a way that makes sense for the community and pushes it forward is much harder.
@@ -385,7 +379,7 @@ If you do not agree with this statement, feel free to challenge me. **I'm eager
---
-Reminder: this blog is **[one of the few websites of the space not pillaging your data]({{< relref path="/content/posts/2020/hello-world.md" >}})** through the usage of Google Analytics and the likes.
+Reminder: this blog is **[one of the few websites of the space not pillaging your data](https://tokenbrice.xyz/hello-world/)** through the usage of Google Analytics and the likes.
## IV. Notes & References
@@ -414,4 +408,4 @@ You can find additional information on each fact, event or figure mentioned in t
1. **Simpler**: aTokens maintain a 1:1 ratio against the base asset while cTokens have an increasing exchange rate against their base assets.
2. **Easier accounting & integrations**: aTokens 1:1 correspondence makes them much easier to interact with - there is no need to fetch any additional data. With Compound, any service interacting with cTokens needs to fetch the corresponding the cToken/BaseToken exchange rate.
3. **Dynamic and understandable interest**: both a & c tokens accrue interest dynamically. However, here again, because of aTokens' more elegant and straightforward design, the experience is more fluid with aTokens (deposit, reassured by 1:1 correspondence, number go up)
- 4. **More potent integrations**: aToken allows for novel use cases, especially if you take into account the other features of Aave. For instance, there is a Yearn vault harnessing aLINK to borrow USDC from users' deposits to farm with them and settle the income for more aLINK.
\ No newline at end of file
+ 4. **More potent integrations**: aToken allows for novel use cases, especially if you take into account the other features of Aave. For instance, there is a Yearn vault harnessing aLINK to borrow USDC from users' deposits to farm with them and settle the income for more aLINK.
diff --git a/content/posts/2021/nft-usecases.fr.md b/content/post/2021/nft-usecases.fr.md
similarity index 93%
rename from content/posts/2021/nft-usecases.fr.md
rename to content/post/2021/nft-usecases.fr.md
index 3f0c5848..1fa15385 100644
--- a/content/posts/2021/nft-usecases.fr.md
+++ b/content/post/2021/nft-usecases.fr.md
@@ -2,11 +2,13 @@
title: "Les tokens non-fongibles (NFTs) : le poids et l'apport de l'histoire vérifiable "
description: "Une balade dans le monde des NFTs pour comprendre l'intérêt de la rareté numérique prouvable et son apport pour des utilisations communautaires ou artistiques."
date: '2021-03-31T01:13:50.191Z'
-categories: [🃏 NFT]
-tags: [Collectibles, Tokens Non Fongibles, NFT, Achat de NFT, Marché NFT, Farming NFT, NFT communautaire, CryptoPunk, NFT et Art]
+categories: [NFT]
+tags: [Collectibles, Non Fungible Tokens, NFT, NFT Markets, NFT Farming, CryptoPunk, Arts and NFTs]
toc: true
tocNum: true
url: nft-cas-d'utilisation
+image: /img/2021/nft-usecases/88DeLo.png
+difficulty: "beginner"
---
Les tokens non-fongibles attirent beaucoup l’attention dernièrement. D'une part, le grand public se gratte la tête quant aux records toujours plus hauts observés sur les ventes phares, désormais couvertes dans la presse généraliste[^beeple]. D'autre part, des artistes encore non initiés aux blockchains réalisent le potentiel qu'offre la **désintermédiation** ainsi que les possibilités offertes par **la nature programmable de cette nouvelle forme d'art**. Entre les deux, se mêle un public varié allant du collectionneur occasionnel au spéculateur aguerri.
@@ -15,9 +17,7 @@ Une chose est sûre : les NFTs ne laissent pas indifférent. En effet, en **alli
Aujourd'hui j'aimerais laisser la théorie de côté autant que possible pour me concentrer sur **les usages pratiques observés avec ces NFTs.** Nous analyserons donc deux caractéristiques fondamentales des NFTs - **leur dimension communautaire** et leur **capacité à devenir des marqueurs sociaux**. Une fois ces deux dimensions établies, nous pourrons considérer différents cas d'utilisation.
-
-
-Je ne reviens pas sur les caractéristiques fondamentales offertes par les NFTs. J'ai publié un article en 2018 qui couvrait déjà l'essentiel et je suis toujours en accord avec les éléments présentés dans celui-ci : **[Les tokens non fongibles expliqués par Tortank et Dracaufeu]({{< relref path="/content/posts/2018/nft.fr.md" >}})**.
+Je ne reviens pas sur les caractéristiques fondamentales offertes par les NFTs. J'ai publié un article en 2018 qui couvrait déjà l'essentiel et je suis toujours en accord avec les éléments présentés dans celui-ci.
{{< notice note >}}
@@ -86,11 +86,6 @@ Le gros de la collection est ainsi constitué des Punks "moyens", avec 2 (3560 u
Les Punks sont désormais **au centre de tout un écosystème** qui va des intégrations techniques (par exemple le wrapper ERC-721 ou leur intégration dans des index NFTs[^3]) aux intégrations artistiques, comme les PicassoPunk :
-
-
-{{< tweet 1376379683890073603 >}}
-
-
Tout comme exposer de l'art contemporain choisi avec goût dans son salon projette un certain statut, **afficher son Punk devient un symbole qui va bien au-delà de l'objet en lui-même.** Il peut désormais être de bon goût d'utiliser un Punk de sa collection comme photo de profil sur Twitter. Bien sûr, plus celui-ci est unique et rare, plus l'audience érudite sera intriguée.
@@ -100,6 +95,8 @@ L'analyse des CryptoPunks permet de comprendre de nombreuses choses fondamentale
## Les principaux cas d'usage des NFTs
+Pour un tour d'horizon plus exhaustif du monde des NFTs, je vous invite chaudement à lire l'article publié sur Ethereum-France : **[🗺 États des lieux des tokens non fongibles](https://www.ethereum-france.com/etat-des-lieux-des-tokens-non-fongibles-nfts/)**
+
### Les services de création et de vente
La méthode la plus simple pour acquérir ses premiers NFTs reste encore de les acheter. C'est **loin d'être la seule méthode,** comme nous le verrons plus bas mais avant cela, voyons rapidement les principales plateformes et leur modalités.
@@ -108,7 +105,7 @@ Le site le plus couramment utilisé est probablement [OpenSea](https://opensea.i
D'autres services existent, avec des approches plus curatives, comme par exemple [Foundation](https://foundation.app/) qui est sélectif sur ses artistes et où chaque œuvre est un exemplaire unique.
-Chaque service vient avec des modalités différentes et des types de NFT parfois différents également : **[ERC-721 ou 1155 expliqué ici]({{< relref path="/content/posts/2018/nft.fr.md" >}})**. Les règles qui régissent leurs enchères et le partage de revenus affectent également l'orientation générale de la plateforme. Pour commencer à collectionner avec goût, il est bon de savoir au minimum ce que l'on achète !
+Chaque service vient avec des modalités différentes et des types de NFT parfois différents également. Les règles qui régissent leurs enchères et le partage de revenus affectent également l'orientation générale de la plateforme. Pour commencer à collectionner avec goût, il est bon de savoir au minimum ce que l'on achète !
### NFT + Jeux-vidéos, sous toutes leurs formes
@@ -155,16 +152,10 @@ Meme a désormais plusieurs mois et est devenu un service qui a réussi à dépa
Ainsi, Meme a servi de support à un jeu avec BadgerDAO. En déposant des tokens bBADGER ou UNIv2 BADGER/wBTC, les utilisateurs ont pu farmer 6 NFTs différents relatifs à l'univers du projet. **Le premier joueur qui a assemblé les 6 NFTs différents a pu ouvrir un coffre** (smart contract) et recevoir une belle quantité de tokens BADGER en bonus. En outre, la possession de ces NFTs a servi de facteur bonus sur la distribution (airdrop) du token DIGG. [La seconde partie du jeu NFT de Badger](https://badgerdao.medium.com/badger-x-meme-nft-honeypot-part-ii-diamond-hands-7111d38b5df4) vient de commencer.
-D'autres services utilisent Meme avec une approche similaire. Par exemple, la plateforme YOP propose de [farmer des "tickets"](https://dontbuymeme.com/collections/yop) de différentes raretés. Ils permettront potentiellement **un accès avant le grand public, une fois que le service sera disponible.** On retrouve ainsi la dimension communautaire des NFTs.
+D'autres services utilisent Meme avec une approche similaire. Par exemple, la plateforme YOP propose de farmer des "tickets" de différentes raretés. Ils permettront potentiellement **un accès avant le grand public, une fois que le service sera disponible.** On retrouve ainsi la dimension communautaire des NFTs.
88MPH fait quelque chose de similaire **en offrant des NFTs aux plus grands utilisateurs de ses nouveaux produits quelques semaines après leur lancement.** La possession d'un tel NFT serait également un excellent critère pour cibler les utilisateurs les plus pertinents pour tester les nouvelles versions et participer plus activement au développement du projet (pure illustration de ma part, il n'y a pas eu d'annonce officielle en ce sens à ma connaissance).
-
-
-{{< tweet 1370853933057503233 >}}
-
-
-
---
## Aller toujours plus loin avec des NFTs
@@ -196,12 +187,6 @@ Bien sûr, **les cas d'utilisation de ces NFTs restent encore très primitif**,
Dans cet article, je n'ai pas abordé un point essentiel sur les NFTs : **la conservabilité des médias qui leur sont associés**. Pour qu'il soit réellement persistant et résistant à toute censure, le NFT doit incorporer une référence directe vers le fichier média associé, lui-même hébergé en utilisant un support résilient comme l'IPFS. Pour plus de détails sur la question, je vous renvoie vers cette discussion claire et détaillée sur Twitter :
-
-
-{{< tweet 1372163423446917122 >}}
-
-
-
---
## À la découverte des NFTs
@@ -212,7 +197,7 @@ Si vous préférez les formats plus interactifs, sachez que j'anime désormais u
---
-*🙏 Un grand merci à HHK, Charles, Thomas, Erwan & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en anglais.*
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
---
diff --git a/content/posts/2021/nft-usecases.md b/content/post/2021/nft-usecases.md
similarity index 94%
rename from content/posts/2021/nft-usecases.md
rename to content/post/2021/nft-usecases.md
index 9ef79b2a..e163ff65 100644
--- a/content/posts/2021/nft-usecases.md
+++ b/content/post/2021/nft-usecases.md
@@ -2,11 +2,13 @@
title: "Non-fungible tokens (NFTs): the weight and contribution of ascertainable history "
description: "A walk through the world of NFTs to understand the value of provable digital scarcity and its contribution to community or artistic uses."
date: '2021-04-09T01:13:50.191Z'
-categories: [🃏 NFT]
+categories: [NFT]
tags: [Collectibles, Non Fungible Tokens, NFT, NFT Markets, NFT Farming, CryptoPunk, Arts and NFTs]
toc: true
tocNum: true
url: nft-usecases
+image: /img/2021/nft-usecases/88DeLo.png
+difficulty: "beginner"
---
Non-fungible tokens are attracting a lot of attention lately. On the one hand, the general public is scratching its head about the ever-rising records observed on flagship sales, now covered in the mainstream press[^1]. On the other hand, artists still not initiated to blockchains realize the potential offered by **disintermediation** as well as the possibilities offered by **the programmable nature of this new art form**. In between, a diverse audience ranging from the casual collector to the seasoned speculator.
@@ -15,9 +17,7 @@ One thing is certain: NFTs leave no one indifferent. Indeed, by **combining the
Today I would like to leave theory aside as much as possible and focus on **the practical uses observed with these NFTs.** We will therefore analyze two fundamental characteristics of NFTs - **their community dimension** and their **ability to become social markers**. Once these two dimensions are established, we can consider different use cases.
-
-
-I'm not going to explain the basic features offered by NFTs. I published an article in 2018 that covered the basics and which is still relevant to date. **[Non-fungible Tokens Explained by Blastoise and Charizard]({{< relref path="/content/posts/2018/nft.md" >}})**.
+I'm not going to explain the basic features offered by NFTs. I published an article in 2018 that covered the basics and which is still relevant to date.
{{< notice note >}}
@@ -85,12 +85,6 @@ The biggest part of the collection is made up with "common" Punks, with 2 ( 3560
Punks are now at the center of a whole ecosystem : from technical integrations (with the ERC-721 wrapper for example or into NFTs indexes[^4]) to the artistic field such as the PicassoPunk :
-
-
-{{< tweet 1376379683890073603 >}}
-
-
-
Just as exhibiting well-chosen modern art in a living room gives a special aura, **displaying your Punk becomes a symbol that goes far beyond the token itself.** It may now be in good taste to use a Punk from your collection as a profile picture on Twitter. Of course, the more unique and rare it is, the more intrigued the savvy audience will be.
The analysis of CryptoPunks allows us to understand many fundamental things to assimilate the use of NFTs. Nevertheless, the use cases for NFTs are much more diversified. So I suggest you explore a few more!
@@ -107,7 +101,7 @@ The most commonly used site is probably [OpenSea](https://opensea.io/), which al
Other services exist, with more curatorial approaches, such as [Foundation](https://foundation.app/) which is **selective about its artists and where each work is a unique copy.**
-Each service comes with different modalities and sometimes different NFT types as well: **[ERC-721 or 1155 explained here]({{< relref path="/content/posts/2018/nft.md" >}})**. The rules that govern their auctions and revenue sharing also affect the overall direction of the platform. To start collecting with taste, it's good to know at least what you're buying!
+Each service comes with different modalities and sometimes different NFT types as well: **[ERC-721 or 1155 explained here](https://tokenbrice.xyz/nft/)**. The rules that govern their auctions and revenue sharing also affect the overall direction of the platform. To start collecting with taste, it's good to know at least what you're buying!
### NFTs + Video games, in all forms
@@ -147,7 +141,7 @@ Here is a primitive vision of the "endgame" that I foresee, at the crossroads of
If NFTs are coming to games, the reverse is also true: games and NFTs are also coming into DeFi.
-It all started very simply, with an approach that every DeFian knows well: **This is the concept of [Meme](http://dontbuymeme.com/), where the user stakes MEME tokens to obtain points (pineapples) used to obtain the desired NFTs.**
+It all started very simply, with an approach that every DeFian knows well: **This is the concept of Meme, where the user stakes MEME tokens to obtain points (pineapples) used to obtain the desired NFTs.**
There are no other fees than gas costs of the various operations and potentially a minting fee paid in ETH for some coins. Even so, many coins are highly desirable and wanted on the secondary market.[^5]
@@ -155,15 +149,10 @@ Meme is now several months old and has become a service that has managed to surp
For example, Meme was used to support a game with BadgerDAO. By depositing bBADGER or UNIv2 BADGER/wBTC tokens, users could farm 6 different NFTs related to the project universe. The first player to assemble all 6 different NFTs was able to open a smart contract and receive a nice amount of BADGER tokens as a bonus. **In addition, the possession of these NFTs served as a bonus factor on the distribution (airdrop) of the DIGG token.** The [second part of the Badger NFT game](https://badgerdao.medium.com/badger-x-meme-nft-honeypot-part-ii-diamond-hands-7111d38b5df4) has just begun.
-Other services use Meme with a similar approach : the YOP platform proposes to [farm "tickets"](https://dontbuymeme.com/collections/yop) of different rarities. They will potentially allow **access before the general public, once the service is available.** Here we find the community dimension of NFTs.
+Other services use Meme with a similar approach : the YOP platform proposes to farm "tickets" of different rarities. They will potentially allow **access before the general public, once the service is available.** Here we find the community dimension of NFTs.
88MPH is doing something similar **by offering NFTs to the biggest users of its new products a few weeks after their launch**. Holding such an NFT would also be an excellent criterion to target the most relevant users to test the new versions and participate more actively in the development of the project (purely an illustration on my part, there has been no official announcement in this sense to my knowledge).
-
-
-{{< tweet 1370853933057503233 >}}
-
-
---
@@ -196,12 +185,6 @@ Of course, **the use cases of NFTs are still very primitive**, due to their main
In this article, I did not address a key point about NFTs: **the persistence of their associated media**. To be truly persistent and censorship resistant, the NFT must incorporate a direct reference to the associated media file, which is itself hosted using a resilient medium like IPFS. For more details on the issue, I refer you to this clear and detailed discussion on Twitter:
-
-
-{{< tweet 1372163423446917122 >}}
-
-
-
---
## Discovering NFTs
diff --git a/content/posts/2021/pegged-assets.fr.md b/content/post/2021/pegged-assets.fr.md
similarity index 96%
rename from content/posts/2021/pegged-assets.fr.md
rename to content/post/2021/pegged-assets.fr.md
index 080798e2..3b55c196 100644
--- a/content/posts/2021/pegged-assets.fr.md
+++ b/content/post/2021/pegged-assets.fr.md
@@ -2,11 +2,13 @@
title: "Actifs à vocation stable sur Ethereum : quelles approches et quels enjeux ?"
description: "La quête de stabilité sur Ethereum : aperçu des différentes approches de stabilisation et indexation d'actifs pour en comprendre leurs enjeux."
date: '2021-03-23T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Finance décentralisée, DEX, Marchés Monétaires, Aave, Compound, Reflexer, Stablecoin, MakerDAO, Basis Cash, Empty Set Dollar, Dynamic Set Dollar]
+categories: [Stablecoin, Lending, Yield]
+tags: [DeFi, Ethereum, Finance décentralisée, DEX, Aave, Compound, Reflexer, Stablecoin, MakerDAO, Basis Cash, Empty Set Dollar, Dynamic Set Dollar]
toc: true
tocNum: true
url: actifs-stables-ethereum
+image: /img/2021/pegged-assets/money-god-meme.png
+difficulty: "intermediate"
---
Aujourd'hui, je veux traiter un sujet essentiel pour Ethereum et les autres blockchains et souvent mal compris : **les actifs "stables"**, qui suivent le prix d'un actif de référence. Avant d'étudier les différentes approches qui permettent de produire un tel actif, on va d'abord commencer par un niveau d'analyse plus élevé :
@@ -23,8 +25,6 @@ Dans cet article, faute de traduction satisfaisante je vais parler de "pegged-as
---
-
-
Si vous connaissez déjà bien les différents mécanismes de pegging, vous pouvez sauter [directement vers la section sur Reflexer](#zoom-sur-le-rai-de-reflexer).
## Représentation d'actifs sur la chaîne Ethereum
@@ -33,7 +33,7 @@ Le volume d'émission et d'utilisation des pegged-assets (actifs indexés) a exp
Pour se faire, **l'approche utilisé à un haut niveau est la tokénisation** : on représente un actif qui vient d'une autre chaîne / d'un autre monde sur Ethereum, comme par exemple wBTC (correspondant à 1 BTC sur la chaîne Bitcoin) ou encore USDC (correspondant à 1 USD dans le compte en banque de Circle, en très bref).
-Cela permet de **répondre à une des inquiétudes les plus communes pour le grand public : [les cryptos sont des actifs volatiles]({{< relref path="/content/posts/2018/stablecoins.fr.md" >}})**.
+Cela permet de **répondre à une des inquiétudes les plus communes pour le grand public : [les cryptos sont des actifs volatiles](https://tokenbrice.xyz/fr/stablecoins/)**.
En outre, **l'essor des stablecoins est allé de pair avec l'essor de la DeFi**, pourquoi ? Il y a pour moi de nombreuses raisons dont voici les principales :
@@ -42,7 +42,7 @@ En outre, **l'essor des stablecoins est allé de pair avec l'essor de la DeFi**,
### Pourquoi les emprunts se font essentiellement en stablecoins ?
-[Les marchés monétaires]({{< relref path="/content/posts/2021/money-market-risks.fr.md" >}}) permettent à leur utilisateurs d'emprunter des actifs en utilisant d'autres actifs comme garanties (collatéral). Le cas d'usage le plus fréquent correspond au schéma suivant :
+[Les marchés monétaires](https://tokenbrice.xyz/fr/marche-monetaire-risque/) permettent à leur utilisateurs d'emprunter des actifs en utilisant d'autres actifs comme garanties (collatéral). Le cas d'usage le plus fréquent correspond au schéma suivant :
1. L'utilisateur dépose un actif volatile, comme ETH, wBTC ou encore LINK
2. Il l'utilise comme collatéral pour **emprunter un actif stable, comme USDC ou DAI**.
@@ -136,7 +136,7 @@ Le plus souvent, le principal paramètre pris en compte est tout simplement **le
Pour plus de contexte sur cette idée de "smart contract banque centrale", vous pouvez lire mon premier article sur les stablecoins algorithmiques :
-**[L'état et le futur des stablecoins algorithmiques]({{< relref path="/content/posts/2020/algorithmic-stablecoins.fr.md" >}})**
+**[L'état et le futur des stablecoins algorithmiques](https://tokenbrice.xyz/fr/algorithmic-stablecoins/)**
#### Approches algorithmiques
@@ -145,7 +145,7 @@ Pour plus de contexte sur cette idée de "smart contract banque centrale", vous
J'analyse les principales approches pour produire des stablecoins algorithmiques dans un article dédié :
-**[⚖ L'histoire de deux modèles de seigneuriage : Basis contre ESD]({{< relref path="/content/posts/2021/seigniorage-basis-vs-esd.fr.md" >}})**
+**[⚖ L'histoire de deux modèles de seigneuriage : Basis contre ESD](https://tokenbrice.xyz/fr/seigniorage-basis-esd/)**
Ainsi, des projets comme ESD, DSD, ou encore Basis Cash ont été les pionniers des stablecoins algorithmiques. Néanmoins tous ces systèmes sont aujourd'hui un peu dans une abysse : cela fait **bien longtemps que leur "stablecoin" vaut largement moins d'un dollar**.
@@ -251,4 +251,4 @@ J'espère que cet article vous aidera à mieux comprendre l'essor des pegged-ass
Enfin, que vous soyez convaincu par Reflexer ou non, je vous invite grandement à creuser ce système, tout comme je vous invite régulièrement à explorer le fonctionnement d'Aave, de Curve ou d'Unslashed. Tous les quatre sont des systèmes très pertinents et innovants : les comprendre en profondeur vous permettra d'internaliser de nombreuses choses essentielles pour comprendre la finance décentralisée en général.
-*🙏 Un grand merci à HHK, Charles, Thomas, Erwan & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en anglais.*
\ No newline at end of file
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/posts/2021/pegged-assets.md b/content/post/2021/pegged-assets.md
similarity index 94%
rename from content/posts/2021/pegged-assets.md
rename to content/post/2021/pegged-assets.md
index 292210d6..ddde17d6 100644
--- a/content/posts/2021/pegged-assets.md
+++ b/content/post/2021/pegged-assets.md
@@ -2,11 +2,13 @@
title: "Exploring stable assets on Ethereum: approaches & endgame"
description: "The quest for stability on Ethereum: an overview of the different approaches to stabilization and asset indexing to understand their issues."
date: '2021-03-23T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Finance décentralisée, DEX, Marchés Monétaires, Aave, Compound, Reflexer, Stablecoin, MakerDAO, Basis Cash, Empty Set Dollar, Dynamic Set Dollar]
+categories: [Stablecoin, Lending, Yield]
+tags: [DeFi, Ethereum, Finance décentralisée, DEX, Aave, Compound, Reflexer, Stablecoin, MakerDAO, Basis Cash, Empty Set Dollar, Dynamic Set Dollar]
toc: true
tocNum: true
url: ethereum-stable-assets
+image: /img/2021/pegged-assets/money-god-meme.png
+difficulty: "intermediate"
---
Today, I want to cover an essential topic for Ethereum and other blockchains and often misunderstood: **"stable" assets**, which track the price of a reference asset. Before looking at the different approaches to producing such an asset, we'll first start with a higher level of analysis:
@@ -19,8 +21,6 @@ Once these foundations are established, we will have all the tools to **figure o
---
-
-
If you are already familiar with the different pegging mechanisms, you can jump [directly to the section on Reflexer](#focus-on-reflexers-rai).
## Assets standardization on the Ethereum's blockchain
@@ -29,7 +29,7 @@ The volume of issuance and use of pegged-assets has exploded last year, but befo
To do this, **the method used at a high level is tokenization**: we represent an asset that comes from another chain / world on Ethereum, such as wBTC (corresponding to 1 BTC on the Bitcoin chain) or USDC (corresponding to 1 USD in Circle's bank account).
-This **addresses one of the most common concerns for the general public: [cryptos are volatile assets]({{< relref path="/content/posts/2018/stablecoins.md" >}})**.
+This **addresses one of the most common concerns for the general public: [cryptos are volatile assets](https://tokenbrice.xyz/stablecoins/)**.
Also, **the rise of stablecoins has gone hand in hand with the rise of DeFi**, why? According to me, there are many reasons, the main ones being:
@@ -38,7 +38,7 @@ Also, **the rise of stablecoins has gone hand in hand with the rise of DeFi**, w
### Why are borrowings mostly in stablecoins?
-[The money markets]({{
}}) allow their users to borrow assets using other assets as collateral. The most frequent use case corresponds to the following pattern.
+[The money markets](https://tokenbrice.xyz/money-markets-risk/) allow their users to borrow assets using other assets as collateral. The most frequent use case corresponds to the following pattern.
1. The user deposits a volatile asset, such as ETH, wBTC or LINK
2. He uses it as collateral to **borrow a stable asset, like USDC or DAI**.
@@ -132,7 +132,7 @@ Most often, the main parameter taken into account is simply **the price of the s
For more background on this "smart contract central bank" idea, you can read my first article on algorithmic stablecoins:
-**[L'état et le futur des stablecoins algorithmiques]({{< relref path="/content/posts/2020/algorithmic-stablecoins.md" >}})**
+**[L'état et le futur des stablecoins algorithmiques](https://tokenbrice.xyz/algorithmic-stablecoins/)**
#### Algorithmic approaches
@@ -141,7 +141,7 @@ For more background on this "smart contract central bank" idea, you can read my
I analyze the main approaches to produce algorithmic stablecoins in a dedicated article :
-**[⚖ L'histoire de deux modèles de seigneuriage : Basis contre ESD]({{< relref path="/content/posts/2021/seigniorage-basis-vs-esd.md" >}})**
+**[⚖ L'histoire de deux modèles de seigneuriage : Basis contre ESD](https://tokenbrice.xyz/seigniorage-basis-esd/)**
Thus, projects like ESD, DSD, or Basis Cash were the pioneers of algorithmic stablecoins. However, all of these systems are now in a bit of an abyss: **their stablecoins have been worth well under a dollar for a long time**.
@@ -185,11 +185,11 @@ Don't panic if you don't immediately understand why this system is innovative an
### Censorship-resistant collateral
-**Initially, MakerDAO only accepted Ether as collateral**. With the first significant update of the system - the [Multi Collateral DAI](https://makerdao.com/whitepaper/White%20Paper%20-The%20Maker%20Protocol_%20MakerDAO%E2%80%99s%20Multi-Collateral%20Dai%20(MCD)%20System-FINAL-%20021720.pdf) - The community was perplexed by this decision, especially because of the choice of accepted tokens. Thus, BAT was one of the first new collateral while LINK, a token with volume and liquidity already far superior to BAT at the time, only arrived much later.
+**Initially, MakerDAO only accepted Ether as collateral**. With the first significant update of the system - the [Multi Collateral DAI](https://makerdao.com/whitepaper/White%20Paper%20-The%20Maker%20Protocol_%20MakerDAO%E2%80%99s%20Multi-Collateral%20Dai%20(MCD)%20System-FINAL-%20021720.pdf) - more tokens became usable as collateral.
The community was perplexed by this decision, especially because of the choice of accepted tokens. Thus, BAT was one of the first new collateral while LINK, a token with volume and liquidity already far superior to BAT at the time, only arrived much later.
-Beyond this **difficult to understand valuation**, the crux of the problem is that **many collaterals now accepted are censorable**: wBTC, RenBTC, USDC, TUSD, etc. This reduces the trustlessness of MakerDAO since at different times up to 50% of all DAIs were hit from censorable collaterals.
+Beyond this **difficult to understand valuation**, the crux of the problem is that **many collaterals now accepted are censorable**: wBTC, RenBTC, USDC, TUSD, etc. This reduces the trustlessness of MakerDAO since at different times up to 50% of all DAIs were minted from censorable collaterals.
The figure is now reduced, but the concern remains. Furthermore, the addition of a special USDC vault was criticized during Black Thursday for helping DAI regain its peg - but it also made MakerDAO even more dependent on such collaterals.
@@ -248,4 +248,4 @@ I hope this article helps you better understand the rise of pegged-assets on Eth
Finally, whether you are convinced by Reflexer or not, I strongly encourage you to dig into this system, just as I regularly invite you to explore the workings of Aave, Curve or Unslashed. All four are very relevant and innovative systems: understanding them in depth will allow you to internalize many essential things to understand decentralized finance in general.
-*🙏 Huge thanks to HHK, Charles, Th., HarveyDentist & FrenchTony for proofreading the French version of this article and translating it integrally into English*
\ No newline at end of file
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/post/2021/pool-together.fr.md b/content/post/2021/pool-together.fr.md
new file mode 100644
index 00000000..861c799e
--- /dev/null
+++ b/content/post/2021/pool-together.fr.md
@@ -0,0 +1,234 @@
+---
+title: "🎲 PoolTogether : L'histoire de la loterie sans perte où tout le monde (y) gagne"
+description: "Les jeux d’argents, tous pourris ? Une fois de plus la finance décentralisée permet d’envisager de nouvelles manières de faire - en l'occurence une loterie moins prédatrice et plus ludique : PoolTogether. Cet article explique comment elle marche."
+date: '2021-12-20T01:13:50.191Z'
+categories: [Yield]
+tags: [DeFi, Ethereum, POOL, PoolTogether, Lottery, money games]
+toc: true
+tocNum: false
+url: pool-together
+image: /img/2021/pool-together/cover.png
+difficulty: "beginner"
+---
+
+
+La DeFi a permis l’émergence d’un système financier alternatif construit sur des bases fondamentalement différentes : transparence, open-source, composabilité et résistance à la censure. De nombreux cas d'utilisation ont émergé et il est désormais possible d’acheter et d’échanger des tokens sans intermédiaire centralisé, mais aussi prêter ou emprunter et bien plus encore !
+
+Notre sujet du jour, [PoolTogether](https://www.defiscan.info/protocols/pool-together-v5/ethereum) fait lui un pas de plus : il utilise et assemble différents services DeFi pour proposer un “jeu d’argent” d’un type nouveau, qui se veut à la fois plus amusant, mais aussi plus instructif et bien moins dangereux et délétère que sa contrepartie classique.
+
+Je vous propose donc d’explorer ce protocole dans le détail : on commence par son contexte, avant d’analyser son fonctionnement et les différents enjeux qu’il implique. C’est parti !
+
+---
+
+## Le contexte : limites et dangers de la loterie classique
+
+Ce chapitre me fait presque du mal à écrire tellement c’est une évidence mécanique pour moi, mais la réalisation n’est pas encore partagée. Concrètement d’un point de vue sociétal, la loterie est probablement aussi délétère que la cigarette. Il faut considérer :
+
+1. Par sa structure même (jackpot possible et promu), la **loterie cible les populations les plus vulnérables**.
+2. Malgré tout, **l’espérance de gain est négative**: les joueurs perdent en moyenne de l’argent en jouant.
+3. Il y a aussi de **sérieuses conséquences pour les gagnants**, c’est une expérience complexe et nombreux finissent [fauchés ](https://www.communique-presse-jeu.com/ads/loterie-ils-ont-gagne-mais-ont-tout-perdu/)malgré tout quelques années plus tard. Les joueurs réguliers souffrent également de problèmes d’addiction.
+4. La loterie était sauvagement taxée et possédée par l’Etat... jusqu’à présent. **La privatisation revient à donner les bénéfices générés par une activité nettement délétère pour la société à des entreprises privées** - la comparaison avec la cigarette prend encore plus de sens !
+5. Enfin, et ça n'est pas propre à la loterie mais **tout aussi misérable, dénonçable et pitoyable** : les jeux d’argent ciblent souvent les populations les plus vulnérables pour leur publicité, en jouant sur les émotions. On l'a vu récemment avec les très nombreuses [publicités pour du paris sportif qui ciblent les jeunes de banlieue](https://www.vice.com/fr/article/n7wjjz/pourquoi-les-sites-de-paris-sportifs-ciblent-les-banlieusards).
+
+
+
+### Addictions, dépendances : conséquences
+
+La suite est logique, mécanique et désespérante : en tendance longue, les mises explosent malgré un nombre de joueurs en berne :
+
+
+
+Le sujet est complexe et comme pour la cigarette, souvent documenté et recherché par les prestataires de service de jeu/paris eux-mêmes. Les chiffres en disent long malgré tout : environ **17% des joueurs sont potentiellement en risque de dépendance ou d’addiction**.
+
+
+
+> "Enfin, en 2017, la pratique des jeux d’argent sur Internet (jeux de loterie, paris hippiques ou sportifs et poker) représentait 11,2 % des dépenses totales, part en constante progression depuis son autorisation en 2010."
+
+Observatoire Francais des Drogues et Toxicomanie - [Les Francais et les jeux d’argent et de hasard](https://www.ofdt.fr/BDD/publications/docs/eftxjc2a6.pdf) et [graphique ORDT](https://www.ofdt.fr/odj/Donn%C3%A9es%20d%27activit%C3%A9%20Fran%C3%A7aise%20des%20jeux%20(FDJ)%20economie.gouv.fr.htm).
+
+D’autres statistiques sont tout simplement désespérantes mais au final compréhensible : **plus la misère sociale et économique augmente, plus la promesse du jackpot de la loterie attire les crédules**, augmentant ainsi les gains privatisés de la FDJ et autres, et détruisant toujours un peu plus le tissu social.
+
+On s’arrête là mais vous l’aurez compris : quand on sort des études financées par la FDJ ou associées, on se rend vite compte de l’ampleur de la casse sociale que la loterie provoque. Les 22.7% renvoyés aux collectivités ne suffisent clairement pas à compenser les coûts réels de ce “jeu” (vies ruinées, addictions, suicides, familles brisées, etc.).
+
+#### Promotion d’un roman social délétère ?
+
+Enfin, pour finir ce tableau qui dresse le contexte, je vous propose un dernier point plus subjectif : quid de l’impact de la loterie sur le **roman social** ? Le roman social, c’est comme le rêve américain : une fable qui constitue un des fondements de la construction de l’identité nationale (en l'occurrence : tout le monde peut réussir aux US s’ils travaillent assez dur).
+
+C’est un véritable délire collectif (quelques éléments sur la méritocratie [par ici ](https://www.cairn.info/revue-le-debat-2018-5-page-176.htm)si vous en doutez encore), mais qui contribue malgré tout à **définir l’imaginaire associé à la réussite dans une société donnée.**
+
+Permettez moi donc de poser la question : quel impact pour la loterie sur notre roman social ? Là encore c’est plutôt négatif je pense, car cela alimente la fable selon laquelle pour réussir il faut être né dans une bonne famille, ou bien “avoir de la chance” -> devenir une célébrité / pratique du sport de haut niveau ou loterie. **La loterie classique alimente ainsi la vacuité de nos aspirations contemporaines :** un facteur de plus contribuant à la médiocrité ambiante.
+
+Ça, c’est dit. Rentrons maintenant dans le vif du sujet pour voir comment PoolTogether redistribue les cartes.
+
+
+## L’essentiel pour comprendre le concept
+
+Le principe de PoolTogether est au fond assez simple mais il y a également de nombreux détails et subtilités à cerner pour réellement comprendre ce que le protocole ambitionne de faire.
+
+En DeFi, il y a différentes sources de rendements, par exemple un possesseur d’USDC, un stablecoin, peut le prêter à d’autres personnes pour générer un retour via un service comme Aave ou Compound. **Au fond, PoolTogether est une couche d’abstraction ludique construite au-dessus d’une telle source de rendements**. À haut niveau, cela donne quelque chose comme ça :
+
+
+
+1. Des joueurs déposent de l’USDC dans la pool USDC sur PoolTogether - et reçoivent un token correspondant pour reconnaitre leur depot (PTaUSDC)
+2. La pool (jeu de smart contracts) déploie les actifs dans différentes stratégies afin de produire un rendement. Le rendement est collecté et sert à alimenter le prix des gagnants.
+3. Chaque USDC déposé dans la pool (⇒ PTaUSDC) correspond à un ticket de loterie potentiellement gagnant. Tous les jours, un tirage a lieu grâce à un mécanisme d’aléatoire auditable (ChainLink VRF) pour déterminer les nombreux gagnants, avec initialement 3 échelles de prix : 10 PTaUSDC, 100 PTaUSDC ou bien 2500 PTaUSDC le jackpot.
+
+C’est cette infrastructure qui produit un rendement - et met seulement le rendement en jeu qui permet de qualifier Pool Together de **loterie** **sans perte**. À tout moment, **le joueur peut arrêter de jouer : il récupérera au minimum son capital initial engagé**, s’il n’a jamais gagné la loterie, ou alors plus.
+
+Si on veut être très précis, le seul coût de Pool Together est le “opportunity cost of capital” : l’opportunité potentiellement perdue sur le capital mobilisé, qui pourrait théoriquement produire un meilleur rendement autrement.
+
+---
+
+
+## PoolTogether v3 : token POOL, sponsors et pool communautaires
+
+Deux versions de PoolTogether sont en ligne : v3 et v4. Le concept reste le même mais l’infrastructure a grandement évolué. Alors avant de voir ce que la v4 a apporté, commençons par la v3 toujours pertinente et [accessible ici](https://app.pooltogether.com/).
+
+Cette mise à jour a été lancée [en Octobre 2020](https://defirate.com/pooltogether-v3/) peu avant [le token POOL](https://medium.com/pooltogether/introducing-pool-23b09f36db48), en Février 2021. Elle apporte de nombreuses améliorations à l’infrastructure de PoolTogether.
+
+
+### Sponsoring Pools et Reserve Factor
+
+Ainsi, bien que l’explication schématique de tout à l’heure soit utile, il faut y ajouter deux premières subtilités : les sponsorship pools et le reserve factor contrôlé par la gouvernance.
+
+
+
+1. Commençons par le plus simple : le **sponsoring**. L’idée c’est de permettre d’avoir du “capital non-joueur” pour augmenter les gains des joueurs : ce capital contribue au rendement produit, mais n’a pas de chance de gagner. Au début, c’était envisagé dans une perspective plutôt bénévole, mais avec le lancement du token les sponsors sont désormais éligibles pour des récompenses en POOL.
+2. Le système de **réserve** est encore plus simple : chaque pool a un _Reserve Factor_ qui correspond à un % du rendement capturée par la pool directement. Ces fonds sont utilisés pour garantir la pérennité du protocole.
+
+Avec la v3, on a également vu l’arrivée des _Community Pools_, des pools créées par la communauté directement sur les tokens de leur choix, du moment qu’ils ont une source de rendement ainsi que de nombreuses autres additions qui ont eu plus ou moins de succès.
+
+
+### 3,3T, Lootboxes & PoolTogether sur Polygon
+
+Par exemple, Olympus DAO propose un _3,3 Together_, où les joueurs mettent en jeu leur rebase OHM : tous les trois jours la rebase de tous les joueurs est distribuée aux trois gagnants.
+
+Ils avaient également d’autres idées innovantes en v3 mais qui n’ont pas pris, principalement à cause des coûts en gas du mainnet. Par exemple, chaque pool a sa _Lootbox_ qui permet à n’importe qui de rajouter un token arbitraire en prix ou même un NFT ! Il suffit de l’envoyer à l’adresse de la lootbox et lorsque le prochain prix sera distribué le NFT/token est envoyé automatiquement au gagnant.
+
+La v3 a également marqué l’arrivée du token POOL quelques mois plus tard et de son airdrop dont on reparlera plus bas.
+
+Enfin, la v3 a également marqué l’arrivée de PoolTogether sur d’autres chaines comme Polygon ou BSC. Néanmoins cette logique connait ses limites car elle aboutit également à une fragmentation de la liquidité.
+
+---
+
+
+## PoolTogether v4 : Tsunami avec approche cross-chain novatrice
+
+La v4 constitue une itération très importante sur la base proposée en v3. Ici, l’expérience a été simplifiée et retravaillée pour la rendre la plus accessible et fun possible : et ça marche ! Voyons donc comment.
+
+
+### Approche cross-chain égalitaire
+
+On va bien détailler ce point car il est crucial, PoolTogether a été pionnier en la matière et c’est une dimension qu’on retrouve sur tous les projets : **la stratégie cross-chain**. Elle a pour but d’offrir le même service, quelque soit la chaîne utilisée par l’utilisateur. J’y viens mais avant ça, prenons le temps de comprendre l’approche cross-chain classique de réplication et ses conséquences.
+
+
+#### L’approche basique : réplication
+
+La plupart des projets se contentent de **répliquer leur service sur toutes les chaînes** : c’est le cas de Sushi par exemple présent sur plus de dix chaînes, mais aussi Pool Together v3 comme décrit plus haut.
+
+Cette approche a le mérite de la simplicité et permet l’accès au service sur toutes les chaînes couvertes - mais elle aboutit à **la fragmentation de la liquidité** ce qui peut rendre ce service moins qualitatif sur les “petites chaînes". Ainsi les joueurs PT v3 Polygon USDC, désormais peu nombreux, jouent pour un prix hebdomadaire de $69. De l’autre coté les joueurs PT v4 USDC se partagent un prix journalier de plus de $100 000.
+
+
+#### Tsunami
+
+Ainsi avec PoolTogether v4 arrive le modèle baptisé Tsunami où toutes les chaînes sont égales. Pour se faire, PoolTogether introduit une couche d’abstraction entre toutes les chaînes pour redistribuer les prix si nécessaire.
+
+Cela permet de **mutualiser les fonds des déposants sur toutes les chaînes** pour offrir un grand prix attractif plutôt que de multiplier les pools et diviser les prix. Une des conséquences est de permettre aux joueurs sur Polygon (où le coût en gas du dépôt est marginal) de jouer avec les mêmes chances et la même espérance de gain que les joueurs mainnet.
+
+Alors bien sûr, cela nécessite plus de travail de développement et d'implémentation et il y a des conséquences aussi pour les joueurs, la plus notable étant **un délai de un jour entre le dépôt initial et l’éligibilité pour le premier tirage**. Mais ça n’est pas un compromis trop lourd à supporter considérant le fait que PoolTogether se veut être un jeu promouvant l’épargne sur le long terme.
+
+
+### Révision du modèle de prix
+
+Là où la v3 optait pour de la flexibilité, avec des pools ayant des tirages journaliers ou hebdomadaires, la pool unique v4 peut se permettre un **tirage journalier** vu sa taille. En outre, la structure des prix a été revue afin d'allouer plus de petits prix pour rendre l’expérience un peu moins aléatoire sur le long-terme.
+
+
+
+La logique du jackpot est préservée avec le premier et unique gagnant qui empoche $2500 tout de même, mais il y a également près de 720 autres gagnants potentiellement grâce aux prix de $100 et $10.
+
+
+
+En réalité, le nombre de joueurs gagnants est plus faible car il est possible de gagner plusieurs prix à la fois. Néanmoins cette approche permet également de lisser le revenu pour les gros déposants, qui remportent fréquemment des récompenses de $10 ou $100, potentiellement même tous les jours si le dépôt est assez conséquent.
+
+Cette distribution permet ainsi de récompenser fréquemment les joueurs qui utilisent PoolTogether dans une logique d’épargne tout en préservant l’esprit du jeu :
+
+1. Une chance décente (en fonction de la taille du dépôt) d’avoir de petits gains (prix $10 et $100)
+2. & faible probabilité d’avoir un gain massif : le jackpot de $2500.
+
+Au-delà du modèle de prix, c’est toute l’expérience autour de l’allocation des prix qui a été revue avec la v4. La gouvernance a d’ailleurs continué a itéré et récemment voté une refonte de la structure des prix : [PTIP-47: Prize Adjustments](https://gov.pooltogether.com/t/ptip-47-prize-adjustments/1752).
+
+
+
+### Une expérience plus satisfaisante
+
+De nombreux paramètres et détails ont été ajustés pour rendre l’expérience de gain plus fun et agréable. La liste exhaustive est sur [la documentation de PoolTogether](https://docs.pooltogether.com/faq/v3-to-v4-differences), on se contentera de l’essentiel.
+
+Tout d’abord, les gains passent dans une **logique de claim**, là où avant ils arrivaient directement dans le wallet. Pour les joueurs, cela rend les gains plus simples à comprendre et quantifier. En outre, ils sont désormais payés en PTaUSDC, le ticket de loterie PoolTogether v4 et sont donc **composés automatiquement** : gagner augmente vos chances de gagner, avec un simple claim !
+
+
+
+**Les joueurs ont 60 jours pour réclamer leur récompense**, ce qui garantit une forme de suivi et d’engagement, mais permet également une interaction avec le protocole quasiment totalement passive pour ceux qui le souhaitent : dépôt > tous les 59j : claim > retrait quand désiré.
+
+---
+
+On a mentionné le token POOL a plusieurs reprises sans le creuser : c’était volontaire. Maintenant que le système est clair pour vous, je vous propose de finir en analysant sa proposition de valeur.
+
+
+## Le token POOL
+
+On va parler airdrop bien sûr, mais aussi liquidité et bien évidemment gouvernance : c’est parti !
+
+
+### Airdrop : tout le monde a gagné !
+
+Pour lancer le token le plus fun de la DeFi, il ne pouvait pas y avoir autre chose qu’un airdrop évidemment. C’est un des airdrops rétroactifs qui a suivi dans le sillage d’Uniswap, mais qui est arrivé encore assez tôt pour ne pas avoir été abusé à outrance par les infameux chasseurs d’airdrops.
+
+**14 % du total supply de POOL** a été distribué aux joueurs qui ont participé avant le 14 janvier 2021, avec une pondération en fonction du montant et de la durée du dépôt. Les joueurs de la première heure, même avec de petits montants, ont ainsi eu une très belle surprise.
+
+
+### Incitations POOL et LP (v3)
+
+Qui dit token signifie également le plus souvent incitations : PoolTogether ne fait pas défaut à la règle.
+
+Avec le token sont arrivées des incitations en POOL pour tous les joueurs; ainsi que des ajustements sur le modèle de sponsoring décrit plus haut. Il y a également un enjeu de liquidité sur le token POOL désormais.
+
+Après avoir commencé par un modèle d’incitation classique pour les LPs, la gouvernance a décidé d’explorer un modèle qui permet au protocole de [contrôler sa propre liquidité (PTIP-40](https://gov.pooltogether.com/t/ptip-40-olympus-lp-incentives-pool-pool-distribution/1638) grâce au bonding (Ohm-like).
+
+
+### Définir le fun, ensemble
+
+Le POOL sert ainsi à prendre part aux décisions du protocole et aider à affiner le modèle. En outre, l’implémentation de la gouvernance elle-même est marrante elle aussi. Pour voter, il faut déposer ses tokens POOL dans la pool POOL sur PoolTogether : tout en ayant un rendement de base + des chances de gagner des prix, les joueurs peuvent ainsi se prononcer sur les décisions de gouvernance.
+
+Je qualifie parfois PoolTogether de “protocole le plus fun de toute la DeFi”, une affirmation véridique mais qu’on peut pousser encore plus loin.
+
+La gouvernance de PoolTogether, avec ses décisions, travaille à définir ce qu’est le “fun optimal”, avec des questions très concrètes, comme le nombre de prix ou leur distribution. Avec le lancement de la v4, le nombre de prix a grandement augmenté ce qui permet à plus de joueurs de gagner : plus de la moitié des wallets uniques qui jouent à PTv4 ont gagné au moins une fois :
+
+
+C’est un bon début, mais il est sans doute possible d’affiner encore plus le modèle pour réjouir toujours plus de joueurs en promouvant l’épargne long terme positivement.
+
+
+## 🤗 PT Ensemble TokenBrice Live
+
+Je vous quitte sur une offre difficile à refuser : et **si on jouait à PoolTogether ensemble** ? Les règles sont simples : j’ai effectué un dépôt PoolTogether v4 Polygon avec mon wallet public tokenbrice.eth. Toutes les 2 semaines je collecte les récompenses : la moitié repart dans le pot, l’autre moitié est gagnée en giveway par un membre de l’audience Twitch.
+
+Le gagnant reçoit directement des PTaUSDC dans son wallet qu’il n’a plus qu’à activer pour lui aussi jouer de son côté : **le cercle vertueux sans fin de la loterie sans perte** !
+
+Ça se passe sur [ma chaîne Twitch chaque mardi à 17h ](twitch.tv/tokenbrice): abonnez-vous et activez les notifications pour ne rater aucun live. Je les annonce également [sur Twitter](https://twitter.com/TokenBrice).
+
+---
+
+Si vous m’avez lu jusqu’ici, vous reprendrez bien un peu d’alpha ?
+
+**La logique sans perte de PoolTogether s’exporte au-delà de la loterie / épargne**. De nombreux mécanismes sociaux et jeux autour de l’argent peuvent être concernés : paris sportifs, marchés prédictifs, assurance, etc. La famille sans perte sera grande, et PoolTogether connaît déjà un premier cousin qui s’attaque aux prédictions markets : [EntropyFi](https://docs.entropyfi.com/user-guide/game-explained).
+
+Pour aller plus loin, regardez le Marathon Pool Together avec Pierrick :
+
+{{< youtube zzfQ289dhW4 >}}
+
+---
+
+Faites vos jeux,
+- 🎲 rien ne va plus [logique archaïque]
+- (🎲,🎲) tout ira bien [web3]
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/post/2021/pool-together.md b/content/post/2021/pool-together.md
new file mode 100644
index 00000000..38d3ac5a
--- /dev/null
+++ b/content/post/2021/pool-together.md
@@ -0,0 +1,212 @@
+---
+title: "🎲 PoolTogether: The story of the no-loss lottery where everyone wins"
+description: "Gambling, all rotten? Once again, decentralized finance allows us to consider new ways of doing things - in this case a less predatory and more fun lottery: PoolTogether. This article explains how it works."
+date: '2021-12-20T01:13:50.191Z'
+categories: [Yield]
+tags: [DeFi, Ethereum, POOL, PoolTogether, Lottery, money games]
+toc: true
+tocNum: false
+url: pool-together
+image: /img/2021/pool-together/cover.png
+difficulty: "beginner"
+---
+
+DeFi has enabled the emergence of an alternative financial system built on fundamentally different foundations: transparency, open-source, composability and resistance to censorship. Many use cases have emerged and it is now possible to buy and exchange tokens without a centralized intermediary, but also to lend or borrow and much more!
+
+The topic of the day, [PoolTogether](https://www.defiscan.info/protocols/pool-together-v5/ethereum), goes one step further: it uses and assembles different DeFi services to offer a new kind of "money game", which is more fun, but also more instructive and much less dangerous and harmful than its classic counterpart.
+
+I offer you to explore this protocol in detail: we start with its context, before analyzing how it works and the different issues it involves. Let's get started!
+
+---
+
+## The context: limits and dangers of the classic lottery
+
+This chapter is almost hard for me to write because it is seems so obvious, yet it is still very poorly perceived by the majority of people. Concretely from a societal point of view, the lottery is probably as deleterious as smoking. Consider:
+
+1. By its design (possible and promoted jackpot), the **lottery targets the most vulnerable populations**.
+2. Despite this, the **expectation of winning is negative**: players lose money while playing for most of them.
+3. There are also **serious consequences for the winners**, it's a complex experience and [many end up broke after a few years](https://www.businessinsider.com/lottery-winners-lost-everything-2017-8?IR=T). Regular gamblers also suffer from addiction problems.
+4. The lottery was wildly taxed and owned by the state... until now. **Privatization means giving the profits from an activity that is clearly harmful to society to private companies** - the comparison with smoking makes even more sense!
+5. Finally, and this is not specific to the lottery but **equally miserable, denounceable and pitiful**: gambling often targets the most vulnerable populations for their advertising and [and particularly on young people](https://www.theguardian.com/society/2020/mar/27/children-more-likely-to-become-gamblers-due-to-high-volume-of-betting-ads).
+
+
+
+You can have a look on the full film advertisement created by TBWA, France for Winamax [here](https://www.adsoftheworld.com/media/film/winamax_the_mama)...
+
+### Addictions, dependencies: consequences
+
+What follows is logical, mechanical and despairing: in the long term trend, bets are exploding despite a declining number of players:
+
+
+
+The subject is complex and, like smoking, often documented and researched by the gambling service providers themselves. The numbers speak for themselves, however: about 17% of gamblers are potentially at risk of addiction or dependency.
+
+
+
+"_In 2017, Internet gambling (lottery games, horse or sports betting and poker) accounted for 11.2% of total spending, a share that has been steadily increasing since its authorization in 2010_" according to the French Observatory of Drugs and Addictions.
+
+Other statistics are simply hopeless but ultimately understandable: **the more social and economic misery increases, the more the promise of the lottery jackpot attracts the gullible**, thus increasing the privatized winnings of the FDJ (the operator of France's national lottery games) and others, and destroying the social fabric ever more.
+
+We'll stop here, but you'll have understood: when you get out of the studies financed by the FDJ or associated, you quickly realize the extent of the social break that the lottery causes. The 22.7% returned to the communities is clearly not enough to compensate the real costs of this "game" (ruined lives, addictions, suicides, broken families, etc.).
+
+#### Promotion of a deleterious social novel?
+
+Finally, to finish this picture that sets the context, I propose a last more subjective point: what about the impact of the lottery on the **social novel**? The social novel is like the American dream: a fable that constitutes one of the foundations of the construction of the national identity (in this case: everyone can succeed in the US if they work hard enough).
+
+It is a real collective delusion, but it contributes to **defining the imaginary associated with success in a given society.**
+
+So let me ask the question: what impact does the lottery have on our social novel? Again it is rather negative I think, because it feeds the fable that to be successful you have to be born into a good family, or "lucky" -> become a celebrity / play high level sports or lottery. **The classic lottery thus feeds the emptiness of our contemporary aspirations:** one more factor contributing to the ambient mediocrity.
+
+But now we are done with that. Let's get to the heart of the matter and see how PoolTogether reshuffles the deck.
+
+## The basics to understand the concept
+
+The principle of PoolTogether is basically quite simple, but there are also many details and subtleties that need to be figured out to really understand what the protocol aims to do.
+
+In DeFi, there are different sources of return, for example a USDC owner, a stablecoin, can lend it to others to generate a return via a service like Aave or Compound. **Basically, PoolTogether is a playful abstraction layer built on top of such a source of returns.** At a high level, it looks like something like this:
+
+
+1. Players deposit USDC into the USDC pool on PoolTogether - and receive a corresponding token to recognize their deposit (PTaUSDC)
+2. The pool (set of smart contracts) deploys the assets in different strategies to produce a return. The return is collected and used to fund the winners' prize.
+3. Each USDC deposited in the pool (⇒ PTaUSDC) corresponds to a potential winning lottery ticket. Every day, an auditable random draw (ChainLink VRF) is held to determine the many winners, with 3 initial prize ranges: 10 PTaUSDC, 100 PTaUSDC or 2500 PTaUSDC jackpot.
+
+It's this infrastructure that produces a return - and puts only the return into play that qualifies Pool Together as a **no-loss** lottery. At any time, **the player can stop playing: he will get back at least his initial committed capital**, if he has never won the lottery, or more.
+
+If we want to be very precise, the only cost of Pool Together is the "opportunity cost of capital": the potential lost opportunity on the mobilized capital, which could theoretically produce a better return otherwise.
+
+---
+
+## PoolTogether v3: the POOL token, sponsors and community pools
+
+Two versions of PoolTogether are online: v3 and v4. The concept remains the same but the infrastructure has greatly evolved. So before we look at what v4 has brought, let's start with the still relevant v3 and [accessible here](https://app.pooltogether.com/).
+
+This update was released [in October 2020](https://defirate.com/pooltogether-v3/) shortly before [the POOL token](https://medium.com/pooltogether/introducing-pool-23b09f36db48), in February 2021. It brings many improvements to the PoolTogether infrastructure.
+
+
+### Sponsoring Pools and Reserve Factor
+
+While the schematic explanation of earlier is useful, two initial subtleties must be added: sponsorship pools and the governance-controlled reserve factor.
+
+1. Let's start with **sponsoring**. The idea is to allow "non-player capital" to increase player earnings: this capital contributes to the output produced, but has no chance of winning. At first this was envisaged from a rather voluntary perspective, but with the launch of the token sponsors are now eligible for POOL rewards.
+2. The **Reserve** system is even simpler: each pool has a _Reserve Factor_ which corresponds to a % of the return captured by the pool directly. These funds are used to guarantee the sustainability of the protocol.
+
+With v3, we also saw the arrival of _Community Pools_, pools created by the community directly on the tokens of their choice, as long as they have a source of return, as well as many other additions that were more or less successful.
+
+
+### 3,3T, Lootboxes & PoolTogether on Polygon
+
+
+For example, Olympus DAO offers a _3,3 Together_, where players stake their OHM rebase: every three days the rebase of all players is distributed to the three winners.
+
+They also had other innovative ideas in v3 but they didn't catch on, mainly because of the gas costs of the mainnet. For example, each pool has its _Lootbox_ which allows anyone to add an arbitrary token as a prize or even an NFT! Just send it to the lootbox address and when the next prize is distributed the NFT/token is automatically sent to the winner.
+
+The v3 also marked the arrival of the POOL token a few months later and its airdrop which we will talk about below.
+
+Finally, v3 also marked the arrival of PoolTogether on other channels like Polygon or BSC. Nevertheless this logic has its limits because it also leads to a fragmentation of liquidity.
+
+---
+
+## PoolTogether v4: Tsunami with innovative cross-chain approach
+
+The v4 is a very important iteration on the base proposed in v3. Here, the experience has been simplified and reworked to make it as accessible and fun as possible: and it works! Let's see how.
+
+### Cross-chain egalitarian approach
+
+We will detail this point because it is crucial, PoolTogether was a pioneer in this field and it is a dimension that we find on all projects: **the cross-chain strategy**. It aims to offer the same service, whatever the channel used by the user. I'm coming to that, but before I do, let's take the time to understand the classic cross-chain replication approach and its consequences.
+
+#### The basic approach: replication
+Most projects simply **replicate their service on all channels**: this is the case of Sushi for example, which is present on more than ten channels, but also Pool Together v3 as described above.
+
+This approach has the merit of simplicity and allows access to the service on all covered channels - but it results in **fragmentation of liquidity** which can make this service less qualitative on "small channels". Thus PT v3 Polygon USDC players, now few in number, play for a weekly fee of $69. On the other hand PT v4 USDC players share a daily price of over $100,000.
+
+
+#### Tsunami
+
+With PoolTogether v4 comes the so-called Tsunami model where all chains are equal. To do this, PoolTogether introduces an abstraction layer between all chains to redistribute prices if necessary.
+
+This allows **mutualizing depositors' funds across all chains** to offer one big attractive prize rather than multiplying pools and dividing prizes. One consequence is that players on Polygon (where the gas cost of depositing is marginal) can play with the same odds and payout expectation as mainnet players.
+
+So of course this requires more development and implementation work and there are consequences for players as well, the most notable being **a one day delay between initial deposit and eligibility for the first draw**. But this is not too much of a trade-off considering the fact that PoolTogether is intended to be a game that promotes long-term savings.
+
+### Adjustment of the pricing model
+
+
+Where v3 opted for flexibility, with pools having daily or weekly draws, the unique v4 pool can afford a **daily draw** given its size. In addition, the prize structure has been revised to allocate more small prizes to make the experience a little less random in the long run.
+
+
+
+The jackpot logic is preserved with the first and only winner pocketing $2500 anyway, but there are also nearly 720 other potential winners with the $100 and $10 prizes.
+
+
+
+In reality, the number of winning players is lower because it is possible to win several prizes at once. However, this approach also smoothes out the income for large depositors, who frequently win $10 or $100 rewards, potentially even every day if the deposit is large enough.
+
+This distribution allows for frequent rewards for players who use PoolTogether for savings purposes while maintaining the spirit of the game:
+
+1. A decent chance (depending on the size of the deposit) to have small winnings ($10 and $100 prizes)
+2. A small chance of a massive payout: the $2500 jackpot.
+
+Beyond the prize model, the whole experience around prize allocation has been reviewed with v4. The governance has continued to iterate and recently voted on an overhaul of the prize structure: [PTIP-47: Prize Adjustments](https://gov.pooltogether.com/t/ptip-47-prize-adjustments/1752).
+
+
+
+### A more satisfying experience.
+
+Many settings and details have been adjusted to make the winning experience more fun and enjoyable. The complete list is on [the PoolTogether documentation](https://docs.pooltogether.com/faq/v3-to-v4-differences), so we'll just mention the essentials.
+
+First of all, the winnings go into a **claim logic**, where before they went directly into the wallet. This makes it easier for players to understand and quantify winnings. In addition, they are now paid out in PTaUSDC, the PoolTogether v4 lottery ticket, and are therefore **automatically compounded**: winning increases your chances of winning, with a simple claim!
+
+
+
+**Players have 60 days to claim their reward**, which guarantees a form of follow-up and commitment, but also allows an almost totally passive interaction with the protocol for those who wish to do so: deposit > every 59 days: claim > withdrawal when desired.
+
+---
+
+The POOL token has been mentioned several times without digging into it: this was deliberate. Now that the system is clear to you, I propose to finish by analyzing its value proposition.
+
+
+## The POOL token
+
+We will talk about airdrop of course, but also liquidity and of course governance: let's go!
+
+### Airdrop: everybody won!
+
+To launch the most fun token of the DeFi, there couldn't be anything else than an airdrop obviously. This is one of the retroactive airdrops that followed in the wake of Uniswap, but still came early enough that it wasn't overly abused by the infamous airdrop hunters.
+
+**14% of POOL's total supply** was distributed to players who participated before January 14, 2021, with weighting based on deposit amount and duration. This was a nice surprise for early adopters, even with small amounts.
+
+
+### POOL incentives and LP (v3)
+
+
+Who says token also means most often incentives: PoolTogether is no exception to the rule.
+
+With the token came POOL incentives for all players; as well as adjustments to the sponsorship model described above. There is also a liquidity issue on the POOL token now.
+
+After starting with a classic incentive model for LPs, governance decided to explore a model that allows the protocol to [control its own liquidity (PTIP-40](https://gov.pooltogether.com/t/ptip-40-olympus-lp-incentives-pool-pool-distribution/1638) through bonding (Ohm-like).
+
+
+### Define the "FunTogether"!
+
+
+The POOL is used to take part in the protocol decisions and help to refine the model. Furthermore, the implementation of the governance itself is also fun. In order to vote, you have to deposit your POOL tokens in the POOL pool on PoolTogether: while having a basic return + chances to win prizes, players can thus vote on governance decisions.
+
+I sometimes call PoolTogether "the most fun protocol in the whole of DeFi", a true statement but one that can be taken even further.
+
+PoolTogether governance, with its decisions, works to define what is "optimal fun", with very concrete questions, like the number of prizes or their distribution. With the launch of v4, the number of prizes has greatly increased, allowing more players to win: more than half of the unique wallets playing PTv4 have won at least once:
+
+
+It's a good start, but there's probably room to refine the model even further to delight more players by positively promoting long-term savings.
+
+---
+
+
+If you've read me this far, would you like some more alpha?
+
+**PoolTogether's lossless logic is exported beyond the lottery / savings**. Many social mechanisms and games around money can be involved: sports betting, prediction markets, insurance, etc. The lossless family will be large, and PoolTogether already knows a first cousin that tackles predictions markets: [EntropyFi](https://docs.entropyfi.com/user-guide/game-explained).
+
+Place your bets,
+- 🎲 no more bets ! [archaic logic]
+- (🎲,🎲) and have fun :) [web3]
+
+_🙏Thanks to Th. for helping translate this article into English._
diff --git a/content/post/2021/reflexer-rai.fr.md b/content/post/2021/reflexer-rai.fr.md
new file mode 100644
index 00000000..ff70dbba
--- /dev/null
+++ b/content/post/2021/reflexer-rai.fr.md
@@ -0,0 +1,266 @@
+---
+title: "🗿 Pourquoi, comment et qu'est-ce que le RAI ?"
+description: "Le RAI de Reflexer est un nouveau type d'actif encore unique en DeFi. Il s'appuie également sur un système avec un plan de dégouvernance. Voyons donc comment s'extraire tout à la fois des risques liés aux monnaies fiduciaires, à la centralisation et à la confiance."
+date: '2021-09-01T01:13:50.191Z'
+categories: [Stablecoin, Lending]
+tags: [DeFi, Ethereum, Stablecoins, Reflexer, RAI, Maker, Liquity]
+toc: true
+tocNum: true
+url: reflexer-rai
+image: /img/2021/reflexer-rai/cover.png
+difficulty: "intermediate"
+---
+
+RAI est une drôle de bête dont la compréhension ou l'intérêt échappe encore à de nombreuses personnes, y compris des gens vraiment calés en DeFi. Il était donc temps de vous proposer un article assez exhaustif dédié à son sujet. J'y ai inclus tout ce que j'estimais pertinent pour comprendre pourquoi un actif comme RAI est nécessaire, ce qu'il apporte et comment il fonctionne.
+
+Préparez-vous un café et accrochez-vous, on est parti pour une belle promenade !
+
+
+## Comprendre le contexte de RAI
+
+Avant même de commencer à rentrer dans le vif du sujet, je pense qu'il est essentiel de bien comprendre le contexte autour de RAI : c'est-à-dire les principaux actifs stables utilisés aujourd'hui ainsi que leurs limites.
+
+Le contexte pour bien comprendre RAI est assez dense, mais la bonne nouvelle c'est que ce n'est pas la première fois que je traite ce sujet sur le blog. Je vous renvoie donc vers des lectures pertinentes pour approfondir :
+
+
+
+1. [Actifs à vocation stable sur Ethereum : quelles approches et quels enjeux ?](https://tokenbrice.xyz/fr/actifs-stables-ethereum/)
+2. [Comprendre les innovations sur les marchés monétaires pour envisager leur avenir](https://tokenbrice.xyz/fr/marche-monetaire-innovations/)
+
+Si vous n'avez pas le temps d'explorer le concept approfondi avec les articles proposés au-dessus, voici les deux points essentiels à retenir pour bien comprendre la suite :
+
+1. À l'heure actuelle, **l'écrasante majorité du besoin en stablecoin est couverte par des solutions centralisées nécessitant de la confiance**, les plus utilisées étant USDT (~66 milliard) et USDC (~27 milliard).
+2. Quelque soit vos thèses économiques de prédilection, notamment en termes d'inflation, je pense qu'on peut facilement s'accorder sur le besoin d'actifs stables qui ne sont pas corrélés à une monnaie fiduciaire (=gérée par un état).
+
+
+### Le piège du wUSDC
+
+J'utilise le terme "wrapped USDC" (wUSDC) pour expliciter une situation fréquente dans les stablecoins alternatifs : il permet de décrire de manière concise et appropriée **les solutions qui utilisent essentiellement USDC comme collatéral**, un stablecoin de confiance garanti par un organisme central (Circle).
+
+Dans une situation telle, inutile d'aller plus loin, même pas besoin d'analyser les détails du système : puisque leur collatéral principal peut être gelé ou saisi, **les stablecoins produits de cette manière ne peuvent pas être considérés comme décentralisés ou trustless.**
+
+Cette famille connaît étonnamment de nombreux adeptes, les principaux étant Maker et Frax.
+
+
+#### Maker = une majorité de collatéraux nécessitant de la confiance
+
+Avec [Maker (DAI)](https://www.defiscan.info/protocols/sky/ethereum), **environ 60% des DAI sont mintés (frapper monnaie) avec USDC comme collatéral**, chiffre auquel il faut ajouter ceux mintés depuis d'autres collatéraux nécessitant de la confiance: wBTC, TUSD, GUSD, PAX, USDT, renBTC + toutes les paires UniV2 impliquant au moins l'un de ces tokens + tous les collatéraux issus du monde réel comme Centrifuge: New Silver. [Détail sur DAIStats](https://daistats.com/#/).
+
+
+
+Note : le PSM est un module qui permet d'éviter les envolées de prix sur le DAI au-dessus du dollar. Les DAI mintés par le PSM le sont donc de manière automatique lorsque cela est nécessaire.
+
+La première version de Maker, avant la mise à jour Multi Collateral DAI ([MCD - 18/11/2019](https://medium.com/@MakerDAO/update-the-road-to-multi-collateral-dai-2d4c48092270)) utilisait uniquement ETH comme collatéral et présentait ainsi des garanties bien plus crédibles. Ça n'est plus du tout le cas aujourd'hui.
+
+🙏 Je remercie néanmoins chaleureusement l'équipe MakerDAO pour leurs très nombreuses contributions à l'écosystème - le modèle Maker MCD est même utilisé comme base par Reflexer !
+
+
+#### FRAX ? Garanti par l'USDC ou rien (algorithmique)
+
+**Côté FRAX, seul l'USDC est utilisé en collatéral**, sous différentes formes - soit dans Yearn/Compound/Aave pour produire un rendement, soit via les [AMOs (Algorithmic Market Operations Controller](https://docs.frax.finance/amo/overview)). Voici le détail des actifs qui servent à garantir le FRAX, [disponible sur le site officiel](https://app.frax.finance/).
+
+ + une part algorithmique (sans collatéral) variable.
+")
+
+Frax tout comme DAI développent une myriade d'approches intéressantes, mais comme leur base est centralisée, **ils ne peuvent être considérés comme quelque chose d'autre qu'un mécanisme d'amplification de la liquidité disponible sur USDC, au mieux**. Ils apportent néanmoins **des contributions intéressantes en termes de recherche fondamentale** qui pourront aider à établir une solution plus optimale et qui ne nécessite pas de confiance (trustless).
+
+
+### Existe-t-il des alternatives pertinentes à RAI?
+
+À ce jour, RAI est un actif unique sans alternative comparable. Cependant il existe des systèmes qui partagent certaines caractéristiques avec RAI, comme **l'utilisation exclusive d'ETH comme collatéral**.
+
+Ainsi, si vous êtes prêts à vous exposer au dollar, Liquity propose une alternative très pertinente qui a également **le mérite d'être totalement inarrêtable** (ce qui n'est pas encore le cas de RAI) : les contrats n'ont aucune fonction administrative, exactement comme Uniswap V1/V2. Il reste cependant bien sûr les oracles (nécessaires pour un service d'emprunt) et les risques associés.
+
+Maintenant que le décor est posé, passons au plat principal : il est temps d'étudier les mécanismes sous-jacents de RAI. On commence par son minting dans la perspective d'un utilisateur avant d'approfondir sur ce qu'est concrètement RAI et comment il fonctionne.
+
+
+## Comment le RAI se crée ?
+
+Le RAI de Reflexer est en quelque sorte **à la fois la forme première et finale du DAI de Maker**. Première, dans le sens qu'il revient aux promesses du DAI original (le SAI) : seul l'ETH est utilisé comme collatéral et finale dans la mesure où RAI arrive à s'extraire de la dépendance au dollar.
+
+Reflexer s'appuie ainsi sur une base Maker MCD avec plusieurs changements, notamment l'incorporation du PID controller, la protection contre les liquidations et bien d'autres. On va tranquillement déplier tout ça mais commençons déjà par voir comment le système fonctionne dans la perspective d'un utilisateur.
+
+Tout comme sur Maker, RAI est créé directement par les utilisateurs de Reflexer. Ceux-ci peuvent ouvrir **un "safe" qui leur permet de mettre en jeu des ETH et minter une quantité proportionnelle de RAI**. Chaque utilisateur peut choisir la quantité de RAI minté pour une même somme d'ETH mise en jeu (-> différents niveaux de risque) et doit gérer sa position. **Les liquidations sont possibles et nécessaires** car elles permettent de s'assurer qu'il y ait toujours une valeur en ETH dans le système suffisante pour garantir les RAI émis.
+
+Néanmoins le système innove ici par rapport à Maker grâce à sa fonction "Savior". Elle permet **d'utiliser une position d'apport de liquidité RAI/ETH sur Uniswap V2 comme garantie pour un safe**. Ainsi, si le prix de l'ETH venait à baisser brutalement, ce qui pourrait mettre un safe ouvert et protégé par cette fonction à risque de liquidation, **le Savior retire automatiquement la quantité de liquidité nécessaire pour faire revenir le safe au niveau de collatéralisation désiré**.
+
+Cela permet ainsi aux utilisateurs qui mintent du RAI utilisé ensuite pour l'apport de liquidité de dormir bien plus sereinement !
+
+
+## Mais RAI, c'est quoi en fait ?
+
+RAI est une nouvelle classe d'actifs à lui tout seul. Il a pour vocation d'être **à faible volatilité, sans pour autant s'appuyer sur un autre actif stable** (monnaie fiduciaire ou or sont les sources les plus classiques). Pour ce faire, RAI s'appuie sur un système qui réagit dynamiquement aux conditions du marché.
+
+Dans le cas de RAI, deux paramètres essentiels sont à prendre en compte :
+
+
+
+1. **Le prix de rédemption** (redemption price) = valeur d'une unité de dette dans le système
+2. **Le prix sur le marché** (market price) = prix de RAI observé sur le marché
+
+Le système n'a bien sûr pas de contrôle sur le prix de RAI observé sur le marché, qui est déterminé par les acheteurs et les vendeurs. Néanmoins, il peut faire ajuster progressivement certains paramètres pour modifier le prix de rédemption et **faire converger les deux prix à terme**.
+
+On fait donc face à une situation assez facilement généralisable incarnée par un pan entier de l'ingénierie et baptisée **la théorie du contrôle** :
+
+
+
+Dans le cas de RAI, **le régulateur est algorithmique** et là encore assez standard : c'est le fameux **"PID controller"**. Il repose sur une formule mathématique assez dense qu'il n'est pas nécessaire de comprendre pour saisir la pertinence du système.
+
+Il faut saisir néanmoins un point essentiel : l'inertie inhérente au système. Le régulateur ne peut pas se permettre de faire de brusques changements des paramètres (qui nuiraient à sa relative stabilité), il doit donc opérer dans **une logique plus itérative et progressive**.
+
+Une fois ça saisi, je me permets de rappeler que le système par lui-même ne peut rien sur le prix de RAI. Tout ce qu'il peut faire, c'est faire varier le taux de rédemption, ce qui permet de moduler les incitations des participants du système. Cela crée ainsi des **opportunités d'arbitrage** pour les participants dont l'exécution permet de se rapprocher de l'équilibre entre prix de rédemption et prix sur le marché.
+
+Voyons ça concrètement en pratique.
+
+On retrouve ici une logique qui rappelle les [stablecoins algorithmiques](https://tokenbrice.xyz/fr/algorithmic-stablecoins/), bien que le produit final du système soit totalement différent.
+
+
+### Quand le prix du marché > prix de rédemption
+
+On commence par cette situation car elle est plus simple à comprendre à mon avis. Dans le cas où le prix sur le marché dépasse le prix de rédemption. Cela signifie donc que toute personne avec des ETH disponibles pourrait potentiellement générer un profit en arbitrant le marché :
+
+
+
+1. Dépôt de ETH et mint du RAI ;
+2. Vente de RAI sur le marché pour un profit ;
+3. (Quand prix du marché < rédemption) rachat de RAI pour rembourser la dette et libérer les ETH. La différence entre les 2 prix sur RAI - frais en gas correspond au profit généré.
+
+
+
+
+Cette situation est d'autant plus intéressante pour ceux qui ont déjà des safes avec de la capacité disponible : ils s'épargnent une étape du scénario présenté plus haut.
+
+Dans ce scénario, il y a donc une incitation à minter du RAI (->augmentation du supply) et à le revendre sur le marché (->pression baissière) qui permettent de progressivement réduire le prix sur le marché, le faisant ainsi converger vers le prix de rédemption.
+
+
+### Quand le prix du marché < prix de rédemption
+
+Dans le cas inverse, le taux de rédemption devient positif, ce qui a pour effet de rendre plus coûteuse la dette déjà existante. Les utilisateurs avec des safes actifs ont ainsi intérêt à rembourser leur dette, ce qui a pour effet de réduire le supply de RAI disponible.
+
+
+
+
+En outre, s'ils avaient convertis leur RAI pour un autre actif (par exemple ETH pour une exposition avec levier), ils devront acquérir des RAI sur le marché (->pression haussière) afin d'être en capacité de rembourser leur dette.
+
+Vous l'aurez compris, les acteurs du système Reflexer ont tout intérêt à suivre le taux de rédemption et réagir en conséquence. Si vous avez un safe actif, je vous invite à le consulter régulièrement - [il est visible sur le site de Reflexer.](https://stats.reflexer.finance/)
+
+Ce taux impacte moins directement les simples possesseurs de RAI, surtout s'ils les utilisent pour produire un rendement (qui peut compenser un taux négatif) mais c'est tout de même une métrique à garder en tête.
+
+
+### Ajustement dynamique du taux de rédemption
+
+**L'ajustement dynamique du taux de rédemption est une des fonctionnalités essentielles de Reflexer / RAI**. Pour mieux comprendre pourquoi c'est critique, analysons la situation sur Maker pré-MCD :
+
+
+
+1. La demande en DAI correspond à (une partie de) la demande pour des stablecoins.
+2. Néanmoins, les DAI sont créés en leverageant de l'ETH, ils dépendent donc du besoin/appétit pour du levier sur ETH, une donnée indépendante de la demande pour des stablecoins qui dépend surtout des conditions générales du marchés (bear ou bull et autres).
+3. Si la demande est plus forte que l'offre, sur Maker, il n'y a aucun ajustement dynamique. Il faut attendre un vote de la gouvernance (et les délais qui vont avec) afin d'abaisser le Stability Fee. Et c'est pareil dans l'autre sens (offre trop importante).
+
+Ainsi, **l'équilibre entre le côté offre et demande de l'équation est presque impossible à maintenir**, ce qui explique pourquoi le DAI pré-MCD pouvait se retrouver souvent au-dessus de son peg. Maker a résolu ce problème en ajoutant de nombreux types de collatéraux, dont des stablecoins non trustless puis le PSM qui minte automatiquement des DAI depuis USDC quand nécessaire. La solution proposée par Reflexer (ajustement dynamique du taux de rédemption) a le mérite de **résoudre le problème au niveau du système lui-même**, ce qui permet de garder ETH comme seul collatéral.
+
+
+## FLX et le plan “dégouvernance" de RAI
+
+Outre le RAI, le système de Reflexer a également un second token, FLX, le token de dégouvernance ("ungovernance"). Il est utilisé pour la gouvernance du système et sert également de mécanisme de liquidité de dernier recours (en cas de mauvaise dette), avec un système assez similaire au Safety Module d'Aave.
+
+Le token FLX peut être acheté sur le marché, mais il est surtout **distribué aux principaux acteurs impliqués dans le système** - [la liste exhaustive des incitations en FLX](https://app.reflexer.finance/earn/incentives) est disponible sur le site de Reflexer.
+
+Ainsi, sont éligibles pour des FLX (claimables sur le site de Reflexer, distribution mensuelle) :
+
+
+
+1. Les possesseurs de safes qui apportent leur RAI en liquidité sur la paire UNIv2 ETH/RAI (migration en cours, fin prochaine) ou encore UNIv3 RAI/DAI.
+2. Mais aussi les apporteurs de liquidité sur FLX/ETH (migration en cours, fin prochaine)
+3. Et enfin les stakers de FLX dans l'équivalent du Safety Module chez Reflexer.
+4. Il y a également des incitations en FLX liées à l'utilisation de RAI dans divers services DeFi, détaillées dans la dernière partie.
+
+[Le staking de FLX (Uni V2 FLX/ETH)](https://docs.reflexer.finance/incentives/flx-staking) sert à la fois de mécanisme d'incitation à l'apport de liquidité ainsi que de garantie pour le système. Si le système est sous-collatéralisé, les stakers seront dilués (->token LP liquidés) pour que le module acquiert du RAI et ramène le système à l'équilibre.
+
+En situation normale, les stakers bénéficient tout simplement d'un rendement plutôt attractif. Tout comme le Safety Module d'Aave, ce module a un délai pour unstake, afin d'éviter l'exode des liquidités en période critique : il est de 21 jours.
+
+Maintenant que les bases sont posées sur FLX, discutons un peu plus de ses enjeux à long terme.
+
+
+### Le plan de retrait de la gouvernance
+
+Le système Reflexer a pour vocation à être "governance-minimized". Cela a commencé dès sa mise en place, puisque des décisions qui chez Maker sont prises par la gouvernance (Stability Fee des vaults) sont automatisées chez Reflexer (PID controller).
+
+La vision est tout simplement d'automatiser tout ce qui peut l'être à terme, une fois le système mature, et de donner les clefs des sous-systèmes qui ne peuvent pas l'être à la communauté des holders de FLX.
+
+L'équipe s'est ainsi fixée trois paliers principaux relatifs à cet objectif [détaillés dans l'article de présentation du FLX](https://medium.com/reflexer-labs/introducing-flx-20755214a465). Chaque palier est adossé à une date :
+
+
+
+* 14 mois après le lancement - 17 Avril 2022 : réduction de la gouvernance au minimum sur les sous-systèmes principaux (liquidation, auction et taxation)
+* 18 mois après le lancement - 17 Août 2022 : minimisation de la gouvernance sur tous les contrats principaux, à l'exception du PID controller, des oracles et du mécanisme Savior.
+* 3ème étape (date à venir) : passation de pouvoir (vers les holdeurs FLX) des mécanismes restants.
+
+Je pense que ce tour d'horizon est bien assez pour comprendre l'intérêt de RAI et comment il fonctionne. Voyons donc désormais comment RAI est déjà utilisé dans divers protocoles DeFi.
+
+
+## L'écosystème DeFi autour de RAI
+
+RAI est en train d'être progressivement adopté au sein de l'écosystème DeFi, et cela fait plaisir à voir ! Je vous propose donc de finir avec un petit tour d'horizon des différentes intégrations de RAI dans des protocoles DeFi, en commençant par les marchés monétaires.
+
+
+### RAI sur Fuse (Rari Capital)
+
+Fuse est un marché monétaire assez innovant puisqu'il permet la création de pool par des acteurs qui ne sont pas l'équipe, et à terme n'importe qui. C'est donc assez logiquement que Fuse a été un des premiers marchés monétaires à supporter RAI. En fonction des pools, il est également possible d'**utiliser RAI comme collatéral sur Fuse**.
+
+RAI est pour l'instant disponible dans 3 pools d'actifs proposants différents niveaux de risques et tokens empruntables :
+
+
+
+
+### RAI sur Aave
+
+Après avoir ajouté le support pour RAI il y a déjà quelques semaines, Aave a récemment alloué une enveloppe (très modérée) de StkAAVE pour incentiver les emprunts et dépôts sur RAI. Il aura fallu mettre la lumière sur l' une des contradictions principales de la plateforme : Aave est un marché monétaire décentralisé qui utilise (encore) la grande majorité de son budget pour inciter les emprunts/dépôts sur des stablecoins qui ne le sont pas du tout (USDC et USDT).
+
+À noter : pour l'instant **le max LTV de RAI est de 0 : RAI ne peut donc pas servir de collatéral sur Aave**. Pas de discrimination ici, c'est assez standard de la part d'Aave - il s'agit de la procédure "classique" et prudente lors de l'ajout d'un nouveau type de collatéral. La gouvernance peut voter pour augmenter cette valeur.
+
+
+### RAI sur Cream
+
+Cream a été l'un des premiers marchés monétaires à supporter RAI. Il s'agit néanmoins d'un marché monétaire de seconde zone extrêmement risqué et sans valeur ajoutée, voire délétère sur le long terme. Je m'arrête donc là, et [vous invite à lire cet article si vous vous demandez pourquoi](https://tokenbrice.xyz/fr/marche-monetaire-risque/).
+
+
+### RAI sur Idle Finance
+
+Idle Finance est un service qui permet, comme son nom l'indique, de mettre en place des stratégies de rendement passif. Dans le cas de RAI, Idle exploite les rendements disponibles sur Fuse ainsi que Aave. Initialement, il y avait aussi Cream mais la gouvernance a choisi de recentrer les stratégies pour contenir le risque :
+
+Outre le rendement natif en RAI, un dépôt sur Idle Finance vous permet également de bénéficier :
+
+
+
+1. D'un rendement en FLX, visible ici.
+2. D'un rendement en StkAAVE (correspondant à la part des RAI déployés sur Aave)
+3. Et enfin, également d'un rendement en IDLE (bientôt - voté par la gouvernance mais pas encore implémenté)
+
+Ainsi, si vous souhaitez posséder des RAI sur le long terme pour vous prémunir contre les risques relatifs au dollar/euro, le dépôt sur Idle est plutôt attractif pour produire un rendement totalement passif. Attention cependant, cela revient à composer plusieurs risques de smart contract : Reflexer + Aave + Fuse + Idle.
+
+
+### RAI + Fei Protocol
+
+Fei est un autre stablecoin qui cherche à maximiser la décentralisation. Ici l'approche est différente et repose essentiellement sur la notion de **"Protocol Controlled Value" (PCV)**. En bref, l'essentiel de liquidité sur les paires FEI est contrôlé par le protocole lui-même. Les fonds sont issus de la genèse du protocole où les utilisateurs ont engagé des ETH afin d'acquérir du FEI ainsi que du TRIBE (token de gouvernance) à leur création.
+
+Ainsi, FEI est un stablecoin qui partage une caractéristique avec RAI et LUSD : il est entièrement collatéralisé par des actifs trustless (ETH). Néanmoins, FEI est bien plus proche de LUSD que de RAI dans le sens où il reste indexé au dollar.
+
+Récemment, la DAO de Fei a voté pour **diversifier une partie de la trésorerie du protocole vers RAI** afin de la rendre plus pérenne. Ainsi, jusqu'à $6M (~2M RAI) vont être acquis et déployés sur Aave et Fuse pour produire un rendement. D'autres DAOs envisagent également de diversifier une partie de leur trésorerie vers RAI (Moloch, DxDAO, Metagame, etc.), je m'attends donc à plus d'initiatives similaires.
+
+
+## Conclusion
+
+J'espère que cette présentation assez exhaustive de RAI vous aura appris des choses. Comme toujours gardez en tête que je choisis soigneusement mes sujets et cet article ne constitue en rien un conseil en investissement. En l'occurrence, le choix s'est porté sur Reflexer/RAI ici car c'est un système élégant dont l'analyse permet de discuter de nombreuses notions essentielles pour mieux comprendre la DeFi dans son ensemble.
+
+J'espère que la lecture de cet article aura été instructive pour vous.
+
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais. Ainsi qu'à [Guifel](https://twitter.com/guifel_) de l'équipe Reflexer pour ses suggestions avisées._
+
+Vous n'en avez pas eu assez ? Ça tombe bien, l'équipe Reflexer vous propose des articles très bien écrits pour expliquer le système plus en profondeur - en anglais. Voici ceux dont je recommande particulièrement la lecture :
+
+* Un article [pour comprendre l'approche développée pour sécuriser le protocole](https://medium.com/reflexer-labs/securing-the-money-god-ef21453a299b)
+* [Une série de trois articles de simulations, parfait pour articuler en pratique votre compréhension de RAI](https://medium.com/reflexer-labs/rai-system-simulations-part-1-safe-owners-876a6bd55385)
+* Enfin, pour les plus braves d'entre vous, sachez aussi que [le whitepaper originel de RAI est également disponible en français](https://github.com/reflexer-labs/whitepapers/blob/master/French/rai-french.pdf)
diff --git a/content/post/2021/reflexer-rai.md b/content/post/2021/reflexer-rai.md
new file mode 100644
index 00000000..c3c8ba1b
--- /dev/null
+++ b/content/post/2021/reflexer-rai.md
@@ -0,0 +1,234 @@
+---
+title: "🗿 Reflexer Labs (RAI) : the What, How and Why"
+description: "Reflexer's RAI is a new type of asset still unique in DeFi. It is also based on a system with a de-governance scheme. So let's look at how to stay safe from the risks associated with fiat currencies, centralization and trust thanks to RAI's design!"
+date: '2021-09-17T01:13:50.191Z'
+categories: [Stablecoin, Lending]
+tags: [DeFi, Ethereum, Stablecoins, Reflexer, RAI, Maker, Liquity]
+toc: true
+tocNum: false
+url: reflexer-rai
+image: /img/2021/reflexer-rai/cover.png
+difficulty: "intermediate"
+---
+
+RAI is a strange beast that many people still don't understand or care about, including people who are really knowledgeable about DeFi. So it was time to offer you a rather exhaustive article dedicated to its subject. I've included everything I thought was relevant to understand why an asset like RAI is needed, what it does and how it works.
+
+So get a cup of coffee and hang on, we're in for a great ride!
+
+## Understanding RAI's context
+
+Before we even begin to get into the nitty-gritty, I think it's essential to understand the context around RAI, i.e. the main stable assets used today and their limitations.
+
+The context for understanding RAI is quite dense, but the good news is that this is not the first time I have covered this topic on the blog. So I'll refer you to some relevant reading to go deeper into the subject :
+
+1. [Exploring stable assets on Ethereum: approaches & endgame](https://tokenbrice.xyz/ethereum-stable-assets/)
+2. [Understanding innovations in money markets to envision their future](https://tokenbrice.xyz/money-market-innovations/)
+
+If you don't have time to explore the concept in depth with the articles proposed above, here are the two essential points to remember to fully understand the rest:
+
+1. Currently, **the overwhelming majority of the stablecoin demand is covered by centralized solutions requiring trust**, the most used being USDT (~66 billion) and USDC (~27 billion).
+
+2. Whatever your preferred economic theses, especially in terms of inflation, I think we can easily agree on the need for stable assets that are not correlated to a fiduciary currency (= managed by a state).
+
+### The wUSDC trick
+
+I use the term "wrapped USDC" (wUSDC) to describe a situation that is common in alternative stablecoins: it is used to concisely and appropriately describe **solutions that essentially use USDC as collateral**, a trusted stablecoin guaranteed by a central agency (Circle).
+
+In such a situation, there is no need to go further, not even to analyze the details of the system: since their main collateral can be frozen or seized, **stablecoins produced** in this way cannot be considered decentralized or trustless.**
+
+This kind of assets has a surprisingly large following, the main ones being Maker and Frax.
+
+### Maker = a majority of collateral requiring trust
+
+With [Maker (DAI)](https://www.defiscan.info/protocols/sky/ethereum), **approximately 60% of DAI are minted with USDC as collateral**, to which figure we need to add those minted from other collaterals requiring trust: wBTC, TUSD, GUSD, PAX, USDT, renBTC + all UniV2 pairs involving at least one of these tokens + all collaterals from the real world such as Centrifuge: New Silver. [Details on DAIStats](https://daistats.com/#/).
+
+
+
+Note: PSM is a module that prevents excessive price volatility of DAI. It is therefore automatically minted by the PSM when necessary.
+
+The first version of Maker, before the Multi Collateral DAI update ([MCD - 18/11/2019](https://medium.com/@MakerDAO/update-the-road-to-multi-collateral-dai-2d4c48092270)) used only ETH as collateral and thus presented much more credible guarantees. This is no longer the case at all.
+
+🙏 Nevertheless, I warmly thank the MakerDAO team for their very many contributions to the ecosystem - the Maker MCD model is even used as a basis by Reflexer!
+
+#### FRAX ? Guaranteed by USDC or nothing (algorithmic)
+
+
+**On the FRAX side, only USDC is used as collateral**, in various forms - either in Yearn/Compound/Aave to produce a return, or via [AMOs (Algorithmic Market Operations Controller)](https://docs.frax.finance/amo/overview). Here are the details of the assets that are used to collateralize FRAX, [available on the official website](https://app.frax.finance/).
+
+ + a variable algorithmic (collateral-free) portion.")
+
+Both Frax and DAI are developing a myriad of interesting approaches, but since their basis is centralized, **they cannot be considered anything more than a mechanism for amplifying the liquidity available on USDC, at best**. They do, however, make **interesting contributions in terms of fundamental research** that may help establish a more optimal solution that does not require trustlessness.
+
+### Are there relevant alternatives to RAI?
+
+To date, RAI is a unique asset with no comparable alternative. However, there are systems that share certain characteristics with RAI, such as **the exclusive use of ETH as collateral**.
+
+So, if you are ready to expose yourself to the dollar, Liquity offers a very relevant alternative which also has **the merit of being totally unstoppable** (which is not yet the case with RAI): the contracts have no administrative function, exactly like Uniswap V1/V2. However, there are still the oracles (necessary for a loan service) and the associated risks.
+
+Now that the stage is set, let's move on to the main course: it's time to study the underlying mechanisms of RAI. We'll start by how to mint it from a user's perspective before going into more detail about what RAI actually is and how it works.
+
+## How is the RAI created ?
+
+
+Reflexer's RAI is in some ways **both the primary and final form of Maker's DAI**. First, in the sense that it returns to the promises of the original DAI (the SAI): only the ETH is used as collateral, and final in the sense that RAI manages to extricate itself from the dollar dependency.
+
+Reflexer is based on a Maker MCD with several changes, including the incorporation of the PID controller, protection against liquidations and many others. We will slowly unfold all this but let's start by seeing how the system works from the user's perspective.
+
+Just like on Maker, RAI is created directly by Reflexer users. Users can open **a safe that allows them to stake ETH and mine a proportional amount of RAI**. Each user can choose the amount of RAI minted for the same amount of ETH at stake (-> different risk levels) and must manage his position. **Liquidation is possible and necessary** because it ensures that there is always enough ETH in the system to guarantee the RAI issued.
+
+Nevertheless, the system here is innovating compared to Maker thanks to its "Savior" function. It allows **to use a RAI/ETH liquidity position on Uniswap V2 as a guarantee for a safe**. Thus, if the ETH price were to fall suddenly, which could put an open safe protected by this function at risk of liquidation, **the Savior automatically withdraws the quantity of liquidity necessary to bring the safe back to the desired collateralization level**.
+
+This allows users who mint RAI and then use it to provide liquidity to sleep much more peacefully!
+
+## But what is RAI exactly ?
+
+RAI is a new asset class in its own way. It aims to be **low volatility, without relying on another stable asset** (fiat currency or gold are the most traditional sources). To do this, RAI relies on a system that reacts dynamically to market conditions.
+
+In the case of RAI, there are two key parameters to consider:
+
+1. **The redemption price** = value of a unit of debt in the system
+2. **The market price** = everything is in the name !
+
+Of course, the system has no control over the RAI price observed in the market, which is determined by buyers and sellers. Nevertheless, it can gradually adjust certain parameters to modify the redemption price and **converge the two prices in the future**.
+
+We are therefore faced with a situation that can be generalized quite easily, embodied by an entire field of engineering and called **control theory**:
+
+
+
+In the case of RAI, **the controller is algorithmic** and again quite standard: it is the famous **"PID controller "**. It is based on a fairly dense mathematical formula that it is not necessary to understand in order to understand the relevance of the system.
+
+Nevertheless, one essential point must be understood: the inherent inertia of the system. The controller cannot afford to make sudden changes in the parameters (which would be detrimental to its relative stability), so it must operate in a more iterative and progressive logic.
+
+
+Once this is understood, let me remind you that the system by itself cannot affect the price of RAI. All it can do is vary the redemption rate, which modulates the incentives of system participants. This creates **arbitrage opportunities** for those participants whose execution brings them closer to the equilibrium between the redemption price and the market price.
+
+Let's look at this in practice.
+
+There is a logic here that is reminiscent of [algorithmic stablecoins](https://tokenbrice.xyz/algorithmic-stablecoins/), although the end product of the system is totally different.
+
+### When market price > redemption price
+
+We start with this situation because I think it is simpler to understand. In the case where the market price exceeds the redemption price, that means anyone with ETH available could potentially generate a profit by arbitraging the market:
+
+1. ETH deposit and RAI mint;
+2. Sale of RAI in the market for a profit;
+3. (When market price < redemption) repurchase of RAI to pay off debt and release ETH. The difference between the 2 prices on RAI - fees in gas is the profit generated.
+
+
+
+This situation is all the more interesting for those who already have safes with available capacity: they save themselves a step in the scenario presented above.
+
+In this scenario, there is therefore an incentive to mint RAI (->increase supply) and to sell it on the market (->bearish pressure) which gradually reduces the price on the market, making it converge towards the redemption price.
+
+### When market price < redemption price
+
+In the opposite case, the redemption rate becomes positive, making the existing debt more expensive. Users with active safes have an interest in paying off their debt, which reduces the available supply of RAI.
+
+
+
+In addition, if they had converted their RAI to another asset (e.g. ETH for leveraged exposure), they will have to acquire RAI in the market (->bullish pressure) in order to be able to repay their debt.
+
+As you can see, it is in the best interest of the Reflexer system players to monitor the redemption rate and react accordingly. If you have an active safe, I invite you to consult it regularly - [it can be seen on the Reflexer website](https://stats.reflexer.finance/)
+
+This rate impacts simple RAI owners less directly, especially if they use them to produce a return (which can offset a negative rate) but it is still a metric to keep in mind.
+
+### Dynamic adjustment of the redemption rate
+
+**Dynamic adjustment of the redemption rate is one of the essential features of Reflexer / RAI**. To better understand why this is critical, let's analyze the situation on Maker pre-MCD:
+
+1. The demand for DAI is (part of) the demand for stablecoins.
+2. However, DAI are created by leveraging ETH, so they depend on the need/appetite for leverage on ETH, which is independent of the demand for stablecoins, which mostly depends on general market conditions (bear or bull and others).
+3. If demand is higher than supply, on Maker, there is no dynamic adjustment. You have to wait for a vote of the governance (and the delays that go with it) to lower the Stability Fee. And it's the same in the other direction (too much supply).
+
+Thus, **the balance between the supply and demand side of the equation is almost impossible to maintain**, which is why the pre-MCD DAI could often end up above its peg. Maker solved this problem by adding many types of collateral, including non-trustless stablecoins and then the PSM which automatically mints DAI from USDC when needed. The solution proposed by Reflexer (dynamic adjustment of the redemption rate) has the merit of **solving the problem at the level of the system itself**, which allows to keep ETH as the only collateral.
+
+## FLX and RAI's "de-governance" strategy.
+
+In addition to the RAI, Reflexer's system also has a second token, FLX, the "ungovernance" token. It is used for system governance and also serves as a last resort liquidity mechanism (in case of bad debt), with a system quite similar to Aave's Safety Module.
+
+The FLX token can be purchased on the market, but it is mostly **distributed to the main actors involved in the system** - [the exhaustive list of FLX incentives](https://app.reflexer.finance/earn/incentives) is available on the Reflexer website.
+
+Those who are eligible for FLX (claimable on the Reflexer website, monthly distribution) are:
+
+1. Safes owners who bring their RAI in liquidity on the UNIv2 ETH/RAI pair (migration in progress, end soon) or UNIv3 RAI/DAI.
+2. But also the liquidity providers on FLX/ETH (migration in progress, end soon)
+3. And finally the FLX stakers in the equivalent of the Safety Module at Reflexer.
+4. There are also incentives in FLX related to the use of RAI in various DeFi services, detailed in the last part.
+
+[FLX staking (Uni V2 FLX/ETH)](https://docs.reflexer.finance/incentives/flx-staking) serves as both an incentive mechanism to provide liquidity as well as a guarantee for the system. If the system is under-collateralized, the stakers will be diluted (->token LP liquidated) so that the module acquires RAI and brings the system back to equilibrium.
+
+In a normal situation, the stakers simply enjoy a rather attractive return. Just like Aave's Safety Module, this module has a time limit for unstake, to avoid liquidity drain in critical periods: it is 21 days.
+
+Now that we have the basics on FLX, let's discuss its long-term issues a bit more.
+
+### The gouvernance exit plan
+
+The Reflexer system is intended to be "governance-minimized". This has been the case since its inception, since decisions that are made by governance in Maker (Stability Fee of vaults) are automated in Reflexer (PID controller).
+
+The vision is simply to automate everything that can be automated in the long term, once the system is mature, and to give the keys to the subsystems that cannot be automated to the FLX holder community.
+
+The team has set three main levels related to this objective [detailed in the FLX presentation article](https://medium.com/reflexer-labs/introducing-flx-20755214a465). Each level is linked to a date:
+
+* 14 months after launch - April 17, 2022: minimization of governance on the main subsystems (liquidation, auction and taxation)
+* 18 months after launch - August 17, 2022: minimization of governance on all main contracts, except for the PID controller, oracles and the Savior mechanism.
+* 3rd step (date incoming): handover (to FLX holdeurs) of the remaining mechanisms.
+
+I think this overview is enough to understand the interest of RAI and how it works. So let's see how RAI is already used in various DeFi protocols.
+
+## The DeFi ecosystem around RAI
+
+RAI is gradually being adopted within the DeFi ecosystem, and that's great to see! So I'll end with a quick overview of the different RAI integrations in DeFi protocols, starting with money markets.
+
+### RAI on Fuse (Rari Capital)
+
+Fuse is a rather innovative money market since it allows the creation of pools by players who are not the team, and eventually anyone. It is therefore quite logical that Fuse was one of the first money markets to support RAI. Depending on the pool, it is also possible to **use RAI as collateral on Fuse**.
+
+RAI is currently available in 3 asset pools with different risk levels and borrowable tokens:
+
+
+
+### RAI on Aave
+
+After adding support for RAI already a few weeks ago, Aave recently allocated a (very moderate) amount of StkAAVE to incentivize borrowing and depositing on RAI. It was necessary to shed light on one of the main contradictions of the platform: Aave is a decentralized money market that (still) uses the vast majority of its budget to encourage borrowing/deposits on stablecoins that are not stablecoins at all (USDC and USDT).
+
+Note: for the moment **the max LTV of RAI is 0: RAI cannot be used as collateral on Aave**. No discrimination here, this is pretty standard on Aave's part - this is the "classic" and prudent procedure when adding a new type of collateral. Governance can vote to increase this value.
+
+### RAI on Cream
+
+Cream was one of the first money markets to support RAI. However, it is an extremely risky and non-value-added, even deleterious, second-tier money market over the long term. So I'll stop there, and [invite you to read this article if you're wondering why](https://tokenbrice.xyz/money-markets-risk/).
+
+### RAI on Idle Finance
+
+Idle Finance is a service that allows, as the name suggests, to set up passive return strategies. In the case of RAI, Idle leverages the returns available on Fuse as well as Aave. Initially, there was also Cream but the governance chose to refocus the strategies to contain the risk:
+
+In addition to the native RAI return, a deposit on Idle Finance also allows you to benefit from:
+
+
+1. From a FLX output, visible here.
+2. A StkAAVE yield (corresponding to the share of RAI deployed on Aave)
+3. And finally, also a yield in IDLE (soon - voted by the governance but not yet implemented)
+
+So if you want to own RAI over the long term to hedge against dollar/euro risks, the Idle deposit is rather attractive to produce a totally passive return. Be careful though, this means compounding several smart contract risks: Reflexer + Aave + Fuse + Idle.
+
+
+### RAI + Fei Protocol
+
+Fei is another stablecoin that seeks to maximize decentralization. Here the approach is different and is essentially based on the notion of Protocol Controlled Value (PCV). In short, the bulk of liquidity in EIF pairs is controlled by the protocol itself. The funds come from the genesis of the protocol where users have committed ETH in order to acquire FEI as well as TRIBE (governance token) at their creation.
+
+It is a stablecoin that shares a characteristic with RAI and LUSD: it is fully collateralized by trustless assets (ETH). Nevertheless, FEI is much closer to LUSD than to RAI in the sense that it remains pegged to the dollar.
+
+Recently, the Fei DAO voted to **diversify some of the protocol cash flow to RAI** to make it more sustainable. Thus, up to $6M (~2M RAI) will be acquired and deployed on Aave and Fuse to produce a return. Other DAOs are also considering diversifying some of their cash to RAI (Moloch, DxDAO, Metagame, etc.), so I expect more similar initiatives.
+
+## Conclusion
+
+I hope you've learned a few things from this fairly comprehensive presentation of RAI. As always, keep in mind that I choose my topics carefully and this article is not intended as investment advice. In this case, Reflexer/RAI was chosen here because it is an elegant system whose analysis allows to discuss many essential notions to better understand DeFi as a whole.
+
+I hope that reading this article has been informative for you.
+
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
+
+Didn't get enough? Well, the Reflexer team has some very well written articles to explain the system in more depth - in English. Here are the ones I particularly recommend reading:
+
+* An article [to understand the approach developed to secure the protocol](https://medium.com/reflexer-labs/securing-the-money-god-ef21453a299b)
+* A [series of three simulation articles, perfect for articulating your understanding of RAI in practice](https://medium.com/reflexer-labs/rai-system-simulations-part-1-safe-owners-876a6bd55385)
+* Finally, for the brave among you, you can [refer to the original RAI whitepaper](https://github.com/reflexer-labs/whitepapers/blob/master/English/rai-english.pdf)
diff --git a/content/posts/2021/risk-tranching.fr.md b/content/post/2021/risk-tranching.fr.md
similarity index 92%
rename from content/posts/2021/risk-tranching.fr.md
rename to content/post/2021/risk-tranching.fr.md
index 69b1fe3e..d0a084f9 100644
--- a/content/posts/2021/risk-tranching.fr.md
+++ b/content/post/2021/risk-tranching.fr.md
@@ -1,19 +1,19 @@
---
title: "🗡 Du risque ? Oui, mais juste un doigt"
-description: "Qu'est que la répartition du risque (traching) et pourquoi est-elle appellée à devenir une **primitive financière essentielle** pour les principaux marchés monétaires de la DeFi comme Aave ou Compound ?"
+description: "Qu'est que la répartition du risque (tranching) et pourquoi est-elle appellée à devenir une **primitive financière essentielle** pour les principaux marchés monétaires de la DeFi comme Aave ou Compound ?"
date: '2021-01-12T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Finance Décentralisée, Gestion du risque, Sérialisation du risque, Marchés monétaires, Prêt, Dépôt, Stablecoin, DAI, aDAI, Saffron Finance, 88mph, Aave, Compound, Yearn Finance, AAVE, SFI, APWineFi]
+categories: [Yield]
+tags: [DeFi, Ethereum, Decentralized finance, Risk Management, Risk Tranching, Money Markets, DAI, aDAI, Saffron Finance, 88mph, Aave, Compound, Yearn Finance, APWineFi]
toc: true
url: tranching-risque-defi
+image: /img/2021/risk-tranching/cover.gif
+difficulty: "intermediate"
---
-La DeFi s'est considérablement développée au cours de l'année dernière, en partie grâce à l'apparition de produits d'investissement plus accessibles tels que **[les vaults]({{< relref path="/content/posts/2020/vaults.fr.md" >}})** de Yearn ou de Harvest. Grâce à leur architecture, ils facilitent la mutualisation des capitaux, ce qui permet des investissements plus petits mais rentables sur les marchés monétaires et d'autres services DeFi comme Curve ou SushiSwap.
+La DeFi s'est considérablement développée au cours de l'année dernière, en partie grâce à l'apparition de produits d'investissement plus accessibles tels que **[les vaults](https://tokenbrice.xyz/fr/vaults/)** de Yearn ou de Harvest. Grâce à leur architecture, ils facilitent la mutualisation des capitaux, ce qui permet des investissements plus petits mais rentables sur les marchés monétaires et d'autres services DeFi comme Curve ou SushiSwap.
C'était une couche nécessaire et très appréciée, et plusieurs améliorations sont encore à apporter pour rationaliser encore plus les choses et augmenter l'efficacité en gaz. Toutefois, je pense que l'essentiel de l'innovation de cette année viendra d'un autre front : la gestion des risques sur les produits de type vault et les marchés monétaires en général.
-
-
En effet, plusieurs primitives financières ont été développées pour offrir davantage d'options de ségrégation et de couverture des risques. Il existe désormais des options d'assurance crédibles pour la DeFi, ainsi qu'une nouvelle approche pour mieux répartir le risque entre des acteurs consentants et informés : le tranching.
{{< notice info >}}
@@ -60,10 +60,6 @@ Je reviens plus explicitement sur l'utilité du tranching en fin d'article.
Tout cet article a en fait été inspiré par un tweet que j'ai publié et dans lequel je partageais ce à quoi pouvait ressembler un aDAI tranché :
-
-{{< tweet 1347878501697916928 >}}
-
-
À ce jour, il y a principalement un produit qui fournit des tranches sur le mainnet que je regarde : [Saffron Finance](https://saffron.finance/). Il s'agit d'une couche d'abstraction de tranching construite sur le marché DAI de Compound. La séparation des risques est simple avec deux tranches principales + une :
1. La tranche **AA**, **couverte en cas de défaillance de la plateforme**.
@@ -126,7 +122,7 @@ Jusqu'à présent, deux projets visent à fournir un rendement fixe sur des prod
Tout comme Saffron, 88mph est une autre couche d'abstraction construite sur les dépôts de Compound, Aave et Harvest. Elle fournit un **rendement fixe pour les déposants**, alors que de l'autre côté du marché, les acheteurs d'obligations à taux variable supportent le risque des fluctuations de rendement du produit d'investissement sous-jacent.
-
+
---
@@ -172,4 +168,4 @@ Cet article a éveillé votre curiosité ? Vous êtes tombés au bon endroit —
_Merci à Waël qui a réalisé l'image de couverture qui illustre cet article (et l'emblème TokenBrice)._
-_& merci à FrenchTony et ParaBellum68 pour leur relecture et conseils._
\ No newline at end of file
+_🙏 Un grand merci à HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony pour leur relecture attentive de l'édition française de cet article et sa traduction en Anglais._
diff --git a/content/posts/2021/risk-tranching.md b/content/post/2021/risk-tranching.md
similarity index 94%
rename from content/posts/2021/risk-tranching.md
rename to content/post/2021/risk-tranching.md
index 02470a94..74e0ae3f 100644
--- a/content/posts/2021/risk-tranching.md
+++ b/content/post/2021/risk-tranching.md
@@ -2,18 +2,18 @@
title: "🗡 Risk? Yes please, but exactly how I like it"
description: "Exploring what risk tranching is and why it's **the next financial primitive** in line to be incorporated into major money markets like Aave or Compound."
date: '2021-01-12T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Decentralized finance, Risk Management, Risk Tranching, Money Markets, Lend, Borrow, Interest-bearing Stablecoin, DAI, aDAI, Saffron Finance, 88mph, Aave, Compound, Yearn Finance, AAVE, SFI, APWineFi]
+categories: [Yield]
+tags: [DeFi, Ethereum, Decentralized finance, Risk Management, Risk Tranching, Money Markets, DAI, aDAI, Saffron Finance, 88mph, Aave, Compound, Yearn Finance, APWineFi]
toc: true
url: risk-tranching-defi
+image: /img/2021/risk-tranching/cover.gif
+difficulty: "intermediate"
---
-DeFi has grown tremendously over the past year, partly thanks to the appearance of more streamlined investment products such as Yearn's or Harvest's **[vaults]({{< relref path="/content/posts/2020/vaults.md" >}})**. Thanks to their architecture, they facilitate the mutualization of capital which enables smaller yet profitable investments on money markets and other DeFi services like Curve or SushiSwap.
+DeFi has grown tremendously over the past year, partly thanks to the appearance of more streamlined investment products such as Yearn's or Harvest's **[vaults](https://tokenbrice.xyz/vaults/)**. Thanks to their architecture, they facilitate the mutualization of capital which enables smaller yet profitable investments on money markets and other DeFi services like Curve or SushiSwap.
It was a necessary and much-welcomed layer, and several improvements are still to be made to streamline things even further and increase gas efficiency. However, I believe the bulk of the innovation this year will come from another front: risk management on the vault-type products.
-
-
Indeed, several definancial primitives have been developed to provide more options to segregate and hedge risks. There are now credible insurance options available for DeFi, as well as a new approach (in DeFi) to better distribute the risk between consenting and informed actors: tranching.
We'll dive right in, but just before that, I think it's apt to examine the terminology too.
@@ -57,10 +57,6 @@ I explain why tranching matters more explicitly in the last part of this article
This whole article was actually inspired by a tweet I published where I shared what a tranched aDAI could look like:
-
-{{< tweet 1347878501697916928 >}}
-
-
As of today, there is mostly one product delivering tranching on mainnet I'm looking at [Saffron Finance](https://saffron.finance/). It's essentially a tranching abstraction layer built on top of the Compound DAI market. The risk segregation is straightforward with two main tranches + one:
1. The **AA tranche**, **covered in case of platform failure**.
@@ -159,4 +155,4 @@ I for one cannot wait: I've been prepping for the past three years.
_Thanks to Waël for making the cover image featured at the top of this article (as well as the TokenBrice emblem)._
-_& To FrenchTony and ParaBellum68 for their help reviewing it._
\ No newline at end of file
+_🙏 Huge thanks to HHK, Charles, Thomas, Erwan, [PhilH](https://twitter.com/phil_h) & FrenchTony for proofreading the French version of this article and translating it integrally into English._
\ No newline at end of file
diff --git a/content/posts/2021/science-fiction-defi-1.fr.md b/content/post/2021/science-fiction-defi-1.fr.md
similarity index 94%
rename from content/posts/2021/science-fiction-defi-1.fr.md
rename to content/post/2021/science-fiction-defi-1.fr.md
index 811d6280..25b3b5e4 100644
--- a/content/posts/2021/science-fiction-defi-1.fr.md
+++ b/content/post/2021/science-fiction-defi-1.fr.md
@@ -2,9 +2,10 @@
title: "Science Fiction DeFi #1 - Le marché d'actions humaines & le Moloch interstellaire 🛸"
description: "Le début d'une grande aventure : une émission interactive qui allie science-fiction et DeFi pour réfléchir aux enjeux du monde de demain."
date: '2021-03-11T01:13:50.191Z'
-categories: [🎮 Twitch, 👾 DeSciFi]
+categories: [Projects]
tags: [DeFi, Science Fiction, DeSciFi]
url: science-fiction-defi-1
+difficulty: "beginner"
---
Bonjour à tous et bienvenue dans ce nouvel espace de réflexion !
@@ -74,8 +75,11 @@ Comme toujours durant les lives, je serai ravi de partager avec vous une partie
Pendant que les autres parlent en lambos, ici nous savons bien qu'une DeLorean = 88 lambos. Il y en aura bien sûr à gagner mais aussi d'autres NFTs en guise de récompense exceptionnelle comme ce magnifique veau d'or bitcoin-natif : le Space Bulla.
-
+
+
+ Your browser does not support video. View GIF
+
J'ai absolument hâte de vous retrouver en compagnie de Manu pour la première. On ne sait pas si l'audience sera au rendez-vous mais une chose est sûre : on se fait déjà plaisir !
-On vous dit donc à **[samedi 21h sur Twitch](https://www.twitch.tv/tokenbrice)** : vous retrouverez déjà deux bon lives DeFi sur la chaine.
\ No newline at end of file
+On vous dit donc à **[samedi 21h sur Twitch](https://www.twitch.tv/tokenbrice)** : vous retrouverez déjà deux bons lives DeFi sur la chaine.
diff --git a/content/posts/2021/seigniorage-basis-vs-esd.fr.md b/content/post/2021/seigniorage-basis-vs-esd.fr.md
similarity index 97%
rename from content/posts/2021/seigniorage-basis-vs-esd.fr.md
rename to content/post/2021/seigniorage-basis-vs-esd.fr.md
index f2aced6b..1a06d65e 100644
--- a/content/posts/2021/seigniorage-basis-vs-esd.fr.md
+++ b/content/post/2021/seigniorage-basis-vs-esd.fr.md
@@ -2,19 +2,19 @@
title: "⚖ L'histoire de deux modèles de seigneuriage : Basis contre ESD"
description: "Une analyse comparative des deux principaux modèles de tokens de seigneuriage actuellement explorés pour produire de nouveaux types de stablecoins sur le réseau Ethereum"
date: '2021-01-16T01:13:50.191Z'
-categories: [🌌 DeFi, 💸 DeFi Pratique]
-tags: [DeFi, Ethereum, Stablecoins, Seigniorage, Basis Cash, Empty Set Dollar, Dynamic Set Dollar, USDT, USDC, ESD, DSD, BAC, BAS, MithCash, MIC, MIS, DAIQ, ZAI]
+categories: [Stablecoin, Yield]
+tags: [DeFi, Ethereum, Stablecoins, Seigniorage, Basis Cash, Empty Set Dollar, Dynamic Set Dollar, ESD, DSD, BAC, BAS, MIC, MIS, ZAI]
toc: true
tocNum: false
-url: seigneuriage-basis-vs-esd
+image: /img/2021/seigniorage-basis-vs-esd/cover.png
+difficulty: "intermediate"
+url: seigniorage-basis-esd
---
Il y a quelques semaines, j'ai partagé mon premier billet sur les stablecoins algorithmiques en soulignant les principales caractéristiques qui rendaient de tels projets intéressants à mes yeux. Dans cet article, nous allons approfondir le sujet, avec une **analyse comparative des deux principaux modèles** : le modèle Basis et le modèle ESD.
Tous deux sont utilisés avec succès par le projet qui portent leur nom mais aussi par de nombreux forks, plus ou moins pertinents. Alors que le domaine des stablecoins algorithmiques se structure, il semble y avoir un **consensus autour de ces deux approches, désormais utilisés comme modèle** pour lancer rapidement de nouveaux projets essayant diverses modifications, comme l'ancrage du système à une autre monnaie que le dollar, telle que l'or ou l'euro.
-
-
La pléthore de forks existants autorise aux plus récents de s'inspirer des améliorations existantes ou à venir des systèmes en service, ce qui permet de faire un bond en avant dans l'innovation. Mais avant de plonger dans les arcanes du dernier token élastique en or, il est bon de s'assurer que vous comprenez les modèles sous-jacents. C'est la raison pour laquelle nous sommes ici aujourd'hui.
## 1. De vastes bases pour les monnaies élastiques
@@ -196,7 +196,7 @@ Enfin, les quatre projets sont supportés par [Zapper](https://zapper.fi/) et [D
### 4.1. Ressources supplémentaires
-- Pour en savoir plus sur le contexte des stablecoins algorithmiques, n'hésitez pas à **[lire mon précédent article sur le sujet]({{< relref path="/content/posts/2020/algorithmic-stablecoins.fr.md" >}})**.
+- Pour en savoir plus sur le contexte des stablecoins algorithmiques, n'hésitez pas à **[lire mon précédent article sur le sujet](https://tokenbrice.xyz/fr/algorithmic-stablecoins/)**.
- Pour en savoir plus, les francophones apprécieront cette **[🇫🇷 vidéo de 50 min expliquant les deux modèles](https://www.youtube.com/watch?v=TuenkIZZEq0)**
- Si vous lisez l'Anglais, cet article publié sur Derebit vaut la lecture : **[Stabilité, élasticité et réflexivité : A Deep Dive into Algorithmic Stablecoins](https://insights.deribit.com/market-research/stability-elasticity-and-reflexivity-a-deep-dive-into-algorithmic-stablecoins/)**.
@@ -213,4 +213,4 @@ Cet article a éveillé votre curiosité ? Vous êtes tombés au bon endroit —
---
-[^1]: Stage/Unstage est la première étape d'engagement avec le mecanisme, une forme de SAS. Un fois staged, vous pouvez "bound" pour etre éligible aux récompenses s'il y en an. Il vous faudra parfois "claim" c'est à dire signer une transaction pour récupérer les tokens gagnés. "Autocompound", c'est quand les récompenses gagnées sont réinvesties automatiquement : autocomposition ?
\ No newline at end of file
+[^1]: Stage/Unstage est la première étape d'engagement avec le mecanisme, une forme de SAS. Un fois staged, vous pouvez "bound" pour etre éligible aux récompenses s'il y en an. Il vous faudra parfois "claim" c'est à dire signer une transaction pour récupérer les tokens gagnés.
\ No newline at end of file
diff --git a/content/posts/2021/seigniorage-basis-vs-esd.md b/content/post/2021/seigniorage-basis-vs-esd.md
similarity index 97%
rename from content/posts/2021/seigniorage-basis-vs-esd.md
rename to content/post/2021/seigniorage-basis-vs-esd.md
index 0908faff..995a2327 100644
--- a/content/posts/2021/seigniorage-basis-vs-esd.md
+++ b/content/post/2021/seigniorage-basis-vs-esd.md
@@ -2,18 +2,19 @@
title: "⚖ The tale of two seigniorage models: Basis vs ESD"
description: "A comparative analysis of the two main seigniorage token models currently explored to produce new types of stablecoins on the Ethereum network."
date: '2021-01-16T01:13:50.191Z'
-categories: [🌌 DeFi, 💸 Practical DeFi]
-tags: [DeFi, Ethereum, Stablecoins, Seigniorage, Basis Cash, Empty Set Dollar, Dynamic Set Dollar, USDT, USDC, ESD, DSD, BAC, BAS, MithCash, MIC, MIS, DAIQ, ZAI]
+categories: [Stablecoin, Yield]
+tags: [DeFi, Ethereum, Stablecoins, Seigniorage, Basis Cash, Empty Set Dollar, Dynamic Set Dollar, ESD, DSD, BAC, BAS, MIC, MIS, ZAI]
toc: true
tocNum: false
+image: /img/2021/seigniorage-basis-vs-esd/cover.png
+difficulty: "intermediate"
+url: seigniorage-basis-esd
---
A few weeks ago, I shared my first post on algorithmic stablecoins highlighting the key characteristics that made such projects interesting in my eyes. In this piece, we'll go deeper into the topics, with a **comparative analysis of the two main models**: the Basis model and the ESD model.
Both are successfully used by the projects bearing their names but also a sizable trail of forks, more or less relevant. As the field of algorithmic stablecoin grows, there seems to be a **consensus around these two models, now used as a template** to quickstart newer projects trying various alterations, such as pegging the system to another currency other than the dollar, like gold or the euro.
-
-
The plethora of existing forks enables the latest ones to pick and build upon the existing or pending improvements of the live systems, further leapfrogging the innovation. But before you dive into the arcane of the latest gold elastic token, it's worth making sure you understand the underlying models behind these projects. That's why we are here today.
---
@@ -192,6 +193,6 @@ Finally, all four projects are supported in both [Zapper](https://zapper.fi/) an
### 4.1. Additional Resources
-- To learn more about the context behind algorithmic stablecoins, feel free to **[read my previous article on the topic]({{< relref path="/content/posts/2020/algorithmic-stablecoins.md" >}})**.
+- To learn more about the context behind algorithmic stablecoins, feel free to **[read my previous article on the topic](https://tokenbrice.xyz/algorithmic-stablecoins/)**.
- To learn more, French-speaker will enjoy this **[🇫🇷 50 min video explainer of both models](https://www.youtube.com/watch?v=TuenkIZZEq0)**
- English speakers can explore further with this extensive research/recap piece published on Derebit: **[Stability, Elasticity, and Reflexivity: A Deep Dive into Algorithmic Stablecoins](https://insights.deribit.com/market-research/stability-elasticity-and-reflexivity-a-deep-dive-into-algorithmic-stablecoins/)**.
\ No newline at end of file
diff --git a/content/posts/2021/technofeudalism-sovereign-individual.fr.md b/content/post/2021/technofeudalism-sovereign-individual.fr.md
similarity index 96%
rename from content/posts/2021/technofeudalism-sovereign-individual.fr.md
rename to content/post/2021/technofeudalism-sovereign-individual.fr.md
index 4884ec81..7e3adbb0 100644
--- a/content/posts/2021/technofeudalism-sovereign-individual.fr.md
+++ b/content/post/2021/technofeudalism-sovereign-individual.fr.md
@@ -2,15 +2,19 @@
title: "L'individu souverain dans l'ère du technoféodalisme"
description: "Covid a précipité la marche de l’histoire en cristallisant plusieurs tendances latentes. Nous assistons désormais à l’émergence d’un protocole social et politique qui systématise l’exploitation et la misère : comment s’en extraire ?"
date: '2021-01-04T01:13:50.191Z'
-categories: [🔍 Analyse]
-tags: [DeFi, Decentralized Finance, Sovereign Individual, NaaS, Nation as a Service, Nation States, Post-Covid]
+categories: [Analysis]
+tags: [DeFi, Decentralized Finance, Sovereign Individual, NaaS, Nation as a Service, Post-Covid]
+image: /img/2021/technofeudalism-sovereign-individual/francis-bacon.jpg
+difficulty: "beginner"
+url: technofeudalism-sovereign-individual
---
Vous vous souvenez quand on parlait d'un "monde post-covid" ? Il est amusant de voir comment l'expression a rapidement cessé d'être utilisée lorsque les gens ont réalisé que l'ordre social du "nouveau" monde serait aussi absurde et gaspilleur que le précédent.
Pourtant, l'expression a eu le mérite de souligner le rôle de la pandémie qui a tellement mis à mal nos structures sociales qu'elle a entraîné vingt ans de "progrès" réunis en un seul. Je pense qu'aujourd'hui déjà, si nous sommes attentifs et prudents, nous pouvons envisager les prochaines étapes de notre développement sociétal.
-")
+## 🔊 Écoutez cet article en audio, lu par HeyZachy:
+{{< audio "technofeodalisme-fr.mp3" >}}
## Les deux mondes post-covid
@@ -93,8 +97,6 @@ Alors que les valeurs de notre système politique sont des promesses qui doivent
La DeFi permet donc aux individus de posséder et d'échanger des biens sans avoir besoin d'un intermédiaire - c'était une forme de pièce manquante à la sauvegarde de la souveraineté. Grâce à la DeFi, tout le monde peut accéder à des services financiers d'élite plus résistants que ceux du monde classiques rendus possibles grâce à une mixture de sociétés privés et de cadres juridiques.
-Si vous n'en avez jamais entendu parler, vous êtes au bon endroit ! **[Cette introduction]({{< relref path="/content/learndefi/_index.fr.md" >}})** vous aidera à démarrer, et vous trouverez de nombreux articles traitant de la DeFi sur ce blog.
-

Merci d'avoir lu cet article jusqu'à la fin. Si vous l'avez aimé, vous pouvez :
@@ -122,4 +124,4 @@ _Trouvez ci-dessous d'autres ressources supplémentaires pour approfondir les th
[^2]: Les deux auteurs définissent et explorent la thèse dans leur livre *[The Sovereign Individual : Mastering the Transition to the Information Age](https://www.goodreads.com/book/show/82256.The_Sovereign_Individual)*, première **publication en 1997**.
[^3]: Il s'agit essentiellement du concept faisant référence à la servitude moderne créée par les plateformes de services comme Uber ou Deliveroo & l'incorporation croissante d'algorithmes dans notre vie quotidienne sans contrôle ni compréhension de ceux-ci. Pour en savoir plus, cliquez ici : [Rencontrez vos nouveaux maîtres : Comment les plates-formes numériques développent et soutiennent le technoféodalisme](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3473990)
[^4]: Voici [une de ces histoires](https://www.lemonde.fr/societe/article/2013/02/13/un-homme-s-immole-par-le-feu-devant-pole-emploi-a-nantes_1832062_3224.html), en français, mais un scénario similaire s'est déroulé dans plusieurs pays.
-[^5]: Je détaille cette thèse plus dans un article écrit il y a deux ans : **[La nation à la carte, une bonne idée ?]({{< relref path="/content/posts/2018/naas.fr.md" >}})**
\ No newline at end of file
+[^5]: Je détaille cette thèse plus dans un article écrit il y a deux ans : **[La nation à la carte, une bonne idée ?](https://tokenbrice.xyz/fr/naas/)**
\ No newline at end of file
diff --git a/content/posts/2021/technofeudalism-sovereign-individual.md b/content/post/2021/technofeudalism-sovereign-individual.md
similarity index 94%
rename from content/posts/2021/technofeudalism-sovereign-individual.md
rename to content/post/2021/technofeudalism-sovereign-individual.md
index d831b1c8..fc394632 100644
--- a/content/posts/2021/technofeudalism-sovereign-individual.md
+++ b/content/post/2021/technofeudalism-sovereign-individual.md
@@ -2,16 +2,17 @@
title: "The Sovereign Individual in the age of technofeudalism"
description: "Covid precipitated the march of history by crystallizing several forming trends. We're now witnessing the emergence of a social and political protocol massifying exploitation and anguish - how to extract oneself from it?"
date: '2021-01-04T01:13:50.191Z'
-categories: [🔍 Analysis]
-tags: [DeFi, Decentralized Finance, Sovereign Individual, NaaS, Nation as a Service, Nation States, Post-Covid]
+categories: [Analysis]
+tags: [DeFi, Decentralized Finance, Sovereign Individual, NaaS, Nation as a Service, Post-Covid]
+image: /img/2021/technofeudalism-sovereign-individual/francis-bacon.jpg
+difficulty: "beginner"
+url: technofeudalism-sovereign-individual
---
Remember when we used to talk of a "post-covid world"? It's funny to see how the expression quickly stopped being used as people realized the social order of the "new" world would be as nonsensical and wasteful as the previous.
Yet, the phrase had the merit to stress the role of the pandemic which brought so much stress on our social structures that it resulted in twenty years of "progress" packed into one. I think that today already if we're attentive and careful, we can envision the next steps of our societal development.
-")
-
## The two post-covid worlds
I for one welcomed the "post-Covid" world with open arms, as it finally made apparent fundamental shifts that previously were hard to notice. It can be scary and worrisome, but it has one merit: the current situation is exerting **too much pressure on the status quo for it to sustain itself** — it will eventually normalize one way or another.
@@ -89,8 +90,6 @@ While the values of our political system are promises that must be actively kept
DeFi thus allows individuals to possess and exchange goods without the need for an intermediary - it was a form of missing piece to the safeguarding of sovereignty. Thanks to DeFi, everyone can access elite financial services that are more resilient than those of the conventional world, made possible by a mix of private companies and legal frameworks.
-If you've never heard of it before, you've come to the right place! **[This introduction]({{< relref path="/content/learndefi/_index.md" >}})** will help you get started, and you'll find many articles discussing DeFi on this blog.
-

Thanks for reading this piece until the end. If you liked it, you can:
@@ -107,4 +106,4 @@ _Find below more additional resources to research further the key thesis and ide
[^2]: The two authors define and explore the thesis in their book *[The Sovereign Individual: Mastering the Transition to the Information Age](https://www.goodreads.com/book/show/82256.The_Sovereign_Individual)*, first **published in 1997**.
[^3]: It's essentially the concept referring to the modern servitude created by service platforms like Uber or Deliveroo & the increasing incorporation of algorithms in our daily life without control or understanding over them. Learn more here: [Meet Your New Overlords: How Digital Platforms Develop and Sustain Technofeudalism](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3473990)
[^4]: Here's [one of such story](https://www.lemonde.fr/societe/article/2013/02/13/un-homme-s-immole-par-le-feu-devant-pole-emploi-a-nantes_1832062_3224.html), in French but similar scenario unfolded in various countries.
-[^5]: I wrote more extensively about this thesis about two years ago: **[The Demise of Nation States: Introducing the Nation as a Service (NaaS)]({{< relref path="/content/posts/2018/naas.md" >}})** & **[The Nation as a Service and its fractional citizenship- a good idea?]({{< relref path="/content/posts/2018/demise-ns.md" >}})**
\ No newline at end of file
+[^5]: I wrote more extensively about this thesis about two years ago: **[The Demise of Nation States: Introducing the Nation as a Service (NaaS)](https://tokenbrice.xyz/naas/)** & **[The Nation as a Service and its fractional citizenship- a good idea?](https://tokenbrice.xyz/demise-ns/)**
\ No newline at end of file
diff --git a/content/posts/2021/tokenbrice-twitch.fr.md b/content/post/2021/tokenbrice-twitch.fr.md
similarity index 93%
rename from content/posts/2021/tokenbrice-twitch.fr.md
rename to content/post/2021/tokenbrice-twitch.fr.md
index b156b917..4c04f96a 100644
--- a/content/posts/2021/tokenbrice-twitch.fr.md
+++ b/content/post/2021/tokenbrice-twitch.fr.md
@@ -2,10 +2,13 @@
title: "TokenBrice, désormais 100% en français et bientôt sur Twitch !"
description: "/Insérez de la hype et un Brice heureux ici/"
date: '2021-03-08T01:13:50.191Z'
-categories: [🎮 Twitch]
-tags: [DeFi, TokenBric.xyz, DeFi France, Twitch]
+categories: [Projects]
+tags: [DeFi, TokenBrice.xyz, DeFi France, Twitch]
toc: false
tocNum: false
+image: /img/2021/tokenbrice-twitch/francebaiseouais.jpg
+difficulty: "beginner"
+url: tokenbrice-twitch-fr
---
Ces derniers jours, j'ai intensifié ma présence et laissé entendre que ce n'était qu'un début. Assez d'engouement, il est temps de vous parler de ce qui arrive cette semaine et ensuite !
@@ -14,25 +17,12 @@ Alors, qu'est-ce je vous prépare de beau ?
C'est simple : **une présence intensifiée 100 % en français** pour aider encore plus de personnes à saisir ce qui se passe avec la finance décentralisée et réellement comprendre les différents protocoles utilisés.
-
-
-
-_Nous devons ce chef d'oeuvre à un Redditeur francophone [/u/Argh3483](https://www.reddit.com/u/Argh3483): un vrai Chad !_
-
-
-
À cette fin, j'arrive sur Twitch en tant que TokenBrice (et non DeFi France), vous pouvez d'ores et déjà [me suivre sur Twitch](https://www.twitch.tv/tokenbrice) pour être sûr de ne pas rater le premier live ainsi que les prochains.
**Le premier live sera ce Mardi à 19h** : je vous proposerai un tour d'horizon de la DeFi d'environ deux heures avec Arthur.
Pour fêter ça, j'ai amassé de nombreuses éditions de ce NFT vraiment chouette qui sera l'un des nombreux cadeaux à gagner de différentes manières pour ceux qui suivent la chaine, aident à la faire connaître et contribuent à la communauté.
-
-
-{{< tweet 1368600781314809862 >}}
-
-
-
En outre, j'ai également préparé un budget en DAI — issu de mon farming DeFi — pour être sûr qu'il n'y ait pas un français qui s'intéresse à la DeFi de près ou de loin qui ne soit pas informé.
@@ -99,7 +89,7 @@ Auparavant j'écrivais mes articles en anglais : je les traduisais par la suite
Cela devrait engendrer une amélioration de la qualité de mon expression en français qui n'était pas toujours idéale par le passé. Cela me permet de réduire également le temps nécessaire pour produire chaque article. Une très bonne nouvelle.
-Pour vous donner une idée, un article comme celui sur **[l’évaluation du risque des marchés monétaires]({{< relref path="/content/posts/2021/money-market-risks.fr.md" >}})** c'est environ une dizaine d'heures de travail, en plus de toute ma recherche et connaissances acquises en amont.
+Pour vous donner une idée, un article comme celui sur **[l’évaluation du risque des marchés monétaires](https://tokenbrice.xyz/fr/marche-monetaire-risque/)** c'est environ une dizaine d'heures de travail, en plus de toute ma recherche et connaissances acquises en amont.
### La suite : quand lune ? 🌝
diff --git a/content/posts/2021/tokenbrice-twitch.md b/content/post/2021/tokenbrice-twitch.md
similarity index 54%
rename from content/posts/2021/tokenbrice-twitch.md
rename to content/post/2021/tokenbrice-twitch.md
index 16637331..ba0b7741 100644
--- a/content/posts/2021/tokenbrice-twitch.md
+++ b/content/post/2021/tokenbrice-twitch.md
@@ -2,10 +2,12 @@
title: "TokenBrice, désormais 100% en français et bientôt sur Twitch !"
description: "/Insérez de la hype et un Brice heureux ici/"
date: '2021-03-08T01:13:50.191Z'
-categories: [🎮 Twitch]
-tags: [DeFi, TokenBric.xyz, DeFi France, Twitch]
+categories: [Projects]
+tags: [DeFi, TokenBrice.xyz, DeFi France, Twitch]
toc: false
tocNum: false
+image: /img/2021/tokenbrice-twitch/troll-en.png
+difficulty: "beginner"
+url: tokenbrice-twitch-fr
---
-
\ No newline at end of file
diff --git a/content/post/2022/aave-gho-stablecoin.fr.md b/content/post/2022/aave-gho-stablecoin.fr.md
new file mode 100644
index 00000000..c7063a67
--- /dev/null
+++ b/content/post/2022/aave-gho-stablecoin.fr.md
@@ -0,0 +1,252 @@
+---
+title : "Le stablecoin GHO d'Aave peut-il aider le protocole à se développer davantage et à dépasser MakerDAO et DAI ?"
+description : "On examine le design de GHO et anticipe ses principaux défis pour croître ainsi que de la valeur qu'il peut apporter à la DAO d'Aave."
+date: '2022-08-22T01:13:50.191Z'
+categories: [Stablecoin]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Aave, GHO, Interest Rate]
+toc : true
+tocNum : true
+url : aave-gho-stablecoin
+image: /img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.png
+difficulty: "intermediate"
+---
+
+Il y a quelques semaines, le concept du stablecoin GHO a été introduit sur le forum de gouvernance Aave et a déclenché une vague d'excitation à travers la DeFi. En effet, l'idée d'un stablecoin décentralisé, sur-collatéralisé, peg à l'USD et natif de la DAO d'Aave est une prochaine étape logique pour le protocole.
+
+Dans cet article, nous examinerons le concept présenté avant de voir comment la DAO et l'équipe d'Aave pourraient le mettre sur le marché et en faire un stablecoin potentiellement aussi important que le DAI. Bien sûr, les informations sont encore rares, aussi la deuxième partie de l'article est fondée sur des extrapolations s'appuyant sur le modèle présenté et mon expérience en DeFi.
+
+## Introduction à GHO, le stablecoin natif d'Aave
+
+Depuis ses débuts, l'un des principaux défis d'[Aave](https://www.defiscan.info/protocols/aave/ethereum) a été d'attirer suffisamment de dépôts en stablecoin, car c'est le choix préféré de la plupart des emprunteurs. Ainsi, la création d'un stablecoin natif de la DAO est une prochaine étape naturelle et devrait également permettre de réduire les coûts pour les emprunteurs. Puisque ce stablecoin est minté, il devrait être plus économique à emprunter.
+
+Plongeons donc dans les principales caractéristiques du GHO telles que présentées sur le forum de la gouvernance.
+
+### Un stablecoin surcollatéralisé peg à l'USD
+
+GHO sera un stablecoin surcollatéralisé, frappé en utilisant des aTokens comme garantie. Donc, dans un sens, c'est similaire à MakerDAO mais légèrement plus efficace puisque toutes les collatéraux seront des actifs productifs générant des intérêts (aTokens) - en fonction de leur demande d'emprunt.
+
+En ce qui concerne la dénomination, il est également intéressant de voir qu'Aave n'inclut pas "USD" dans le nom. Compte tenu de l'agressivité des régulateurs américains, c'est probablement un avantage net d'un point de vue juridique. Cependant, cela ne semble pas être le seul facteur de décision, puisque le fondateur d'Aave, Stani, a fait allusion à un échange potentiel de devises plus tard :
+
+
+> La référence à une devise a des limites sur le long terme, vous pourriez potentiellement vouloir échanger la parité d'un actif sous-jacent à un autre (pour diverses raisons) ou suivre quelque chose d'autre et être lié à un USD dans le ticker serait un facteur limitant. En plus de cela, tout le monde fait déjà cela, ce qui rend la situation un peu répétitive et restrictive du point de vue de la communication. DAI suit le même chemin en fait et a été utile pour construire un récit au fil des ans.
+> - Stani sur [le post d'introduction de GHO d'Aave](https://governance.aave.com/t/introducing-gho/8730/27)
+
+
+### Taux d'intérêt et remise stkAAVE
+
+Le modèle de taux d'intérêt pour GHO est actuellement son composant le plus décevant, car le post initial envisageait un taux d'intérêt directement déterminé par la DAO d'Aave, tout comme cela fonctionne sur Maker. Cependant, cela serait inefficace et ajouterait une charge inutile à la gouvernance.
+
+Les réactions de la communauté dicteront la direction à prendre. Néanmoins, j'espère sincèrement pour Aave que le choix final se portera sur un modèle où le taux d'intérêt est déterminé algorithmiquement par les conditions du marché, tout comme pour les autres jetons sur Aave où l'offre et la demande sur le pool dictent le taux d'intérêt.
+
+Si la communauté Aave estime qu'il est nécessaire d'impliquer la DAO dans la détermination du taux d'intérêt - une absurdité à mon sens puisqu'une DAO n'est absolument pas apte à gérer les paramètres opérationnels d'un système - alors un modèle hybride pourrait être envisagé avec un taux de base fixe voté par la DAO, et modulé dans une fourchette en fonction des conditions du marché.
+
+En effet, l'évolution dynamique du taux d'intérêt peut aider à protéger le peg de GHO en dissuadant les événements de génération massive, tout comme [comment le baseRate fonctionne sur Liquity](https://docs.liquity.org/faq/lusd-redemptions#how-is-the-baserate-calculated) pour protéger LUSD d'un dé-peg vers le bas. Initialement, à 0,5%, les frais augmentent lorsque la demande augmente et diminuent progressivement pour revenir à 0,5% lorsque la demande se stabilise.
+
+Le post mentionne également une réduction des frais pour les emprunteurs de GHO qui stakent des tokens AAVE, créant ainsi des synergies supplémentaires. Enfin, 100% des taux d'intérêt payés par les déposants iront à la DAO Aave (contre un facteur de réserve de l'ordre de ~10% pour la plupart des autres tokens), ce qui signifie que si GHO atteint une capitalisation significative, il pourrait devenir une mine d'or pour la DAO. **Avec une capitalisation similaire à celle de DAI, et un taux d'intérêt moyen de 3,5 % (hypothèse haute), la DAO gagnerait près de 150 000 $ par jour grâce au taux d'intérêt de GHO**.
+
+J'ai réalisé quelques calculs rapides et un peu schématiques pour estimer le revenu potentiel pour la DAO d'Aave en fonction de la capitalisation de GHO et du taux d'intérêt moyen :
+
+
+
+ Capitalisation de GHO
+
+ Taux d'intérêt moyen
+
+ Revenus annuels pour la DAO
+
+ Revenus journaliers pour la DAO
+
+
+
+
+$1.5B (FRAX market cap)
+
+
+
+1%
+
+
+
+$15,000,000.00
+
+
+
+$41,095.89
+
+
+
+
+
+$6.6B (DAI market cap)
+
+
+
+1%
+
+
+
+$66,000,000.00
+
+
+
+$180,821.92
+
+
+
+
+$52B (USDC market cap)
+
+
+
+1%
+
+
+
+$520,000,000.00
+
+
+
+$1,424,657.53
+
+
+
+
+
+$1.5B
+
+
+
+3.50%
+
+
+
+$52,500,000.00
+
+
+
+$143,835.62
+
+
+
+
+
+$6.6B
+
+
+
+3.50%
+
+
+
+$231,000,000.00
+
+
+
+$632,876.71
+
+
+
+
+
+$52B
+
+
+
+3.50%
+
+
+
+$1,820,000,000.00
+
+
+
+$4,986,301.37
+
+
+
+
+
+Références du tableau :
+
+1. GHO Marketcap : 1,5 milliards = l'offre actuelle de FRAX, 6,6 milliards celle de DAI, et 52 milliards celle de USDC - on peut rêver.
+2. Taux d'intérêt moyen du GHO : 1% serait très compétitif, 3,5% dans la fourchette haute des taux habituels.
+
+
+### Facilitateurs et RWA
+
+La conception de GHO prévoit des "facilitateurs", embarqués par la gouvernance d'Aave, qui seraient en mesure de frapper le GHO. Le premier facilitateur serait le protocole Aave lui-même, mais d'autres suivront, qu'il s'agisse de protocoles ou d'entités. Cette partie est passionnante, car elle ouvre largement l'espace de conception du GHO. Après sa mise en circulation, nous pourrions voir d'autres protocoles demander à devenir des facilitateurs et construire sur Aave et GHO.
+
+
+
+
+
+Il y a également des mentions explicites de positions sous-collatéralisées basées sur des références telles qu'un score de crédit. Chaque facilitateur aura une capacité maximale de frappe de GHO déterminée par la DAO.
+
+
+### "Décentralisation" et absence de résistance à la censure
+
+Le GHO est présenté comme un stablecoin décentralisé par l'équipe d'Aave, avec même quelques mentions de résistance à la censure. Cependant, elles ne sont jamais directement associée à GHO :
+
+> L'utilisation des stablecoins ne fera que croître à mesure que les crypto-monnaies s'intègrent davantage à une base d'utilisateurs moins crypto-natifs. Les stablecoins décentralisés fournissent une monnaie libellée en fiat résistante à la censure sur la blockchain. Voici GHO, une monnaie stable multi-collatérale décentralisée, entièrement garantie et native du protocole Aave.
+
+À moins que j'aie mal compris la conception, GHO sera **aussi "décentralisé" que DAI et aura une faible résistance à la censure** en raison de la composition de son collatéral. En effet, en supposant que tous les aTokens qui peuvent actuellement être utilisés comme collatéral pour emprunter sur Aave seront également utilisables pour emprunter GHO, la composition du collatéral de GHO sera dominée par des tokens censurables tels que USDC :
+
+
+
+
+
+Source : [DeFiLlama](https://defillama.com/protocol/aave-v2)
+
+En effet, si l'on exclut les stETH utilisés comme collatéral pour emprunter des ETH et s'exposer avec levier aux rendements du staking, l'USDC est le principal collatéral utilisé sur Aave, avec un autre token nécessitant de la confiance (wBTC) non loin derrière. **La composition du collatéral serait néanmoins bien meilleure que celle de DAI**, qui est soutenu à plus de 50 % par des USDC purs.
+
+
+
+Une autre tranche de ~25 % de la garantie provient d'autres garanties requises par la confiance ou de positions fournissant de la liquidité réflexive (comme le DAI/USDC LP utilisé comme garantie pour frapper le DAI).
+
+Pour plus d'informations sur la conception envisagée pour GHO, n'hésitez pas à lire [le message du forum sur la gouvernance](https://governance.aave.com/t/introducing-gho/8730) et les réponses.
+
+
+## A quoi pourrait ressembler Aave avec GHO ?
+
+Maintenant que le décor est planté en ce qui concerne le GHO, nous pouvons entrer dans un territoire plus spéculatif et examiner comment le lancement du GHO pourrait se dérouler en pratique.
+
+En effet, l'interaction entre le protocole Aave et GHO est tout à fait passionnante à considérer : alors que le post initial mentionne Aave x GHO, ainsi que l'activation de l'eMode (permettant un effet de levier important sur des paires sélectionnées telles que USDC/DAI) sur GHO, il est assez maigre en détails, alors je vais devoir spéculer un peu.
+
+aGHO serait un collatéral fascinant sur Aave, mais il pourrait également créer des risques réflexifs importants s'il est autorisé à emprunter GHO. Ainsi, **Je m'attends à ce que l'aGHO soit empêché de frapper des GHO** afin d'éviter une collatéralisation réflexive comme nous le voyons actuellement sur DAI.
+
+Néanmoins, cela permettrait de créer des boucles d'arbitrage de stablecoin intéressantes, comme aUSDC > Mint GHO > aGHO > Emprunt d'un autre stablecoin. Avec l'eMode, cela ferait de Aave & GHO un protocole très efficace pour l'arbitrage de stablecoins. De plus, le taux d'intérêt du GHO deviendrait une sorte de "taux d'intérêt de base des stablecoins" et pourrait aider à contrôler le taux d'intérêt d'autres stablecoins comme l'USDC.
+
+
+### Stratégie de liquidité du GHO
+
+Une autre partie critique et essentielle de la conception de tout stablecoin est sa stratégie de liquidité. Puisque CRV, CVX, et BAL sont acceptés comme garantie sur Aave, il pourrait y avoir des choses passionnantes faites avec les CRV, CVX, et BAL accumulés par la trésorerie, grâce au facteur de réserve. Les verrouiller dans leurs protocoles natifs permettrait à la DAO d'Aave de diriger les incitations vers les pools impliquant au GHO.
+
+
+
+Source : [Rapport sur la trésorerie d'Aave](https://governance.aave.com/t/aave-treasury-report/5575/37) (juillet 2022)
+
+Tout comme Frax s'éloigne actuellement de USDT et DAI et tente d'établir la Frax Basepool (FRAX/USDC) comme paire de base sur Curve pour d'autres stablecoins, nous pourrions envisager un mouvement similaire de la part d'Aave. De plus, de nombreux projets actuellement exposés à l'USDC et au DAI cherchent à diversifier leurs liquidités. GHO pourrait arriver au bon moment pour permettre à DeFi d'être moins dépendante de l'USDC.
+
+Cependant, alors que Frax contrôle un pouvoir de gouvernance et de vote important dans les Curve Wars, ce n'est pas le cas pour la DAO Aave. Les soldes actuels de la trésorerie CRV/CVX seront clairement insuffisants pour inciter les pools à atteindre le milliard de dollars, ce qui pourrait pousser la DAO Aave à envisager l'acquisition de plus de tokens CRV/CVX. Avec les revenus importants que la DAO percevra du taux d'intérêt de GHO, elle devrait avoir suffisamment de moyens pour soutenir une liquidité appropriée, quelle que soit la capitalisation de GHO.
+
+Enfin, Aave a été historiquement proche de Balancer, avec la pool Balancer 80% AAVE / 20% wETH utilisé dans le module de sécurité depuis la transition vers le token AAVE. La trésorerie possède déjà 200k BAL et [un achat additionel de 100K BAL est prévu](https://governance.aave.com/t/arc-strategic-partnership-with-balancer-part-2/7813). Nous pourrions donc nous attendre à un jeu passionnant pour GHO sur Balancer. Pourtant, lorsqu'il s'agit de stablecoin, Curve reste à la fois le roi et le faiseur de roi : Je ne vois pas comment Aave pourrait faire croître suffisamment la liquidité de GHO sans s'impliquer d'une manière ou d'une autre dans [la guerre du CRV](https://tokenbrice.xyz/fr/crv-wars/).
+
+En plus des incitations du protocole de base (comme le taux d'intérêt d'emprunt dynamique ou géré par la DAO) et du mécanisme de liquidation, la stratégie de liquidité est probablement l'un des éléments les plus cruciaux pour un stablecoin, car elle a également un impact sur la façon dont l'ancrage est maintenu.
+
+
+## Conclusion
+
+J'espère que cet article vous a permis de mieux comprendre les enjeux de la guerre des stablecoins. La fin de l'année sera intéressante, avec la sortie du GHO qui approche et le stablecoin de Curve, également surcollatéralisé, dont la sortie a été annoncée avant la fin de cette année. La multiplication des stablecoins est une prochaine étape naturelle pour DeFi, car la plupart des protocoles établis voient leur conception converger :
+
+
+
+* Frax a commencé comme un stablecoin seulement, a maintenant FraxSwap et bientôt FraxLend.
+* Aave a commencé comme un marché monétaire, bientôt avec son propre stablecoin natif.
+* Curve a commencé comme un DEX, mais l'ajout de son propre stablecoin pourrait bientôt permettre des emprunts efficaces pour les fournisseurs de liquidités.
+
+En fin de compte, comme l'ont montré mes calculs rapides plus haut, la principale raison pour laquelle un protocole crée son stablecoin est assez évidente : c'est là où il y a le plus d'argent à faire, ainsi qu'une demande massive et une adéquation produit/marché.
+
+
+{{< notice note >}}
+L'"artiste" de l'image de couverture de cet article est une IA impressionnante (et légèrement effrayante) appelée [Midjourney](https://www.midjourney.com/). Elle a reçu le message suivant : Un fantôme lumineux, mignon et amical, frappant les pièces de sa propre monnaie dans un environnement cyberpunk, 4k, cartoon, détails complets, unreal engine. --ar 19:10`
+{{< /notice >}}
diff --git a/content/post/2022/aave-gho-stablecoin.md b/content/post/2022/aave-gho-stablecoin.md
new file mode 100644
index 00000000..cadca89b
--- /dev/null
+++ b/content/post/2022/aave-gho-stablecoin.md
@@ -0,0 +1,256 @@
+---
+title: "Can Aave's GHO stablecoin help the protocol further grow and overtake MakerDAO and DAI?"
+description: "Looking at GHO's design and anticipating its key challenges to grow as well as the value it can deliver to the Aave DAO."
+date: '2022-08-22T01:13:50.191Z'
+categories: [Stablecoin]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Aave, GHO, Interest Rate]
+toc: true
+tocNum: true
+url: aave-gho-stablecoin
+image: /img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.png
+difficulty: "intermediate"
+---
+
+A few weeks ago, the concept for the GHO stablecoin was introduced on the Aave Governance Forum and triggered a wave of excitement across DeFi. Indeed, the idea of a decentralized, collateral-backed stablecoin, pegged to USD and native to the Aave DAO makes a lot of sense as a next step for the protocol.
+
+In this article, we'll examine the design introduced before considering how the Aave DAO and team could bring it to market and turn it into a stablecoin potentially as significant as DAI. Of course, the information is still scarce, so the second part of the article will be primarily extrapolations stemming from my DeFi experience.
+
+## Introduction to GHO, Aave's native stablecoin
+
+Since its early days, one of [Aave](https://www.defiscan.info/protocols/aave/ethereum)'s main challenges has been attracting sufficient stablecoin deposits since it's a preferred choice for most borrowers. Thus, creating a stablecoin native to the DAO is a natural next step and should also allow lowering costs for borrowers. Since this stablecoin is minted, there is no need to pay the APR of the depositors on the other side.
+
+So let's dive into the main characteristics of GHO as presented on the governance forum.
+
+
+### An overcollateralized USD-pegged stablecoin
+
+GHO will be an overcollateralized stablecoin, minted using aTokens as collateral. So in a sense, it's similar to MakerDAO but slightly more efficient since all collateral will be productive assets generating some interest (aTokens) – depending on their borrowing demand.
+
+Regarding the naming, it's also interesting to see Aave not including "USD" in the name. Considering how aggressive the US regulators can be, it's probably a net benefit from a legal perspective. Still, it doesn't seem to be the only driver of the decision, as Aave's founder Stani hinted at a potential peg swap further down the line:
+
+
+> The reference to a currency has limitations over long term, potentially you might want to swap the peg from one underlying asset to another (for various reasons) or track something else and being bound to a USD in the ticker would be a limiting factor. On top of that everyone is doing that already which makes it a bit repetitive and restrictive from the messaging perspective. DAI follows the same path actually and has been helpful to build a narrative over the years.
+> - Stani on [Aave's GHO introduction post](https://governance.aave.com/t/introducing-gho/8730/27)
+
+
+### Interest model and stkAAVE discount
+
+The interest rate model for GHO is currently its most underwhelming component, as the initial post envisioned an interest rate directly determined by the Aave DAO, just like how it works on Maker. However, that would be inefficient and add unnecessary bloat to the governance.
+
+The community feedback will dictate where it goes. Still, I genuinely hope for Aave that the final call lands on a model where the interest rate is algorithmically determined by market conditions, just like with other tokens on Aave where the supply/demand on the pool dictates the interest rate.
+
+If the Aave community feels like it is a necessity to involve the DAO in determining the interest rate — an absurdity in my book since a DAO is absolutely unfit to manage the operational parameters of a system — then a hybrid model could be envisioned with a fixed base rate voted on by the DAO, and modulated within a range depending on the market condition.
+
+Indeed, having the interest rate evolve dynamically can help protect GHO's peg by deterring against massive minting events, just like [how the baseRate works on Liquity](https://docs.liquity.org/faq/lusd-redemptions#how-is-the-baserate-calculated) to protect LUSD from de-pegging downward. Initially, at 0.5%, the fee rises when demand surges to progressively decays back to 0.5% as the demand stabilizes.
+
+The post also mentions a discount for GHO borrowers staking AAVE tokens, creating further synergies. Finally, 100% of the interest rates paid by depositors will go to the Aave DAO (vs. a Reserve Factor in the ~10% range for most other tokens), meaning that if GHO grows to a significant market cap, it could turn into a goldmine for the DAO. **With a market cap similar's to DAI, and an average interest rate of 3.5% (high-end), AaveDAO would earn close to $150K daily from GHO's interest rate.**
+
+Here are some quick napkin maths with different GHO market cap and interest rate assumptions to give you an idea:
+
+
+
+
+ GHO Marketcap
+
+ Avg. Interest Rate
+
+ DAO Yearly Earning
+
+ DAO Daily Earning
+
+
+
+
+$1.5B (FRAX market cap)
+
+
+
+1%
+
+
+
+$15,000,000.00
+
+
+
+$41,095.89
+
+
+
+
+
+$6.6B (DAI market cap)
+
+
+
+1%
+
+
+
+$66,000,000.00
+
+
+
+$180,821.92
+
+
+
+
+$52B (USDC market cap)
+
+
+
+1%
+
+
+
+$520,000,000.00
+
+
+
+$1,424,657.53
+
+
+
+
+
+$1.5B
+
+
+
+3.50%
+
+
+
+$52,500,000.00
+
+
+
+$143,835.62
+
+
+
+
+
+$6.6B
+
+
+
+3.50%
+
+
+
+$231,000,000.00
+
+
+
+$632,876.71
+
+
+
+
+
+$52B
+
+
+
+3.50%
+
+
+
+$1,820,000,000.00
+
+
+
+$4,986,301.37
+
+
+
+
+
+
+Table references:
+
+1. GHO Marketcap: 1.5B = FRAX's current supply, 6.6B is DAI's, and 52B is USDC — one can dream.
+2. GHO Average Interest Rate: 1% would be highly competitive, 3.5% in the higher-end of the usual rates.
+
+
+### Facilitators and RWA
+
+GHO's design envisions "Facilitators," onboarded by Aave's governance, that would be able to mint GHO. The first facilitator would be the Aave protocol itself, but others will follow suit, be they protocols or entities. This part is exciting, as it widely opens up GHO's design space. Following the release, we could see other protocols applying to become facilitators and building on top of Aave and GHO.
+
+
+
+
+
+There are also explicit mentions of undercollateralized positions based on credentials such as a credit score. Each facilitator will have a maximal GHO minting capacity determined by the DAO.
+
+
+### "Decentralization" and absence of censorship resistance
+
+GHO is presented as a decentralized stablecoin by the Aave team, with even some mentions of censorship resistance. However, it's never directly associated with GHO:
+
+> The usage of stablecoins will only continue to grow as cryptoassets become further integrated with a user base that is less crypto-native. Decentralized stablecoins provide censorship-resistant fiat-denominated currency on the blockchain. Introducing, GHO, a decentralized multi-collateral stablecoin that is fully backed and native to the Aave Protocol.
+
+Unless I've misunderstood the design, GHO will be **as "decentralized" as DAI and have weak censorship resistance** because of its collateral composition. Indeed, assuming that all aTokens that can be currently used as collateral to borrow on Aave will also be used to borrow GHO, GHO's collateral composition will be mostly made of censorable tokens such as USDC:
+
+
+
+
+
+Source: [DeFiLlama](https://defillama.com/protocol/aave-v2)
+
+Indeed excluding stETH used as collateral to leverage the ETH staking yield (borrowing ETH), USDC is the top collateral used on Aave, with another trusted token (wBTC) not far behind. **Still, the collateral composition would be much better than DAI,** which is >50% backed by pure USDC.
+
+
+
+Another ~25% of the backing comes from other trust-required collateral or reflexive liquity providing positions (such as DAI/USDC LP used as collateral to mint DAI).
+
+For more information on the envisioned design for GHO, feel free to read [the governance forum post](https://governance.aave.com/t/introducing-gho/8730) and the replies.
+
+
+## GHO to market: What could Aave with GHO look like?
+
+Now that the stage is set regarding GHO, we can move into a more speculative territory and consider how the GHO release could unfold in practice.
+
+Indeed, the interaction between the Aave protocol and GHO is quite exciting to consider: while the initial post mention Aave x GHO, as well as the enablement of the eMode (enabling significant leverage on selected pairs such as USDC/DAI) on GHO, it quite scarce in details, so let me share instead how I envision it.
+
+aGHO would be fascinating collateral on Aave, but it could also create significant reflexive risks if allowed to borrow GHO. Thus, **I expect aGHO to be blocked from minting GHO** to prevent reflexive backing like we're currently seeing on DAI.
+
+Still, it would allow for exciting stablecoin arbitrage loops, such as aUSDC > Mint GHO > aGHO > Borrow another stablecoin. With the eMode, this would make Aave & GHO a very effective protocol for stablecoin arbitrage. Besides, the GHO interest rate would become a kind of "base stablecoin interest rate" and maybe help keep the interest rate of other stablecoins like USDC in check.
+
+
+### GHO's Liquidity Strategy
+
+Another critical and essential part of any stablecoin's design is its liquidity strategy. Since CRV, CVX, and BAL are accepted as collateral on Aave, there could be exciting things done with the CRV, CVX, and BAL accumulated by the treasury, thanks to the Reserve Factor. Locking them into their native protocols would enable the Aave DAO to direct incentives to GHO-related pools.
+
+
+
+Source: [Aave’s Treasury Report](https://governance.aave.com/t/aave-treasury-report/5575/37) (July 2022)
+
+Just like Frax is currently pivoting away from USDT and DAI and trying to establish the Frax Basepool (FRAX/USDC) as a pairing currency on Curve for other stablecoins, we could envision a similar move from Aave. Moreover, many projects currently exposed to USDC and DAI are looking to diversify their liquidity away from them. GHO might arrive with perfect timing to enable DeFi to be less reliant on USDC.
+
+However, while Frax controls sizeable governance and gauge-voting power in the Curve Wars, this is not the case for the Aave DAO. Current treasury CRV/CVX balances will clearly be insufficient to incentivize pools to grow into the billion dollar range, so it could drive the AaveDAO to look into acquiring more liquidity-incentive-driver tokens. With the significant revenues that the DAO will collect from GHO's interest rate, it should have sufficient means to support appropriate liquidity, whatever GHO's market cap ends up being.
+
+Finally, Aave has been historically close to Balancer, with the 80% AAVE / 20% wETH Balancer Pool used in the Safety Module since the transition to the AAVE token. The treasury currently owns 200k BAL and [another acquisition is planned](https://governance.aave.com/t/arc-strategic-partnership-with-balancer-part-2/7813). Thus we could expect an exciting play for GHO on Balancer. Yet when it comes to stablecoin, Curve remains both the king and king-maker: I don't see how Aave could sufficiently grow GHO's liquidity without getting involved one way or another in [the CRV wars](https://tokenbrice.xyz/crv-wars/).
+
+
+On top of the base protocol incentives (such as the dynamic or DAO-governed borrowing interest rate) and liquidation mechanism, the liquidity strategy is probably one of the most crucial element for a stablecoin since it also has an impact on how well the peg is held.
+
+
+## Parting Words
+
+I hope this article helped you better understand what is at stake in the stablecoin wars. The end of the year will be interesting, with the GHO release approaching and Curve's stablecoin, also overcollateralized, which was hinted to release before the end of this year. The multiplication of stablecoin is a natural next step for DeFi, as most established protocols see their design converge:
+
+
+
+* Frax started as a stablecoin only, now has FraxSwap and soon FraxLend.
+* Aave started as a money market, soon with its own native stablecoin.
+* Curve started as a DEX, but the addition of its own stablecoin soon could enable efficient borrowing for liquidity providers.
+
+At the end of the day, as shown with my napkin maths earlier, the main reason for a protocol to create its stablecoin is quite apparent: it's where there is the most money to be made, as well as massive demand and product/market fit.
+
+
+{{< notice note >}}
+The "artist" of the cover image for this article is an impressive (and slightly scary) AI called [Midjourney](https://www.midjourney.com/). It was given the following prompt: `a cute and friendly glowing ghost minting the coins of his own currency in a cyberpunk environement, 4k,cartoon,fully details,high contracts,unreal engine. --ar 19:10`
+{{< /notice >}}
diff --git a/content/post/2022/balancer-wars.fr.md b/content/post/2022/balancer-wars.fr.md
new file mode 100644
index 00000000..acb48c4b
--- /dev/null
+++ b/content/post/2022/balancer-wars.fr.md
@@ -0,0 +1,180 @@
+---
+title: "Tokens directeurs de liquidité au-delà de Curve : analyse des Balancer Wars"
+description: "Nous examinons les particularités de l'échange décentralisé Balancer ainsi que de son écosystème pour mieux comprendre la dynamique de la course aux BAL."
+date: '2022-11-24T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Finance Décentralisée, Balancer Finance CVP, veBAL, vlAURA, Liquidity Driver Tokens]
+toc: true
+tocNum: false
+url: balancer-wars
+image: /img/2022/balancer-wars/balancer-wars-cover.png
+difficulty: "intermediate"
+---
+
+Les tokens directeurs de liquidité, comme je les appelle, sont une construction émergente et fascinante. En termes simples, ces tokens vous permettent de diriger des incitations (CRV, BAL, etc.) vers la pool de liquidité de votre choix. Pour ce faire, vous devez généralement posséder et verrouiller le token correspondant (veCRV, veBAL, etc.) au sein de leur contrat de gouvernance, ce qui garantit un engagement continu des projets participants.
+
+Ainsi, les tokens directeurs de liquidité sont rapidement devenus très recherchés par les DAO dont les besoins en liquidité sont constants et généralement croissants. Cela a conduit à ce que nous appelons des « courses » ou « guerres »: un terme qui fait référence aux diverses stratégies que les projets exploitent pour augmenter constamment leur réserve de veTokens, idéalement plus rapidement que les autres participants, afin de développer un avantage concurrentiel.
+
+J'ai largement couvert la tokenomique CRV, le pionnier du modèle ve, et leurs conséquences dans ce blog :
+
+1. [⚔ CRV wars : comprendre la course à l'accumulation de pouvoir pour influencer le protocole Curve Finance](https://tokenbrice.xyz/fr/crv-wars/)
+2. [⚔ Guerres CRV avancées : analyse des protocoles construits au dessus de Curve et Convex](https://tokenbrice.xyz/fr/crv-wars-l2/)
+
+## Les veTokenomiques, au-delà de l'écosystème Curve
+
+Si Curve est fascinant à étudier, c'est qu'il s'agit du pionnier du modèle ve et de l'implémentation la plus mature et la plus dense de la tokenomique ve à ce jour, il existe désormais de nombreuses autres instances de course avec leurs variantes qui méritent d'être étudiées.
+
+En effet, la tokenomique veCRV a plus de deux ans, et de nombreux autres projets ont lancé ou remanié leur tokenomique depuis, en s'inspirant du modèle de Curve. Sans être exhaustif, voici les autres "courses" que je suis de plus près :
+
+1. Solidly a été le pionnier du modèle "ve(3,3)", une amélioration du modèle ve, sur Fantom en février 2022, attirant rapidement des milliards de TVL avant [d'échouer dramatiquement en raison d'une très mauvaise exécution](https://hackmd.io/@c30/BJ2PNCwgs).
+2. [Velodrome](https://app.velodrome.finance/), un fork de Solidly corrigeant ses problèmes critiques, a rapidement trouvé sa place sur Optimism après son lancement en juin 2022.
+3. [Balancer](https://balancer.finance/) - une alternative historique à Curve et Uniswap, un DEX contenant des innovations intéressantes, [est récemment passé à un modèle ve en mars 2022](https://medium.com/balancer-protocol/vebal-is-live-aeda1ae13e20).
+4. [SolidlyETH](https://twitter.com/SolidlyETH), encore. En effet, alors que le premier projet a échoué, la communauté s'est rassemblée pour prendre la relève et est sur le point de relancer Solidly, cette fois sur le mainnet, ce qui le rend beaucoup plus intéressant.
+
+À mon échelle personnelle, je suis également addict aux tokens directeurs de liquidité, commme je le partageais récemment sur Twitter :
+
+
+Tous les projets ont des besoins constants en matière de liquidités ; y répondre de manière durable a une grande valeur. En effet, la valeur des tokens directeurs de liquidité dépasse ce que les DAO/projets peuvent en tirer : 1 $ de bribe peut déplacer > 1 $ d'incitations. Les participants individuels peuvent également gagner beaucoup en étant capables de se positionner tôt dans une course pertinente.
+
+Une fois le décor planté, plongeons dans le sujet du jour : Balancer, la course au BAL, et l'infrastructure "BAL-Layer-2" qui a émergé par-dessus, tout comme cela s'est produit avec Curve.
+
+## Cartographie de la trinité de Balancer
+
+
+
+Nous avons regardé ensemble l'écosystème se développer à travers l'exemple de Curve. Pour la première fois, nous allons étudier [Balancer](https://balancer.finance/) et on observe déjà un écosystème mature ! Balancer a déjà "son Convex", appelée [Aura Finance](https://aura.finance/) qui contrôle plus de 25% du veBAL (contre >50% du veCRV pour Convex).
+
+Cependant, l'infrastructure de base de Balancer nécessite un troisième composant : un réseau d'automatisation nécessaire pour permettre le type de pools le plus avancé. À ce stade, on ne sait toujours pas qui mène cette course, c'est pourquoi j'ai utilisé l'un de leurs participants les plus importants - [PowerPool](https://powerpool.finance/) et son réseau de PowerAgents - pour jouer le rôle.
+
+Pour ceux qui sont familiers avec l'approvisionnement en liquidités d'UniswapV3, on pourrait dire que les PowerAgents jouent un rôle similaire à celui de [Gelato](https://www.gelato.network/) : ils gèrent l'automatisation des opérations nécessaires pour permettre des cas d'utilisation spécifiques, tels que la récolte de récompenses et la composition automatique.
+
+## En quoi Balancer est-il différent ?
+
+Avec Uniswap et Curve, Balancer est l'un des DEX les plus anciens et les plus populaires aujourd'hui. En effet, si on considère le marché DEX d'un point de vue global, Balancer se classe à la cinquième place avec environ 3 % du volume total traité :
+
+
+
+_Vue d'ensemble du volume d'échange observé sur les principaux échanges décentralisés de [DeFiLlama](https://defillama.com/dexs)_
+
+{{< notice note >}}
+Balancer n'est lancé que sur mainnet, Polygon et Arbitrum - ce qui signifie moins de chaînes que la plupart des autres DEX du top 5, un élément à garder à l'esprit dans une comparaison au niveau global.
+{{< /notice >}}
+
+La première version de Balancer a été lancée en mars 2020, et de nombreuses itérations ont été expédiées depuis lors, améliorant le modèle de token BAL et la structure de liquidité. Cependant, Balancer avait des **particularités depuis la V1** qui sont probablement utiles pour expliquer pourquoi il est toujours debout aujourd'hui. Je vais me concentrer sur les plus emblématiques :
+
+### Pool supportant deux à huit actifs
+
+Balancer est encore, à ce jour, l'un des seuls DEX à offrir un tel éventail de structures de pool. En effet, une pool Balancer peut être composé de **n'importe quel nombre d'actifs allant de deux à huit**, alors que la plupart des autres DEX ne supportent que les paires, donc deux actifs à la fois.
+
+Il permet de nouveaux types de pools, tels que :
+
+* Des pools de trois actifs, comme le pool wBTC/USDC/wETH similaire au pool TriCrypto de Curve, ou pour diversifier les paires d'un token donné, comme la pool OHM/ETH/DAI.
+* Ou même pools avec six-huit actifs qui commencent à agir comme des indices de token autant que des pools de liquidité, comme le pool YFI/wBTC/COMP/wETH/UNI/CHZ/LINK.
+
+### Pondération arbitraire des pools
+
+En plus du support flexible en termes de nombre de tokens, **la pondération des pools n'a pas besoin d'être égale entre les tokens** et peut largement être personnalisée.
+
+Cela permet des structures de pool déséquilibrées qui sont très utiles dans certaines situations :
+
+* Par exemple, la pool OHM/DAI/ETH mentionné ci-dessus est **50%OHM, 25%DAI, et 25%wETH** - permettant de maximiser la liquidité OHM disponible contre DAI et ETH en même temps.
+* Une autre distribution fréquemment utilisée est la **98/2**, particulièrement adaptée pour commencer à construire la liquidité d'un token nouvellement sorti avec un risque minimal de IL (puisque 98% du pool est composé d'un actif sûr, comme un stablecoin ou ETH).
+* Enfin, la répartition de la liquidité **80 % token / 20 % actif apparié**, comme 80 % BAL / 20 % wETH, est également très recherchée, car elle permet aux détenteurs de tokens de participer à des activités de fourniture de liquidité avec des risques d'IL minimisés si le token devait s'apprécier.
+
+### Pondération dynamique des pools
+
+Enfin, Balancer peut ajuster la répartition de la pondération des pools selon les besoins grâce à un type spécifique de pool appelé [Liquidity Boostraping Pool (LBP)](https://docs.balancer.fi/products/balancer-pools/liquidity-bootstrapping-pools-lbps). Ces pools sont particulièrement adaptées au lancement de tokens et au développement de leur liquidité en même temps, car ils permettent de rationaliser le flux de tokens de la mise sur le marché. Par exemple :
+
+1. Un projet donné veut lancer rapidement la liquidité de ses tokens - la DAO associée contrôle une quantité importante de tokens, mais généralement aucun des actifs de contrepartie potentiels (généralement ETH ou stablecoin).
+2. Ils commencent donc avec un pool de 98%USDC/2%Token, ce qui leur permet de fournir des liquidités avec des exigences minimales en matière de token d'appariement.
+3. Le pool agit comme un événement d'initiation de token et un mécanisme de découverte de prix en même temps. Le token démarre à un prix donné, qui diminue au fil du temps si personne n'achète le token.
+
+
+
+Les LBP sont conçus pour permettre aux utilisateurs intéressés par le projet d'acheter des tokens de manière équitable sur une période donnée, en les protégeant contre les attaques habituelles observées lors de lancements de tokens plus classiques (tels que les bots MEV snipant l'approvisionnement initial).
+
+Grace aux LBPs, les projets sont en mesure de diversifier progressivement leur Token vers l'actif d'appareillage (ETH ou USDC généralement). En ce faisant, la LBP agit également comme un mécanisme de découverte de prix. Les projets qui l'utilisent sont ainsi dans une situation idéale pour ensuite apporter de la liquidité sur leur token qui sera possédée par le protocole, garantissant ainsi une liquidité minimale aux utilisateurs.
+
+### Spécificités du modèle ve de Balancer
+
+Balancer a également mis en œuvre son propre mécanisme de verrouillage inspiré de celui de Curve. Ici, au lieu de verrouiller le token directement (CRV ⇒ veCRV), les participants à la gouvernance doivent **verrouiller un token LP** correspondant au pool Balancer **80 % BAL / 20 % wETH**.
+
+Comme nous l'avons dit plus haut, cette répartition des liquidités limite les risques d'IL pour les déposants suite à une hausse de BAL. Grâce à ce twist, Balancer peut capter d'importantes réserves de liquidités à travers les opérations normales de son mécanisme de participation à la gouvernance.
+
+Enfin, depuis peu, il semble que Balancer se concentre sur les tokens productifs et développe de nouveaux cas d'utilisation pour y répondre. Par exemple, [BIP#19](https://medium.com/balancer-protocol/vebal-pt-2-bribing-and-bip19s-free-bribes-b2f8334eba14) introduit des "bribes gratuits" pour les pools impliquant des actifs productifs : le rendement produit par l'actif de la pool est recyclé comme pot-de-vin pour soutenir sa liquidité.
+
+## Les guerres de Balancer : un état des lieux
+
+Comme Curve, Balancer a un joueur dominant de sa course qui a développé un protocole maximisant sa synergie : Aura. Aura est l'un des nombreux services disponibles dans l'écosystème Balancer-fonctionnel-L2, mais un service largement dominant avec ~25% de tous les veBAL sous son contrôle.
+
+Aura offre un farming efficace aux détenteurs de tokens LP de Balancer, avec des récompenses BAL augmentées grâce à l'importante réserve veBAL du protocole et aux incitations supplémentaires AURA. À cet égard, c'est la même chose que Convex avec Curve.
+
+
+
+_Vue d'ensemble des liquid wrappers veBAL - [merci defiwars.xyz](https://www.defiwars.xyz/wars/balancer)_
+
+### Protocoles avec positions veBAL/vlAURA
+
+En plus des protocoles travaillant sur des liquid wrappers pour veBAL comme Aura, d'autres DAO et projets ont construit des positions veBAL/vlAURA importantes pour augmenter et maintenir leur liquidité, comme Frax le fait sur Curve.
+
+### Marchés de bribes Balancer
+
+De nombreux marchés de bribes permettent l'achat de votes veBAL ou vlAURA ; voici les principaux :
+
+1. [Hidden Hand - Aura](https://hiddenhand.finance/aura) et [Hidden Hand - Balancer](https://hiddenhand.finance/balancer).
+2. [Paladin Warden Quest](https://app.warden.vote/quest/)
+3. [Et StakeDAO BAL Votemarket](https://votemarket.stakedao.org/), une sorte d'agrégateur de marchés de bribes.
+
+Pour suivre la guerre des BAL, assurez-vous d'exploiter les données offertes par la Llama Airforce :
+
+
+
+Comme on peut le voir sur le graphique, le marché des bribes a rapidement décollé avant de trouver un équilibre à environ **0,06$ par vote AURA, ce qui se traduit par une efficacité des bribes de 1,50x** : Un dollar dépensé pour influence le vote permet d'ajouter 1,50 dollar d'émissions de BAL à la pool ciblée au cours de l'époque.
+
+Ce chiffre est plus faible pour Curve, environ 1,25x pour les bakchichs sur le vlCVX de Convex. C'est logique puisque les courses Curve sont beaucoup plus anciennes.
+
+## Quelles sont les prochaines étapes pour Balancer ?
+
+Pour compléter la traction obtenue grâce à la refonte de la tokénomique et au passage au veBAL, plusieurs développements techniques ont été livrés/arrivent et devraient contribuer à renforcer sa position.
+
+### Pools boostées
+
+Les premières sont les pools boostées, qui sont déjà opérationnelles. Le but est d'augmenter le rendement natif pour les apporteurs de liquidité. Pour se faire, les Boosted Pools exploitent une source de rendement additionnel non sujette à l'IL comme par exemple Aave. Les boosted pools réallouent leurs distribution entre apport de liquidité et production de rendement en permanence, en fonction des besoins en liquidité de la pool.
+
+Le bb-a-USD, l'équivalent du 3pool de Curve, est actuellement la plus grande Boosted Pool, mais d'autres sont à venir, dont une basée sur le LUSD : LUCY.
+
+[Introduction au pool LUCY de PowerPool et ce qu'il apporte au $LUSD (en Anglais)](https://www.liquity.org/blog/introduction-to-powerpool-lucy-pool-and-what-it-brings-to-lusd)
+
+### Aave x Balancer
+
+Aave et Balancer ont des liens historiques, le module de sécurité d'Aave s'appuyant sur la V1 de Balancer, et Aave ayant même proposé un marché V2 il y a quelques années pour emprunter avec les tokens LP de Balancer en collatéral.
+
+D'autres collaborations sont attendues, car [Aave a récemment acquis des tokens BAL](https://app.aave.com/governance/proposal/87/) et devra faire face à des besoins de liquidité considérablement accrus avec la sortie du GHO.
+
+
+### Balancer : le foyer des LSDs ?
+
+Enfin, si l'on considère la pool actuelle la plus importante en termes de TVL sur Balancer, une tendance claire se dessine : les liquid staking derivatives, tels que le rETH de Rocket Pool ou le stETH de Lido. Les deux ont des pools importants correctement incités sur le réseau principal de Balancer.
+
+Si vous n'avez jamais entendu parlé des Liquid Staking Derivatives, je vous renvoie vers un meetup DeFi France : **[DFF Lyon #1 - Perspectives sur les Liquid Staking Derivatives](https://www.youtube.com/watch?v=_eXm9VQh5HY)**
+
+{{< youtube _eXm9VQh5HY >}}
+
+
+La pool wstETH/wETH de Lido a même dépassé la pool 80BAL/20wETH et est devenue la première pool du DEX avec $200M TVL. De même, stMATIC/wMATIC est la première pool de Balancer/Polygon, suivi de MATICX/wMATIC, un autre dérivé liquide de MATIC staké. Sur Arbitrum, la troisième et dernière chaîne où Balancer est actif, là encore, la pool wstETH/wETH est en tête du classement.
+
+## Conclusion
+
+Si vous souhaitez prendre part aux guerres de Balancer, assurez-vous d'exploiter toutes les excellentes ressources disponibles :
+
+1. [Llama Airforce](https://llama.airforce/#/bribes/overview/hh/aura-bal)
+2. [DeFiwars - Balancer](https://www.defiwars.xyz/wars/balancer)
+3. [Dune Analytics](https://dune.com/balancerlabs/balancer-pools)
+
+J'espère que cet article vous a fourni des informations utiles sur les tokens directeurs de liquidité, mais je voulais ajouter une dernière dimension : il semble qu'une **sous-catégorie** de tokens directeurs de liquidité soit en train d'émerger - **les tokens directeurs de liquidité d'emprunt**.
+
+Leur fonctionnement est très similaire, mais au lieu de permettre à leurs détenteurs de diriger les incitations vers des pools de liquidité, ils leur permettent de **diriger des incitatations vers des marchés de prêt choisis**. Ainsi, au final, ils atteignent un objectif différent par un moyen similaire : le contrôle d'un grand nombre de ces tokens directeurs de liquidité d'emprunt, comme le EUL d'[Euler Finance](https://euler.finance/), permet de maintenir une liquidité importante sur les marchés monétaires.
+
+Cela vaut probablement la peine de s'y intéresser ; cela fait un moment que j'anticipe l'arrivée de la tokenomique basée sur ve et ve(3,3) sur les marchés monétaires.
+
+🙏 Un grand merci à [Disiaque](https://twitter.com/disiaque_eth) pour sa relecture attentive et constructive.
\ No newline at end of file
diff --git a/content/post/2022/balancer-wars.md b/content/post/2022/balancer-wars.md
new file mode 100644
index 00000000..fa84a432
--- /dev/null
+++ b/content/post/2022/balancer-wars.md
@@ -0,0 +1,174 @@
+---
+title: "Liquity-driver token races beyond Curve: a look at the Balancer Wars"
+description: "Cornering the lay of the land of the Balancer Wars: we look at the DEX specificities to anticipate what's next for the BAL races."
+date: '2022-11-24T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Finance Décentralisée, Balancer Finance CVP, veBAL, vlAURA, Liquidity Driver Tokens]
+toc: true
+tocNum: false
+url: balancer-wars
+image: /img/2022/balancer-wars/balancer-wars-cover.png
+difficulty: "intermediate"
+---
+
+Liquidity-driver tokens, as I call them, are an emergent and fascinating construction. Simply put, these tokens enable you to direct incentives (CRV, BAL, etc.) to the liquidity pool of your choice. To do so, you must usually own and lock the corresponding token (veCRV, veBAL, etc.) within their governance contract, ensuring continuous commitment from participating projects.
+
+Thus, the liquidity-driver tokens quickly became highly sought after by DAOs with constant and usually growing liquidity needs. It led to what we call “races” (or "wars"): a term that refers to the various strategies projects harness to constantly increase their veTokens stash, ideally faster than the other participants of the races, to grow a competitive advantage.
+
+I’ve covered the CRV tokenomics, the pioneer of the veToken model, and their consequences in this blog extensively:
+
+1. [⚔ CRV wars: understanding the race to accumulate power to influence Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)
+2. [⚔ Advanced CRV warfare: analysis of protocols built on top of Curve and Convex](https://tokenbrice.xyz/crv-wars-l2/)
+
+## veTokenomics, beyond the Curve ecosystem
+
+While Curve is fascinating to study, as it’s the veCRV pioneer and still the most mature and dense implementation of ve tokenomics to date, there are now many other race instances with their twists worth looking at.
+
+Indeed, the veCRV tokenomics is more than two years old, and many other projects have launched or revamped their tokenomics since, drawing inspiration from Curve’s model. Without being exhaustive, here are the other “races” I follow the most closely:
+
+1. Solidly pioneered the “ve(3,3)” model (attempting to build and improve on the base ve model) on Fantom in February 2022, quickly attracting billions of TVL before [failing dramatically because of very poor execution](https://hackmd.io/@c30/BJ2PNCwgs).
+2. [Velodrome](https://app.velodrome.finance/), a fork of Solidly fixing its critical issues, quickly found its place on Optimism after launching in June 2022.
+3. [Balancer](https://balancer.finance/) — a historical alternative to Curve and Uniswap, a chain agnostic DEX packing interesting innovations, [recently switched to a vemodel in March 2022.](https://medium.com/balancer-protocol/vebal-is-live-aeda1ae13e20)
+4. [Solidly](https://twitter.com/SolidlyETH), again. Indeed, while the first project failed, the community gathered to take over and is about to re-launch Solidly, this time on mainnet, making it much more interesting.
+
+I am myself a liquidity-driver addict, as I was sharing recently on Twitter:
+
+All projects have constant liquidity needs; addressing them sustainably is highly valuable. Indeed, the value of liquidity-driver tokens exceeds what DAOs/projects can draw from them: $1 worth of vote-bribing can move >$1 worth of incentives. Individual participants can also gain a lot by being able to position themselves early in a relevant race.
+
+So with the stage set, let’s dive into today’s matter: Balancer, their BAL races, and the “BAL-Layer-2” infrastructure that emerged on top of it, just like it happened with Curve.
+
+## Mapping the Balancer Trinity
+
+
+
+While we documented Curve, we watched the ecosystem grow together on this blog. With [Balancer](https://balancer.finance/), I’m covering it extensively for the first time and already looking at a mature ecosystem. Balancer already has “its Convex,” called [Aura Finance](https://aura.finance/). It already controls over 25% of the veBAL (vs >50% of veCRV for Convex).
+
+However, the Balancer base infrastructure calls for a third component: an automation network necessary to enable the most advanced type of pools. At this stage, it’s still unclear who is leading this race, so I’ve used one of their most prominent participants – [PowerPool](https://powerpool.finance/) and its PowerAgents network — to play the part.
+
+For those familiar with UniswapV3 liquidity provisioning, one could say PowerAgents play a role similar to [Gelato](https://www.gelato.network/): it handles the automation of operations required to enable specific use cases, such as rewards harvesting and auto-compounding.
+
+## What makes Balancer different?
+
+Along with Uniswap and Curve, Balancer has been one of the longest-standing DEX with significant traction today. Indeed, looking at the DEX market from a global perspective, Balancer is scoring fifth place with about 3% of the total volume processed:
+
+
+
+_Overview of observed trading volume on main decentralized exchanges from [DeFiLlama](https://defillama.com/dexs)_
+
+{{< notice note >}}
+Balancer is only launched on mainnet, Polygon, and Arbitrum – meaning fewer chains than most of the other top 5 DEXes, something to keep in mind in a global-level comparison.
+{{< /notice >}}
+
+Balancer's first version launched in March 2020, and many iterations have been shipped since then, improving the BAL token model and liquidity structure. However, Balancer had **specificities since V1** that are probably key in explaining why it’s still standing today. I’ll focus on the most emblematic, Balancer-specific ones:
+
+### Pool supporting 2 to 8 assets
+
+Balancer is still, to this day, one of the only DEX offering such a wide range of pool structures. Indeed, a Balancer pool can be made of **any number ranging from 2 to 8 assets**, while most other DEX only support pairs, so two assets at once.
+
+It enables novel types of pools, such as:
+
+* 3 assets pools, such as the wBTC/USDC/wETH pool similar to Curve’s TriCrypto pool, or to diversify the pairing of a given token, like the OHM/ETH/DAI pool.
+* Or even 7-8 asset pools that start acting as token indexes as much as liquidity pools, such as the YFI/wBTC/COMP/wETH/UNI/CHZ/LINK pool.
+
+### Arbitrary pool weighting
+
+On top of the flexible support in terms of the number of tokens, **pool weighting does not need to be even across tokens** and can be extensively customized.
+
+This enables unbalanced pool structures that are very useful in certain situations:
+
+* For instance, the OHM/DAI/ETH pool mentioned above is **50%OHM, 25%DAI, and 25%wETH** – enabling the maximization of the OHM liquidity available against both DAI and ETH at the same time.
+* Another frequently used distribution is the **98/2**, particularly fitting to start building the liquidity of a newly released token with minimal IL risk (since 98% of the pool is composed of the safe pairing asset, like a stable or ETH)
+* Finally, the **80% Token / 20% pairing asset** such as 80% BAL / 20% wETH is also a highly sought-after liquidity distribution, as it enables token holders to partake in liquidity providing activities with minimized IL risks if the token was to appreciate.
+
+### Dynamic pool weighting
+
+Finally, Balancer can adjust the pool weighting distribution as needed through a specific type of pool called a [Liquidity Boostraping Pool (LBP)](https://docs.balancer.fi/products/balancer-pools/liquidity-bootstrapping-pools-lbps). Such pools are particularly fitting for launching tokens & building their liquidity at the same time, as they enable the streamlined go-to-market token flow. For instance:
+
+1. A given project wants to quickstart its token liquidity — the associated DAO controls a significant amount of the token, but usually none of the potential pairing asset (usually ETH or stablecoin)
+2. So they start with a 98% USDC / 2% Token pool, enabling them to provide liquidity with minimal pairing token requirements.
+3. The pool acts as a token initiation event and price discovery mechanism at the same time. The token starts at a given price, which decreases as time goes on if no one purchases the token.
+
+
+
+LBPs are designed to enable users interested in the project to purchase tokens fairly over a given period, protecting them against the usual attacks seen on more classical tokens launches (such as MEV bots sniping initial supply).
+
+It enables the user-DAO to accumulate the pairing token and first price discovery of the DAO’s token, making it easy to jump to the next step: quickstart the token liquidity with protocol-owned seeding.
+
+### Specificities of Balancer’s veModel
+
+Balancer also has implemented its twist on their Curve’s inspired locking mechanism. Here, instead of locking the token directly (CRV ⇒ veCRV), governance participants must **lock an LP token** corresponding to the Balancer **80% BAL / 20% wETH** pool.
+
+As said above, this liquidity distribution limits IL risks for depositors on a BAL upside. Thanks to this twist, Balancer can capture significant liquidity reserves through the normal operations of its governance participation mechanism.
+
+Finally, as of late, it seems like Balancer is focusing on interest-bearing tokens and developing new use cases to cater to them. For instance, [BIP#19](https://medium.com/balancer-protocol/vebal-pt-2-bribing-and-bip19s-free-bribes-b2f8334eba14) introduces “free bribes” for pools involving interest-bearing assets: the yield produced by the pool asset is recycled as a bribe to sustain its liquidity.
+
+## Lay of the land of the Balancer Wars
+
+Like Curve, Balancer has one dominant player of its race which developed a protocol optimized for synergy with Balancer: Aura. Aura is one of many services available in the Balancer-functional-L2 ecosystem, but a vastly dominant one with ~25% of all veBAL under the protocol control.
+
+Aura offers efficient farming to holders of Balancer LP tokens, with BAL rewards boosted thanks to the protocol's sizeable veBAL stash and additional AURA incentives. In that regard, it is the same thing as Convex to Curve.
+
+
+
+_Overview of the veBAL liquid wrappers — [courtesy of defiwars.xyz](https://www.defiwars.xyz/wars/balancer)_
+
+### Protocols with veBAL/vlAURA positions
+
+On top of the protocols working on liquid-wrapper for veBAL like Aura, some other DAOs and projects built sizeable veBAL/vlAURA positions to grow and sustain their liquidity, like Frax is doing on Curve.
+
+### Balancer Bribe Markets
+
+Many bribe markets are enabling the purchase of veBAL or vlAURA votes; here are the main ones:
+
+1. [Hidden Hand — Aura](https://hiddenhand.finance/aura) and [Hidden Hand – Balancer](https://hiddenhand.finance/balancer)
+2. [Paladin’s Warden Balancer Quest](https://app.warden.vote/quest/)
+3. [And StakeDAO BAL Votemarket](https://votemarket.stakedao.org/), a sort of bribing marketplace aggregator
+
+To follow the Balancer wars, make sure to harness the amazing data computed by the Llama Airforce:
+
+
+
+As seen on the graph, the bribing markets took off quickly before finding an equilibrium at around **$0.06 per AURA vote, translating into 1.50x bribes efficiency**: $1 spent bribing the vote results in $1.50 worth of BAL emission added to the targeted pool over the epoch.
+
+This figure is lower on the Curve races, around 1.25x for the Convex vlCVX bribing. It’s logical since Curve races are much older.
+
+## What’s next for Balancer?
+
+To complement the traction achieved thanks to the tokenomics revamp and switch to veBAL, several technical developments have been shipped/are coming to the Balancer DEX and should help further cement its position.
+
+### Boosted Pools
+
+The first one is the boosted pool, which is already live. They optimize the yields produced by liquidity providers by harnessing additional IL-free yield sources with tokens not needed to stomach the liquidity-providing activity. The bb-a-USD, Balancer’s 3pool equivalent, is the top Boosted Pool currently, but more are coming, including a LUSD-based one: LUCY.
+
+[Introduction to PowerPool's LUCY pool and what it brings to $LUSD](https://www.liquity.org/blog/introduction-to-powerpool-lucy-pool-and-what-it-brings-to-lusd)
+
+### Aave x Balancer
+
+Aave and Balancer have historic ties, with Aave Safety Module harnessing Balancer V1, and Aave even shipping a V2 market a few years ago to leverage Balancer LP tokens.
+
+Further collaborations are anticipated, as [Aave acquired BAL tokens recently](https://app.aave.com/governance/proposal/87/) and will face dramatically increased liquidity needs with the GHO release.
+
+
+### Balancer: home of the LSDs?
+
+Finally, looking at the current top pool TVL-wise on Balancer, a clear fit is emerging: liquid staked derivatives, such as Rocket Pool’s rETH or Lido’s stETH. Both have sizeable pools properly incentivized on Balancer mainnet.
+
+Lido’s wstETH/wETH pool even flipped the 80BAL/20wETH pool and became the top one of the DEX with $200M TVL. Similarly, stMATIC/wMATIC is the top Balancer/Polygon pool, followed by MATICX/wMATIC, featuring another liquid MATIC staking derivative. On Arbitrum, the third and last chain where Balancer is live, here again, the wstETH/wETH pool tops the chart.
+
+
+## Conclusion
+
+If you’d like to take part in the Balancer Wars, make sure to harness all the great resources available:
+
+1. [Llama Airforce](https://llama.airforce/#/bribes/overview/hh/aura-bal)
+2. [DeFiwars - Balancer](https://www.defiwars.xyz/wars/balancer)
+3. [Dune Analytics](https://dune.com/balancerlabs/balancer-pools)
+
+While I hope this article provided you with actionable insights regarding liquidity-driver tokens, I wanted to add another layer: it seems like a **subcategory** of liquidity-driver is emerging – **the lending liquidity-driver token**.
+
+They work very similarly, but instead of enabling their holders to direct incentives to liquidity pools, they allow them to **direct incentives to select lending markets**. So, in the end, they accomplish a different goal through a similar mean: controlling a lot of these lending-liquidity-driver tokens, like [Euler Finance’s](https://euler.finance/) EUL, allows for sustaining deep liquidity in lending markets.
+
+It’s probably worth looking at; I’ve been anticipating the arrival of ve and ve(3,3) based tokenomics to money markets for a while.
+
+
+🙏 Thanks to [Disiaque](https://twitter.com/disiaque_eth) for his help proofreading this article.
\ No newline at end of file
diff --git a/content/post/2022/crv-wars-l2.fr.md b/content/post/2022/crv-wars-l2.fr.md
new file mode 100644
index 00000000..f8bd7864
--- /dev/null
+++ b/content/post/2022/crv-wars-l2.fr.md
@@ -0,0 +1,306 @@
+---
+title: "⚔ Guerre du CRV avancée : analyse des protocoles construits sur Curve et Convex "
+description: "Votium, Warden, Concentrator, CCRV, Conic, etc. La couche de protocoles impliqués dans les Curve Wars se densifie : je vous propose un tour d'horizon pour mieux comprendre les dynamiques autour des tokens CRV et CVX."
+date: '2022-04-05T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, Convex, Votium, veCRV, bribe.crv, Conic Finance, Warden, Concentrator]
+toc: true
+tocNum: false
+url: crv-wars-l2
+image: /img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.png
+difficulty: "expert"
+---
+
+Le jeu et la lutte autour des tokens CRV et CVX ont changé d’ampleur depuis mon dernier article qui décrivait les Curve Wars des origines, désormais presque primitives. L’infrastructure autour de Curve s’est grandement densifiée avec l’arrivée de Convex bien sûr, mais aussi Votium, l’Union Llama Airforce, Concentrator, CCRV, Lendflare, Warden, et de nombreux autres protocoles encore en développement.
+
+Pour assumer une position stratégique sur CRV ou CVX, il faut désormais pouvoir supporter un investissement de plusieurs dizaines de millions de dollars. Ainsi, la course à l’accumulation de CVX et CRV est devenue avant tout un jeu pour DAOs ou pour les whales. Plus spécifiquement, les DAOs semblent préférer CVX au CRV, qui représente un compromis plus favorable :
+
+1. **Boosts LP Curve** : capacité de développer sa liquidité via les votes sur les jauges Curve
+2. **Rendements** : 4-5% en cvxCRV + potentiel rendement des bribes si capacité non utilisée (ou que le protocole bribe également)
+3. **Flexibilité** : CVX peut être utilisé au maximum de ses capacités en s’engageant 16 semaines + 3 jours (vlCVX) tandis que CRV requiert jusqu'à 4 ans d’engagement (1 CRV = veCRV).
+
+Ainsi pour extraire l’utilité du CRV, CVX est une alternative crédible et plus flexible, c’est pourquoi la plupart des DAOs se concentrent sur ce token. Convex Finance est devenu un “L2 fonctionnel” de Curve : une seconde couche qui apporte des nouvelles fonctionnalités et un jeu de compromis différent.
+
+Malgré tout, Convex n’est pas le seul projet qui a essayé de réaliser cette vision : il y avait aussi Yearn qui a désormais capitulé : les vaults Curve de Yearn passent essentiellement par Convex, désormais plus rentable. Depuis, de très nombreux projets tentent de proposer une brique synergétique avec le mastodonte Curve/Convex.
+
+
+## CRV ou CVX ?
+
+Je ne reviendrai pas sur les bases de la séparation entre les deux tokens ici, c’est l’affaire d’un article entier si vous découvrez le sujet : [⚔ Guerre du CRV : comprendre la course à l'accumulation de la capacité à influencer le protocole Curve Finance](2. [⚔ Guerres CRV avancées : analyse des protocoles construits au dessus de Curve et Convex](https://tokenbrice.xyz/fr/crv-wars-l2/)
+
+Il ne faut pas oublier que malgré l’équivalence calculable entre CVX et CRV (1vl CVX contrôle environ 4.8 veCRV - [source](https://dune.xyz/Marcov/Convex-Finance)), les deux tokens ont des compromis différents comme décrit plus haut.
+
+L’équilibre entre CRV et CVX a tendance à se maintenir, malgré des oscillations fréquentes : dernièrement, le pendule semble plus aller du côté de CVX. Néanmoins je pense qu’il reste de la place pour d’autres approches qui partent de la source (CRV) et elles commencent à émerger.
+
+[Warden](https://app.warden.vote/) de Paladin propose ainsi un protocole qui aide les apporteurs de liquidité sur Curve à maximiser leurs rendements et peut être atteindre le désirable bonus 2.5x grâce à de l’emprunt de la capacité de boosts des tokens veCRV (apportés par d’autres) payés directement en CRV.
+
+Mais il y a tellement d’autres subtilités et interactions à avoir en tête pour comprendre la pertinence des stratégies déployées par les différents projets, DAOs et protocoles pour gagner les Curve Wars.
+
+C’est pourquoi cet article se propose de faire le point sur la guerre des CRV et CVX **en visualisant et détaillant l’ensemble de l'écosystème** qui s’est développé autour de ces deux protocoles.
+
+
+## Layer 2 fonctionnels de Curve
+
+{{< notice note >}}
+Dans cet article, je vais parler de “L2 fonctionnel”, ou tout simplement L2 de Curve ou Convex. C’est une image pour décrire cette tendance à la démultiplication des supports pour interagir avec Curve/Convex.
+
+Prenez garde à ne pas confondre le terme avec les “vrais L2” / L2 de scaling : le terme dans son sens originel pour décrire une nouvelle chaîne qui hérite de la sécurité de sa parente tout en permettant un débit de transactions plus important et des coûts plus modérés.
+{{< /notice >}}
+
+On commence donc par les **L2 “fonctionnels”** de Curve, puis ceux de Convex (lui-même L2 de Curve), ensuite les services d’emprunt permettant de saisir avec effet de levier les nombreuses sources de rendement offertes par l’ensemble de l'écosystème Curve et on finira avec les protocoles-whales de CRV/CVX.
+
+C’est une aventure dense et haute en couleurs, mais comme souvent avec mes articles, je vous propose ici un condensé de mes recherches sur le sujet : bonne lecture !
+
+Pour ne pas vous perdre en route, je vous propose cette carte qui résume les principaux acteurs de l’écosystème Curve/Convex :
+
+
+
+### Convex Finance : Curve à la découpe
+
+Convex est le premier L2 fonctionnel de Curve ; d’autres projets lui ont précédé (yveCRV et sdveCRV) mais ils n’étaient pas aussi synergétique avec Curve et n’ont donc connu qu’un succès marginal.
+
+En résumé, Convex donne accès aux rendements du token CRV maximisés et liquides grâce à cvxCRV. La capacité de gouvernance ainsi que celle pour voter sur les jauges Curve correspondantes aux tokens veCRV sous-jacent est redirigée vers les possesseurs de vlCVX. Convex permettant ainsi un accès facilité à l'écosystème Curve (pour les possesseurs de CRV).
+
+Bien que Convex contrôle une grande quantité de veCRV, la centralisation du pouvoir de vote sur les jauges est évitée en offrant cette capacité au plus offrant grâce à Votium (bribes).
+
+Convex, c’est désormais basique, je ne le détaille donc pas plus ici. Mon précédent article sur la guerre du CRV approfondi sur le modèle et les apports de Convex : [⚔ Guerre du CRV : comprendre la course à l'accumulation de la capacité à influencer le protocole Curve Finance](https://tokenbrice.xyz/fr/crv-wars/)
+
+
+### Warden de Paladin : Curve sous stéroides ?
+
+[Warden](https://app.warden.vote/) est un autre chemin envisageable pour les LP Curve, qui propose un jeu de compromis différent à Convex. Warden ne contrôle pas directement de veCRV, mais propose à la place de louer la capacité de boost des LP Curve de veCRV possédés par d’autres.
+
+La location se paie directement en CRV et à la semaine. Elle provient de possesseurs de veCRV qui la mettent à disposition, pour le prix et la durée de leur choix. L’affaire se conclut grâce à la délégation des veCRV correspondant.
+
+
+
+Warden revient ainsi sur le jeu des boosts de LP Curve. Sur Convex, la plupart des pools sont boostées entre 1.5 et 1.7x via Convex. Avoir son propre stock de veCRV, augmenté par un emprunt Warden permet d’envisager d’atteindre 2x voir les 2.5x maximum sur certaines pools.
+
+Depuis peu, Warden propose même un calculateur bien pratique pour visualiser la quantité de veCRV nécessaire pour atteindre un multiplicateur donné :
+
+
+
+ Your browser does not support video. View GIF
+
+
+
+Warden est donc une alternative crédible pour les protocoles, DAOs et gros porteurs qui voudraient optimiser leur LP Curve dans une perspective de maximisation des CRV obtenus.
+
+
+## L2 Convex
+
+Convex n’a pas encore un an (Mai 2021) mais face à la place prépondérante que le service occupe déjà, les abstractions construites dessus n’ont pas tardé à arriver.
+
+
+### Votium : mise aux enchères des votes de Convex
+
+Le protocole Convex concentre la plus grande quantité de veCRV possédée par une entité unique. Néanmoins, la capacité de vote correspondant aux veCRV possédés par Convex (obtenue grâce au cvxCRV) est distribuée entre tous les possesseurs du token CVX qui le “vote lock” (vlCVX) pour 16 semaines + 7 jours).
+
+Via snapshot, ils peuvent mobiliser leur puissance de vote directement sur la jauge des pools Curve de leur choix. [Votium](https://votium.app/) est une couche supplémentaire construite sur ce dispositif : Votium permet à n’importe quel projet d’allouer un budget pour supporter une jauge curve donnée. À la fin du round, les possesseurs de vlCVX qui ont voté sur cette jauge se partagent les récompenses, à la hauteur de leur puissance de vote : ce sont les fameuses bribes.
+
+
+
+Grâce à la quantité impressionnante de veCRV contrôlés par Convex, Votium a rapidement émergé comme **un outil essentiel pour établir et pérenniser une présence sur Curve** : un bribe conséquent sur Votium permet de rendre rapidement une pool Curve très attractive.
+
+On détaille plus bas l’exemple de Frax Finance qui propose environ $5-7M de bribes à chaque round ; cela permet de maintenir des rendements attractifs sur la pool Frax/3CRV conséquente malgré la dilution massive (la pool contient presque $3B d’actifs), et ce sans émettre de leur propre token (FXS) pour du liquidity mining.
+
+
+### Union Llama Airforce : gestion mutualisée des vlCVX
+
+Les bribes proposées sur Votium sont très alléchantes : cela permet à vlCVX d’atteindre un rendement **d’environ 40% APR - dont l’essentiel (90%) provient des bribes**. Cependant, gérer soi-même sa position vlCVX a plusieurs contraintes :
+
+1. **Les frais en gas**, pour verrouiller ses CVX, mais aussi pour récolter les bribes.
+2. Bien qu’il soit possible de déléguer, cela entraîne une dispersion des récompenses (payées dans une dizaine de token différents -> frais en gas). Ainsi les petits et moyens porteurs de vlCVX préfèrent généralement concentrer leur vote sur un projet donné : plus pratique, mais ça implique de ne pas oublier de **voter à chaque round** !
+
+L’Union de Llama Airforce propose ainsi de remédier à ces deux principales limites, pour le bonheur des petits porteurs ainsi que de ceux qui préfèrent une **gestion 100% passive de leur vlCVX**.
+
+Le concept est simple : l’Union mutualise la gestion des vlCVX. La seule action requise de la part des utilisateurs, c’est la délégation de sa puissance de vote vlCVX vers le contrat de l’Union. Par la suite, l’Union se charge de tout :
+
+
+
+* À chaque round, l’Union se charge de claim toutes les bribes obtenues, et les vend pour des cvxCRV (=mutualisation / réduction immense de l’impact des frais de transaction).
+* Les cvxCRV obtenus sont ensuite déposés dans le Pounder (uCRV), qui les stake avec Convex et compose le rendement automatiquement.
+
+L’Union offre ainsi une alternative pertinente pour les possesseurs de CVX qui comptent maintenir et composer leur position sur le long-terme. Comme toujours, n’oubliez pas de faire attention aux frais malgré tout :
+
+
+
+* Les frais en gas sont répercutés et distribués sur tous les utilisateurs de l’Union.
+* Un frais correspondant à 2% du total des bribes reçues est également prélevé à chaque round.
+
+
+
+{{< notice warning >}}
+Cette TVL ne prend en compte que les rendements des bribes composés en cvxCRV par l'Union (uCRV). Les vlCVX ne sont pas pris en compte puisqu'ils sont simplement délégués à l'Union (environ 2.5M CVX).
+{{< /notice >}}
+
+
+L’Union a connu un succès rapide. Le projet provient de la [Llama Airforce](https://llama.airforce/#/convex/flyer), une source d’information déjà bien connue au sein de l'écosystème Curve/Convex, ce qui a sans doute contribué à son adoption.
+
+
+### Concentrator (AladdinDAO)
+
+En résumé, le [Concentrator](https://concentrator.aladdin.club/) c’est un peu le même esprit que l'Union, mais cette fois-ci pour les apporteurs de liquidité. Ainsi le Concentrator se propose de gérer des LP Curve pour ses déposants : les récompenses (CRV, CVX et potentiels autres tokens) sont automatiquement vendues pour du cvxCRV et composées automatiquement (staking sur Convex) via le wrapper aCRV.
+
+La proposition est intéressante et plutôt synergétique avec Curve et Convex : c’est un peu dommage de voir que les CVX sont vendus pour l’instant, mais expliqué par l'absence de wrapper disponible pour vlCVX. Le service proposé par Concentrator est donc plutôt pertinent pour les **petits et moyens porteurs qui veulent utiliser leur LP Curve pour maximiser leur exposition au token CRV** de manière efficace.
+
+
+### Congruent CCRV : Optimisation de la flywheel Curve/Convex
+
+
+Une des limites actuelles de Convex (ou feature pour certains) c’est que malgré la liquidité assez dense dans la pool Curve cvxCRV/CRV, celle-ci est souvent déséquilibrée. CvxCRV est liquide contre CRV, mais rarement à 1:1.
+
+[CCRV](https://ccrv.finance/) est donc conçu comme un mécanisme pour aider à rééquilibrer cette pool, en utilisant à la fois Curve et Convex. Le principe est assez simple si vous avez compris les mécanismes de Curve et Convex :
+
+
+
+1. Création du token cCRV, backé par 1 cvxCRV. Le protocole stake tous les cvxCRV déposés pour backer des cCRV dans Convex, afin d’obtenir un rendement.
+2. Création de la pool Curve 3CRV : CRV, cvxCRV et cCRV
+3. Bribes sur la pool 3CRV pour l’aider à se développer.
+
+Le mécanisme se lancera grâce à une allocation initiale de 1M CRV (fournie par Congruent DAO). Cela permettra d’airdrop 1M cCRV (via bribes) sur les premières semaines d’existence du token afin de l’aider à se lancer rapidement.
+
+Si le plan de lancement semble assez solide, la pérennisation du mécanisme semble encore incertaine. L’ajout de frais pourrait permettre au protocole CCRV de posséder sa propre liquidité (et donc rendement en CRV, CVX et 3 pool) ce qui pourrait alimenter les bribes tout en réduisant leur coût effectif sur le long terme.
+
+cCRV n’est pas encore lancé mais se veut être une **nouvelle optimisation de la flywheel Curve/Convex**. Point intéressant, cCRV est développé par [Congruent](https://congruent.fi/), une DAO qui développe des produits de “Governance as a Service” (GaaS).
+
+
+### Bent : le Convex de Convex ?
+
+[Bent](https://app.bentfinance.com/) est un véritable L2 Convex / L3 de Curve. La question principale qui se pose avec ce projet c’est surtout de savoir s’il y a quelque chose à gagner à descendre à ce niveau de profondeur.
+
+Concrètement, Bent fonctionne comme Convex fonctionne pour Curve : Bent permet de staker les tokens LP Curve : ils sont ensuite stakés dans Convex (par Bent), et vous bénéficiez d’un rendement supplémentaire payé avec leur token natif - BENT, en échange de frais collectés par Bent :
+
+
+
+
+Vous le remarquerez sans doute, la structure des frais est quasiment identique à celle de Convex. Enfin, tout comme Convex a créé sa propre représentation de CRV (cvxCRV), Bent crée sa représentation du CVX, le bentCVX. Celui-ci peut également être verrouillé (weBENT) exactement comme CVX->vlCVX, pendant 8 semaines pour obtenir un rendement supplémentaire correspondant aux bribes.
+
+Chaque deux semaines (round de jauges Curve), les possesseurs de weBENT votent sur Snapshot pour allouer leur capacité de vote sur les jauges de leur choix. Les votes des weBENT holders se répercutent via les CVX possédés par BentFinance, eux-même répercutés en vote CRV par Convex : deux niveaux de profondeur !
+
+.")
+
+
+#### Une abstraction pertinente ?
+
+Comme je le disais en abordant le sujet de Bent, la question ici n’est pas de savoir si le modèle est pertinent puisque Convex en est la preuve vivante. Néanmoins, Convex n’est pas un jeu à somme nulle par rapport à Curve, puisque le protocole a apporté de nouvelles fonctionnalités qui n’existaient pas avec juste Curve :
+
+1. Farm avec LP Curve optimisé, sans posséder de veCRV
+2. “Locking liquide” (⚠️taux de change cvxCRV <-> CRV) pour CRV
+3. Et le troisième point qui est un peu la conséquence des deux autres : Convex est désormais le plus gros possesseurs de veCRV, et peut donc proposer le service de bribes (via Votium) avec le plus de potentiel tout en étant le plus pratique (délégation, pas besoin de claim chaque semaine, etc.)
+
+Si je détaille les apports de Convex, c’est évidemment pour poser la question : qu’apporte **fonctionnellement** Bent par rapport à Convex ?
+
+1. Option de farm avec LP Curve sans posséder de veCRV encore plus optimisée que Convex, mais toute la sur-performance vient de l’émission BENT.
+2. Un locking de CVX moins contraignant que le locking direct via vlCVX (8 semaines chez Bent, 16 semaine + 7j chez Convex)
+
+Il manque encore pour moi le troisième élément pour faire de Bent une option intéressante, un mécanisme qui créerait une vraie valeur ajoutée par rapport à Curve/Convex, outre l’optimisation du farm et une réduction des contraintes.
+
+Enfin, je serai malhonnête si je n’ajoute pas un dernier point : la sécurité et la pérennité du protocole. En effet, Bent Finance a subi une attaque à priori par un insider en Décembre 2021 pendant plusieurs semaines. L’attaque a été rendue possible par le fait qu’à cette époque, les contrats de Bent n’étaient pas sécurisés par un multisig : [plus d’informations par ici](https://halborn.com/explained-the-bent-finance-hack-december-2021/).
+
+
+### Conic Finance (CNC) 🚧 : gestion collective de liquidité sur Curve/Convex
+
+{{< notice tip >}}
+🚧 signale un protocole pas encore lancé
+{{< /notice >}}
+
+Similaire à Bent, [Conic](https://twitter.com/ConicFinance) propose une abstraction supplémentaire à partir de LP Curve stakés sur Convex. Cependant je pense que cette fois-ci, le modèle a de la pertinence.
+
+Conic introduit le concept des “omnipools”, qui simplifierait la gestion pour les LP Curve en redescendant au niveau primitif : ici, ce sont directement les tokens qui sont déposés (ex: USDC ou DAI). Les omnipools de Conic se chargeront ensuite de distribuer les tokens sur différentes positions LP Curve stakés ensuite sur Convex.
+
+Les déposants reçoivent ainsi leur token CRV, CVX ainsi que des CNC, le token de Conic. De manière similaire à CVX, le CNC peut être “vote locked” pour :
+
+
+
+1. Participer aux votes de jauges toutes les deux semaines qui déterminent la distribution des pools Curve par actifs acceptés sur Conic.
+2. Voter sur la whitelist et blacklist des pools Curve acceptés (et donc éligible pour les jauges)
+3. Participer au vote pour décider les actifs supportés sur Conic
+4. Et tout autre décision de gouvernance, dont l’activation potentielle de frais pour le service (initialement, il n'y en aura aucun).
+
+L’approche de Conic semble donc pertinente et pourrait être décrite comme une gestion mutualisée d’actifs. C’est un modèle qui rappelle celui de [Tokemak](https://tokemak.xyz/) et va un pas plus loin que Curve/Convex qui reste au niveau de la détermination des incantations par la gouvernance. Ici, les votes de gouvernance résulteront en des mouvements de fonds effectifs entre différentes pools Curve. Si le protocole parvient à attirer une liquidité suffisante, il pourra devenir un acteur important des Curve Wars, avec potentiellement son propre système de bribes à terme.
+
+
+
+
+Le projet vient d’être dévoilé et l’approche envisagée pour le lancement est également intéressante. Une partie du supply de CNC est airdrop aux possesseurs de vlCVX. Pour le reste, il sera distribué avec une levée de fonds communautaire, du liquidity mining sur CNC/ETH et aux déposants sur Conic. Pour en apprendre plus, il n’y a [qu’un seul article disponible pour l’instant](https://medium.com/@ConicFinance/conic-finance-pre-launch-announcement-7b9f485f59f2).
+
+
+## Services d’emprunt avec tokens LP Curve/Convex en collatéral
+
+Arrivé à ce stade, vous commencez peut-être à saturer rien qu’à l’évocation d’un nouveau wrapper potentiel sur CRV, CVX ou même cvxCRV : c’est sans doute normal. La plupart des protocoles impliqués dans les Curve Wars développent directement des synergies au niveau du token, qui reste le plus direct. Mais il ne faut pas oublier deux autres types d’acteurs important :
+
+1. Les protocoles proposant un service synergétique avec le LP Curve/Convex, comme par exemple l’utilisation de celui-ci en collatéral.
+2. Les protocoles / DAOs qui possèdent de larges quantités de CVX et CRV et peuvent les utiliser pour développer une position stratégique.
+
+Avant d’aller voir du côté des whales et de leurs stratégies, je vous propose deux dernières analyses de protocoles qui permettent d’emprunter depuis une position LP Curve.
+
+
+### Lendflare (LFT)
+
+[Lendflare](https://lendflare.finance/) permet aux LPs Curve d’emprunter depuis leur position un actif qui suit le même peg, par exemple un emprunt de DAI avec le token LP 3pool (USDC/DAI/USDT) comme collatéral. Cette limitation permet d’éviter les liquidations dues aux variations de prix entre les actifs : avec Lendflare tant qu’un emprunteur rembourse sa dette à l’heure ou avant, il n’est pas liquidé.
+
+Le point critique, comme avec tout marché monétaire, c’est de réussir à attirer assez de déposants pour rendre l’emprunt aussi peu coûteux que possible et donc compétitif. Lendflare reprend ici la logique des boosts de Curve : les utilisateurs qui apportent des liquidités (USDC, DAI, ETH ou wBTC) pour faciliter les emprunts sont rémunérés avec le token LFT.
+
+Tout comme sur Curve, ils peuvent ici aussi bénéficier d’un multiplicateur allant jusqu’à 2.5x en verrouillant une quantité de LFT (veLFT) proportionnelle au dépôt. Il y a même un schéma très dense qui résume le tout et vous fera apprécier le soin tout particulier que je mets dans mes infographies maisons :
+
+
+
+Le protocole est encore en plein déploiement, bien que la fonctionnalité d’emprunt soit déjà disponible. Une vente initiale (IDO) du token LFT est en cours, et un airdrop est également discuté.
+
+
+### Curvance (CVE) 🚧
+
+Curvance s’attaque au même problème mais avec une approche différente. Ici le protocole ne s’intéresse pas aux LP Curve comme collatéral, mais plutôt aux “wrapped assets” en général comme cvxCRV, bveCVX (Badger) ou yvBOOST (Yearn). Pour permettre l’emprunt de stablecoins avec ces actifs comme collatéral, ils envisagent d’isoler le risque en s’appuyant sur des pools Fuse.
+
+Là encore, le token CVE sera distribué aux apporteurs de liquidité et un système de type veCVE est envisagé avec une nouvelle subtilité : encore un wrap, une version liquide du veCVE, le cveCVE qui donne accès au rendement du veCVE mais délègue les capacités de gouvernance à la DAO. Ici encore, des boosts, des jauges, et même potentiellement des bribes sont envisagés
+
+Pour les curieux, [la documentation est ici](https://docs.curvance.com/cve/).
+
+
+## DAOs whales en CVX
+
+Enfin, pour finir ce panorama de l’écosystème Curve/Convex, il ne faut pas oublier de regarder directement les tokens - et notamment les DAOs qui possèdent de grandes quantités de CRV ou CVX.
+
+Pour CRV, il n’existe pas encore de tableau de bord clair résumant la situation à ma connaissance. Pour CVX par contre, il y a un site pour ca : [daocvx.com](Daocvx.com). Les protocoles que nous allons détailler désormais n’ont donc pas de synergie construite nativement avec Curve ou Convex, mais ils possèdent de grande quantité de CVX et les utilisent pour améliorer leur position compétitive dans la guerre des CRV.
+
+")
+
+Je vous laisse creuser la liste par vous-même, on en détaillera simplement deux : Frax et Badger.
+
+
+### Frax Finance : dominer le jeu des jauges Curve
+
+Frax développe depuis longtemps une stratégie pertinente qui vise à dominer le jeu des jauges Curve pour aider à l’adoption de FRAX. Ca a été une des premières DAO à acquérir une position conséquente en CVX ; c’est désormais la DAO ayant **la plus grosse position avec plus de 2.1M CVX**.
+
+Frax est connu pour être également le projet le plus agressif avec les bribes et c’est fréquemment Frax qui propose le plus gros bribe de Votium pour sa pool FRAX/3crv. Au dernier round (14), le bribe de Frax représentait environ **40% de la valeur totale de toutes les bribes** payées à ce round ($6.5M / $16.2).
+
+Si Frax peut se permettre d’être aussi agressif, c’est que leur position vlCVX permet de réduire le coût effectif de ces bribes : grâce à ses propres votes, le protocole est en mesure de [récupérer](https://etherscan.io/tx/0x090777069299e6e292363c6131b5cc5b463d598a7f89d3c7207148c0497587f8) une partie non négligeable des FXS utilisés à chaque round.
+
+Avec cette stratégie, la pool FRAX/3CRV est en mesure de **maintenir un taux d’émission de CRV presque cinq fois plus élevé que la 3pool, pour une liquidité totale similaire** (3pool : $3.3B, FRAX : $2.7B).
+
+
+### Badger : un petit coin pour Bitcoin
+
+Depuis le début, Badger se concentre sur l’optimisation du farming avec BTC sur Ethereum. Initialement, avant Convex, Badger travaillait de près avec Yearn, mais avec le lancement de Convex et sa domination rapide, la position de Badger a évolué.
+
+Contrairement à Frax, Badger n’a pas acheté ses CVX. À la place, Badger développe plutôt un modèle similaire à celui de Convex pour accumuler du CRV sous contrôle ; le vault bveCVX. Il propose un retour similaire au verrouillage direct sur Convex, mais s’inclut dans l'écosystème Badger.
+
+Les balances en bveCVX contribuent par exemple au système de boost interne à Badger effectif sur la plupart des vaults. En outre, à chaque round la BadgerDAO utilise la puissance de vote correspondante au bveCVX pour soutenir les pools Curve supportées dans Badger, c’est à dire essentiellement des pools qui impliquent une ou plusieurs variantes du wBTC.
+
+
+
+
+Plutôt que d’acquérir sa position en CVX, Badger est en mesure de l’obtenir au prix d’émission sur son token natif - c’est donc en quelque sorte une location de CVX. Il y a également une pool Curve bveCVX/CVX pour permettre la sortie anticipée du vault. Il y a désormais presque 1.7M CVX dans le vault, la stratégie a donc fait ses preuves.
+
+
+### Les autres DAOs
+
+Je me suis concentré sur deux projets qui développent deux stratégies bien distinctes pour accumuler des CVX et peser dans les Curve Wars. Comme vous pouvez le voir sur le graphique plus haut, il y en a de nombreuses autres.
+
+Quand un protocole développe une position conséquente sur CVX (disons >300K CVX), il bénéficie d’avantages directs pour son/ses tokens, notamment au niveau de la liquidité. Néanmoins ça ne s’arrête pas là : les grands possesseurs de CVX sont dans une position stratégique et vont être également courtisés très prochainement pour différents partenariats.
+
+
+On voit déjà la mécanique à l'œuvre, avec la discussion autour d’une potentielle 4pool (USDC/USDT/FRAX/UST), rendue possible grâce au cumul des influences de Frax, Luna, Redacted et Olympus. Les protocoles-whales CVX deviennent ainsi des interfaces pour les Curve Wars, reste à voir qui saura leur faire la meilleure offre.
+
+_🙏 Un grand merci à [Charles](https://twitter.com/C53300) pour sa relecture attentive et ses nombreuses suggestions pertinentes._
\ No newline at end of file
diff --git a/content/post/2022/crv-wars-l2.md b/content/post/2022/crv-wars-l2.md
new file mode 100644
index 00000000..3fd66ab1
--- /dev/null
+++ b/content/post/2022/crv-wars-l2.md
@@ -0,0 +1,305 @@
+---
+title: "⚔ Advanced CRV warfare: analysis of protocols built on top of Curve and Convex "
+description: "Votium, Warden, Concentrator, CCRV, Conic, etc. The layer of protocols involved in the Curve Wars is getting denser: I offer a tour to better understand the dynamics around CRV and CVX tokens."
+date: '2022-04-05T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, Convex, Votium, veCRV, bribe.crv, Conic Finance, Warden, Concentrator]
+toc: true
+tocNum: false
+url: crv-wars-l2
+image: /img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.png
+difficulty: "expert"
+---
+
+The game and the fight around CRV and CVX tokens have changed in scope since my last article describing the original Curve Wars, now almost primitive. The infrastructure around Curve has become much denser with the arrival of Convex of course, but also Votium, Union Llama Airforce, Concentrator, CCRV, Lendflare, Warden, and many other protocols still in development.
+
+To assume a strategic position on CRV or CVX, one must now be able to support an investment of several tens of millions of dollars. Thus, the race to accumulate CVX and CRV has become primarily a game for DAOs or whales. More specifically, DAOs seem to prefer CVX to CRV, which represents a more favorable trade-off:
+
+1. **Boosts LP Curve**: ability to build liquidity via votes on Curve gauges
+2. **Yields**: 4-5% in cvxCRV + potential bribe yields if capacity is not used (or the protocol also use bribes)
+3. **Flexibility**: CVX can be used to its maximum capacity by committing 16 weeks + 3 days (vlCVX) while CRV requires up to 4 years of commitment (1 CRV = veCRV).
+
+So to extract the utility of CRV, CVX is a credible and more flexible alternative, which is why most DAOs focus on this token. Convex Finance has become a "functional L2" of Curve: a second layer that brings new features and a different set of tradeoffs.
+
+However, Convex is not the only project that tried to realize this vision: there was also Yearn, which has now capitulated: Yearn's Curve vaults are essentially through Convex, which is now more profitable. Since then, many projects are trying to offer a synergistic brick with the Curve/Convex behemoth.
+
+
+## CRV or CVX?
+
+I won't go back to the basics of the separation between the two tokens here, that's a matter for an entire article if you're new to the subject: [⚔ CRV wars: understanding the race to accumulate the ability to influence the Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)
+
+It should be kept in mind that despite the computable equivalence between CVX and CRV (1vl CVX controls about 4.8 veCRV - [source](https://dune.xyz/Marcov/Convex-Finance)), the two tokens have different tradeoffs as described above.
+
+The balance between CRV and CVX tends to hold, despite frequent swings: lately, the pendulum seems to swing more towards CVX. Nevertheless I think there is still room for other approaches that start from the source (CRV) and they are starting to emerge.
+
+Paladin's [Warden](https://app.warden.vote/) is proposing a protocol that helps liquidity providers on Curve maximize their returns and perhaps achieve the desirable 2.5x bonus by borrowing the capacity of veCRV tokens (provided by others) paid directly in CRV.
+
+But there are so many other subtleties and interactions to keep in mind in order to understand the relevance of the strategies deployed by the different projects, DAOs and protocols to win the Curve Wars.
+
+That's why this article proposes to review the CRV and CVX wars **by visualizing and detailing the whole ecosystem** that has developed around these two protocols.
+
+
+## Curve's functional layer 2
+
+{{< notice note >}}
+In this article, I'm going to talk about "functional L2", or simply Curve or Convex L2. This is an image to describe this trend of multiplication of supports used to interact with Curve/Convex.
+
+Be careful not to confuse the term with "true L2s" / scaling L2s: the term in its original sense to describe a new chain that inherits the security of its parent while allowing for higher transaction throughput and more moderate costs.
+{{< /notice >}}
+
+So we start with Curve's **Functional L2s**, then Convex's (itself a Curve L2), then borrowing services to leverage the many sources of return offered by the entire Curve ecosystem, and we'll finish with the CRV/CVX protocol-whales.
+
+It's a dense and colorful adventure, but as is often the case with my articles, I'm offering you a summary of my research on the subject: enjoy your reading!
+
+To lose you on the way, I propose you this map which summarizes the main actors of the Curve/Convex ecosystem:
+
+
+
+### Convex Finance: Curve by the slice
+
+Convex is the first functional L2 of Curve; other projects preceded it (yveCRV and sdveCRV) but they were not as synergistic with Curve and therefore only marginally successful.
+
+In summary, Convex provides access to maximized and liquid CRV token returns through cvxCRV. The ability to govern and vote on the Curve gauges corresponding to the underlying veCRV tokens is redirected to the owners of vlCVX. Convex thus provides easy access to the Curve ecosystem (for veCRV owners).
+
+Although Convex controls a large amount of vlCVX, the centralization of voting power on gauges is avoided by offering this capability to the highest bidder through Votium (bribes).
+
+Convex is now basic, so I won't detail it further here. My previous article on CRV Warfare went into more depth on the model and the contributions of Convex: [⚔ CRV Warfare: Understanding the race to accumulate the ability to influence Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)
+
+
+### Warden of Paladin: Curve on steroids?
+
+[Warden](https://app.warden.vote/) is another possible path for Curve LPs, which offers a different set of tradeoffs to Convex. Warden does not directly control veCRVs, but instead offers to rent the boosting capacity of LP Curve from veCRVs owned by others.
+
+The rental is paid directly in CRVs and by the week. It comes from veCRV owners who make it available, for the price and duration of their choice. The deal is concluded through the delegation of the corresponding veCRVs.
+
+
+
+Warden thus returns to the LP Curve boost game. On Convex, most pools are boosted between 1.5 and 1.7x via Convex. Having your own stock of veCRV, increased by a Warden loan, allows you to reach 2x or even 2.5x maximum on certain pools.
+
+Recently, Warden even offers a handy calculator to visualize the amount of veCRV needed to reach a given multiplier:
+
+
+
+ Your browser does not support video. View GIF
+
+
+
+Warden is therefore a credible alternative for protocols, DAOs and large carriers who would like to optimize their LP Curve in a perspective of maximizing the obtained CRV.
+
+
+## L2 Convex
+
+Convex is not yet one year old (May 2021) but given the preponderant place that the service already occupies, abstractions built on top of it were quick to appear.
+
+
+
+### Votium: Convex vote auction
+
+The Convex protocol concentrates the largest amount of veCRVs owned by a single entity. Nevertheless, the voting capacity corresponding to the veCRVs owned by Convex (obtained thanks to the cvxCRV) is distributed among all the owners of the CVX token that "vote lock" it (vlCVX) for 16 weeks + 7 days).
+
+Via snapshot, they can mobilize their voting power directly on the Curve pool gauge of their choice. [Votium](https://votium.app/) is an additional layer built on top of this feature: Votium allows any project to allocate a budget to support a given Curve gauge. At the end of the round, the vlCVX owners who voted on this gauge share the rewards, according to their voting power: these are the famous bribes.
+
+
+
+Thanks to the impressive amount of veCRVs controlled by Convex, Votium has quickly emerged as **an essential tool to establish and sustain a presence on Curve**: consistent bribes on Votium can quickly make a Curve pool very attractive.
+
+We detail below the example of Frax Finance which offers around $5-7M of bribes each round; this allows to maintain attractive returns on the Frax/3CRV pool despite the massive dilution (the pool contains almost $3B of assets), and this without issuing their own token (FXS) for liquidity mining.
+
+
+### Llama Airforce Union: shared management of vlCVX
+
+The bribes offered on Votium are very attractive: this allows vlCVX to reach a return **of about 40% APR - most of which (90%) comes from the bribes**. However, managing your own vlCVX position has several constraints:
+
+1. **Gas costs**, to lock in your vlCVX, but also to harvest the bribes.
+2. Although it is possible to delegate, this leads to a dispersion of the rewards (paid in a dozen different tokens -> gas fees). So small and medium vlCVX holders generally prefer to concentrate their vote on a given project: more practical, but it implies not forgetting to **vote at each round**!
+
+The Llama Airforce Union proposes to remedy these two main limitations, for the happiness of small holders as well as those who prefer a **100% passive management of their vlCVX**.
+
+The concept is simple: the Union pools the management of vlCVX. The only action required from the users is the delegation of their vlCVX voting power to the Union contract. Thereafter, the Union takes care of everything:
+
+
+
+* In each round, the Union takes care of claiming all the obtained bribes, and sells them for cvxCRV (=mutualization/immense reduction of the impact of transaction fees).
+* The obtained cvxCRV are then deposited in the Pounder, which stakes them with Convex and composes the yield automatically (uCRV).
+
+The Union thus offers a relevant alternative for CVX owners who intend to maintain and compound their position over the long term. As always, don't forget to pay attention to the fees:
+
+
+
+* Gas fees are passed on and distributed to all Union users.
+* A fee of 2% of the total bribes received is also charged in each round.
+
+
+
+{{< notice warning >}}
+This TVL only takes into account the yields of the bribes compounded into cvxCRVs by the Union (uCRV). The vlCVX are not taken into account since they are simply delegated to the Union (about 2.5M CVX).
+{{< /notice >}}
+
+
+The Union has been a rapid success. The project originated from the [Llama Airforce](https://llama.airforce/#/convex/flyer), an already well-known source of information within the Curve/Convex ecosystem, which no doubt contributed to its adoption.
+
+
+### Concentrator (AladdinDAO)
+
+In short, the [Concentrator](https://concentrator.aladdin.club/) is a bit like the Union, but this time for liquidity providers. Thus the Concentrator proposes to manage LP Curve for its depositors: the rewards (CRV, CVX and potential other tokens) are automatically sold for cvxCRV and automatically composed (staking on Convex) via the aCRV wrapper.
+
+The proposal is interesting and rather synergistic with Curve and Convex: it's a bit unfortunate to see that CVX are sold for the moment, but explained by the lack of available wrapper for vlCVX. The service offered by Concentrator is therefore rather relevant for **small and medium sized carriers who want to use their LP Curve to maximize their CRV** token exposure in an efficient way.
+
+
+### Congruent CCRV: Curve/Convex flywheel optimization
+
+
+One of the current limitations of Convex (or feature for some) is that despite the fairly dense liquidity in the cvxCRV/CRV Curve pool, it is often unbalanced. CvxCRV is liquid against CRV, but rarely at 1:1.
+
+[CCRV](https://ccrv.finance/) is therefore designed as a mechanism to help rebalance this pool, using both Curve and Convex. The principle is quite simple if you understand the mechanisms of Curve and Convex:
+
+
+
+1. Creation of the cCRV token, backed by 1 cvxCRV. The protocol stakes all the cvxCRVs deposited to back cCRVs in Convex, in order to obtain a return.
+2. Creation of the Curve 3CRV pool: CRV, cvxCRV and cCRV
+3. Bribes on the 3CRV pool to help it grow.
+
+The mechanism will launch with an initial allocation of 1M CRV (provided by Congruent DAO). This will airdrop 1M cCRV (via bribes) over the first few weeks of the token's existence to help it launch quickly.
+
+While the launch plan seems pretty solid, the sustainability of the mechanism still seems uncertain. The addition of fees could allow the CCRV protocol to have its own liquidity (and therefore return in CRV, CVX and 3 pool) which could fuel the bribes while reducing their effective cost in the long run.
+
+cCRV is not yet launched but is intended to be a **new optimization of the flywheel Curve/Convex**. Interestingly, cCRV is being developed by [Congruent](https://congruent.fi/), a DAO that develops "Governance as a Service" (GaaS) products.
+
+
+### Bent: the Convex of Convex?
+
+[Bent](https://app.bentfinance.com/) is a true L2 Convex / L3 of Curve. The main question that arises with this project is whether there is anything to gain by going down to this level of depth.
+
+Concretely, Bent works like Convex works for Curve: Bent allows you to stake Curve LP tokens: they are then staked in Convex (by Bent), and you benefit from an additional return paid with their native token - BENT, in exchange for fees collected by Bent:
+
+
+
+
+As you may notice, the fee structure is almost identical to Convex. Finally, just as Convex created its own representation of CRV (cvxCRV), Bent creates its representation of CVX, the bentCVX. This can also be locked (weBENT) exactly like CVX->vlCVX, for 8 weeks to get an additional yield corresponding to the bribes.
+
+Every two weeks (Curve gauge round), weBENT holders vote on Snapshot to allocate their voting capacity on the gauges of their choice. The votes of the weBENT holders are echoed via the CVX owned by BentFinance, themselves echoed in CRV vote by Convex: two levels of depth!
+
+.")
+
+
+
+#### A relevant abstraction?
+
+As I said when discussing Bent, the question here is not whether the model is relevant since Convex is living proof of that. Nevertheless, Convex is not a zero-sum game compared to Curve, since the protocol has brought new features that did not exist with just Curve:
+
+1. Farm with LP Curve optimized, without having veCRV
+2. "Liquid Locking" (⚠ cvxCRV/CRV exchange rate)
+3. And the third point which is a bit of a consequence of the other two: Convex is now the biggest veCRV owner, and can therefore offer the bribe service (via Votium) with the most potential while being the most convenient (delegation, no need to claim every week, etc.)
+
+If I detail the contributions of Convex, it is obviously to ask the question: what does Bent bring **functionally** compared to Convex?
+
+1. Farming option with LP Curve without owning a veCRV even more optimized than Convex, but all the outperformance comes from the BENT emissions.
+2. A less restrictive locking of CVX than direct locking via vlCVX (8 weeks at Bent, 16 weeks + 7 days at Convex)
+
+For me, the third element is still missing to make Bent an interesting option, a mechanism that would create a real added value compared to Curve/Convex, in addition to farm optimization and a reduction of constraints.
+
+Finally, I would be dishonest if I did not add one last point: the security and durability of the protocol. Indeed, Bent Finance has been attacked by an insider in December 2021 for several weeks. The attack was made possible by the fact that at that time, Bent's contracts were not secured by a multisig: [more information here](https://halborn.com/explained-the-bent-finance-hack-december-2021/).
+
+
+### Conic Finance (CNC) 🚧: collective liquidity management on Curve/Convex.
+
+{{< notice tip >}}
+🚧 reports a protocol not yet launched
+{{< /notice >}}
+
+Similar to Bent, [Conic](https://twitter.com/ConicFinance) offers an additional abstraction from Curve LPs staked on Convex. However I think that this time the model has relevance.
+
+Conic introduces the concept of "omnipools", which would simplify the management for Curve LPs by going back to the primitive level: here, it is directly the tokens that are deposited (e.g. USDC or DAI). The Conic omnipools will then distribute the tokens on different LP Curve positions which are then staked on Convex.
+
+The depositors receive their CRV, CVX and CNC tokens from Conic. In a similar way to CVX, the CNC can be "vote locked" to :
+
+
+
+1. Participate in bi-weekly gauge votes that determine the distribution of Curve pools by assets accepted on Conic.
+2. Vote on the whitelist and blacklist of accepted Curve pools (and thus eligible for gauges)
+3. Participate in the vote to decide which assets are supported on Conic
+4. And any other governance decisions, including the potential activation of fees for the service (initially there will be none).
+
+Conic's approach thus seems relevant and could be described as pooled asset management. It is a model reminiscent of [Tokemak](https://tokemak.xyz/) and goes one step further than Curve/Convex which remains at the level of governance determination of incitations. Here, governance votes will result in the actual movement of assets between different Curve pools. If the protocol manages to attract sufficient liquidity, it could become a major player in the Curve Wars, potentially with its own bribe system in the future.
+
+
+
+
+The project has just been unveiled and the approach being considered for launch is also interesting. Part of the CNC supply will be airdropped to vlCVX owners. For the rest, it will be distributed with community fundraising, liquidity mining on CNC/ETH and to depositors on Conic. To learn more, there is [only one article available for now](https://medium.com/@ConicFinance/conic-finance-pre-launch-announcement-7b9f485f59f2).
+
+
+## Borrowing services with LP Curve/Convex tokens as collateral
+
+At this point, you may start to get saturated just by mentioning a new potential wrapper on CRV, CVX or even cvxCRV: this is probably normal. Most of the protocols involved in the Curve Wars develop synergies directly at the token level, which remains the most direct. But we should not forget two other important types of actors:
+
+1. Protocols offering a synergistic service with the Curve/Convex LP, such as using it as collateral.
+2. Protocols / DAOs that have large amounts of CVX and CRV and can use them to develop a strategic position.
+
+Before going to the whales and their strategies, I offer you two last analyses of protocols that allow you to borrow from an LP Curve position.
+
+
+### Lendflare (LFT)
+
+[Lendflare](https://lendflare.finance/) allows Curve LPs to borrow from their position an asset that follows the same peg, for example a DAI borrow with the LP 3pool token (USDC/DAI/USDT) as collateral. This limitation avoids liquidations due to price changes between assets: with Lendflare as long as a borrower pays back his debt on or before the due date he is not liquidated.
+
+The critical point, as with any money market, is to attract enough depositors to make borrowing as cheap as possible and therefore competitive. Lendflare follows the logic of Curve's boosts: users who bring in cash (USDC, DAI, ETH or wBTC) to facilitate borrowing are rewarded with the LFT token.
+
+Just like on Curve, here they can also benefit from a multiplier of up to 2.5x by locking in a quantity of LFT (veLFT) proportional to the deposit. There is even a very dense diagram that summarizes everything and will make you appreciate the special care I put into my home-made infographics:
+
+
+
+The protocol is still in the midst of deployment, although the borrowing functionality is already available. An initial sale (IDO) of the LFT token is underway, and an airdrop is also being discussed.
+
+
+### Curvance (CVE) 🚧
+
+Curvance tackles the same problem but with a different approach. Here the protocol is not interested in Curve LPs as collateral, but rather "wrapped assets" in general like cvxCRV, bveCVX (Badger) or yvBOOST (Yearn). To enable the borrowing of stablecoins with these assets as collateral, they plan to isolate the risk by relying on Fuse pools.
+
+Again, the CVE token will be distributed to liquidity providers and a veCVE-like system is envisioned with a new subtlety: yet another wrap, a liquid version of the veCVE, the cveCVE that gives access to the veCVE's yield but delegates governance capabilities to the DAO. Again, boosts, gauges, and even potentially bribes are envisioned
+
+For the curious, [documentation is here](https://docs.curvance.com/cve/).
+
+
+## DAOs whales in CVX
+
+Finally, to finish this overview of the Curve/Convex ecosystem, we should not forget to look directly at the tokens - and in particular the DAOs that have large amounts of CRV or CVX.
+
+For CRV, there is not yet a clear dashboard summarizing the situation to my knowledge. For CVX on the other hand, there is a site for that: [daocvx.com](Daocvx.com). The protocols we will detail now do not have any synergy built natively with Curve or Convex, but they have a lot of CVX and use them to improve their competitive position in the CRV war.
+
+")
+
+I'll let you dig through the list on your own, we'll just detail two: Frax and Badger.
+
+
+
+### Frax Finance: Dominating the Curve Gauge Game
+
+Frax has a long-standing strategy of dominating the Curve Gauge game to help drive FRAX adoption. It was one of the first DAOs to gain a consistent position in CVX; it is now the DAO with the **largest position with over 2.1M CVX**.
+
+Frax is also known to be the most aggressive project with bribes and frequently offers the largest Votium bribe for its FRAX/3crv pool. In the last round (14), Frax's bribe was about **40% of the total value of all bribes** paid in that round ($6.5M / $16.2).
+
+The reason Frax can afford to be so aggressive is that their vlCVX position reduces the effective cost of these bribes: thanks to their own votes, the protocol is able to [recover](https://etherscan.io/tx/0x090777069299e6e292363c6131b5cc5b463d598a7f89d3c7207148c0497587f8) a significant portion of the FXS used in each round.
+
+With this strategy, the FRAX/3CRV pool is able to **maintain a CRV issuance rate almost five times higher than the 3pool, for a similar total liquidity** (3pool: $3.3B, FRAX: $2.7B).
+
+
+### Badger: a small corner for Bitcoin
+
+Since the beginning, Badger has focused on optimizing farming with BTC on Ethereum. Initially, before Convex, Badger worked closely with Yearn, but with the launch of Convex and its rapid dominance, Badge's position has evolved.
+
+Unlike Frax, Badger did not buy its CVX. Instead, Badger is developing a model similar to Convex's to accumulate CRV under control; the bveCVX vault. It offers a similar return to direct locking on Convex, but includes itself in the Badger ecosystem.
+
+For example, the bveCVX scales contribute to Badger's internal boost system that is effective on most vaults. In addition, in each round the BadgerDAO uses the corresponding bveCVX voting power to support the Curve pools supported in Badger, which are essentially pools that involve one or more variants of wBTC.
+
+
+
+
+Rather than acquiring its position in CVX, Badger is able to obtain control of CVX tokens thanks to incentives - so it's a sort of CVX rental. There is also a Curve bveCVX/CVX pool to allow early exit from the vault. There are now almost 1.7M CVX in the vault, so the strategy has proven itself.
+
+### Other DAOs
+
+I focused on two projects that develop two very distinct strategies to accumulate CVX and weigh in on the Curve Wars. As you can see on the graph above, there are many others.
+
+When a protocol develops a substantial position on CVX (say >300K CVX), it benefits directly from its tokens, especially in terms of liquidity. Nevertheless it doesn't stop there: large CVX owners are in a strategic position and will also be courted very soon for different partnerships.
+
+We can already see the mechanics at work, with the discussion around a potential 4pool (USDC/USDT/FRAX/UST), made possible thanks to the combined influences of Frax, Luna, Redacted and Olympus. The CVX protocols-whales thus become interfaces for the Curve Wars, it remains to be seen who will be able to make them the best offer.
\ No newline at end of file
diff --git a/content/post/2022/defi-vs-inflation.fr.md b/content/post/2022/defi-vs-inflation.fr.md
new file mode 100644
index 00000000..4cd4ee96
--- /dev/null
+++ b/content/post/2022/defi-vs-inflation.fr.md
@@ -0,0 +1,416 @@
+---
+title: "Comment construire un portefeuille DeFi résistant à l'inflation ?"
+description: "Et si la DeFi, plus que jamais, offrait des réponses sérieuses et crédibles aux enjeux économiques et financiers ? Illustration avec l'inflation gallopante et les divers produits et stratégies qui peuvent être mis en place pour s'en prémunir."
+date: '2022-03-08T01:13:50.191Z'
+categories: [Practical, Yield]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Reflexer, RAI, Maker, Liquity, Curve, Convex, Aave, APWineFi, vlCVX, Stablecoin]
+toc: true
+tocNum: false
+url: defi-vs-inflation
+image: /img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.jpg
+difficulty: "beginner"
+---
+
+
+L’inflation est plus que jamais au centre des discussions et préoccupations : personne n’y comprend grand-chose, aucun économiste ne l’a vraiment anticipée, mais nous avons tous un avis dessus.
+
+Aujourd’hui, on laisse l’économie et la politique de côté pour se concentrer sur le concret : en finance décentralisée, toutes sortes de protocoles sont développés, et une bonne partie d’entre eux **apportent des outils crédibles et novateurs pour préserver et développer le pouvoir d’achat d’un portefeuille**, même lorsque le contexte macroéconomique est des plus incertains.
+
+Je vous propose donc d’évaluer des stratégies impliquants des actifs et protocoles différents, toutes avec le même but : préserver et développer le pouvoir d’achat effectif d’un portefeuille donné. Néanmoins, il faut commencer par la base, le niveau 0 : qu’est-ce que l’inflation et pourquoi nous, DeFians, devrions-nous en soucier ?
+
+_L'image de couverture a été réalisée par un généreux contributeur anonyme et met en scène les majestueuses **[Valkyr-E](https://rarible.com/valkyre/created)**_
+
+## α/ Tutoriel : Comprendre l’impact de l’inflation sur un portefeuille crypto
+
+Je ne m’hasarderais pas à rentrer en détail sur l’inflation pour les monnaies fiduciaires ici, mais le concept de base est connu de toutes personnes familières avec les cryptomonnaies.
+
+Avant de rentrer dans le vif du sujet, partons de la base : l’inflation, telle que définie par l’Insee (Institut National de la Statistique et des Études Économiques) :
+
+> L'inflation est la perte du pouvoir d'achat de la monnaie qui se traduit par une augmentation générale et durable des prix. Elle doit être distinguée de l'augmentation du coût de la vie. La perte de valeur de la monnaie est un phénomène qui frappe l'économie nationale dans son ensemble (ménages, entreprises, etc.).
+
+Rappelons juste que, **tout comme en DeFi où chaque token est associé à un protocole et potentiellement même un écosystème, chaque monnaie fiduciaire s’appuie sur une économie ainsi qu’un ensemble de règles** (système légal).
+
+
+### L’inflation, point de vue macro (échelle = pays)
+
+L’inflation correspond à la production de nouvelle monnaie, l’important n’est pas tant la quantité de monnaie créée, mais plus **ce qui est fait avec**. On le comprend tous plutôt bien avec deux exemples caricaturaux à chaque extrême :
+
+
+
+1. La banque centrale d’un pays A émet une quantité importante de monnaie afin d’investir massivement dans ses infrastructures de transport et son approvisionnement énergétique (= investissements long terme).
+
+_Ici, l’inflation peut être a priori maîtrisée car la nouvelle monnaie émise sert à financer des investissements développant le potentiel économique du pays sur le long terme (-> compensation)_
+
+2. La banque centrale d’un pays B émet une quantité importante de monnaie afin de financer un plan d’urgence visant à compenser les conséquences prévisibles de précédentes mesures pseudo-sanitaires.
+
+_Dans ce second scénario, la nouvelle monnaie est utilisée pour couvrir une “dépense courante" de l’État. L'équivalent à votre échelle personnelle serait de vous endetter chaque midi pour payer votre déjeuner. C’est évidemment intenable sur le long terme. Dans ce scénario, l’inflation ne peut être que massive car une quantité importante de nouvelle monnaie est émise, tandis que le potentiel économique du pays en question stagne ou se détériore._
+
+
+### Évaluer l’inflation à venir ?
+
+Assez pour le macro, revenons à notre échelle, avec des choses que l’on connait bien. Voici l'évolution de la masse monétaire M1 sur le dollar, cela permet de visualiser sa “marketcap” en quelque sorte :
+
+
+
+_Ici on ne regarde que M1 par simplicité mais la tendance est similaire sur M2 et M3._
+
+On s’intéresse ici au dollar qui, bien que challengé, reste la monnaie fiduciaire qui donne le ton. Comme vous pouvez le voir, la courbe part à la verticale depuis le début de la crise Covid. L’allure de la courbe est désormais bien plus effrayante que les pires shitcoins que j’ai pu croiser. Vous en doutez ? Considérez la même information, présentée sous cet angle :
+
+**Le dollar existe depuis 1914. 20% de tous les dollars en circulation ont été créés en 2020. Au rythme actuel, la quantité totale de dollars en circulation double tous les 4-5 ans environ.**
+
+Pour comparer avec la crypto, nombreux sont ceux qui se soucient de l’inflation / émission de nouveau token sur Curve Finance (CRV). La courbe d'émission sur 4 ans ressemble à ceci :
+
+
+
+
+
+Je ne suis pas économiste, mais je connais mes shitcoins. Le chiffre officiel de l’inflation américaine qui nous est donné est 7.5% par an. Comme les chiffres du chômage, c’est une métrique hautement politique qu’il est dur d’apprécier réellement.
+
+Le chiffre de 7.5% peut sembler élevé, mais il reste faible face à la création monétaire sans précédent réalisée pour faire face au Covid. Je m’attends ainsi à voir cette inflation augmenter encore, ou alors se maintenir sur une période prolongée d’une dizaine d’années.
+
+L’inflation est donc là, à 7.5% minimum pour plusieurs années a priori. Assez pour la macro de boomer, voyons donc l'éventail d’outils que la DeFi nous offre pour lui faire face et la dépasser.
+
+
+## I/ Battre l’inflation grâce des rendements sur stablecoins “classiques”
+
+La première approche est comme toujours la plus simple, **la méthode brute** : une inflation de 7.5% signifie que des USD laissés tels quels perdront 7.5% de leur valeur sur l’année. Il s’agit donc ici de trouver une source de rendement supérieur à l’inflation : la différence entre les deux correspond au rendement effectif.
+
+Avec une inflation à 7.5% sur l’USD, je pense qu’il est prudent de s’assurer d’**atteindre au moins 1.5x ce chiffre en rendement** pour réellement se considérer à l'abri de l’inflation.
+
+Ici, le jeu est simple et les règles assez faciles à comprendre :
+
+
+
+1. On part d’une position dans un stablecoin donné
+2. Le but est de la rendre productive, sans assumer de risque d’IL
+3. Avec un rendement qui dépasse le chiffre de l’inflation, une fois les frais en gas amortis.
+
+
+### Simple dépôt de stablecoin
+
+On visera donc **un rendement 10.875% annuel sur stablecoin $ au strict minimum**. Avec les baisses récentes et la compression des rendements c’est de plus en plus difficile, mais encore trouvable même avec un dépôt dans un seul stablecoin sans risque d’IL. Des outils comme [Coindix](https://coindix.com/?kind=stable&sort=-apy&chain=ethereum) peuvent vous aider à trouver le vault de vos rêves :
+
+
+
+
+Attention cependant, **tous les vaults ne se valent pas** ! Par exemple, on voit de beaux rendements sur Bancor sur la capture d’écran : n’oubliez pas de considérer la volatilité de ces rendements ainsi que les frais en gas pour déployer la position (un LP Bancor est notoirement plus coûteux qu’un dépôt sur Yearn par exemple).
+
+
+{{< notice warning >}}
+Je le mentionne ici pour l’oublier aussi vite après : le protocole [Anchor](https://app.anchorprotocol.com/) vous offre également un rendement “fixe” proche de 20% sur le stablecoin UST. Un tel taux garanti ne s’obtient pas, bien sûr, sans de sérieux compromis qui posent de réelles questions sur la pérennité de l’ensemble de cet écosystème (Terra/Luna).
+{{< /notice >}}
+
+
+### Apport de liquidité + engagement temporel
+
+Toujours en dollar, mais un peu plus risqué, on peut considérer différents types d’engagement, toujours en stablecoin dollar et avec des risques d’IL très maîtrisés. Par exemple, un apport de liquidité entre FRAX et DAI.
+
+
+
+
+Ici, ca se passe chez [Frax Finance](https://frax.finance/), le taux de base (x1) correspond tout juste à notre objectif minimum, mais il est possible d’atteindre jusqu’à x5 avec deux types d’engagement :
+
+
+
+* X3 en verrouillant les tokens LP pendant 3 ans
+* X2 grâce à vos potentiels veFXS (bien plus dur à atteindre)
+
+Le rendement effectif d’une position verrouillée pour trois ans correspond à environ 3 fois notre objectif minimum, offrant ainsi une protection crédible contre la perte de valeur suite aux conséquences de l’inflation, mais encore faut-il pouvoir assumer les trois ans d’engagement.
+
+L’exemple est pris ici sur DAI, mais la situation est similaire sur les autres stablecoins majeurs ; par exemple, voici les pools FRAX/USDC :
+
+
+
+{{< notice tip >}}
+Convex pour Frax arrive (optimisation du farming des LPs Frax via Convex), si vous n’avez pas vos propres veFXS, il est probablement pertinent d’attendre la sortie du service pour prendre une décision avec toutes les cartes en main.
+{{< /notice >}}
+
+### Spéculation sur le taux de rendement et tokénisation
+
+Pour battre ces fameux 10% de rendement sur le dollar, il existe encore bien d’autres options. Je vous en présente une dernière ici pour vous aider à envisager les autres stratégies possibles.
+
+Pour celle-ci, on s’appuie sur [APWine](https://apwine.fi/), un protocole qui permet la tokénisation des rendements futurs d’actifs productifs. Le principe est à la fois simple et complexe : déposer un actif sur APWine permet de séparer son rendement futur (token FYT: Future Yield Token) du principal sous-jacent (PT: Principal Token).
+
+À partir de là, différentes stratégies sont possibles, comme par exemple vendre immédiatement le rendement futur (FYT) afin d’augmenter la quantité du principal productif. Un tel outil permet également de mieux gérer son risque dû à la volatilité des taux de rendements.
+
+Restons sur des choses simples et tout de même largement au-dessus des 10% requis : faisons un zoom sur le vault aUSDT de [APWine](https://app.apwine.fi/):
+
+
+
+
+J'exclue d’office la pool PT/FYT qui est plus complexe à comprendre et présente des risques bien plus conséquents que la PT/Underlying offrant un rendement en APW à 44% tout de même.
+
+Ici la stratégie est simple, mais il faut **garder en tête les frais en gas importants liés à l’utilisation d’APWine**. Pour mettre en place la stratégie à partir d’USDT dans le wallet, il faut :
+
+
+
+1. Allow + Dépôt d’une partie de ceux-ci sur Aave (55% max)
+2. Allow + Dépôt des aUSDT obtenus en 1 sur APwine
+3. Allow (x2) + Dépôt des PT et Underlying (USDT) en apport de liquidité
+4. Allow + Stake des tokens LPs PT/Underlying pour obtenir le rendement en APW
+5. Ne pas oublier également les frais en gas liés aux claims des APW + déroulement de la position à la fin de l’époque (ou avant).
+
+Il est donc préférable d’attendre un jour où les transactions passent sous 30 gwei pour ne pas trop souffrir des coûts en gas sur une telle stratégie.
+
+L’avantage ici, par rapport à Frax par exemple, c’est que **la position est bien plus liquide**. APWine fonctionne avec une logique d’epoch qui durent 90 jours. Ainsi, pour amortir plus facilement les frais en gas il est préférable de déployer la stratégie en début d’epoch : c’est aussi là où les rendements sont généralement les plus élevés.
+
+Le troisième winelisting (là où sont décidés les prochains tokens supportés sur APWine) vient de s’achever, n’hésitez pas à vous y préparer :
+
+
+
+
+APWine est encore un protocole jeune, mais la gouvernance est dynamique. La prochaine étape approche : tout comme sur Curve, ce seront bientôt les holders de veAPW (APW verrouillés) qui [décideront des émissions](https://gov.apwine.fi/t/apgp-2-enable-gauges-for-apw-rewards/171) pour chaque vault donné. Une redistribution des cartes est à envisager, prévoyez en connaissance de cause.
+
+
+## II/ Positions productives hedgées avec différents stablecoins “alternatifs”
+
+On est resté pour l’instant sur le dollar, c’est plus simple pour commencer. Bien que les stablecoins dollars soient encore largement dominants, il existe désormais **de nombreux stablecoins basés sur d’autres monnaies fiduciaires** comme l’EUR, le JPY (Yen Japonais), le CHF (Franc Suisse), KRW (Won Coréen) ou encore CAD (Dollar Canadien).
+
+Outre les quelques stablecoins centralisés (EURS ou EURT) c’est un marché surtout couvert par des protocoles qui proposent de créer des stablecoins synthétiques à partir d’autres stablecoins. C’est le cas par exemple de [Jarvis Network](https://jarvis.network/), qui utilise l’USDC pour collatéraliser différents types de stablecoins : jEUR, jCHF, jKRW, etc.
+
+
+### Simple dépôt
+
+Les opportunités natives de rendement sans IL sur de tels stablecoins sont encore assez rares, et se situent généralement sur Curve : l’apport de liquidité contre d’autres stablecoins basés sur la même monnaie fiduciaire, s’il y en a.
+
+
+
+
+Seuls quelques stablecoins ont des options lucratives en dépôt simple jEUR, jCHF, jJPY. Elles s’appuient sur les pools Curve correspondantes, avec des incitations additionnelles offertes par Jarvis et d’autres projets.
+
+Via Jarvis (aussi disponible farmé par Harvest), il est également possible de produire un rendement sans IL sur jCAD et jJPY.
+
+
+### Apport de liquidité
+
+Malgré tout, il existe une approche un peu différente, plus risquée, mais également potentiellement plus protectrice contre l’inflation : l’apport de liquidité sur deux stablecoins représentants deux monnaies fiduciaires différentes, par exemple EURT/3pool (USD) toujours sur Curve.
+
+Plus intéressant encore, surtout pour les portefeuilles plus modestes, de nombreux stablecoins alternatifs sont disponibles sur Polygon ou Avalanche, avec un écosystème assez dense.
+
+Ainsi Jarvis propose des pools jCHF-USDC, jEUR-USDC ou encore jCAD-USDC avec des rendements supérieurs à 20%. Des outils comme [Harvest.Finance](https://harvest.finance/) ou encore [Beefy.Finance](https://beefy.finance/) peuvent être également utilisés pour composer automatiquement les rendements obtenus :
+
+
+
+
+Attention : en fonction de votre actif de base (par ex USDC), s’exposer à de l’EUR (ou autre monnaie) peut être lucratif ou coûteux - tout dépend de l’évolution du taux de change USDC/EUR.
+
+Enfin, pour les plus aventuriers d’entrevous, sachez qu’APWine est également disponible sur Polygon et supporte déjà plusieurs tokens de Jarvis, comme par exemple le MooJarvis_4eur :
+
+
+
+1. Apport de liquidité sur Curve (4eur)
+2. Géré par Beefy Finance (moo)
+3. Qui compose le rendement que Jarvis offre automatiquement
+
+Là encore, l’addition des tokens votés lors du winelisting 3 va ouvrir de nouvelles portes avec l’arrivée prochaine sur APWine/Polygon de :
+
+
+
+* MooKyber_USDC-jEUR
+* MooMai_USDC-MAI
+
+
+### Emprunts Forex
+
+Enfin, si les liquidations ne vous font pas peur, sachez qu’une pool Fuse sur Polygon ([Pool7 - Jarvis Forex Market](https://polygon.market.xyz/pool/7)) vous permet l’utilisation de différentes jFiat comme collatéral ainsi que pour emprunter.
+
+")
+
+
+Avec un tel service, presque tout est possible, voici quelques exemples pour vous inspirer :
+
+
+
+* Long le USD + short EUR = MAI en collatéral, emprunt jEUR puis vente du jEUR et potentielle boucle
+* Short GBP via CHF = jCHF en collatéral, emprunt jGBP puis vente et potentielle boucle.
+
+{{< notice tip >}}
+Notez également que les stablecoins productifs m2CAD et m2JPY sont disponibles en collatéral tout en gardant leur rendement intéressant pour des stratégies de leverage plus classique.
+{{< /notice >}}
+
+
+### Trouver son équilibre
+
+Plus qu’une seule position magique, ce qui me plait avec les stablecoins de Jarvis c’est la possibilité de **diversifier facilement vers différents types de monnaies fiduciaires**. Grâce aux frais de transaction modérés sur Polygon, il est tout à fait possible de mélanger plusieurs monnaies et positions différentes pour faire un ensemble cohérent et bien protégé contre son inflation locale.
+
+Par exemple, pour un Européen (= qui dépense des €) :
+
+
+
+* 25% en stable € productif sans IL, par exemple MooJarvis_4eur (+APWine)
+* 25% en jEUR/USDC
+* 20% en stable dollar productif (par ex stratégie aUSDT APWine)
+* & Diversification: 15% jCHF/USDC + 15% jGBP/USDC
+
+Enfin, tant qu’on discute de stablecoins “exotiques” sachez qu’il en existe également quelques-uns qui suivent l’or ou l’argent - ils peuvent être également pertinents dans une telle perspective. Par exemple XAUT (avec pool Curve XAUT/3crv). L’or et l’argent restent des reliques ~~barbares ~~ de boomers, personnellement je n’y vois que très peu d’intérêt pour un DeFian compétent.
+
+
+## III/ Les stablecoins résistants à l’inflation
+
+Battre l’inflation, c’est chouette. La hedger, encore mieux. Mais **pourquoi pas tout simplement l’abstraire**, en utilisant des produits qui résistent naturellement à celle-ci ? Il n’y a encore que très peu de stablecoins qui ne sont pas adossés à une monnaie fiduciaire, mais l’offre se développe rapidement.
+
+
+### RAI, le premier stablecoin libéré du dollar
+
+RAI est une drôle de bête, le tout premier “unpegged stablecoin”. Lancé à une valeur de Pi en USD (3.14) en 2021, il évolue entre 3.02 et 3.06 quasiment depuis son lancement. Étant donné son arrivée récente (à peine plus d’un an), il est dur d’envisager comment RAI va se comporter dans une période d’inflation prolongée.
+
+Malgré tout, diversifier une partie de ses stablecoins vers du RAI peut être une option intéressante. En outre, différentes options de rendement existent sur RAI :
+
+
+
+* Simple dépôt sans risque d’IL : Idle Finance déposez vos RAI dans Fuse/Aave pour optimiser le retour natif + incentives en FLX de Reflexer + incentives en IDLE.
+
+
+
+
+
+* En assumant des risques d’IL via un apport de liquidité sur Curve contre la 3pool, un meilleur rendement est possible. Le crvRAI peut ensuite être staké directement sur Curve ou via Convex ou encore Yearn.
+
+Le RAI s’appuie sur un mécanisme inspiré de Maker MCD mais avec de nombreuses modifications pour rendre le tout possible. Pour comprendre comment il fonctionne, je vous invite à lire [mon article dédié](https://tokenbrice.xyz/fr/reflexer-rai/).
+
+{{< notice note >}}
+🚧 Signale que le protocole mentionné est encore en développement.
+{{< /notice >}}
+
+### 🚧 Un stablecoin résistant à l’inflation ? Le FPI de FRAX
+
+Le Frax Price Index, c’est un nouveau protocole qui devrait arriver prochainement au sein de l’écosystème Frax. Le but est de proposer un nouveau stablecoin, qui suivrait le CPI (Consumer Price Index) afin de se prémunir contre l’inflation. Tout comme Frax, **le système s’appuie sur deux tokens** :
+1. le stable - Frax Price Index (FPI)
+2. et le token de gouvernance Frax Price Index Share (FPIS).
+
+[La documentation de Frax](https://docs.frax.finance/frax-price-index/inflation-hedge) vous offre quelques informations sur le token à venir. **Un airdrop de FPIS est prévu** pour les holders de veFXS ou encore cvxFXS. Ainsi, le protocole sera indépendant de FRAX/FXS, bien qu’un mécanisme de capture de valeur vers FXS est prévu au-delà de l’airdrop initial.
+
+Il est dur de se projeter sur un simple design envisagé, mais il est clair qu’un stablecoin qui maintiendrait sa valeur malgré l’inflation est un produit très désirable. **Plusieurs questions se posent quant au maintien du peg sur FPI** : pour maintenir son équilibre, il va falloir que des gens prennent le trade contraire au FPI, c’est à dire “short inflation”. Or, dans le contexte actuel avec une inflation galopante, on a du mal à envisager qui pourrait assumer une telle position.
+
+Néanmoins, l'arrivée du FPI est imminente. On trouve des traces du token [FPIS sur EtherScan](https://etherscan.io/token/0xdb68c6264e9d0f8a6df1fa5a89f205da38698d15) depuis début Mars. J’ai hâte de voir le design proposé par l’équipe Frax pour répondre à ces enjeux conséquents.
+
+
+### 🚧 Résistance à l’inflation + degen = VOLT
+
+En parallèle au FPI de Frax, il y a un autre projet que je suis de près, que j’attend depuis longtemps et qui porte de grands espoirs pour moi. Le concept de haut niveau est très simple : un produit du type Abracadabra qui ne serait pas une faille de sécurité ambulante.
+
+En effet, Abracadabra permet d’emprunter depuis divers collatéraux productifs, ce qui rend le service désirable. Néanmoins l’infrastructure proche du bidouillage et les agissements des membres de l’équipe font d’Abracadabra un marché monétaire de seconde ou troisième zone.
+
+L’idée ici, avec Volt, c’est de couvrir la même verticale en utilisant une infrastructure qui a fait ses preuves : la base offerte par Reflexer (RAI). Trois modifications principales sont attendues sur ce modèle :
+
+1. Contrairement à Reflexer qui n’accepte que ETH en collatéral, Volt va diversifier les options disponibles, notamment avec des collatéraux productifs type wstETH.
+2. La valeur de VOLT, le stablecoin du système, sera indexée sur le FPI de Frax. L’infrastructure de Reflexer sera là encore réutilisée (PID controller adapté)
+3. L’équipe de Volt travaille également en collaboration avec Fuse et Olympus.
+
+Pour suivre Volt, rien de mieux que [leur Discord ](https://discord.gg/dGhvDmCNGr)!
+
+{{< notice note >}}
+Je décris ici le design initial de Volt Protocol, qui a évolué depuis. La vision de créer un service d'emprunt avec un stablecoin résistant à l'inflation demeure, mais les choix techniques ont évolué. Lisez [le whitepaper disponible ici](https://github.com/volt-protocol/whitepaper/blob/main/volt.md) pour les dernières informations.
+{{< /notice >}}
+
+## IV/ Battre l’inflation grâce à des rendements sur actifs volatils
+
+**Dans un monde où plus rien ne tient et la valeur fuit, que nous reste-t-il ?** Et pourquoi pas de bons actifs DeFi qui ont fait leurs preuves et sont adossés à des protocoles aux revenus massifs et récurrents partagés directement avec leurs holders ?
+
+Il en existe quelques-uns, très peu. On va les détailler un à un, ainsi que les différentes options disponibles sur ceux-ci pour produire un rendement.
+
+
+### ETH : l’origine et la fin
+
+Il y a bien sûr l’ETH, qui connaît de nombreuses sources de rendements divers - tout comme sur les stablecoins, rien ne vous empêche de diversifier votre exposition ETH avec plusieurs sources de rendement, par exemple:
+
+
+
+* ETH staké avec [Lido Finance ](https://lido.fi/)(rendement faible, mais à priori le plus sûr) [~5%]
+* LP [rETH](https://rocketpool.net/) sur Curve (plus novateur, plus lucratif, plus risqué) [~10%]
+* Vault covered call options sur ETH via [Stakedao](https://stakedao.org/) ou [Ribbon Finance](https://www.ribbon.finance/) [~25%, risques !]
+* Apport de liquidité cross-chain sur un Bridge, par exemple [Celer](https://cbridge.celer.network/#/liquidity) [~10%]
+
+Une position ainsi équilibrée suit l’inflation / la dépasse légèrement avec les rendements obtenus sur les ETH. La profitabilité de la position sur le long-terme dépend bien sûr essentiellement du prix d’entrée moyen sur ETH et de l’évolution de celui-ci.
+
+
+### CRV, CVX, et FXS : Les trois Parques de la DeFi ?
+
+Chez les romains, les Parques sont trois déesses qui gouvernent la vie des humains :
+
+1. Nona tisse le fil de la vie
+2. Decima le déroule
+3. Morta le découpe
+
+La DeFi connaît elle aussi ces Parques : trois protocoles qui jouent un rôle critique dans la survie et la croissance de potentiellement tout autre.
+
+En effet, outre l’ETH, il y a plusieurs projets DeFi qui ont déjà fait leurs preuves, contrôlent des flux de revenu conséquents et offrent un service réellement pertinent dans un contexte macro d’inflation prolongée ; j’en vois trois essentiellement :
+
+1. **Curve Finance - CRV** : la mère de tous les yields en DeFi + machine à peg et liquidité.
+2. **Convex Finance - CVX** : une option sur CRV, qui contrôle quasi 50% de tous les CRV verrouillés et apporte une réelle valeur ajoutée.
+3. **Frax Finance - FXS** : projet stable innovant, DeFi natif, très productif via les AMOs + arrivée de FPI + Frax possède une grosse position sur CVX & quelques autres protocoles.
+
+Tout en étant des tokens adossés à des protocoles essentiels en DeFi, les options de rendement sur ces trois tokens ne manquent pas :
+
+1. CRV -> Dépôt sur Convex en CvxCRV puis stake ou LP cvxCRV/CRV.
+2. CVX -> Vote locked sur Convex en vlCVX -> rendement en cvxCRV + bribes
+3. FXS -> Dépôt direct sur Frax (veFXS) ou gestion via Convex (cvxFXS).
+
+
+### D’autres tokens prometteurs
+
+Enfin, il reste d’autres projets qui n’ont pas encore atteint la profitabilité de Curve ou Convex mais représentent des paris crédibles. Dans un monde où l’inflation est là durablement, les outils qui vont permettre de s’en prémunir peuvent devenir très populaire : je vous propose quelques autres thèses toujours en lien avec ce qui a été mentionné dans l’article.
+
+
+#### APWine.fi (APW) : pari sur l’infrastructure DeFi avancée
+
+Quand l’inflation monte, tout le monde cherche du rendement. Laissez les courir derrière les %, et ciblez plutôt les vendeurs de pioches dans cette ruée vers l’or. C’est la thèse principale derrière un pari sur APW.
+
+Comme vous avez pu le voir dans l’article déjà, APWine offre des produits intéressants pour parier sur l’évolution des rendements ou encore réaliser immédiatement un rendement futur. Au fur et à mesure que la DeFi se développe, la demande pour un produit type APWine ne fait que grandir. Est-ce que ce sera APWine, ou un autre ? À vous de voir !
+
+Avec l’arrivée des APWine Wars, il n’est pas fantoche d’envisager à terme des bribes similaires à ce qu’on peut voir sur Convex.
+
+
+#### Reflexer (FLX) : pari sur la dégouvernance
+
+Outre l’approche technique très intéressante, Reflexer innove également à un autre niveau. En effet, depuis le lancement du protocole, l’équipe a présenté un “Plan de Dégouvernance” visant à progressivement minimiser le contrôle de l’équipe sur le protocole grâce à deux moyens principaux :
+
+* Automatisation de tout ce qui peut l’être
+* Gestion par les holders de FLX pour les situations nécessitant encore une analyse manuelle / prise de décision.
+
+En outre, **Reflexer dépasse désormais RAI**. La Money God League et un ensemble de projet construit l’infrastructure Reflexer, avec le soutien de l’équipe. Il semble donc assez naturel d’envisager un airdrop de ces nouveaux projets, dont VOLT, vers les holders de FLX.
+
+Dernier tuyau : les stakers du LP FLX/ETH dans le Safety Module de Reflexer sont les derniers recours qui permettent de garantir la solvabilité du protocole. Si je devais envisager un airdrop pour remercier la communauté Reflexer, c’est sans doute eux que je viserai en priorité
+
+
+#### LooksRare (LOOKS) : pari sur les NFTs
+
+Voyez LOOKS comme une option sur le marché NFT. En effet, LooksRare est la première place de marché NFT qui partage ses revenus. Cela se traduit par **un rendement en ETH pour stakers de LOOKS qui a pu atteindre 3 chiffres soutenus pendant les premières semaines**.
+
+
+
+
+Depuis, le volume de transactions a baissé et le rendement en ETH avec, mais **le staking LOOKS reste l’un des plus gros yields en ETH qui existe**.
+
+Je m’arrête à ces trois suggestions, mais il y a bien sûr d’autres options - à vous de juger. Par exemple, les QI Wars ont commencé et le protocole a une bonne traction. Attention cependant à ne pas tomber dans le piège qui consiste à penser que tous les protocoles qui adoptent le modèle ve + bribes connaîtront le succès de Curve et Convex. Les tokenomics ve vont se multiplier : il s’agit de faire les bons choix !
+
+---
+
+## Bonne chance et joyeuses récoltes 🚜
+
+Je serai tenté de m’excuser pour la longueur de cet article, mais je reste confiant que sa lecture vaut le détour et sera instructive même pour les DeFians les plus avertis.
+
+Si vous avez envisagé d’autres stratégies ou protocoles utiles pour se protéger de l’inflation, n’hésitez pas à me les suggérer.
+
+Pour approfondir, voici quelques lectures recommandées :
+
+
+
+1. [Comprendre les Curve Wars](https://tokenbrice.xyz/fr/crv-wars/)
+2. [Comprendre le modèle du RAI de Reflexer](https://tokenbrice.xyz/fr/reflexer-rai/)
+
+Et enfin pour la pratique, qui reste ESSENTIELLE, le mieux est encore d’essayer avec de petites sommes sur des sidechains/L2 peu coûteux :
+
+
+1. Le protocole APWine sur Polygon afin de vous familiariser avec ces mécanismes.
+2. Minting jFIAT / Apport de liquidité sur Curve + farming pour découvrir Jarvis
+3. Long/short sur Forex grâce aux jFiats + Fuse.
+
+
+{{< notice info >}}
+Disclosure: J’ai investi dans la pre-sale d’APWine et je suis un grand utilisateur du protocole. Je suis utilisateur et souvent holder de quasi tous les protocoles mentionnés dans cet article.
+
+Cet article ne constitue pas un conseil en investissement : je partage simplement mes recherches pour vous aider à faire les votres.
+{{< /notice >}}
+
+_🙏 Un grand merci à [Charles](https://twitter.com/C53300), [PhilH](https://twitter.com/phil_h) et [Disiaque](https://twitter.com/disiaque_eth) pour leur relecture attentive et leurs nombreuses suggestions pertinentes._
diff --git a/content/post/2022/defi-vs-inflation.md b/content/post/2022/defi-vs-inflation.md
new file mode 100644
index 00000000..6f7fd7a0
--- /dev/null
+++ b/content/post/2022/defi-vs-inflation.md
@@ -0,0 +1,416 @@
+---
+title: "How to build an inflation-proof DeFi portfolio?"
+description: "What if DeFi, more than ever, offered serious and credible answers to economic and financial issues? Example with the galloping inflation and the various products and strategies DeFi offers to guard against it."
+date: '2022-03-09T01:13:50.191Z'
+categories: [Practical, Yield]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Reflexer, RAI, Maker, Liquity, Curve, Convex, Aave, APWineFi, vlCVX, Stablecoin]
+toc: true
+tocNum: false
+url: defi-vs-inflation
+image: /img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.jpg
+difficulty: "beginner"
+---
+
+
+Inflation is more than ever at the center of discussions and concerns: no one understands much about it, no economist has really anticipated it, but we all have an opinion about it.
+
+Today, we leave economics and politics aside to focus on what matters for your wallet: in decentralized finance, all kinds of protocols are developed, and a good part of them **provide credible and innovative tools to preserve and develop the purchasing power of a portfolio**, even when the macroeconomic context is most uncertain.
+
+I propose to evaluate strategies involving different assets and protocols, all with the same goal: to preserve and develop the effective purchasing power of a given portfolio. Nevertheless, we have to start with the basics, level 0: what is inflation and why should we, DeFians, care about it?
+
+## α/ Tutorial: Understanding the impact of inflation on a crypto portfolio
+
+I won't venture into the details of inflation for fiat currencies here, but the basic concept is known to anyone familiar with cryptocurrencies.
+
+Before we get into the nitty-gritty, let's start with the term: here is how the INSEE (Institut National de la Statistique et des Études Économiques) defines inflation:
+
+> Inflation is the loss of purchasing power of money that results in a general and lasting increase in prices. It must be distinguished from the increase in the cost of living. The loss of value of money is a phenomenon that hits the national economy as a whole (households, businesses, etc.).
+
+Let's just remember that, **just like in DeFi where each token is associated with a protocol and potentially even an ecosystem, each fiat currency is also based on an economy as well as a set of rules** (legal system).
+
+
+### Inflation, macro point of view (scale = country)
+
+Inflation corresponds to the production of new money, the important thing is not so much the quantity of money created, but more **what is done with**. We all understand this rather well with two caricatural examples at each extreme:
+
+
+
+1. The central bank of country A issues a large amount of money in order to invest massively in its transport infrastructure and its energy supply (= long-term investments).
+
+_Here, inflation can be controlled because the new money issued is used to finance investments that develop the country's economic potential in the long run (-> compensation)._
+
+2. The central bank of country B issues a large amount of money to finance an emergency plan to compensate for the foreseeable consequences of previous pseudo-sanitary measures.
+
+_In this second scenario, the new money is used to cover a "current expense" of the government. The personal equivalent would be to go into debt every day to pay for lunch. This is obviously unsustainable in the long run. In this scenario, inflation can only be massive as a large amount of new money is issued, while the economic potential of the country in question stagnates or deteriorates._
+
+
+### Evaluating future inflation?
+
+Enough about the macro, let's go back to our scale, with things we know well. Here is the evolution of the M1 money supply on the dollar, this allows us to visualize its "marketcap" in a way:
+
+
+
+Here we only look at M1 for simplicity but the trend is similar on M2 and M3.
+
+We are interested here in the dollar which, although challenged, remains the fiduciary currency that sets the tone. As you can see, the curve has been going vertical since the beginning of the Covid crisis. The curve is now much scarier than the worst shitcoins I have ever seen. Doubt it? Consider the same information, presented in this light:
+
+**The dollar has been around since 1914. 20% of all dollars in circulation were created in 2020. At the current rate, the total amount of dollars in circulation doubles about every 4-5 years.**
+
+To compare with crypto, many are concerned about inflation / new token issuance on Curve Finance (CRV). The 4 year issuance curve looks like this:
+
+
+
+
+
+I'm no economist, but I know my shitcoins. The official US inflation figure we are given is 7.5% per year. Like unemployment figures, it's a highly political metric that's hard to really appreciate.
+
+The 7.5% figure may seem high, but it is still low when compared to the unprecedented money creation to deal with Covid. So I expect to see this inflation rise further, or else to be sustained over an extended period of a decade.
+
+So inflation is here, at 7.5% minimum for several years at least. Enough with boomers' macro, let's consider the range of tools that the DeFi offers us to face it and overcome it.
+
+
+## I/ Beating inflation with "classic" stablecoin returns
+
+The first approach is as always the simplest, **the brute force method**: an inflation of 7.5% means that USD left as is will lose 7.5% of their value over the year. The point here is to find a source of return higher than inflation: the difference between the two is the effective return.
+
+With inflation at 7.5% on the USD, I think it is prudent to make sure to **reach at least 1.5x this figure in yield** to really consider yourself inflation-proof.
+
+Here, the game is simple and the rules fairly easy to understand:
+
+
+
+1. You start with a position in a given stablecoin
+2. The goal is to make it productive, without assuming IL risk
+3. With a return that exceeds the inflation figure, once the gas costs have been amortized.
+
+
+### Simple stablecoin deposit
+
+So we would aim for **a 10.875% annual return on stablecoin $ at the very least**. With recent declines and yield compression this is increasingly difficult, but still findable even with a single stablecoin deposit without IL risk. Tools like [Coindix](https://coindix.com/?kind=stable&sort=-apy&chain=ethereum) can help you find the vault of your dreams:
+
+
+
+
+Be careful though, **not all vaults are created equal**! For example, we see nice returns on Bancor on the screenshot: don't forget to consider the volatility of these returns as well as the fees in gas to deploy the position (a Bancor LP is notoriously more expensive than a Yearn deposit for example).
+
+
+{{< notice warning >}}
+I mention it here only to forget it just as quickly afterwards: the [Anchor protocol](https://app.anchorprotocol.com/) also offers you a "fixed" return close to 20% on UST stablecoin. Such a guaranteed rate does not come, of course, without serious compromises that raise real questions about the sustainability of this whole ecosystem (Terra/Luna).
+{{< /notice >}}
+
+
+### Provision of liquidity + time commitment
+
+Still in dollars, but a bit riskier, we can consider different types of commitments, with very controlled / no IL risks. For example, a liquidity provision between FRAX and DAI.
+
+
+
+
+Here it is at [Frax Finance](https://frax.finance/), the prime rate (x1) is just our minimum target, but it is possible to reach up to x5 with two types of commitment:
+
+
+
+* X3 by locking LP tokens for 3 years
+* X2 by using your veFXS (much harder to reach)
+
+The effective return on a position locked in for three years corresponds to about 3 times our minimum target, thus offering a credible protection against the loss of value due to the consequences of inflation, but you still have to be able to assume the three-year commitment.
+
+The example is taken here on DAI, but the situation is similar on the other major stablecoins; for example, here are the FRAX/USDC pools:
+
+
+
+{{< notice tip >}}
+Convex for Frax is coming (optimizing Frax LP farming via Convex), if you don't have your own veFXS, it's probably pertinent to wait until the service is released to make a decision with all the cards in hand.
+{{< /notice >}}
+
+### Tokenizing and speculating on future yields
+
+To beat that famous 10% return on the dollar, there are still many other options. I present you one last one here to help you consider the other possible strategies.
+
+For this one, we rely on [APWine](https://apwine.fi/), a protocol that allows the tokenization of future yields on productive assets. The principle is both simple and complex: depositing an asset on APWine allows to separate its future yield (FYT: Future Yield Token) from the underlying principal (PT: Principal Token).
+
+From there, different strategies are possible, such as immediately selling the future yield (FYT) in order to increase the quantity of the productive principal. Such a tool enables better risk management considering the volatily of yields observed in DeFi
+
+Let's keep it simple and still well above the 10% requirement: let's zoom in on the aUSDT vault of [APWine](https://app.apwine.fi/):
+
+
+
+
+I automatically exclude the PT/FYT pool which is more complex to understand and has much higher risks than the PT/Underlying offering a 44% return in APW anyway.
+
+Here the strategy is simple, but you have to **keep in mind the important gas costs linked to the use of APWine**. To implement the strategy using USDT in the wallet, you need to:
+
+
+
+1. Allow + Deposit a part of them on Aave (I'd recommend 55% of the total maximum for this specific strategy)
+2. Allow + Deposit the aUSDT obtained in 1 on APWine
+3. Allow (x2) + Deposit the PT and Underlying (USDT) tokens as liquidity providing
+4. Allow + Stake of the LPs PT/Underlying tokens to obtain the return in APW
+5. Don't forget also the gas fees related to the APW claims + unwinding of the position at the end of the period (or before).
+
+It is therefore better to wait for a day when the transactions clear under 30 gwei so as not to suffer too much from the gas costs on such a strategy.
+
+The advantage here, compared to Frax for example, is that **the position is much more liquid**. APWine works with an epoch logic that lasts 90 days. Thus, to more easily amortize the costs in gas it is preferable to deploy the strategy at the beginning of the epoch: this is also when the returns are generally the highest.
+
+The third winelisting (where the next tokens supported on APWine are decided) has just ended, so don't hesitate to prepare for it:
+
+
+
+
+APWine is still a young protocol, but the governance is dynamic. The next step is approaching: as on Curve, it will soon be the veAPW holders (locked APW) that [will decide on emissions](https://gov.apwine.fi/t/apgp-2-enable-gauges-for-apw-rewards/171) for each given vault. A redistribution of the cards is to be expected, plan ahead.
+
+
+## II/ Hedged productive positions with various "alternative" stablecoins
+
+We have stayed for now on the dollar, it's easier to begin with. Although dollar stablecoins are still largely dominant, there are now **many stablecoins based on other fiat currencies** such as EUR, JPY (Japanese Yen), CHF (Swiss Franc), KRW (Korean Won) or even CAD (Canadian Dollar).
+
+Besides the few centralized stablecoins (EURS or EURT), this market is mostly covered by protocols that offer to create synthetic stablecoins backed by other stablecoins. This is the case for example with [Jarvis Network](https://jarvis.network/), which uses USDC to collateralize different types of stablecoins: jEUR, jCHF, jKRW, etc.
+
+
+### Single deposit
+
+Yield opportunities with no/low IL for such stablecoins are still quite rare, and usually found on Curve: providing liquidity against other stablecoins based on the same fiat currency, if any.
+
+
+
+
+Only a few stablecoins have lucrative single deposit options jEUR, jCHF, jJPY. They are based on the corresponding Curve pools, with additional incentives offered by Jarvis and other projects.
+
+Via Jarvis (also available farmed by Harvest), it is also possible to generate a return without IL on jCAD and jJPY.
+
+### FiatA/FiatB Liquidity Providing
+
+However, there is a slightly different approach, more risky, but also potentially more protective against inflation: providing liquidity on two stablecoins representing two different fiat currencies, for example EURT/3pool (USD) still on Curve.
+
+More interestingly, especially for smaller portfolios, many alternative stablecoins are available on Polygon or Avalanche, with a fairly dense ecosystem.
+
+Jarvis offers jCHF-USDC, jEUR-USDC or jCAD-USDC pools with returns above 20%. Tools like [Harvest.Finance](https://harvest.finance/) or [Beefy.Finance](https://beefy.finance/) can also be used to automatically compose the returns obtained:
+
+
+
+
+Warning: depending on your base asset (e.g. USDC), exposure to EUR (or other currencies) can be lucrative or costly - depending on the evolution of the USDC/EUR exchange rate.
+
+Finally, for the more adventurous among you, you should know that APWine is also available on Polygon and already supports several Jarvis tokens, such as the MooJarvis_4eur:
+
+1. Liquidity contribution on Curve (4eur)
+2. Managed by Beefy Finance (moo)
+3. Which compounds return that Jarvis offers
+
+Again, the addition of tokens voted during winelisting 3 will open new doors with the upcoming arrival on APWine/Polygon of:
+
+
+
+* MooKyber_USDC-jEUR
+* MooMai_USDC-MAI
+
+
+### Forex Borrowing
+
+Finally, if liquidations don't scare you, know that a Fuse pool on Polygon ([Pool7 - Jarvis Forex Market](https://polygon.market.xyz/pool/7)) allows you to use different jFiat as collateral as well as to borrow.
+
+")
+
+
+With such a service, almost anything is possible, here are some examples to inspire you:
+
+
+
+* Long USD + short EUR = MAI in collateral, borrow jEUR then sell jEUR and potentially loop
+* Short GBP via CHF = jCHF in collateral, borrow jGBP then sell and potential loop.
+
+{{< notice tip >}}
+Also note that the productive stablecoins m2CAD and m2JPY are available as collateral while keeping their yield: they can be interesting for more traditional leverage strategies.
+{{< /notice >}}
+
+### Finding your balance
+
+More than just one magic position, what I like about Jarvis stablecoins is the ability to **diversify easily into different types of fiat currencies**. Thanks to the low transaction fees on Polygon, it is quite possible to mix several different currencies and positions to make a coherent whole and well protected against its local inflation.
+
+For example, for a European (= spending €):
+
+
+
+* 25% in stable productive € without IL, for example MooJarvis_4eur (+APWine)
+* 25% in jEUR/USDC
+* 20% in stable productive dollar (e.g. aUSDT APWine strategy)
+* & Diversification: 15% jCHF/USDC + 15% jGBP/USDC
+
+Finally, while we're on the subject of "exotic" stablecoins, you should know that there are also a few that track gold or silver - they can be relevant from this perspective too. For example XAUT (with Pool Curve XAUT/3crv). Gold and silver remain ~~barbaric~~ boomers' relics, personally I see very little interest in them for a competent DeFian.
+
+
+## III/ Inflation resistant stablecoins
+
+Beating inflation is nice. Hedging it? Even better. But **why not just abstract it**, using products that are naturally resistant to it? There are still very few stablecoins that are not tracking fiat currencies, but the supply is growing rapidly.
+
+
+### RAI, the first dollar-free stablecoin
+
+RAI is a strange beast, the very first "unpegged stablecoin." Launched at a value of Pi in USD (3.14) in 2021, it has been moving between 3.02 and 3.06 almost since its launch. Given its recent arrival (just over a year), it's hard to see how RAI will perform in a period of prolonged inflation.
+
+Still, diversifying a portion of your stablecoins into RAI may be an attractive option. In addition, there are different return options available on RAI:
+
+
+
+* Simple deposit without IL risk: Idle Finance deposits your RAI in Fuse/Aave to optimize the native return + incentives in FLX from Reflexer + incentives in IDLE.
+
+
+
+
+
+* By assuming IL risk via liquidity provision on Curve vs. 3pool, a better return is possible. The crvRAI can then be staked directly on Curve or via Convex or Yearn.
+
+RAI is based on a mechanism inspired by Maker MCD but with many modifications to make it possible. To understand how it works, I invite you to read [my dedicated article](https://tokenbrice.xyz/reflexer-rai/).
+
+{{< notice note >}}
+🚧 Signals that the mentioned protocol is still under development.
+{{< /notice >}}
+
+### 🚧 An inflation-resistant stablecoin? The FRAX FPI
+
+The Frax Price Index is a new protocol that should arrive soon within the Frax ecosystem. The goal is to offer a new stablecoin, which would follow the CPI (Consumer Price Index) to protect against inflation. Just like Frax, **the system is based on two tokens**:
+1. the stable - Frax Price Index (FPI)
+2. and the governance token - Frax Price Index Share (FPIS).
+
+[Frax documentation](https://docs.frax.finance/frax-price-index/inflation-hedge) offers some information about the upcoming token. **An airdrop of FPIS is planned** for veFXS or cvxFXS holders. Thus, the protocol will be independent of FRAX/FXS, although a value capture mechanism to FXS is planned beyond the initial airdrop.
+
+It is hard to project solely on a mere design, but it is clear that a stablecoin that would maintain its value despite inflation is a very desirable product. **There are several questions as to whether the peg on FPI can be maintained**: to keep its equilibrium, people will have to take the opposite trade to FPI, i.e. "short inflation". However, in the current context of galloping inflation, it is hard to imagine who could assume such a position and massive incentives might be required.
+
+Nevertheless, the arrival of the FPI is imminent. Traces of the token [FPIS on EtherScan](https://etherscan.io/token/0xdb68c6264e9d0f8a6df1fa5a89f205da38698d15) can be found as early as early March. I look forward to seeing the Frax team's proposed design to address these consequential issues.
+
+
+### 🚧 Inflation resistance + degen = VOLT
+
+Alongside Frax's FPI, there is another project I've been following closely, waiting for a long time and holding high hopes for. The high-level concept is very simple: an Abracadabra-like product that would not be a walking security loophole.
+
+Indeed, Abracadabra allows borrowing from various productive collaterals, which makes the service desirable. Nevertheless, the infrastructure is close to a hack and the actions of the team members make Abracadabra a second or third grade money market.
+
+The idea here, with Volt, is to cover the same vertical using a proven infrastructure: the base offered by Reflexer (RAI). Three main changes are expected on this model:
+
+
+
+1. Unlike Reflexer, which only accepts ETH as collateral, Volt will diversify the available options, notably with productive collateral such as wstETH.
+2. The value of VOLT, the system's stablecoin, will be indexed to Frax's FPI. The Reflexer infrastructure will be reused (PID controller adapted)
+3. The Volt team is also working in collaboration with Fuse and Olympus.
+
+To follow Volt, as always, the alpha lives on [the Discord](https://discord.gg/dGhvDmCNGr)!
+
+{{< notice note >}}
+I describe here the initial design of Volt Protocol, which has since evolved. The vision of creating a borrowing service with an inflation-proof stablecoin remains, but the technical choices have evolved. Read [the whitepaper available here](https://github.com/volt-protocol/whitepaper/blob/main/volt.md) for the latest information.
+{{< /notice >}}
+
+## IV/ Beating inflation with returns on volatile assets
+
+**In a world where nothing holds and value leaks, what's left? How about good, proven DeFi assets backed by protocols with massive, recurring revenues shared directly with their holders?**
+
+There are a few of them, very few. We will detail them one by one, as well as the different options available on them to produce a return.
+
+### ETH: the origin and the end
+
+There is of course ETH, which has many different sources of return - just like stablecoins, there is nothing to stop you from diversifying your ETH exposure with several sources of return, for example:
+
+
+
+* ETH staked with [Lido Finance ](https://lido.fi/)(low yield, but a priori the safest) [~5%]
+* LP [rETH](https://rocketpool.net/) on Curve (more innovative, more lucrative, more risky) [~10%]
+* Vault covered call options on ETH via [Stakedao](https://stakedao.org/) or [Ribbon Finance](https://www.ribbon.finance/) [~25%, risks!]
+* Cross-chain liquidity on a Bridge, for example [Celer](https://cbridge.celer.network/#/liquidity) [~10%]
+
+A position balanced in this way tracks/exceeds inflation slightly with the returns obtained on ETH. The profitability of the position over the long term depends of course mainly on the average entry price on ETH and its evolution.
+
+
+### CRV, CVX, and FXS: The three Fates of the DeFi?
+
+Among the Romans, the Fates are three goddesses who govern the lives of humans:
+
+1. Clotho weaves the thread of life
+2. Lachesis unwinds it
+3. Atropos cuts it
+
+DeFi also knows these Fates: three protocols that play a critical role in the survival and growth of potentially any other.
+
+Indeed, in addition to ETH, there are several DeFi projects that have already proven themselves, control substantial revenue streams, and offer a truly relevant service in a macro context of prolonged inflation; I see three essentially:
+
+1. **Curve Finance - CRV**: the mother of all yields in DeFi + peg machine and liquidity.
+2. **Convex Finance - CVX**: an option on CRV, which controls almost 50% of all locked CRVs and adds real value.
+3. **Frax Finance - FXS**: innovative stable project, native DeFi, very productive via AMOs + arrival of FPI + Frax has a big position on CVX & some other protocols.
+
+While being tokens backed by key protocols in DeFi, there is no shortage of return options on these three tokens:
+
+
+
+1. CRV -> Deposit on Convex in CvxCRV then stake or LP cvxCRV/CRV.
+2. CVX -> Locked vote on Convex in vlCVX -> Return in cvxCRV + bribes.
+3. FXS -> Direct deposit on Frax (veFXS) or management via Convex (cvxFXS).
+
+
+### Other promising tokens
+
+Finally, there are still other projects that have not yet reached the profitability of Curve or Convex but represent credible bets. In a world where inflation is here to stay, the tools that will allow us to protect ourselves from it can become very popular: I propose you some other theses related to what has been already mentioned in the article.
+
+
+#### APWine.fi (APW): betting on the advanced DeFi infrastructure
+
+When inflation goes up, everyone is looking for yield. Let them run behind the %, and instead target the pick sellers in this gold rush. This is the main thesis behind a bet on APW.
+
+As you could see in the article already, APWine offers interesting products to bet on the evolution of yields or even realize a future yield immediately. As DeFi develops, the demand for a product like APWine will keep growing. Will it be APWine, or another one? It's up to you!
+
+With the APWine Wars coming up, it's not a stretch to envision bribes similar to what we see on Convex.
+
+#### Reflexer (FLX): a bet on degovernance
+
+In addition to the very interesting technical approach, Reflexer also innovates on another level. Indeed, since the launch of the protocol, the team has presented a "De-governance Plan" aiming at progressively minimizing the team's control over the protocol through two main means:
+
+
+
+* Automation of everything that can be automated
+* Management by FLX holders for situations still requiring manual analysis/decision making.
+
+In addition, **Reflexer now exceeds RAI**. The Money God League is a set of projects building using the Reflexer infrastructure, with the support of the team. So it seems quite natural to consider an airdrop of the governance token of these new projects, including VOLT, to FLX holders.
+
+Last tip: the stakers of the FLX/ETH LP in the Reflexer Safety Module are the last resort to guarantee the solvency of the protocol. If I were to consider an airdrop to thank the Reflexer community, I would probably target them first.
+
+
+#### LooksRare (LOOKS): bet on NFTs
+
+Think of LOOKS as an option on the NFT market. In fact, LooksRare is the first NFT marketplace that shares revenue. This translates into **an ETH yield for stakers on LOOKS that reached 3 digits sustained during the first few weeks**.
+
+
+
+
+Since then, trading volume has dropped and the ETH yield with it, but **the staking LOOKS is still one of the biggest ETH yields out there**.
+
+I'll stop with these three suggestions, but of course there are other options - you be the judge. For example, the QI Wars have started and the protocol has good traction. Be careful, however, not to fall into the trap of thinking that all protocols that adopt the ve + bribes model will be as successful as Curve and Convex. ve tokenomics will multiply: it's about making the right choices!
+
+---
+
+## Good luck and happy harvesting 🚜
+
+I'd be tempted to apologize for the length of this article, but I remain confident that it's worth a read and will be informative even for the most knowledgeable DeFians.
+
+If you have considered other useful strategies or protocols for protecting against inflation, please feel free to suggest them to me.
+
+For further reading, here are some recommended related articles:
+
+
+
+1. [Understanding the Curve Wars](https://tokenbrice.xyz/crv-wars/)
+2. [Understanding the Reflexer RAI model](https://tokenbrice.xyz/reflexer-rai/)
+
+And finally, for the practice, which remains ESSENTIAL, your best bet to warm up is to try with small amounts on inexpensive sidechains/L2:
+
+
+
+1. The APWine protocol on Polygon to familiarize yourself with these mechanisms.
+2. Minting jFIAT / Liquidity contribution on Curve + farming to discover Jarvis
+3. Long/short on Forex with jFiats + Fuse.
+
+
+{{< notice info >}}
+Disclosure: I have invested in APWine pre-sale and I am a big user of the protocol. I am a user and frequent holder of almost all the protocols mentioned in this article.
+
+This article does not constitute investment advice, I'm just sharing my research to help you do yours!
+{{< /notice >}}
+
+
+_🙏 Thanks to [Charles](https://twitter.com/C53300), [PhilH](https://twitter.com/phil_h) and [Disiaque](https://twitter.com/disiaque_eth) for their careful proofreading and their suggestions to help improve this article._
\ No newline at end of file
diff --git a/content/post/2022/lusd-chicken-bonds.fr.md b/content/post/2022/lusd-chicken-bonds.fr.md
new file mode 100644
index 00000000..3aa238e0
--- /dev/null
+++ b/content/post/2022/lusd-chicken-bonds.fr.md
@@ -0,0 +1,319 @@
+---
+title: "Chicken Bonds : synergie DeFi x NFT pour résoudre le problème de l'oeuf et de la poule de la ĺiquidité en finance décentralisée"
+description: "Comment une expérimentation impliquant des NFTs dynamiques évoluants en fonction des interactions des utilisateurs avec un protocole DeFi peut aider Liquity à accroître la liquidité du LUSD ?"
+date: '2022-10-17T01:13:50.191Z'
+categories: [Stablecoin, Yield]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Liquity, LUSD, Chicken Bonds, NFT, NFTfi]
+toc: true
+tocNum: true
+url: lusd-chicken-bonds
+image: /img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.png
+difficulty: "beginner"
+---
+
+Liquity a récemment publié les LUSD Chicken Bonds, une **expérience de théorie des jeux fusionnant des éléments DeFi et NFT pour accroître la liquidité du LUSD et réduire sa prime de prix**.
+
+Bien que les Chicken Bonds s'appuient sur des protocoles existants, tels que Yearn, b.protocol, ou Curve, ils mettent également en place de nouveaux mécanismes, dont les deux principaux sont les suivants :
+
+1. **"No maturity principal-protected bonding"** : Les Chicken Bonds utilisent un nouveau type de bonds offrant de fortes garanties au déposant, y compris la possibilité de récupérer la totalité du capital initialement fourni sans frais (Chicken Out).
+2. **Participer pour gagner des NFT dynamiques** : En interagissant avec le protocole LUSD Chicken Bonds, les utilisateurs obtiennent un **NFT dynamique** qui évolue en fonction de leurs choix et des interactions précédentes sur le réseau.
+
+Les Chicken Bonds s'attaquent à l'un des principaux enjeux de la DeFi, la croissance durable des pools de liquidité, en commençant par LUSD. À terme, le modèle sera mis à disposition dans une version sans permission généralisable pour tout protocole ayant besoin de liquidité.
+
+Ce billet détaille le fonctionnement et les résultats attendus des [LUSD Chicken Bonds](https://chickenbonds.org). Cependant, avant de répondre à ces questions, il est nécessaire d'avoir un contexte supplémentaire sur les LUSD : commençons !
+
+## Le contexte : La prime de prix sur LUSD
+
+L'une des dimensions les plus mal comprises du modèle de Liquity est le **mécanisme d'ancrage du LUSD**. En effet, alors que le LUSD présente de fortes garanties (hard peg) que le LUSD>1,00$ (rachat) et <$1,10 (ratio de collatéralisation minimal de 110%), entre les deux, l'équilibre repose davantage sur un **jeu d'incitations (soft peg)**.
+
+Dans le sillage de [la répression de l'OFAC sur Tornado Cash](https://blog.chainalysis.com/reports/tornado-cash-sanctions-challenges/) en août, il y a eu une **augmentation de la demande** de monnaies stables résistantes à la censure. Pourtant, l'appétit pour l'effet de levier est faible en raison de la détérioration des conditions du marché. Ainsi, si la demande de LUSD est élevée, une part importante de ses adeptes l'achète à un prix élevé sur les marchés au lieu de le frapper en utilisant leur ETH comme garantie.
+
+Ces deux facteurs ont convergé au cours des derniers mois, conduisant à une **prime soutenue** pour le LUSD, qui se négocie souvent dans une fourchette de 1,02 à 1,04 dollar. Je ne m'étendrai pas trop sur ce sujet ici, car il a déjà été abordé sur le blog de Liquity : **[The Premium of Resiliency](https://www.liquity.org/blog/the-premium-of-resiliency)**. Cependant, discutons de **l'impact de la prime sur les utilisateurs de Liquity** car il a des conséquences réelles.
+
+
+
+### Impact de la prime LUSD
+
+L'impact d'une prime de prix sur les emprunteurs **peut être positif ou négatif**, en fonction de leur timing et de leurs actions. Les emprunteurs qui s'inquiètent de la volatilité du prix du LUSD peuvent utiliser les Chicken Bonds, ou b.protocol pour préserver une exposition pure au LUSD tout en obtenant des rendements.
+
+{{< notice info >}}
+Il convient de noter que les emprunteurs qui préservent une exposition à 100% au LUSD ne subissent aucune conséquence des fluctuations de son cours puisqu'ils n'ont pas besoin de le racheter lors du remboursement de leur dette.
+{{< /notice >}}
+
+Cependant, le fait que le LUSD fluctue peut également profiter aux utilisateurs avertis qui peuvent arbitrer les écarts :
+
+1. **Marge bénéficiaire** | Plus le LUSD dépasse 1 $, plus il est rentable d'effectuer une opération d'arbitrage sur son peg : à 1,01 $, le short du peg rapporte 0,01 $ par LUSD en cas de succès. À 1,09 $, les profits passent à 0,09 $ par LUSD.
+2. Plus le LUSD s'éloigne de 1,00 $ et plus il se rapproche de 1,10 $, plus il est **probable** que les arbitragistes du peg l'emportent sur les acheteurs de LUSD et poussent ainsi le prix à la baisse.
+
+Ainsi, l'arbitrage des LUSD est un jeu d'équilibre entre la maximisation des profits (1) et leurs chances de réalisation (2). En d'autres termes, au-delà d'un certain niveau de prix, l'opération d'arbitrage devient **trop rentable et trop susceptible de se réaliser pour que les arbitragistes l'ignorent**. Cela a contribué à ce que la paire LUSD reste dans la partie inférieure de son ancrage souple, entre 1,00 et 1,05 dollar, même pendant les phases de pic de la demande.
+
+Pour les utilisateurs qui ne surveillent pas la situation en permanence, cependant, cela peut se traduire par une perte de capital - par exemple, si l'on emprunte des LUSD alors que le prix est à 1,02 $, qu'on les investit dans autre chose, puis que quelques semaines plus tard, on essaie de racheter des LUSD pour rembourser sa dette, pour se retrouver avec un prix à 1,04 $.
+
+Ainsi, les fluctuations du LUSD dans la fourchette 1,00-1,10 ajoutent **une couche supplémentaire d'incertitude pour les emprunteurs**. L'augmentation de la liquidité du LUSD et la stabilisation de sa parité contribueront à restaurer la confiance des emprunteurs et à rationaliser les interactions avec le protocole.
+
+## Ca, c'était avant les Chicken Bonds
+
+
+
+Pour résoudre le problème de liquidité du LUSD, l'équipe Liquity a travaillé sur un **nouveau protocole**, d'abord testé avec le LUSD : les Chicken Bonds. En cas de succès, le modèle sera étendu à une instance de LQTY. Dans une dernière étape, le modèle généralisé pourrait être rendu prêt à être exploité par n'importe quelle DAO avec la Chicken Bond Factory.
+
+Mardi dernier, [les LUSD Chicken Bonds ont été mis en ligne](https://www.chickenbonds.org/blog-posts/chicken-bonds-is-live), offrant **une nouvelle proposition fusionnant les éléments de DeFi et NFTs fournissant des opportunités de rendement optimisées aux détenteurs de LUSD**. Elle alimentera également la croissance de la liquidité du LUSD sur le pool de la courbe LUSD/3CRV.
+
+Il y a deux protagonistes qui interagissent avec les Chicken Bonds :
+
+1. **Les déposants (utilisateurs)** bénéficient d'une expérience gamifiée offrant **des rendements amplifiés et auto-composés sur les LUSD**.
+2. **Le déployeur (protocole)** met en place un **mécanisme permettant la croissance soutenue et la capture de la liquidité sur son token** tout en engageant activement ses détenteurs.[^deployer].
+
+### Alors, que sont exactement les Chicken Bonds ?
+
+En conséquence, les Chicken Bonds remplissent la fonction de différents types de produits selon la perspective. **Pour les utilisateurs, les Chicken Bonds agissent comme un optimiseur de rendement amélioré**. Les bonds leur permettent de maximiser leurs rendements sur les LUSD en optimisant la fréquence de composition et en amplifiant les rendements existants. De leur point de vue, ils pourraient comparer l'utilité des Chicken Bonds à celle déjà fournie par un protocole comme Yearn, sans l'élément NFT. Il maximise et rationalise les activités de production de rendement sur LUSD.
+
+Du point de vue du déployeur (protocole), les Chicken Bonds sont une **solution rentable pour développer la liquidité disponible sur leur token**. Des solutions alternatives pour atteindre un objectif similaire incluraient l'extraction de liquidité, une solution de capture de POL comme Olympus Pro, l'acquisition de jetons de conducteur de liquidité(CRV, BAL, VELO, etc.), ou les bribes des votes des propriétaires de jetons conducteurs de liquidité[^liquidity-driver-tokens].
+
+
+
+Si chaque solution existante présente ses propres inconvénients, elles ont toutes un profil similaire : elles **nécessitent des dépenses récurrentes pour accroître et maintenir la liquidité**. Seule l'acquisition de jetons de liquidité peut fournir des incitations continues pour soutenir la liquidité, mais c'est aussi l'approche la plus coûteuse car elle nécessite des investissements importants de la part des projets.
+
+En revanche, les Chicken Bonds n'ont aucun coût car ils exploitent les sources de rendement existantes : **Tout ce qu'il faut pour capturer et accroître la liquidité, c'est du temps**. Ils exploitent une nouvelle forme d'obligations **sans échéance avec protection du capital**, offrant des rendements amplifiés et de fortes protections pour les déposants.
+
+Pour expliquer le modèle des LUSD Chicken Bonds, passons au point de vue du déposant en examinant le cycle de vie d'une obligation et son impact sur le NFT associé.
+
+### L'histoire d'un bond à travers son NFT
+
+
+
+ Your browser does not support video. View GIF
+
+
+**Pour créer un bond, un utilisateur dépose des LUSD. En échange, il reçoit un 🥚 Œuf NFT représentant son dépôt**. Le NFT contient la créance sur le LUSD cautionné sous-jacent et peut être vendu ou transféré. A partir de là, l'utilisateur dispose de deux options mutuellement exclusives qui transformeront également son NFT :
+- 🐔 Chicken In
+- ou 🐣 Chicken Out.
+
+Les NFTs d'œuf ont quatre attributs : une carte, un œuf et un arrière-plan déterminés aléatoirement, ainsi qu'une taille d'œuf adaptée au montant de LUSD déposé.
+
+Lorsqu'un bond est créé, il commence à accumuler progressivement des bLUSD. Au fur et à mesure qu'il arrive à maturité, il devient rentable pour les utilisateurs de le réclamer, en renonçant à leurs LUSD pour obtenir les bLUSD accumulés - C'est l'option " **Chicken In** " et fait évoluer le visuel du NFT en conséquence : l'Œuf se transforme en 🐔 **poulet fier**.
+
+L'utilisateur peut récupérer l'intégralité du montant investi à tout moment du processus. Il renoncera néanmoins aux bLUSD accumulés jusqu'à présent - c'est l'option "**Chicken Out**" et elle conduit également à une évolution du NFT de l'Œuf vers un 🐣 **poulet effrayé**.
+
+
+
+ Your browser does not support video. View GIF
+
+
+#### Approfondir les liens les bonds et le NFT
+
+Pendant le Chicken In, le NFT gagne des attributs supplémentaires obtenus au hasard (peigne, queue, bec et ailes) et des attributs spéciaux en fonction des activités du portefeuille. Les portefeuilles engagés dans les activités suivantes peuvent obtenir des attributs spéciaux ou des chances accrues d'obtenir des attributs plus rares :
+
+1. Posséder un Trove Liquity avec une dette en cours,
+2. Posséder LQTY, ou le jalonner soit directement, soit avec Pickle,
+3. Voter pour la jauge LUSD/3CRV (détenteurs de veCRV). [^ve-CRV-NFT-attribut-bribe]
+
+La collection NFT exploite également des mécanismes intéressants, comme l'**affinité** pour générer les poulets les plus cool possibles ; lisez l'article dédié sur le blog de Liquity pour plus d'informations sur le sujet :
+
+
+
+Tous les NFTs font partie de la même collection et peuvent être échangés sur les sites habituels, tels que [LooksRare](https://looksrare.org/collections/0xa8384862219188a8f03c144953Cf21fc124029Ee/) ou [X2Y2](https://x2y2.io/collection/lusd-chicken-bonds-nfts/items). Chicken Bonds est une collection de NFT générative autant qu'un protocole DeFi : les deux sont intrinsèquement liés. L'art et le script de génération initial ont été réalisés par l'artiste NFT [Luchador](https://luchadores.io), créateur du jeu éponyme.
+
+{{< notice info >}}
+Pour une explication du prix de tous les attributs et modificateurs pris en compte, lisez l'article consacré aux NFT sur le blog de Chicken Bonds :
+**[NFT x DeFi: Deep dive into LUSD Chicken Bonds' Dynamic NFT](https://www.chickenbonds.org/blog-posts/nft-x-defi-deep-dive-into-lusd-chicken-bonds-dynamic-nft)**
+{{< /notice >}}
+
+### boostedLUSD (bLUSD) : un LUSD auto-composé à rendement amélioré.
+
+En créant un bond et éventuellement Chicken In, les déposants peuvent accumuler des bLUSD, mais vous pouvez vous demander à ce stade pourquoi ce jeton peut être souhaitable : plongeons dans le côté DeFi des Chicken Bonds !
+
+
+
+En résumé, **posséder bLUSD donne accès à des rendements auto-composés et amplifiés sur LUSD**. bLUSD est un token ERC-20 standard adossé à LUSD grâce au mécanisme de rédemption, avec un prix plancher croissant grâce à l'amplification du rendement.
+
+
+
+#### Source de rendement primaire
+
+En tant que protocole, les Chicken Bonds collectent les LUSD et les déploient dans deux sources de rendement potentielles :
+
+1. **Liquity Stability Pool**, où les LUSD peuvent être déposés pour gagner des LQTY ainsi que des primes de liquidation ETH variables.
+2. **La pool Curve LUSD/3CRV**, où les LUSD peuvent être fournis contre des USDC/USDT/DAI pour gagner des frais de transaction ainsi que des jetons CRV.
+
+{{< notice info >}}
+Si vous n'êtes pas encore familier avec le fonctionnement de Liquity, vous pouvez vous mettre à jour avec cet article dédié :
+**[⚖️ Liquity : un service d'emprunt imparable, efficace et innovant](https://tokenbrice.xyz/fr/liquity-protocol/)**.
+{{< /notice >}}
+
+#### Composition des rendements automatique
+
+Au lieu de se brancher directement sur les sources de rendement, des solutions middleware sont utilisées pour offrir divers avantages.
+
+1. Les dépôts dans le Liquity Stability Pool sont gérés à l'aide du **[B.Protocol vault](https://bprotocol.org/)**, qui gère la récolte et la composition fréquentes des ETH et LQTY obtenus en LUSD.
+2. Pour la pool Curve, le **[vault Yearn](https://yearn.finance/#/vault/0x5fA5B62c8AF877CB37031e0a3B2f34A78e3C56A6)** est utilisé pour optimiser les rendements obtenus en exploitant Convex.
+
+Jusqu'ici, tout va bien : des solutions directes à des problèmes simples. Pourtant, l'amplification du rendement, l'une des plus grandes prouesses des Chicken Bonds, est un peu plus délicate.
+
+#### Amplification du rendement
+
+Pour comprendre comment il peut y parvenir, nous devons commencer à éplucher l'oignon qui est l'outil de comptabilité interne du protocole : les Buckets ("seaux)".
+
+Il y a trois buckets permettant aux Chicken bonds de garantir les trois caractéristiques principales du protocole : l'option de Chicken Out (Pending), l'amplification du rendement (Reserve), et la croissance de la liquidité (Permanent).
+
+
+
+Le **Pending Bucket** a une tâche simple : il doit être en mesure de rembourser intégralement les investisseurs s'ils devaient se dégonfler (Chicken Out). Pour s'assurer que c'est toujours possible, le Pending Bucket exploite une source de rendement sans perte impermanente : le Stability Pool.
+
+Lorsque les utilisateurs Chicken In un bond, les soldes LUSD correspondants sont répartis entre le Reserve Bucket et le Permanent Bucket.
+
+**Le Reserve Bucket soutient le bLUSD**. Avec les rédemptions, les détenteurs de bLUSD peuvent brûler leurs jetons pour obtenir une part proportionnelle des LUSD contenus dans le Réserve Bucket - garantissant un prix plancher pour les bLUSD. Les fonds en réserve produisent également un rendement en exploitant le pool de stabilité.
+
+**Enfin, le Permanent Bucket accroît la liquidité des LUSD**. Grâce à sa fonction de shifting ("déplacement"), qui peut être déclenchée par n'importe qui lorsque le LUSD est au dessus du peg, le Permanent Bucket peut retirer ses liquidités du vault b.protocol pour alimenter le pool Curve LUSD/3CRV à la place. Cela permet de réduire le prix du LUSD et de sécuriser un point d'entrée favorable dans le pool puisque le dépôt la rééquilibre.
+
+Le **rendement produit par les buckets Pending et Permanent est redirigé vers le Reserve Bucket**, ce qui crée l'amplification du rendement et la hausse du prix plancher du bLUSD.
+
+
+
+### Période d'amorçage et prochaines étapes
+
+Les Chicken Bonds LUSD sont en ligne depuis le mardi 4 octobre 2022. Pendant les deux premières semaines du système, jusqu'au 19 octobre, il est toujours dans la **période d'amorçage** : Les Chicken Ins ne sont pas possibles, ce qui signifie que l'offre de bLUSD est toujours égale à 0. Cela signifie que tous les LUSD sont dans le Pending Bucket, sauf le rendement déjà produit qui est redirigé vers le Reserve Bucket.
+
+Une fois la période d'amorçage terminée, l'option Chicken In sera disponible, permettant aux déposants de commencer à accéder aux bLUSD. Pour faciliter l'entrée et la sortie du bLUSD, une **pool bLUSD pool sera incitée sur Curve Finance, en utilisant une commission de 3% payée lors du Chicken In**. Cela permettra à la liquidité de se développer progressivement à mesure que le premier lot de bonds atteindra son seuil de rentabilité (~19 octobre) et le moment optimal de rebond (~4 novembre).
+
+La section suivante discute de la structure de liquidité choisie et de son impact.
+
+## Impact des Chicken Bonds sur le prix et la liquidité du LUSD
+
+Si vous m'avez lu jusqu'à ce point, vous êtes maintenant au courant de la prime de prix du LUSD et du modèle introduit par les Chicken Bonds. Relions donc les points et examinons comment les Chicken Bonds du LUSD **contribueront à la liquidité globale du LUSD et aideront à contenir sa prime**.
+
+Les Chicken Bonds ont deux impacts sur la liquidité du LUSD :
+
+1. Avec la croissance du Permanent Bucket, la liquidité fournie au LUSD/3CRV augmentera tant que le prix du LUSD aura une prime.
+2. La structure de la pool de liquidité a été choisie pour bLUSD afin d'aider à accroître davantage la liquidité sur le LUSD/3CRV.
+
+{{< notice note >}}
+Dans un court laps de temps, la libération des LUSD Chicken Bonds a entraîné une augmentation de la demande de LUSD et une hausse de son prix. Cependant, les LUSD déposés dans les Chicken Bonds s'avèrent bénéfiques pour la liquidité du LUSD à long terme, comme nous le soulignons dans cette section.
+{{< /notice >}}
+
+### Un moteur pour capturer la liquidité progressivement
+
+Au fur et à mesure que les dépôts dans les Chicken Bonds du LUSD s'accumulent, l'impact potentiel sur le peg du LUSD augmente. En effet, lorsqu'un utilisateur fait un Chicken In, les LUSD sous-jacents sont répartis entre la Réserve et le Permanent Bucket.
+
+Par défaut, les trois buckets produisent du rendement en déployant les LUSD dans le vault de b.protocol. Cependant, le Permanent Bucket dispose également d'une **fonction de déplacement** qui peut être déclenchée par n'importe qui tant que les LUSD s'échangent à un prix élevé. Elle déplace les LUSD du Permanent Bucket pour **fournir de la liquidité sur la Curve** (fourniture d'un seul actif), contribuant ainsi à rééquilibrer progressivement le pool tout en augmentant sa liquidité.
+
+La part du montant total des LUSD déposés dans les Chicken Bonds allouée au Permanent Bucket est difficile à prévoir, car elle dépend du comportement des utilisateurs. Voici quelques calculs rapides en utilisant une estimation prudente de 10% des actifs totaux dans le Permanent Bucket, avec les 5M LUSD actuellement disponibles dans le LUSD/3CRV pour estimer l'impact des Chicken Bonds :
+
+Chicken Bonds TVL|Liquidité directement ajoutée|Liquidité ajoutée (%)
+:--|:--|:--
+7M (actuel)|700K LUSD|14.00%
+10M|1M LUSD|20.00%
+20M|2M LUSD|40.00%
+50M|5M LUSD|100.00%
+
+Le pourcentage de liquidité ajoutée pourrait être un bon indicateur approximatif de l'ampleur de la réduction de la prime de prix. Gardez à l'esprit qu'il reste approximatif, car il ne prend en compte que la pool principale LUSD/3CRV.
+
+Néanmoins, avec 10 millions de dollars de TVL dans les Chicken Bonds à la fin du premier cycle, l'impact pourrait déjà être palpable avec une augmentation de \~20% du montant LUSD disponible dans le pool Curve.
+
+{{< notice note >}}
+La fonction de shifting est désactivée pendant les 45 premiers jours du système, c'est à dire jusqu'au 19 Novembre. Passé cette date, n'importe qui pourra déplacer la liquidité du Permanent Bucket de Curve <-> B.Protocol si **[les conditions](https://liquity.gitbook.io/chicken-bonds/faq/lusd-peg-stability#_vowf7444yzdt)** sont remplies.
+{{< /notice >}}
+
+### Augmentation de la liquidité du bLUSD main dans la main avec le LUSD
+
+Il existe un autre effet bénéfique indirect des Chicken Bonds, découlant de la structure choisie pour la liquidité bLUSD, encouragée par le protocole.
+
+En effet, un **3% de frais de Chicken In est collecté et redirigé pour inciter les fournisseurs de liquidité de la pool bLUSD/LUSD-3CRV**. Cette pool est une méta pool composé de bLUSD appariés avec le jeton LP du LUSD/3CRV existant. A l'équilibre parfait, l'exposition des actifs serait : 50% bLUSD / 25% LUSD + 25% 3pool (8,33% USDC / 8,33% USDT / 8,33% DAI).[^blusd-lusd3pool]
+
+Cette structure de liquidité garantit que **50% des dépôts effectués dans le pool LP bLUSD contribuent directement à accroître la liquidité du principal LUSD/3CRV**. En outre, parce que ce pool a son propre budget d'incitation (frais Chicken In), il fournira un rendement LUSD attractif aux stakers en plus du rendement de base généré par les swaps.
+
+Au fur et à mesure que les Chicken Bonds arrivent à maturité, la pool bLUSD/LUSD-3CRV pourrait obtenir sa propre jauge, garantissant des récompenses CRV (et potentiellement CVX) supplémentaires en plus de celles existantes.
+
+Ce modèle a été préféré à une pool bLUSD/LUSD qui aurait nécessité une quantité importante de LUSD sans contribuer à la liquidité du LUSD par rapport aux autres monnaies stables. Le principal inconvénient du modèle choisi est qu'il rend les interactions de dépôt et de retrait plus complexes pour les fournisseurs de liquidités. Cependant, cette préoccupation sera levée avec **zaps permettant l'approvisionnement et le retrait de LUSD et bLUSD directement**.
+
+En fonction de l'équilibre du pool bLUSD/LUSD-3CRV, son approvisionnement unilatéral en LUSD ou bLUSD peut entraîner une prime :
+- S'il y a trop de LUSD-3CRV dans le pool, fournir du bLUSD rééquilibre le pool et entraîne une prime.
+- S'il y a trop de bLUSD dans le pool, l'apport de LUSD entraînera une **double prime** car les pools bLUSD/LUSD-3CRV et LUSD/3CRV sont rééquilibrées dans le processus.
+
+Pour en savoir plus sur le bLUSD/LUSD-3CRV, consultez l'article dédié sur le blog Chicken Bonds [**Game of Chickens!** The end of the bootstrap period and what it means for bLUSD](https://www.chickenbonds.org/blog-posts/game-of-chickens-the-end-of-the-bootstrap-period-and-what-it-means-for-blusd).
+
+## Solutions supplémentaires pour accroître la liquidité du LUSD
+
+Les Chicken Bonds sont les principales initiatives en cours visant à accroître la liquidité du LUSD, mais d'autres projets et solutions sont également à l'étude. En voici un aperçu.
+
+
+### Position des veCRV et bribes (pots-de-vin)
+
+La trésorerie de Liquity est entrée dans la guerre du CRV il y a plusieurs mois, en acquérant et en verrouillant des jetons CRV pour soutenir la jauge bLUSD/LUSD-3CRV. Pour maximiser l'impact des LUSD Chicken Bonds, **une campagne de bribes** est également synchronisée avec la sortie pour augmenter l'APY CRV des déposants de la pool LUSD/3CRV.
+
+En utilisant Warden Quest, des jetons LQTY sont attribués aux votants veCRV et vlCVX sur la jauge LUSD/3CRV. La campagne de bribe a permis d'obtenir **5M de votes veCRV (\~1% du total des votes)**, ce qui a conduit à une forte augmentation de l'APY, l'amenant à la parité avec un dépôt de base dans la Stability Pool.
+
+
+{{< notice info >}}
+À la trâine par rapport aux CRV Wars ? Rattrappez votre retard avec cet article :
+**[⚔ CRV wars : la course pour accumuler la capacité d'influencer le protocole Curve Finance](https://tokenbrice.xyz/fr/crv-wars/)**.
+{{< /notice >}}
+
+### Le LUCY de PowerPool : Stability Pool et apport de liquidité
+
+L'équipe de PowerPool a travaillé sur un **nouveau type de pool Balancer** adaptée aux LUSD, et il est maintenant sur le point d'être publié : la pool LUSD-a-bb-USD, également connu sous le doux nom de **LUCY**.
+
+Comme les Chicken Bonds, ce pool **exploite le b.protocol pour offrir une opportunité de gain auto-composé sur le LUSD**. En effet, la principale innovation de cette pool est d'impliquer des actifs porteurs d'intérêts et de constamment **rééquilibrer entre les activités de rendement et de fourniture de liquidités**. Le pool est composé de deux jetons wrappers :
+
+#### 1/ Balancer Boosted Aave USD
+
+Cette pool est essentiellement l'équivalent **de Balancer au 3pool de Curve**, la pool principale de stablecoin de l'échange décentralisé. La principale différence ici est que la pool implique des **wrapper productif** de chaque stablecoin. En fonction des besoins en liquidité de la pool, chaque stablecoin est rééquilibré entre l'apport de liquidité et le rendement grâce à Aave :
+
+
+
+#### 2/ LUSD + b.protocol
+
+Les jetons bb-a-USD sont appariés au LUSD, qui **rééquilibre également entre le rendement (Stability Pool avec b.protocol) et l'apport de liquidité** en fonction des besoins.
+
+Ainsi, la pool LUCY devrait être intéressante pour accroître la liquidité disponible de LUSD, car elle pourrait fournir une option de cumul de rendements pour les fournisseurs de liquidité, gagnant :
+
+1. Les **frais de swap**, perçus sur les échanges impliquant les jetons de la pool.
+2. Le **rendement de base** de chaque jeton du pool (rendement d'Aave pour USDC/USDT/DAI, rendement de la Stability Pool pour LUSD).
+3. [Si une jauge BAL est obtenue] le **un rendement additionnel en BAL**, qui peut être encore augmenté avec des votes de jauge et des campagnes de bribes.
+
+
+Cette nouvelle pool marquera l'arrivée du LUSD sur Balancer, diversifiant davantage ses sources de liquidité, puisque les principaux lieux d'échange du LUSD sont actuellement Curve, Uniswap et Velodrome sur Optimism.
+
+### Intégration du LUSD dans d'autres protocoles de prêt
+
+Au cours des derniers mois, le LUSD a été de plus en plus intégré à divers protocoles DeFi, offrant **des options supplémentaires aux détenteurs de LUSD et aux arbitragistes**.
+
+L'[ajout du LUSD comme actif empruntable sur Aave](https://app.aave.com/reserve-overview/?underlyingAsset=0x5f98805a4e8be255a32880fdec7f6728c6568ba0&marketName=proto_mainnet) a marqué la première fois que le stablecoin pouvait être emprunté en utilisant une garantie autre que l'ETH pour sécuriser la position. Au fur et à mesure que la liquidité disponible sur le marché augmente, elle ouvre l'arbitrage du LUSD aux détenteurs de non-ETH.
+
+
+
+Pendant ce temps, **LUSD a également été ajouté comme garantie sur deux protocoles de prêt basés sur €** : [Angle Money](https://angle.money/) et [Mimo](https://mimo.capital/). Ces deux protocoles permettent aux détenteurs de LUSD de prendre une position courte sur l'euro, en utilisant leurs LUSD comme collatéral.
+
+Enfin, [GearBox](https://gearbox.fi/) s'apprête à sortir sa V2 sous peu, permettant aux utilisateurs d'obtenir un effet de levier selon un ensemble de règles prédéterminées et appliquées par des smart contracts. Parmi les options disponibles lors de la sortie de la V2, **les fournisseurs de liquidités du LUSD/3CRV seront en mesure de bénéficier d'un effet de levier sur leur position**.
+
+L'expansion du marché des prêts de LUSD au-delà de Liquity augmente l'utilité du stablecoin tout en permettant à davantage de types d'utilisateurs différents d'arbitrer les fluctuations de son prix. Associé aux efforts en cours pour accroître la liquidité du LUSD sur le DEX, cela contribuera à stabiliser son prix.
+
+### LUSD sur Optimism : Velodrome et Stargate
+
+LUSD a également **une forte présence sur Optimism**, grâce à Liquity qui est l'un des protocoles impliqués dans la course du DEX Velodrome. Avec une position respectable sur Velodrome, Liquity a été capable de faire croître plusieurs pools liés au LUSD jusqu'à des TVL importantes. De plus, les pools sur Velodrome ont tendance à être plus équilibrés que celles du réseau principal :
+
+
+
+Cependant, faire le pont entre LUSD et Optimisme est actuellement un peu un voyage à sens unique. Le bridge entre LUSD et Optimism est facile et ne prend que 5-10 minutes en utilisant le bridge officiel. Cependant, le retour sur le réseau principal prend 7 jours avec le bridge officiel, et aucune option alternative avec une liquidité décente n'est encore disponible.
+
+La situation est sur le point de changer, permettant à la forte liquidité de LUSD sur Optimism d'avoir un impact positif sur la situation du mainnet : Stargate, le protocole de transport de liquidité omnichain, a récemment voté pour **ajouter le support de LUSD** ([SIP#16](https://snapshot.org/#/stgdao.eth/proposal/0xe6fef4aa9c8e9d162f694ab764b11c06918b9f199aafe43e0d85b12d8271011c)), ce qui permettra un bridging rapide de et vers Optimism une fois implémenté. Si Stargate peut fournir une solution fiable pour le bridge rapide des LUSD d'Optimism vers le mainnet, cela pourrait avoir un impact positif sur l'équilibre des pools de liquidité LUSD du mainnet.
+
+## En savoir plus sur les Chicken Bonds
+
+J'espère que cet article a piqué votre curiosité sur les Chicken Bonds et la LUSD. Si c'est le cas, de nombreuses ressources sont disponibles pour vous permettre d'explorer davantage le modèle ; voici quelques recommandations :
+
+1. Le [site Web des Chicken Bonds](https://www.chickenbonds.org/) est un excellent point de départ - vous y trouverez [la liste des front ends](https://www.chickenbonds.org/lusd-bonds#front-ends) que vous pouvez utiliser pour interagir avec les Chicken Bonds de LUSD.
+2. Pour aller plus loin, n'hésitez pas à [consulter le blog](https://www.chickenbonds.org/blog) disponible sur le site Web : il contient plusieurs articles qui approfondissent les dimensions critiques des Chicken Bonds.
+3. Enfin, la ressource la plus complète sur les Chicken Bonds est [la documentation utilisateur](https://liquity.gitbook.io/chicken-bonds/faq/table-of-content), alors n'hésitez pas à la consulter si certaines de vos questions restent sans réponse.
+
+{{< notice note >}}
+Pour approfondir avec un format vidéo plus interactif, n'hésitez pas à rattraper le meetup DeFi France consacré aux Chicken Bonds, disponible en replay :
+**[🎥 DFF Toulouse #1 - Les Chicken Bonds nouvelle brique DeFi/NFT avec TokenBrice](https://www.youtube.com/watch?v=TXtXpfyHbVU)**
+{{< /notice >}}
+
+Pour suivre ce qui se passe avec les Chicken Bonds, vous trouverez des statistiques dans l'interface utilisateur du front-end que vous utilisez. Par ailleurs, un membre de la communauté a créé un outil d'analyse [Chicken Bonds Dune Analytics](https://dune.com/nemoventures/chicken-bonds) qui vous sera utile. Pour de plus amples discussions, vous pouvez [rejoindre le Discord Liquity](https://discord.gg/WQMEcgHBpc), où une toute nouvelle section est consacrée aux Chicken Bonds.
+
+[^deployer]: Pour l'instant, Liquity est le seul "déployeur". Ce concept gagnera en pertinence avec la version généralisée des Chicken Bonds, où d'autres protocoles peuvent exploiter le modèle au profit de leurs jetons.
+[^liquidity-driver-tokens]: Les jetons conducteur de liquidité permettent des incitations directes à des paires de liquidité ou de prêt sélectionnés, généralement par le biais d'un système de verrouillage. Ils permettent aux projets qui les verrouillent de diriger des incitations vers les pools de leur choix pour attirer des apporteurs de liquidité.
+[^ve-CRV-NFT-attribut-bribe]: Pour autant que je sache, c'est la première fois que ce type d'influence a été tenté sur les électeurs de Curve (ou tout autre détenteur de jetons DeFi) : Les bribes basés sur les attributs NFT ; nous voilà !
+[^blusd-lusd3pool]: La pool est [déjà en ligne](https://curve.fi/factory-crypto/134) mais ne peut être alimentée avant la fin de la période d'amorçage.
diff --git a/content/post/2022/lusd-chicken-bonds.md b/content/post/2022/lusd-chicken-bonds.md
new file mode 100644
index 00000000..78546cba
--- /dev/null
+++ b/content/post/2022/lusd-chicken-bonds.md
@@ -0,0 +1,311 @@
+---
+title: "Chicken Bonds: an NFT-powered hatching factory to beat DeFi’s liquidity chicken and egg problem"
+description: "How can a new experiment pioneering dynamic NFTs evolving based on the user's interactions help Liquity grow LUSD's liquidity and reduce the stablecoin premium?"
+date: '2022-10-17T01:13:50.191Z'
+categories: [Stablecoin, Yield]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Liquity, LUSD, Chicken Bonds, NFT, NFTfi]
+toc: true
+tocNum: true
+url: lusd-chicken-bonds
+image: /img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.png
+difficulty: "beginner"
+---
+
+Liquity recently released the LUSD Chicken Bonds, a **game-theory experiment merging DeFi and NFT elements to grow LUSD’s liquidity and reduce its price premium**.
+
+Although Chicken Bonds are building on top of existing protocols, such as Yearn, b.protocol, or Curve, it also instigates novel mechanisms, the two leading ones being:
+
+1. **No maturity principal-protected bonding**: Chicken Bonds use a new type of bonding offering strong guarantees to the depositor, including the possibility to recoup the entire initially supplied capital at no cost (Chicken Out).
+2. **Participate to Earn dynamic NFT**: While interacting with the LUSD Chicken Bonds protocol, users obtain a **dynamic NFT** that evolves depending on their choices and previous onchain interactions.
+
+Chicken Bonds tackle one of the core challenges of DeFi, the sustainable growth of liquidity pools, first for the LUSD token only. Still, eventually, the model will be made available in a generalizable permissionless version for any protocol in need of liquidity to use.
+
+This post explores how [LUSD Chicken Bonds](https://chickenbonds.org) work and what they achieve. However, before answering these questions, additional context is needed on LUSD: let’s get started!
+
+## The context: LUSD price premium
+
+One of the most misunderstood dimensions of Liquity’s model is **LUSD pegging mechanisms**. Indeed, while LUSD has strong guarantees (hard peg) than LUSD>$1.00 (redemption) and <$1.10 (110% minimal collateralization ratio), in between the equilibrium is more based on a **game of incentives (soft peg)**.
+
+In the wake of [OFAC’s crackdown on Tornado Cash](https://blog.chainalysis.com/reports/tornado-cash-sanctions-challenges/) back in August, there has been an **increased demand** for censorship-resistant stablecoins. Yet, the **appetite for leverage is low** because of the deteriorated market conditions. Thus, will the demand for LUSD is high, a significant share of its adopters purchase it at a premium on the markets instead of minting it by leveraging their ETH.
+
+Both factors have converged over the last few months, leading to a **sustained price premium** for LUSD, often trading in the $1.02 to $1.04 range. I won’t expand too deeply into this topic here, as it has already been covered on Liquity’s blog: **[The Premium of Resiliency](https://www.liquity.org/blog/the-premium-of-resiliency)**. However, let’s discuss **the impact of the premium on Liquity users** since it has real consequences.
+
+
+
+### Impact of the LUSD premium
+
+The impact of a price premium on borrowers **can be positive or negative**, depending on their timing and actions. Borrowers worried about LUSD price volatility can use Chicken Bonds, or b.protocol to preserve a pure LUSD exposure while earning yields.
+
+{{< notice note >}}
+It is worth noting that borrowers who preserve a 100% LUSD exposure do not suffer any consequence from its price fluctuations since they do not need to buy it back when repaying their debt.
+{{< /notice >}}
+
+However, having LUSD fluctuates can also benefit informed users that can arbitrage the discrepancies:
+
+1. **Profit margin** | The more LUSD goes over $1, the more profitable it is to take an arbitrage trade on its peg: at $1.01, shorting the peg returns $0.01 per LUSD if successful. At $1.09, the profits jump to $0.09 per LUSD.
+2. **Likelihood of profits being realized** | The farther away LUSD strands from $1.00, and the closer it gets to $1.10, the more likely it is for peg arbitrageurs to outweigh LUSD buyers and thus push the price downward.
+
+Thus arbitraging LUSD is a game of balance between maximizing profits (1) and their odds of realizing (2). To put it simply: past a certain price point, the arbitrage trade becomes **too profitable and too likely to realize for arbitrageurs to ignore**. It has helped to ensure that LUSD stayed in the lower bond of its soft peg, the $1.00-$1.05 range, even during phases of peak demand.
+
+For users who do not monitor the situation continuously, though, it can translate into a loss of capital — for instance, if one borrows LUSD while the price is at $1.02, invest it into something else, and then weeks later try to buy back LUSD to repay its debt, only to find the price at $1.04.
+
+Thus, LUSD’s fluctuations in the $1.00-1.10 range add **an additional layer of uncertainty for borrowers**. Growing the liquidity of LUSD and stabilizing its peg will help restore the borrowers’ confidence and streamline interactions with the protocol.
+
+## Enter LUSD Chicken Bonds
+
+
+
+To solve LUSD’s liquidity challenge, the Liquity team worked on a **brand new protocol**, first tried out with LUSD: Chicken Bonds. If successful, the model will be generalized with an LQTY instance. As a final step, the generalized model could be made ready to be harnessed by any DAO with the Chicken Bond Factory.
+
+Last Tuesday, [the LUSD Chicken Bonds were released](https://www.chickenbonds.org/blog-posts/chicken-bonds-is-live), offering **a novel proposition merging DeFi and NFTs' elements providing optimized yield-producing opportunities to LUSD holders**. It will also fuel the growth of LUSD’s liquidity on the LUSD/3CRV Curve pool.
+
+There are two protagonists interacting with Chicken Bonds:
+
+1. **The depositors (users)** enjoy a gamified experience delivering **amplified and auto-compounded yields on LUSD**.
+2. **The deployer (protocol)** sets up an **engine enabling the sustained growth and capture of liquidity on its token** while actively engaging its holders.[^deployer]
+
+### So, what exactly are Chicken Bonds?
+
+As a consequence, Chicken Bonds fulfill the function of different types of products depending on the perspective. **For users, Chicken Bonds act like an NFT-enhanced yield optimizer**. Bonding enables them to maximize their returns on LUSD by optimizing the compounding frequency and amplifying the existing yields. From their perspective, they could compare the utility of Chicken Bonds to the one already delivered by a protocol like Yearn, lacking the NFT element. It maximizes and streamlines yield-producing activities on LUSD.
+
+From the deployer (protocol) perspective, Chicken Bonds are a **cost-effective solution to develop the available liquidity on their token**. Alternative solutions to achieve a similar goal would include liquidity mining, POL-capture solution like Olympus Pro, acquiring liquidity-driver tokens (CRV, BAL, VELO, etc.)[^liquidity-driver-tokens], or bribing liquidity-driver token owner votes.
+
+
+
+While each existing solution has its own tradeoffs, they all share a similar profile: they **require recurring expenses to grow and sustain liquidity**. Only the acquisition of liquidity-driver tokens can provide continuous incentives to support liquidity, but it’s also the most costly approach as it requires significant investments from projects.
+
+On the other hand, Chicken Bonds have no cost as they harness existing yield sources: **all it needs to capture and grow liquidity is time**. They harness a novel form of **no-maturity principal-protected bonding**, offering amplified yields and strong protections for the depositors.
+
+To explain the model of LUSD Chicken Bonds, let’s jump to the depositor perspective by looking at the lifecycle of a bond and its impact on the associated NFT.
+
+### The story of a bond through its NFT
+
+
+
+ Your browser does not support video. View GIF
+
+
+**To create a bond, a user deposits LUSD. In exchange, he receives an 🥚 Egg NFT representing his deposit**. The NFT contains the claim on the underlying bonded LUSD and can be sold or transferred. From thereon, the user has two mutually exclusive options that will transform his NFT too:
+- 🐔 Chicken In
+- or 🐣 Chicken Out.
+
+The Egg NFTs have four attributes: a card, egg, and background colors rolled randomly, and an egg-size scaling with the deposited LUSD amount.
+
+When an egg is created, it starts progressively accruing bLUSD. As the bond matures, it becomes profitable for the users to claim it, forgoing their LUSD to obtain the bLUSD accumulated — It’s the “**Chicken In**” option and makes the visual of the NFT evolve accordingly: the Egg turns into a 🐔 **Proud Chicken**.
+
+A user can recover the full invested amount at any time during the process. Still, he will renounce the bLUSD accumulated so far — it’s the “**Chicken Out**” option and also leads to an evolution of the NFT from the Egg to a 🐣 **Scared Chick**.
+
+
+
+ Your browser does not support video. View GIF
+
+
+#### Going deeper into the Chicken Bonds NFT
+
+While Chickening In, the NFT gains additional attributes rolled at random (comb, tail, beak, and wings) and special attributes depending on the wallet onchain activities. Wallets engaged in the following activities are eligible for special attributes or boosted chances at rolling rarer ones:
+
+1. Owning a Liquity Trove with ongoing debt,
+2. Owning LQTY, or staking it either directly or with Pickle,
+3. Voting for the LUSD/3CRV gauge (veCRV holders).[^ve-CRV-NFT-attribute-bribe]
+
+The NFT collection also harnesses interesting mechanisms, such as the **affinity** to generate the coolest chickens possible; read the dedicated article on Liquity’s blog for more information on the topic:
+
+
+
+All NFTs are part of the same collection and can be traded on the usual venues, such as [LooksRare](https://looksrare.org/collections/0xa8384862219188a8f03c144953Cf21fc124029Ee/) or [X2Y2](https://x2y2.io/collection/lusd-chicken-bonds-nfts/items). Chicken Bonds is a generative NFT collection as much as a DeFi protocol: both are intrinsically tied together. The art and initial generation script were made by the NFT artist [Luchador](https://luchadores.io), creator of the eponym game.
+
+{{< notice info >}}
+For an explainer of all the attributes and modifiers taken into account, read the article dedicated to the NFTs on the Chicken Bonds blog:
+**[NFT x DeFi: Deep dive into LUSD Chicken Bonds' Dynamic NFT](https://www.chickenbonds.org/blog-posts/nft-x-defi-deep-dive-into-lusd-chicken-bonds-dynamic-nft)**
+{{< /notice >}}
+
+### boostedLUSD (bLUSD): a yield-enhanced auto-compounded LUSD
+
+By bonding and eventually Chickening In, depositors can accumulate bLUSD, but you might wonder at this point why this token can be desirable: let’s dive into the beefy DeFi side of Chicken Bonds!
+
+
+
+The short story is that **owning bLUSD provides access to auto-compounded and amplified yields on LUSD**. bLUSD is a standard ERC-20 token backed by LUSD thanks to the redemption mechanism, with a rising price floor thanks to the yield amplification.
+
+
+
+#### Base yield source
+
+As a protocol, Chicken Bonds collect LUSD and deploy them into two potential yield sources:
+
+1. **Liquity Stability Pool**, where LUSD can be deposited to earn LQTY as well as variable ETH liquidation premiums.
+2. **The Curve LUSD/3CRV**, where LUSD can be supplied against USDC/USDT/DAI to earn trading fees as well as CRV tokens.
+
+{{< notice info >}}
+If you are not familiar with how Liquity works yet, you can get up to date with this dedicated article:
+**[⚖️ Liquity: an unstoppable, efficient and innovative borrowing service](https://tokenbrice.xyz/liquity-protocol/)**
+{{< /notice >}}
+
+#### Auto compounded
+
+Instead of plugging into the yield sources directly, middleware solutions are used to provide various benefits.
+
+1. Deposits into the Liquity Stability Pool are managed using the **[B.Protocol vault](https://bprotocol.org/)**, which handles the frequent harvesting and compounding of ETH and LQTY obtained into LUSD.
+2. For the Curve Pool, the **[Yearn vault](https://yearn.finance/#/vault/0x5fA5B62c8AF877CB37031e0a3B2f34A78e3C56A6)** is used to optimize the yields obtained by harnessing Convex.
+
+So far, so good: streamlined solutions to simple problems. Yet, the yield amplification, one of the biggest feats of the Chicken Bonds, is a bit trickier.
+
+#### Yield Amplification
+
+To understand how it can achieve this, we must start peeling the onion that is the internal accounting tool of the protocol: the Buckets.
+
+There are three buckets enabling the Chicken bonds to guarantee the three core features of the protocol: the option to Chicken Out (Pending), the yield amplification (Reserve), and the growth of liquidity (Permanent).
+
+
+
+The **Pending Bucket** has a simple job: it must be able to repay investors fully if they were to Chicken Out. To ensure it’s always possible, the Pending Bucket harnesses a yield source free of impermanent loss: the Stability Pool.
+
+When users Chicken In a bond, the corresponding LUSD balances are split between the Reserve and Permanent Bucket.
+
+**The Reserve Bucket backs bLUSD**. With redemptions, bLUSD holders can burn their tokens to obtain a pro-rata share of the LUSD contained in the Reserve Bucket — securing a price floor for bLUSD. Funds in reserve are also producing a yield harnessing the Stability Pool.
+
+**Finally, the Permanent Bucket grows the liquidity of LUSD**. Thanks to its shifting function, triggerable by anyone when LUSD is overpeg, the Permanent Bucket can pull its liquidity out of the b.protocol vault to single supply the Curve LUSD/3CRV pool instead. It helps reduce the LUSD price and secures a favorable entry point in the pool since the deposit rebalances it.
+
+The **yield produced by the Pending and Permanent buckets is redirected to the Reserve Bucket**, which creates the yield amplification and rising price floor of bLUSD.
+
+
+
+### Bootstrap period & next steps
+
+LUSD Chicken Bonds have been live since Tuesday, October 4, 2022. During the first two weeks of the system, until Oct 19, it’s still in the **bootstrap period**: Chicken Ins are not possible, which means the supply of bLUSD is still 0. It means that all the LUSD are in the Pending Bucket, except the yield already produced that is being redirected to the Reserve Bucket.
+
+Once the bootstrap period is over, the Chicken In option will be available, enabling depositors to start accessing bLUSD. To facilitate getting in and out of bLUSD, a **bLUSD liquidity pool will be incentivized on Curve Finance, using a 3% fee paid while Chickening In**. It will enable the liquidity to develop progressively as the first batch of bonds reaches their break-even point (~Oct 19) and optimal rebond time (~Nov 4).
+
+The next section will discuss the chosen liquidity structure and its impact.
+
+## Chicken Bonds’ impact on LUSD’s price and liquidity
+
+If you read me up to this point, you are now in the know regarding LUSD’s price premium and the model introduced by the Chicken Bonds. Let’s connect the dots then and consider how the LUSD Chicken Bonds will **contribute to LUSD’s overall liquidity and help to contain its premium**.
+
+Chicken Bonds have two impacts on LUSD liquidity:
+
+1. With the growth of the Permanent Bucket, the liquidity supplied to the LUSD/3CRV will grow as long as the LUSD price still has a premium.
+2. The liquidity pool structure was chosen for bLUSD to help further grow liquidity on the LUSD/3CRV.
+
+{{< notice note >}}
+In a short time frame, the release of LUSD Chicken Bonds lead to more demand for LUSD and an increase in its price. However, LUSD deposited into the Chicken Bonds proves beneficial to LUSD’s liquidity in the long run, as we highlight in this section.
+{{< /notice >}}
+
+### An engine to capture liquity over time
+
+As deposits into the LUSD Chicken Bonds accrue, the potential impact on the LUSD peg grows. Indeed, when a user Chickens In, the underlying LUSD are distributed between the Reserve and the Permanent Bucket.
+
+By default, all three buckets produce yield by deploying the LUSD into the b.protocol vault. However, the Permanent Bucket also features a **shifting function** triggerable by anyone as long as LUSD trades at a premium. It shifts the LUSD of the Permanent Bucket to **provide liquidity on Curve** (single asset supply), helping to progressively rebalance the pool while also growing its liquidity.
+
+The share of the total amount of LUSD deposited into Chicken Bonds allocated to the Permanent Bucket is hard to predict, as it depends on users' behaviors. Here are some napkin maths using a conservative estimate of 10% of the total assets in the Permanent Bucket, with the 5M LUSD currently available in the LUSD/3CRV to estimate the Chicken Bonds impact:
+
+Chicken Bonds TVL|Directly Added Liquity|Added Liquity (%)
+:--|:--|:--
+7M (Current)|700K LUSD|14.00%
+10M|1M LUSD|20.00%
+20M|2M LUSD|40.00%
+50M|5M LUSD|100.00%
+
+The added liquidity percentage could be a good proxy indicator of how much of the price premium can be reduced. Keep in mind that it remains approximative, as it only considers the LUSD/3CRV main pool.
+
+Nonetheless, with $10M TVL into the Chicken Bonds by the end of the first cycle, the impact could already be palpable with an increase of \~20% of the LUSD amount available in the Curve pool.
+
+{{< notice note >}}
+The shifting function is disabled for the first 45 days of the system, i.e. until November 19. After this date, anyone will be able to move the Permanent Bucket liquidity from Curve <-> B.Protocol if **[conditions](https://liquity.gitbook.io/chicken-bonds/faq/lusd-peg-stability#_vowf7444yzdt)** are met.
+{{< /notice >}}
+
+### Growing bLUSD liquidity hands in hand with LUSD
+
+There is another indirect beneficial effect of the Chicken Bonds, stemming from the chosen structure for bLUSD liquidity, incentivized by the protocol.
+
+Indeed, a **3% Chicken In fee is collected and redirected to incentivize liquidity providers of the bLUSD/LUSD-3CRV pool**. This pool is a meta pool made of bLUSD paired with the LP token of the existing LUSD/3CRV. At perfect equilibrium, the asset exposure would be: 50% bLUSD / 25% LUSD + 25% 3pool (8.33% USDC / 8.33% USDT / 8.33% DAI).[^blusd-lusd3pool]
+
+This liquidity structure ensures that **50% of the deposits made into the bLUSD LP pool directly contribute to growing the liquidity of the main LUSD/3CRV**. Moreover, because this pool has its own incentive budget (Chicken In fee), it will provide an attractive LUSD yield to stakers on top of the base yield generated by swaps.
+
+As the Chicken Bonds mature, the bLUSD/LUSD-3CRV pool could get its own gauge, securing additional CRV (and potentially CVX) rewards on top of the existing ones.
+
+This model was chosen over a bLUSD/LUSD pool which would have required a sizeable amount of LUSD without contributing to LUSD’s liquidity against other stablecoins. The main downside of the chosen model is that it makes the deposit and withdrawal interactions more complex for liquidity providers. However, this concern will be lifted with **zaps enabling the supply and withdrawal from LUSD and bLUSD directly**.
+
+Depending on the bLUSD/LUSD-3CRV pool equilibrium, supplying it single-sided with either LUSD or bLUSD can result in a premium:
+- If there is too much LUSD-3CRV in the pool, providing bLUSD rebalances the pool and results in a premium.
+- If there is too much bLUSD in the pool, then supplying it with LUSD will result in a **double premium** as both the bLUSD/LUSD-3CRV and LUSD/3CRV pools are rebalanced in the process.
+
+Learn more about the bLUSD/LUSD-3CRV in the dedicated article on the Chicken Bonds blog [**Game of Chickens!** The end of the bootstrap period and what it means for bLUSD](https://www.chickenbonds.org/blog-posts/game-of-chickens-the-end-of-the-bootstrap-period-and-what-it-means-for-blusd)
+
+## Additional solutions to grow LUSD’s liquidity
+
+Chicken Bonds are the main ongoing initiatives attempting to grow LUSD’s liquidity, yet, other projects and solutions are being explored too. Here’s an overview.
+
+### veCRV position and bribes
+
+The Liquity treasury entered the Curve Wars months ago, acquiring and locking CRV tokens to support the bLUSD/LUSD-3CRV gauge. To maximize the impact of the LUSD Chicken Bonds, **a bribing campaign** is also synchronized with the release to increase the CRV APY of LUSD/3CRV pool depositors.
+
+Using Warden Quest, LQTY tokens are awarded to veCRV and vlCVX voters on the LUSD/3CRV CRV gauge. The bribing campaign secured **5M veCRV votes (\~1% of total votes)**, which led to a sharp increase in the APY, bringing it to parity with a basic Stability Pool deposit.
+
+{{< notice info >}}
+Are you out of the loop with the Curve Wars? Start here:
+**[⚔ CRV wars: the race to accumulate the ability to influence the Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)**
+{{< /notice >}}
+
+### PowerPool’s LUCY: interest-bearing LUSD LP position
+
+The PowerPool team has been working on an interesting **novel type of Balancer pool** suited for LUSD, and it’s now close to being released: the LUSD-a-bb-USD pool, also known under the sweet name of **LUCY**.
+
+Like the Chicken Bonds, this pool **harnesses b.protocol to provide an auto-compounded earning opportunity on LUSD**. Indeed, the main innovation of this pool is to involve interest-bearing assets and constantly **rebalances between yield-bearing and liquidity-providing activities**. The pool is made of two wrapper tokens:
+
+#### 1/ Balancer Boosted Aave USD
+
+This pool is essentially the **Balancer’s equivalent of Curve’s 3 pool**, the main stablecoin pool of the decentralized exchange. The key difference here is that the pool involves **interest-bearing wrappers** of each stablecoin. Depending on the pool’s liquidity needs, each stablecoin rebalances between liquidity-providing or yield-bearing through Aave:
+
+
+
+#### 2/ LUSD + b.protocol
+
+The bb-a-USD tokens are paired against LUSD, which also **rebalances yield-bearing (Stability Pool with b.protocol) and liquidity-providing** depending on the needs.
+
+Thus, the LUCY pool should be interesting to grow LUSD’s available liquidity, as it could provide an interest yield-stacking option for liquity providers, earning:
+
+1. The **swap fees APR**, collected on exchanges involving the pool’s tokens.
+2. The **base yield** on each pool token (Aave’s yield for USDC/USDT/DAI, Stability Pool’s yields for LUSD)
+3. [If a BAL gauge is obtained] the **LP token BAL staking APY**, which can be further increased with gauge votes and bribing campaigns.
+
+This novel pool will mark the arrival of LUSD on Balancer, diversifying its liquidity source further, as the main venues to trade LUSD are currently Curve, Uniswap, and Velodrome on Optimism.
+
+### LUSD integrations into other lending protocols
+
+Over the last few months, LUSD has been increasingly integrated across various DeFi protocols, providing **additional options to LUSD holders and arbitrageurs**.
+
+The [addition of LUSD as a borrowable asset on Aave](https://app.aave.com/reserve-overview/?underlyingAsset=0x5f98805a4e8be255a32880fdec7f6728c6568ba0&marketName=proto_mainnet) marked the first time the stablecoin could be borrowed using collateral other than ETH to secure the position. As the liquidity available on the market grows, it opens LUSD arbitrage to non-ETH holders.
+
+
+
+Meanwhile, **LUSD was also added as collateral on two €-based lending protocols**: [Angle Money](https://angle.money/) and [Mimo](https://mimo.capital/). Both enable LUSD holders to enter a short position on €, using their LUSD as collateral.
+
+Finally, [GearBox](https://gearbox.fi/) is gearing up to release its V2 shortly, enabling users to get leverage according to a pre-determined and smart-contract-enforced set of rules. Amongst the options available at release, **liquidity providers of the LUSD/3CRV will be able to leverage their position**.
+
+Growing the lending market of LUSD beyond Liquity grows the stablecoin utility while enabling more various types of users to arbitrage its price fluctuations. Paired with the ongoing efforts to grow LUSD’s liquidity on DEX, it will help stabilize its price.
+
+### LUSD on Optimism: Velodrome and Stargate
+
+LUSD also **has a strong presence on Optimism**, thanks to Liquity being one of the protocols involved in the Velodrome races. With a respectable veVELO position, Liquity has been able to grow several LUSD-related pools to sizeable TVL. Moreover, pools on Velodrome tend to be more balanced than the mainnet pools:
+
+
+
+However, bridging LUSD to Optimism is currently a bit of a one-way trip. Bridging LUSD to Optimism is easy and only takes 5-10 min using the official bridge. However bridging back to the mainnet takes 7 days with the official bridge, and no alternative options with decent liquidity are available yet.
+
+The situation is about to change, enabling LUSD’s strong liquidity on Optimism to positively impact the mainnet situation: Stargate, the omnichain liquidity transport protocol, recently voted to **add support for LUSD** ([SIP#16](https://snapshot.org/#/stgdao.eth/proposal/0xe6fef4aa9c8e9d162f694ab764b11c06918b9f199aafe43e0d85b12d8271011c)), which will enable its fast bridging from and to Optimism once implemented. If Stargate can provide a reliable solution to fast bridge LUSD from Optimism to mainnet, it could positively impact mainnet’s LUSD liquidity pools balance.
+
+## Learn more about Chicken Bonds
+
+I hope this article piqued your curiosity about Chicken Bonds and LUSD. If that’s the case, many resources are available for you to explore the model further; here are some recommendations:
+
+1. The [Chicken Bonds website](https://www.chickenbonds.org/) is a great starting point — you’ll find [the list of the front ends](https://www.chickenbonds.org/lusd-bonds#front-ends) you can use to interact with LUSD Chicken Bonds.
+2. To go deeper, feel free to [check the blog](https://www.chickenbonds.org/blog) available on the website: it features several articles deep diving into critical dimensions of the Chicken Bonds.
+3. Finally, the most comprehensive resource about Chicken Bonds is [the user documentation](https://liquity.gitbook.io/chicken-bonds/faq/table-of-content), so feel free to check it if some of your questions are left unanswered.
+
+To keep track of what is happening with the Chicken Bonds, you'll find stats in the UI of the front-end you use. Else, a community member has made a neat [Chicken Bonds Dune Analytics](https://dune.com/nemoventures/chicken-bonds) that will be helpful. For further discussion, you can [join the Liquity Discord](https://discord.gg/WQMEcgHBpc), where a brand new section is dedicated to Chicken Bonds.
+
+[^deployer]: Right now, Liquity is the only "deployer." This concept will gain relevance with the Generalized version of the Chicken Bonds, where other protocols can harness the model to benefit their tokens.
+[^liquidity-driver-tokens]: Liquidity driver tokens enable direct incentives to selected liquidity or lending pairs, usually through a locking system. They allow projects which lock them to direct emissions to pools of their choosing to attract liquidity.
+[^ve-CRV-NFT-attribute-bribe]: As far as I know, this is the first time this kind of bribery has been attempted on Curve voters (or any other DeFi token holders): NFT-attribute-based bribes; here we come!
+[^blusd-lusd3pool]: The pool is [already live](https://curve.fi/factory-crypto/134) but cannot be supplied before the end of the bootstrap period.
\ No newline at end of file
diff --git a/content/post/2022/nft-defi-infrastructure.fr.md b/content/post/2022/nft-defi-infrastructure.fr.md
new file mode 100644
index 00000000..a6ffc331
--- /dev/null
+++ b/content/post/2022/nft-defi-infrastructure.fr.md
@@ -0,0 +1,263 @@
+---
+title: "NFTfi : repousser les limites de NFTs grâce à la DeFi"
+description: "La DeFi apporte aux projets NFTs des outils pour résoudre leurs principales limites (comme la liquidité) tandis que les NFTs permettent de rendre la DeFi plus fun et digeste : un mariage parfait ?"
+date: '2022-03-29T01:13:50.191Z'
+categories: [NFT]
+tags: [DeFi, Ethereum, Decentralized Finance, NFT, Forgotten Wizard, Luchadores, NFTfi]
+toc: true
+tocNum: false
+url: nftfi-defi-nft
+image: /img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.png
+difficulty: "beginner"
+---
+
+La finance décentralisée a ouvert un monde de possibles : une myriade d’intermédiaires auparavant nécessaires sont désormais surnuméraires. Malgré tout, elle intimide par sa potentielle complexité et sa transdisciplinarité. Outre la dimension technique évidente, la DeFi invoque également des notions issues de disciplines diverses: économie, sciences sociales, “mémétique”, etc.
+
+Ainsi, depuis des années déjà, les NFTs ont servi de porte d’entrée vers le monde décentralisé, démontrant les bénéfices de la tokénisation et de la désintermédiation à une population encore peu friande de DeFi.
+
+Je vous propose donc aujourd’hui de faire converger les deux thèmes principaux de ce blog en un sujet captivant : l’émergence de l’infrastructure DeFi pour les NFTs, ou encore l’arrivée des NFTs/gamification dans la DeFi - c’est une question de perspective.
+
+## DeFi + NFT => NFTfi : un monde de possibles pour vos JPEGs
+
+Les cas d'utilisation à la croisée de la DeFi et des NFTs sont nombreux et en plein développement. Plutôt qu'une liste exhaustive, je vous propose d'analyser quelques projets emblématiques pour comprendre comment ils assemblent des éléments des deux univers pour offrir un service pertinent.
+
+Cette infographie est un bon point de départ pour approfondir votre analyse de la NFTfi si cet article éveille votre curiosité :
+
+")
+
+On commence par le plus intuitif pour ceux qui sont déjà un peu à jour avec la DeFi : l’arrivée d'une infrastructure financière pour échanger, mais aussi prêter, rendre productif ou encore fractionnaliser des NFTs. Pour attaquer ce vaste sujet, partons de la première couche : l’infrastructure utilisée pour acheter et vendre des NFTs.
+
+### Les services d’achat et vente de NFTs
+
+Jusqu’à peu, les NFTs vivaient une drôle de situation d’entre deux. Par essence, les NFTs permettent la désintermédiation et une interaction plus directe entre les cŕéateurs et leur audience. Cette désintermédiation s’accompagne d’une réduction massive des frais engagés pour mettre une œuvre sur le marché et de nouvelles possibilités, comme leur interactivité.
+
+Seulement voilà, les NFTs restent échangés principalement sur un service qui n’est pas à leur hauteur, j’ai nommé OpenSea - qui reste encore dominant bien que la situation évolue rapidement depuis l’arrivée de LooksRare.
+
+Sans trop s’étendre, OpenSea connaît de nombreuses limites :
+
+
+
+* Un frais proche de l’usure pour chaque échange - 2.5% - et qui est réservé exclusivement à l’équipe.
+* Un manque de respect des plus basiques pour la communauté NFT : violation de leur vie privée, manipulation, etc.
+* Un certain mépris pour les projets NFTs les plus communautaires : les mécanismes de vérification sur OpenSea sont assez peu transparents et ne dépendent pas réellement du volume. Des projets pitoyables, mais portés par des célébrités, se sont ainsi vu vérifiés rapidement tandis que les Luchadores, par exemple, attendent encore.
+* Un manque d’investissement dans son propre développement : la plateforme est lente à évoluer et n’écoute pas ses utilisateurs.
+* Une approche 100% business : [OpenSea a réalisé 9 levées de fonds](https://www.crunchbase.com/organization/opensea/company_financials) jusqu’à présent, et ce, malgré les profits gargantuesques qu’ils génèrent via le frais excessif prélevé : $100M de volume **sur 1 jour** ⇒ $2.5M dans les poches de la team (- frais opérationnels, mais quand même…)
+
+On obtient ainsi une situation proche des fournisseurs d’accès internet américains : OpenSea est utilisé par tous dans le monde des NFTs, mais également **viscéralement détesté par une part non négligeable de ses utilisateurs**.
+
+Commençons donc par regarder les données qui sont éloquentes :
+
+
+
+
+On regarde ici simplement le volume. En termes de nombre d’utilisateurs et de transactions OpenSea domine encore largement. Vous pouvez retrouver toute la donnée sur le super dashboard [d’Hildoby](https://twitter.com/hildobby_) : [LooksRare VS Opensea (Dune Analytics)](https://dune.xyz/hildobby/LooksRare-VS-OpenSea).
+
+On était nombreux à attendre une alternative crédible, et heureusement elle est arrivée : LooksRare. Le cas vaut la peine d’être creusé, mais en résumé LooksRare c’est l’exact inverse d’OpenSea :
+
+
+
+* Les frais de transaction sont réduits à 2% et **redistribués entièrement** aux stakers du token LOOKS.
+* L’équipe LooksRare se montre très à l’écoute de la communauté et en deux mois d’existence, ils ont déjà implémenté de très nombreuses fonctionnalités demandées par leurs utilisateurs.
+* Le token LOOKS a été airdrop aux utilisateurs d’OpenSea. Il s’obtient désormais en achetant ou vendant des NFT sur Looksrare : **une distribution directe** aux utilisateurs du service.
+* Une stratégie de POL (Protocol Owned Liquidity) est mise en place par le protocole : une part non négligeable de la liquidité sur LOOKS est possédée directement par celui-ci.
+
+Le protocole possède ainsi déjà près de $13M en ETH+LOOK déployé sur UniswapV3 pour soutenir la liquidité - voici [le wallet de LooksRare](https://debank.com/profile/0xc8c57e4c73c71f72ca0a7e043e5d2d144f98ef13) pour vérifier par vous même. Les frais collectés sur le LP sont utilisés pour… apporter toujours plus de liquidité !
+
+
+
+
+Ce nouveau jeu de règles permet à LooksRare d’être extrêmement compétitif par rapport à Opensea, puisque le frais est 20% plus bas, et que chaque achat/vente est également rémunéré en LOOKS. Le résultat est sans appel : acheteur comme vendeur gagnent tous deux à préférer LooksRare à Opensea.
+
+
+
+### La tokénisation expliquée avec la partialisation de NFTs
+
+Échanger des NFTs, c’est top : encore faut-il comprendre ce qu’il y a dans la boîte ! On va donc détailler les enjeux de la tokénisation avec plusieurs exemples. En effet, les possibilités offertes par cette dernière sont immenses, alors illustrons les !
+
+Prenons donc le temps de bien expliquer le concept. Tokéniser, c’est l’action de créer un token (token qui **représente** quelque chose). À première vue comme ça, l’intérêt peut être dur à concevoir. Néanmoins, tokéniser permet également une forme “d’alchimie” : une transmutation - un changement du type de token du fongible à non-fongible, et vice-versa.
+
+Prenons un exemple qui illustre bien les bénéfices de la tokénisation - le cas de **la fractionalisation d’un NFT**.
+
+1. On part donc d’un token non fongible spécifique, le CryptoPunk #666 par exemple.
+2. On le verrouille dans un contrat qui émet 10 000 PUNK tokens, des tokens ERC-20.
+3. On a maintenant un token qui représente 1/10 000 du CryptoPunk #666 original. Ce token est un ERC-20 classique et donc échangeable facilement via Uniswap ou autre (⚠️ Liquidité)
+
+⇒ La tokénisation permet ici **la possession collective d’un bien unique** (le NFT CryptoPunk #666).
+
+Ce concept, tout en illustrant les bénéfices de la tokénisation correspond également à un cas d’usage réel. La réalité est bien sûr plus complexe, puisque nous avons décrit ici seulement le mécanisme de collectivisation (1 NFT ⇒ 10 000 ERC20). Le chemin inverse est aussi possible pour récupérer l’accès au NFT verrouillé : 10 000 PUNK ⇒ NFT CryptoPunk #666 : c’est la privatisation.
+
+Ce modèle, c’est celui de [Spectre.xyz](https://spectre.xyz/litepaper), un service qui permet de gérer la collectivisation et privatisation de NFTs.
+
+
+
+
+Outre la possession collective, une telle solution a aussi un intérêt en terme de liquidité : le token obtenu (PUNK) est un ERC20 classique, il est donc bien plus aisé de développer des solutions permettant son achat et sa vente immédiate qu’avec un NFT, qui nécessite la rencontre d’une demande et d’une offre simultanée.
+
+
+### Tokénisation pour développer la liquidité : les vaults
+
+Une fois la tokénisation bien comprise, le prochain chapitre - les vaults NFT - est presque une évidence. Un des enjeux sur les NFTs, c’est la liquidité des marchés. La non fongibilité c’est chouette pour faire des collections de 10 000 pièces toutes uniques bien que similaires - mais _quid_ de la valorisation et de l’échange de celles-ci?
+
+Outre LooksRare et Opensea précédemment mentionné, il existe d’autres places de marché pour les NFTs qui s’appuient sur une logique différente : c’est **le modèle des vaults NFT** - qui a de nombreux intérêts, mais aussi des limites - la principale étant que cette approche n’est possible qu’avec des grosses collections (plusieurs centaines d’unités) et/ou assez populaires (forte demande).
+
+
+
+1. [MINT] Un “vault” (smart contract) spécifique à une collection est créé ; les utilisateurs peuvent déposer leur NFTs dans celui-ci.
+2. Lorsqu’un utilisateur dépose un NFT dans le vault, sa contribution est reconnue par l’émission d’un token ERC20.
+3. [REDEEM] À tout moment, le token ERC20 peut être échangé contre n’importe quel NFT du vault. Le token ERC20 est alors détruit.
+
+{{< notice warning >}}
+⚠️ Vous l’aurez compris, le vault assume que tous les NFTs sont équivalents : mieux vaut donc rentrer dans un vault avec un NFT parmi les moins rares de la collection donnée.
+{{< /notice >}}
+
+Le leader en la matière, c’est probablement [NFTX](https://nftx.io/vault/0x87931e7ad81914e7898d07c68f145fc0a553d8fb/info/), mais il y a aussi [NFT20](https://nft20.io/). Cette méthode permet d’obtenir un token ERC20 - par exemple le WIZARD - qui correspond à un claim sur n’importe quel NFT du vault, en l'occurrence n’importe lequel des 215 Forgotten Wizard Cult (NFTs) contenu dans [le vault.](https://nftx.io/vault/0x87931e7ad81914e7898d07c68f145fc0a553d8fb/info/)
+
+
+
+
+La liquidité sur le token WIZARD peut être développée contre ETH par exemple, permettant ainsi l’achat immédiat de n’importe quel wizard contenu dans le vault. L’inverse est également possible : tout possesseur d’un Forgotten Wizard Cult peut le déposer dans le vault afin d’obtenir 1 WIZARD qu’il pourra ensuite vendre pour de l’ETH.
+
+Et enfin NFTX va même plus loin puisque le token natif de la plateforme ainsi que les frais collectés sont utilisés pour proposer des incitations à deṕoser dans le vault et développer la liquidité. **Les utilisateurs qui** **déposent des NFTs dans le vault sont ainsi éligibles à une rémunération de staking** - et des rendements plus élevés sont possible pour ceux qui déposent + LP : la financiarisation des NFTs est lancée !
+
+ et LP (violet) sur le token WIZARD")
+
+
+On se concentre ici sur la liquidité, mais il faut garder en tête que le passage d’un NFT à un ERC-20 vient avec de nombreux autres avantages :
+
+
+
+1. Si la liquidité sur la paire est suffisante - alors elle devient également **une source de prix**.
+2. Qui dit source de prix (oracle) + liquidité dit… collatéral évidemment ! Avec ces deux éléments, rien n’empêche d’envisager le WIZARD comme **collatéral pour emprunter** d’autres tokens comme des stablecoins. C’est faisable mais bien plus complexe en partant directement du NFT.
+3. Enfin, gardez en tête qu’il n’y a pas de limite à la tokénisation, tant qu’il y a un intérêt. On est resté ici sur des cas de tokénisation unique, mais des **scénarios de tokénisations enchevêtrées** sont également envisageables.
+
+Un token ERC-20 qui représente un claim sur un Wizard donné, c’est top. Maintenant imaginez que vous ayez la même chose pour les CryptoPunks, le BAYC et ainsi de suite - c’est le cas sur NFTX. Rien n’empêche d’envisager une étape de tokénisation supplémentaire pour créer un **index NFT** représenté par un token ERC20 mais qui serait lui meme** échangeable contre les tokens représentants les actifs sous-jacents:** :
+
+On pourrait ainsi imaginer le NFT-Bluechip-Index, un token ERC-20 créé en verrouillant 1 WIZARD + 1 PUNK + 1 BAYC. Ce token serait facilement liquide, et permettrait ainsi de s’exposer facilement aux trois collections en une seule transaction. En outre, le token resterait entièrement collatéralisé à tout moment par 1 NFT de chaque collection. Un possesseur du NFT-Bluechip-Index pourrait tout à fait faire la marche inverse à tout moment, c’est à dire :
+
+
+
+1. [Avec le contrat NFT-Bluechip] : burn de 1 NFT-Bluechip-Index pour récupérer 1 WIZARD + 1 PUNK + 1 BAYC
+2. [En utilisant les contrats/vaults de NFTX] burn de 1 WIZARD + 1 PUNK + 1 BAYC pour récupérer un NFT (au choix parmi ceux qui sont dans le vault) de chaque collection sous-jacente.
+
+
+### Idol : des NTFs pour tokéniser un rendement DeFi
+
+Pour continuer et finir sur la tokénisation, sachez qu’elle permet également de faire le lien entre les deux mondes - les NFTs et la DeFi : l’exemple parfait ici c’est le projet [IdolsNFT](https://www.theidols.io/).
+
+Les IdolsNFT ont été vendus initialement via une bonding curve pour un prix entre 0.25 et 0.5 ETH. Tous les ETH collectés durant la vente sont stakés via Lido (StETH). Posséder un Idol vous rend éligible à la part correspondante des rendements. Ici, c’est donc le rendement généré par les StETH qui est tokenisé.
+
+
+
+
+Et le projet va même plus loin ! En effet, il y a aussi un ERC-20 dans l’histoire, le VIRTUE, initialement distribué aux premiers acheteurs. Désormais pour obtenir du VIRTUE, il faut bond des stETH (-> ce qui augmente le capital productif du projet).
+
+Le VIRTUE correspond à une exposition par proxy sur les IdolsNFT : pour chaque vente d’un NFT Idol, un frais de 7.5% est prélevé et reversé aux stakers de VIRTUE.
+
+
+
+Ainsi, les Idols, “Gardiens d’Ethereum” utilisent les NFTs pour rendre le staking d’ETH plus fun et interactif. En outre, la capture des frais sur le token VIRTUE permet d’éviter une “capture externe” des frais générés par les échanges de IdolsNFT comme c’est le cas pour les NFTs échangés sur NFTX par exemple.
+
+Enfin, les gros possesseurs de la collection ont un chemin tout tracé pour composer leur rendement si leur conviction est forte :
+
+
+
+1. Possession de plusieurs IdolsNFT ⇒ Yield en stETH
+2. Composition des stETH farmés via bonding ⇒ VIRTUE
+3. Stake des VIRTUE ⇒ Yield en ETH
+4. Staking ETH avec Lido ⇒ StETH ⇒ Bonding pour des VIRTUE puis stake
+
+Quoi qu'il arrive avec cette collection, je pense qu’elle a posé les bases de ce que peuvent être les collections NFTs augmentées par et synergétique avec la DeFi. Je m’attends à voir de nombreuses autres variations pertinentes sur ce modèle.
+
+
+### Agrégation de diverses sources de liquidité
+
+Dans cet article, on a déjà mentionné trois plateformes différentes pour acheter ou vendre des NFTs : OpenSea, LooksRare et NFTX. La réalité est encore plus dense, il existe une armada de places de marché pour les NFTs, plus ou moins réussies et plus ou moins spécialisées, en voici quelques autres : [Rarible](https://rarible.com/), [Superrare](https://superrare.com/), [Foundation](https://foundation.app/), [NFT20](https://nft20.io/), etc.
+
+Face à cette myriade d’options, les acheteurs n’ont pas forcément le temps, l’envie, l’énergie ou bien encore la connaissance pour explorer toutes leurs options avant de conclure une transaction. La situation est très similaire à l’achat/vente d’un token ERC20 en DeFi : la liquidité est très fragmentée. Logiquement, la solution est donc similaire à celle déployée en DeFi : l'agrégation.
+
+
+
+
+Il existe ainsi plusieurs services capables de diriger les “ordres” vers différentes places de marché, voire de ŕealiser un “swipe” sur plusieurs plateformes avec une seule transaction : il s’agit de [Genie](https://genie.xyz) et [Gem](https://gem.xyz).
+
+Là encore, c'est la réactivité de l’équipe et la composabilité du service qui feront la différence sur le long terme : Gem semble avoir pris de l’avance grâce à son intégration avancée de LooksRare (claim LOOKS possible pour les acheteurs via Gem).
+
+---
+
+## NFT + DeFi => Des jeux avec de vrais enjeux
+
+Si la DeFi a découvert le marché énorme qu’est les NFTs récemment, la marche inverse s’observe aussi : **l’arrivée de composantes DeFi dans des projets NFTs** - on parle souvent de GameFi pour décrire cette tendance.
+
+Cela fait plusieurs années déjà que les premières itérations de GameFi sont apparues, avec des jeux qui peuvent devenir une source de revenu crédible pour leurs joueurs : le plus célèbre est bien sûr [Axie Infinity](https://axieinfinity.com/), mais il en existe quantité d’autres : [AaveGotchi](https://www.aavegotchi.com/), [CryptoRaiders](https://cryptoraiders.xyz/), etc.
+
+Hélas je ne suis moi-même pas très actif sur ces projets, je vous propose donc de détailler un qui m’est plus familier : les Luchadores. Ici encore, on retrouve des composantes DeFi qui se greffent sur le projet NFT :
+
+* Posséder un Luchador (NFT) donne le droit à un rendement en LUCHA (token ERC20).
+* Le protocole possède environ [60% de la liquidité sur les deux paires LUCHA](https://debank.com/profile/0x0cb11b92fa5c30eafe4ae84b7bb4df3034c38b9d), grâce aux fonds levés pendant la vente des premières pinatas.
+
+{{< notice note >}}
+Les 🪅 sont des tokens ERC-1155 qui contiennent 1 accessoire pour Luchadores, dont la rareté est déterminée par un aléatoire vérifiable ([Chainlink VRF](https://blog.chain.link/vrf-v2-mainnet-launch/)).
+{{< /notice >}}
+
+
+* Le protocole possède également une trentaine de Luchadores (⇒Yield en LUCHA) acheté avec une partie des profits de la première pinata : l’achat a été effectué en utilisant un agrégateur.
+* Une place de marché est disponible pour les accessoires, avec paiement en LUCHA : une redistribution des frais collectés est également envisageable.
+
+
+
+Le jeu n’est pas encore disponible (Alpha d’ici la fin Mars !), mais les interactions de ce type ne vont que se densifier au fur et à mesure de son développement. Avec l’arrivée du jeu, viendront de nouvelles fonctionnalités : staker ses tokens LUCHA permettra d’obtenir des MASK, un token non-transférable mais nécessaire pour acheter différents objets servant à augmenter la puissance de ses Luchadores.
+
+Dès le lancement du jeu, les joueurs gagneront des LUCHA à chaque victoire. En fonction de leur classement, la quantité de LUCHA obtenus augmente : les meilleurs joueurs pourront ainsi dégager des retours intéressants, pour un coût initial très modéré (1 Luchador, potentiellement minté pour ~0.03 ETH). Soyez prêts !
+
+Si vous découvrez les Luchadores avec cet article, n'hésitez pas à lire cette introduction : **[🤼 Vive la lutte libre (et vérifiable onchain)](https://tokenbrice.xyz/fr/luchadores-nft/)**
+
+---
+
+## Et après ?
+
+Dans cet article, on est encore resté sur la partie visible de l’iceberg. À la croisée de la DeFi et des NFTs, il reste quantité de nouveaux cas d’utilisation possibles. Je vous propose d’en faire une liste accompagnée des principaux services qui explorent ces champs :
+
+
+### FloorDAO : NFT x DeFi x DAO
+
+[FloorDAO](https://floor.xyz/) c’est en quelque sorte une couche supplémentaire construite sur NFTX. FloorDAO utilise le modèle OlympusDAO mais adapté pour les NFTs. L'objectif est d'assurer un rendement et soutenir la liquidité sur les collections concernées (Punk et Wizard pour l'instant). Comment ? Simple : pour les collections concernées, les possesseurs du token NFTX correspondant (ex WIZARD pour les Forgotten Wizards) ainsi que le LP (WIZARD/ETH) peuvent le bond pour obtenir des tokens FLOOR.
+
+
+
+Les tokens et LP collectés sont utilisés par FloorDAO pour produire un rendement (staking NFTX). La communauté (holders de gFLOOR) vote pour décider les prochains actifs à acquérir. Olympus utilise l'inflation de son token de gouvernance pour acquérir des actifs stratégiques commme DAI, LUSD, ou CRV ; FloorDAO fait la même chose mais avec pour cible des tokens NFTX et donc backés par un NFT.
+
+Là encore, le protocole possède une part de la liquidité sur FLOOR/ETH (sur Uniswap) et les frais générés par la position contribuent au rendement de la trésorerie.
+
+### NFT pour collatéraliser des emprunts (sans passer par un ERC20/vault)
+
+La principale limite à surmonter ici est bien sûr le fait que la vente de NFT se fait dans une logique bid/ask et n’est donc pas immédiate. Plusieurs projets s’attaquent malgré tout au problème :
+
+* [DropsDAO](https://drops.co) : qui importe la logique des lending pools, pour des collections NFTs
+* [Arcade.xyz](https://www.arcade.xyz/) : les OGs se souviennent d’ETHLend, l’ancêtre d’Aave. Arcade c’est la même logique mais pour des NFTs : un service d’emprunt sans pool, qui marche par offre/demande.
+* [JPEGd'69](https://twitter.com/JPEGd_69) - qui devrait bientôt se lancer et permettre d'utiliser les CryptoPunks comme collatéral.
+* Ou encore [NFTfi](https://www.nftfi.com/).
+
+
+### Évaluation du prix de NFTs / oracle
+
+Pour les emprunts, il faut une source de prix afin de déterminer si la position est solvable. Là encore plusieurs projets s’y collent :
+
+* [Abacus](https://abacus.wtf/) - un service décentralisé pour évaluer le prix d’un NFT
+* [Pilgrim](https://pilgrim.money/) - un AMM / méthode de valorisation pour les NFTs
+
+
+### Location de NFT
+
+La location permet par exemple d’emprunter un NFT pour jouer à un jeu sans avoir à le posséder. Elle crée aussi des opportunités pour les gros possesseurs de NFT d’une collection GameFi.
+
+* [Rentable](https://beta.rentable.world/), un protocol généraliste pour la location.
+* Prêt de vaisseau + partage de revenus générés avec sur [Cometh](https://www.cometh.io/)
+* [Modèle scholarship Axie Infinity](https://axie.fr/tutoriel-scholarship-axie-quest-ce-quun-scholarship-et-comment-postuler/)
+
+---
+
+Enfin, pour aller plus loin dans votre exploration de l'infrastructure DeFinancière NFT / la NFTfi, n’hésitez pas à voir ou revoir le live réalisé avec CookingCrypto où on nous en discutons et revenons sur son expérience après plus d’un an dans les tranchées du minting/flipping de NFTs :
+
+{{< youtube cdj-wXvIuwU >}}
+
+_Merci à Charles, FrenchTony, Disiaque et Arthursw pour la relecture et correction de cet article._
\ No newline at end of file
diff --git a/content/post/2022/nft-defi-infrastructure.md b/content/post/2022/nft-defi-infrastructure.md
new file mode 100644
index 00000000..2ac53661
--- /dev/null
+++ b/content/post/2022/nft-defi-infrastructure.md
@@ -0,0 +1,256 @@
+---
+title: "NFTfi: NFT meets DeFi, liquidity and leverage ensue"
+description: "DeFi offers NFT projects tools to solve their main limitations (like liquidity) while NFTs allow to make DeFi more fun and digestible: a perfect pairing?"
+date: '2022-03-29T01:13:50.191Z'
+categories: [NFT]
+tags: [DeFi, Ethereum, Decentralized Finance, NFT, Forgotten Wizard, Luchadores, NFTfi]
+tocNum: false
+url: nftfi-defi-nft
+image: /img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.png
+difficulty: "beginner"
+---
+
+Decentralized finance has opened up a world of possibilities: a myriad of previously necessary intermediaries are now supernumerary. Nevertheless, it is intimidating because of its potential complexity and interdisciplinary. In addition to the obvious technical dimension, DeFi also invokes concepts from various disciplines: economics, social sciences, "memetics", etc.
+
+Thus, for years now, NFTs have served as a gateway to the decentralized world, demonstrating the benefits of tokenization and disintermediation to a population still not very fond of DeFi.
+
+So today I propose to converge the two main themes of this blog into one captivating topic: the emergence of DeFi infrastructure for NFTs, or the arrival of NFTs/gamification in DeFi - it's all about perspective.
+
+## DeFi + NFT => NFTfi : a world of possibilities for your JPEGs
+
+The use cases at the crossroads of DeFi and NFTs are numerous and in full development. Rather than an exhaustive list, I propose to analyze a few emblematic projects to understand how they assemble elements from both universes to offer a relevant service.
+
+This infography is a good starting point to deepen your analysis of the NFTfi landscape if this article arouses your curiosity:
+
+")
+
+Let's start with the most intuitive one for those who are already a bit up to date with DeFi: the arrival of a financial infrastructure to exchange, but also to lend, to make productive or to split NFTs. To tackle this vast subject, let's start from the first layer: the infrastructure used to buy and sell NFTs.
+
+### NFT buying and selling services
+
+Until recently, NFTs were in a strange in-between situation. In essence, NFTs allow disintermediation and more direct interaction between creators and their audience. With this disintermediation comes a massive reduction in the costs incurred to bring a work to market and new possibilities, such as their interactivity.
+
+Only thing is, NFTs are still exchanged mainly on a service that is not up to their standards, I named OpenSea - which still remains dominant although the situation is changing rapidly since the arrival of LooksRare.
+
+Without going into too much detail, OpenSea has many limitations:
+
+
+
+* A near-weary fee for each exchange - 2.5% - and that is reserved exclusively for the team.
+* A basic lack of respect for the NFT community: violation of their privacy, manipulation, etc.
+* A certain disregard for the most community-based NFT projects: the verification mechanisms on OpenSea are not very transparent and do not really depend on the volume. Pitiful projects, but carried by celebrities, have been verified quickly while Luchadores, for example, are still waiting.
+* A lack of investment in its own development: the platform is slow to evolve and does not listen to its users.
+* A 100% business approach: [OpenSea has done 9 fundraisings](https://www.crunchbase.com/organization/opensea/company_financials) so far, and this despite the gargantuan profits they generate via the excessive fees charged: $100M in volume **on 1 day ⇒ $2.5M in the team's pockets** (- operational fees, but still...)
+
+So we get a situation close to the US ISPs: OpenSea is used by everyone in the NFT world, but also **virtually hated by a significant part of its users**.
+
+So let's start by looking at the data which speaks for itself:
+
+
+
+
+We're just looking at volume here. In terms of number of users and transactions OpenSea still dominates. You can find all the data on the super dashboard [from Hildoby](https://twitter.com/hildobby_) : [LooksRare VS Opensea (Dune Analytics)](https://dune.xyz/hildobby/LooksRare-VS-OpenSea).
+
+Many of us were waiting for a credible alternative, and fortunately it has arrived: LooksRare. The case is worth digging into, but in short LooksRare is the exact opposite of OpenSea:
+
+
+
+* Transaction fees are reduced to 2% and **redistributed entirely** to LOOKS token stakers.
+* The LooksRare team is very attentive to the community and in two months of existence, they have already implemented many features requested by their users.
+* The LOOKS token has been airdropped to OpenSea users. It can now be obtained by buying or selling NFT on Looksrare: **a direct distribution** to the users of the service.
+* A POL (Protocol Owned Liquidity) strategy is implemented by the protocol: a significant part of the liquidity on LOOKS is owned directly by the protocol.
+
+The protocol already has nearly $13M in ETH+LOOK deployed on UniswapV3 to support liquidity - here's [LooksRare's wallet](https://debank.com/profile/0xc8c57e4c73c71f72ca0a7e043e5d2d144f98ef13) to see for yourself. The fees collected on the LP are used to... bring more and more liquidity!
+
+
+
+This new set of rules allows LooksRare to be extremely competitive compared to Opensea, since the fee is 20% lower, and each purchase/sale is also paid in LOOKS. The result is clear: both buyers and sellers benefit from preferring LooksRare to Opensea.
+
+
+
+### Tokenization explained with NFTs partialization
+
+Exchanging NFTs is great: you still need to understand what's in the box! We will therefore detail the stakes of tokenization with several examples. Indeed, the possibilities offered by the latter are immense, so let's illustrate them!
+
+Let's take the time to explain the concept. Tokenization is the action of creating a token (a token that **represents** something). At first sight like that, the interest can be hard to conceive. However, tokenizing also allows for a form of "alchemy": a transmutation - a change in the type of token from fungible to non-fungible, and vice versa.
+
+Let's take an example that illustrates the benefits of tokenization - the case of **fractionalizing an NFT**.
+
+1. We start with a specific non-fungible token, CryptoPunk #666 for example.
+2. We lock it in a contract that issues 10 000 PUNK tokens, ERC-20 tokens.
+3. We now have a token that represents 1/10,000 of the original CryptoPunk #666. This token is a classic ERC-20 and therefore easily exchangeable via Uniswap or other (⚠️ Liquidity)
+
+⇒ Tokenization here allows **collective ownership of a unique asset** (the NFT CryptoPunk #666).
+
+This concept, while illustrating the benefits of tokenization also corresponds to a real use case. The reality is of course more complex, since we have only described here the collectivization mechanism (1 NFT ⇒ 10 000 ERC20). The reverse path is also possible to recover access to the locked NFT: 10 000 PUNK ⇒ NFT CryptoPunk #666: this is privatization.
+
+This model is the one of [Spectrum.xyz](https://spectre.xyz/litepaper), a service that allows to manage the collectivization and privatization of NFTs.
+
+
+
+
+In addition to the collective possession, such a solution also has an interest in terms of liquidity: the obtained token (PUNK) is a classic ERC20, it is thus much easier to develop solutions allowing its immediate purchase and sale than with an NFT, which requires the meeting of a simultaneous demand and offer.
+
+
+### Tokenization to develop liquidity: vaults
+
+Once tokenization is well understood, the next chapter - NFT vaults - is almost a given. One of the challenges of NFTs is the liquidity of the markets. Non-fungibility is great for making collections of 10,000 coins, all of which are unique but similar - but what about the valuation and exchange of these?
+
+Besides LooksRare and Opensea mentioned above, there are other marketplaces for NFTs that rely on a different logic: this is **the NFT vault model** - which has many interests, but also limitations - the main one being that this approach is only possible with large collections (several hundred units) and/or quite popular (high demand).
+
+
+
+1. [MINT] A "vault" (smart contract) specific to a collection is created; users can deposit their NFTs in it.
+2. When a user deposits an NFT in the vault, its contribution is recognized by the emission of an ERC20 token.
+3. [REDEEM] At any time, the ERC20 token can be exchanged for any NFT in the vault. The ERC20 token is then destroyed.
+
+{{< notice warning >}}
+⚠️ As you can see, the vault assumes that all NFTs are equivalent: so it is better to enter a vault with an NFT among the least rare of the given collection.
+{{< /notice >}}
+
+The leader in this field is probably [NFTX](https://nftx.io/vault/0x87931e7ad81914e7898d07c68f145fc0a553d8fb/info/), but there is also [NFT20](https://nft20.io/). This method allows you to get an ERC20 token - for example the WIZARD - that corresponds to a claim on any NFT in the vault, in this case any of the 215 Forgotten Wizard Cult (NFTs) contained in [the vault.](https://nftx.io/vault/0x87931e7ad81914e7898d07c68f145fc0a553d8fb/info/)
+
+
+
+The liquidity on the WIZARD token can be developed against ETH for example, allowing the immediate purchase of any wizard contained in the vault. The reverse is also possible: any owner of a Forgotten Wizard Cult can deposit it in the vault in order to obtain 1 WIZARD which he can then sell for ETH.
+
+And finally NFTX goes even further since the platform's native token as well as the collected fees are used to offer incentives to deṕoser in the vault and develop liquidity. **Users who** **deposit NFTs into the vault are thus eligible for a staking fee** - and higher returns are possible for those who deposit + LP: the financialization of NFTs is launched!
+
+ and LP (purple) on the WIZARD token")
+
+
+The focus here is on liquidity, but keep in mind that switching from an NFT to an ERC-20 comes with many other benefits:
+
+
+
+1. If the liquidity on the pair is sufficient - then it also becomes **a price source**.
+2. Price source (oracle) + liquidity means... collateral of course! With these two elements, there is nothing to prevent the WIZARD from being considered as **collateral for borrowing** other tokens like stablecoins. This is feasible but much more complex starting directly from the NFT.
+3. Finally, keep in mind that there is no limit to tokenization, as long as there is an interest. We stayed here on single tokenization cases, but **tangled tokenization** scenarios are also possible.
+
+An ERC-20 token that represents a claim on a given Wizard is great. Now imagine that you have the same thing for CryptoPunks, BAYC and so on - this is the case on NFTX. There is nothing to prevent us from considering an additional tokenization step to create an **NFT index** represented by an ERC20 token but which would itself **be exchangeable against the tokens representing the underlying assets:** :
+
+One could thus imagine the NFT-Bluechip-Index, an ERC-20 token created by locking 1 WIZARD + 1 PUNK + 1 BAYC. This token would be easily liquid, and thus allow for easy exposure to all three collections in a single transaction. In addition, the token would remain fully collateralized at all times by 1 NFT from each collection. An owner of the NFT-Bluechip-Index could do the opposite at any time, i.e.:
+
+
+
+1. [With the NFT-Bluechip contract] : burn 1 NFT-Bluechip-Index to get 1 WIZARD + 1 PUNK + 1 BAYC
+2. [Using NFTX contracts/vaults] burn of 1 WIZARD + 1 PUNK + 1 BAYC to retrieve one NFT (of your choice from those in the vault) from each underlying collection.
+
+
+### Idol : NTFs to tokenize a DeFi yield
+
+To continue and finish on tokenization, know that it also allows to link the two worlds - NFTs and DeFi: the perfect example here is the [IdolsNFT](https://www.theidols.io/) project.
+
+The IdolsNFT were initially sold via a bonding curve for a price between 0.25 and 0.5 ETH. All ETH collected during the sale are staked via Lido (StETH). Owning an Idol makes you eligible for the corresponding share of the returns. Here, it is the yield generated by the StETH that is tokenized.
+
+
+
+
+And the project goes even further! Indeed, there is also an ERC-20 in the story, the VIRTUE, initially distributed to the first buyers. From now on, to obtain VIRTUE, it is necessary to bond stETH (-> which increases the productive capital of the project).
+
+The VIRTUE corresponds to a proxy exposure on NFT Idols: for each sale of an NFT Idol, a fee of 7.5% is taken and given to the VIRTUE stakers.
+
+
+
+Thus, the Idols, "Guardians of Ethereum" use NFTs to make ETH staking more fun and interactive. In addition, the capture of fees on the VIRTUE token allows to avoid an "external capture" of fees generated by IdolsNFT exchanges as it is the case for NFTs exchanged on NFTX for example.
+
+Finally, the large owners of the collection have a clear path to compound their return if their conviction is strong:
+
+1. Possession of several IdolsNFT ⇒ Yield in stETH
+2. Composition of farmed stETH via bonding ⇒ VIRTUE
+3. Stake of VIRTUE ⇒ Yield in ETH
+4. Staking ETH with Lido ⇒ StETH ⇒ Bonding for VIRTUE then stake
+
+Whatever happens with this collection, I think it has laid the foundation for what NFTs collections augmented by and synergistic with DeFi can be. I expect to see many more relevant variations on this model.
+
+
+### Aggregation of various liquidity sources
+
+In this article, we have already mentioned three different platforms to buy or sell NFTs: OpenSea, LooksRare and NFTX. The reality is even denser, there is an armada of marketplaces for NFTs, more or less successful and more or less specialized, here are some others: [Rarible](https://rarible.com/), [Superrare](https://superrare.com/), [Foundation](https://foundation.app/), [NFT20](https://nft20.io/), etc.
+
+Faced with this myriad of options, buyers do not necessarily have the time, inclination, energy or knowledge to explore all their options before concluding a transaction. The situation is very similar to buying/selling an ERC20 token in DeFi: liquidity is very fragmented. Logically, the solution is therefore similar to the one deployed in DeFi: aggregation.
+
+
+
+
+Thus, there are several services capable of directing "orders" to different marketplaces, or even ŕealising a "swipe" across multiple platforms with a single transaction: these are [Genie](https://genie.xyz) and [Gem](https://gem.xyz).
+
+Here again, it is the responsiveness of the team and the composability of the service that will make the difference in the long run: Gem seems to be ahead of the game thanks to its advanced integration of LooksRare (claim LOOKS possible for buyers via Gem).
+
+---
+
+## NFT + DeFi => Games with real stakes
+
+If DeFi has discovered the huge market that is NFTs recently, the reverse march is also observed: **the arrival of DeFi components in NFTs projects** - we often talk about GameFi to describe this trend.
+
+It has been several years since the first iterations of GameFi appeared, with games that can become a credible source of income for their players: the most famous is of course [Axie Infinity](https://axieinfinity.com/), but there are many others: [AaveGotchi](https://www.aavegotchi.com/), [CryptoRaiders](https://cryptoraiders.xyz/), etc.
+
+Unfortunately I'm not very active on these projects myself, so I propose to detail one that is more familiar to me: Luchadores. Here again, we find DeFi components that are grafted on the NFT project:
+
+* Owning a Luchador (NFT) gives the right to a return in LUCHA (ERC20 token).
+* The protocol owns about [60% of the liquidity on the two LUCHA pairs](https://debank.com/profile/0x0cb11b92fa5c30eafe4ae84b7bb4df3034c38b9d), thanks to the funds raised during the sale of the first pinatas.
+
+{{< notice note >}}
+The 🪅 are ERC-1155 tokens that contain 1 accessory for Luchadores, whose rarity is determined by verifiable randomness ([Chainlink VRF](https://blog.chain.link/vrf-v2-mainnet-launch/)).
+{{< /notice >}}
+
+
+* The protocol also has about 30 Luchadores (⇒Yield in LUCHA) purchased with part of the profits from the first pinata: the purchase was made using an aggregator.
+* A marketplace is available for accessories, with payment in LUCHA: a redistribution of the collected fees is also possible.
+
+
+
+The game is not yet available (Alpha by the end of March!), but interactions of this type will only become more dense as it develops. With the arrival of the game, new features will come: staking your LUCHA tokens will allow you to get MASK, a non-transferable token but necessary to buy different items to increase the power of your Luchadores.
+
+From the launch of the game, players will earn LUCHA for each victory. Depending on their ranking, the amount of LUCHA obtained increases: the best players will be able to get interesting returns, for a very moderate initial cost (1 Luchador, potentially minted for \~0.03 ETH). Be prepared!
+
+If you discover Luchadores with this article, feel free to read this introduction: **[🤼 Long live free (and verifiable onchain) wrestling](https://tokenbrice.xyz/luchadores-nft/)**
+
+## What next?
+
+In this article, we have stayed on the visible part of the iceberg. At the crossroads of DeFi and NFTs, there are still many new possible use cases. I propose to make a list with the main services that explore these fields:
+
+
+### FloorDAO : NFT x DeFi x DAO
+
+[FloorDAO](https://floor.xyz/) is sort of an extra layer built on top of NFTX. FloorDAO uses the OlympusDAO model but adapted for NFTs. The objective is to ensure a return and support liquidity on the collections concerned (Punk and Wizard for the moment). How does it work? Simple: for the concerned collections, the owners of the corresponding NFTX token (ex WIZARD for Forgotten Wizards) as well as the LP (WIZARD/ETH) can bond it to obtain FLOOR tokens.
+
+
+
+The collected tokens and LPs are used by FloorDAO to generate a return (NFTX staking). The community (gFLOOR holders) votes to decide which assets to acquire next. Olympus uses the inflation of its governance token to acquire strategic assets such as DAI, LUSD, or CRV; FloorDAO does the same thing but targets NFTX tokens and therefore backs them with an NFT.
+
+Here again, the protocol owns a share of its own liquidity on FLOOR/ETH (on Uniswap) and the fees generated by the position contribute to the returns of the FloorDAO treasury.
+
+### NFTs to collateralize loans (without going through an ERC20/vault)
+
+The main limitation to overcome here is of course the fact that the sale of NFT is done in a bid/ask logic and is therefore not immediate. Several projects are nevertheless tackling the problem:
+
+* [DropsDAO](https://drops.co) : which imports the logic of lending pools, for NFT collections
+* [Arcade.xyz](https://www.arcade.xyz/) : OGs remember ETHLend, the ancestor of Aave. Arcade is the same logic but for NFTs : a borrowing service without pool, which works by offer/demand.
+* [JPEGd'69](https://twitter.com/JPEGd_69) - which should launch soon and allow CryptoPunks to be used as collateral.
+* Or [NFTfi](https://www.nftfi.com/).
+
+
+### Pricing of NFTs / oracle
+
+For borrowing, a price source is needed to determine if the position is solvent. Here again, several projects are working on this:
+
+* [Abacus](https://abacus.wtf/) - a decentralized service to price an NFT
+* [Pilgrim](https://pilgrim.money/) - an AMM / valuation method for NFTs
+
+
+### Renting of NFTs
+
+Renting allows for example to borrow an NFT to play a game without having to own it. It also creates opportunities for large NFT owners in a GameFi collection.
+
+* [Rentable](https://beta.rentable.world/), a generalist protocol for NFT rentals.
+* Ship lending + revenue sharing generated with on [Cometh](https://www.cometh.io/)
+* [Axie Infinity scholarship model](https://www.gfinityesports.com/cryptocurrency/axie-infinity-scholarship-what-is-it-how-to-apply-axs/)
+
+---
+
+If you found this peek into the NTFfi landscape insightful, you are now sitting at the crossroads:
+- you can [read my other articles on NFTs here](https://tokenbrice.xyz/categories/nft/)
+- or [explore the depths of DeFi](https://tokenbrice.xyz/categories/defi/)
+
+Enjoy!
\ No newline at end of file
diff --git a/content/post/2022/tokenbrice-liquity.fr.md b/content/post/2022/tokenbrice-liquity.fr.md
new file mode 100644
index 00000000..4a1c5f2f
--- /dev/null
+++ b/content/post/2022/tokenbrice-liquity.fr.md
@@ -0,0 +1,51 @@
+---
+title : "Annonce : Je rejoins Liquity pour soutenir la croissance de la DeFi inarrêtable"
+description : "Où je réfléchis à l'état actuel de la DeFi, et pourquoi j'ai décidé de rejoindre l'équipe de Liquity pour soutenir la développement de l'un des protocoles les plus résilients."
+date: '2022-05-16T01:13:50.191Z'
+categories: [Projects, Stablecoin, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Liquity, Unstoppable DeFi, Lending]
+toc: false
+tocNum: false
+url: joining-liquity
+image: /img/2022/tokenbrice-liquity/cover.png
+difficulty: "beginner"
+---
+
+J'ai été un peu moins impliqué dans la discussion DeFi ces derniers temps et vous pouvez légitimement vous demander pourquoi. Tout d'abord, j'avais besoin de ralentir et de prendre du temps pour moi, et le moment ne pouvait pas être mieux choisi. Pendant mon congé, j'ai eu le temps de réfléchir à ce qui m'a attiré à la DeFi en premier lieu et comment l'espace a évolué depuis que j'ai commencé à m'impliquer il y a environ quatre ans. Voir des protocoles présentant des défauts de conception massifs exploser est rassurant, surtout pour ceux qui l'ont anticipé, mais ce n'est pas exactement ce dont je rêvais lorsque j'ai découvert la DeFi.
+
+### La DeFi s'est elle égarée ?
+
+Il me semble que la DeFi s'est perdue en route. La finance traditionnelle s'est transformée en ce monstre insensé que nous connaissons sans que ce soit voulu ni conçu pour ça : c'est simplement le résultat de chaque personne et entité qui a essayé de tirer la couverture vers elle : **une accumulation des cupidités de chacun**.
+
+Les développements de cette dernière année au sein de la DeFi ont été très similaires à l'avarice de TradFi : en termes de construction d'un système financier résilient et souverain accessible à tous, presque rien n'a été réalisé. Au lieu de cela, la plupart des sorties n'ont rien été d'autre qu'une énième saveur de ponzinomics pour soutenir la cupidité des singes pendant quelques semaines jusqu'à ce qu'ils passent à la prochaine ferme.
+
+Je reste convaincu que ce dont **nous avons besoin sur le long terme, ce sont des systèmes capables de résister aux attaques (potentiellement coordonnées) des États, du crime organisé et des baleines**. La plupart des protocoles actuels disponibles dans la DeFi ne tiendraient pas un jour face à des attaques structurées d'une ampleur significative.
+
+Une grande partie des protocoles "DeFi" sont vulnérables à la bonne vieille attaque "wrench attack" parce qu'ils reposent sur des multisigs : identifier, localiser et menacer une douzaine d'individus n'est pas une tâche ardue, surtout lorsque des milliards sont en jeu. Les attaques économiques peuvent également affecter sérieusement une autre part importante des protocoles DeFi, surtout si elles sont perpétrées par un acteur prêt à perdre de l'argent dans le processus. Enfin, les attaques de gouvernance sont si courantes qu'il n'est même plus excitant de les couvrir. Ce n'est pas la DeFi pour laquelle je me suis engagé.
+
+J'ai construit une plateforme et mis en lumière des projets qui ont apporté quelque chose de nouveau et de pertinent au cours des dernières années. En complément de mes analyses et commentaires, j'ai soutenu plusieurs projets, partagé mes idées avec des équipes créatives et sensées, et parfois participé aux processus de gouvernance. Dernièrement, je me suis senti prêt à assumer un rôle plus actif au sein de l'écosystème : c'est aujourd'hui le jour J ! Je suis persuadé que mon approche honnête, parfois brutale, mais toujours informée, était et est toujours quelque chose qui fait défaut dans l'industrie où les shills sont rois.
+
+#### Annonce : TokenBrice x Liquity
+
+J'ai le plaisir d'annoncer que j'ai rejoint [Liquity](https://www.defiscan.info/protocols/liquity/ethereum) en tant que responsable du marketing pour soutenir la croissance du protocole, en me concentrant principalement sur un projet qui n'a pas encore été annoncé.
+
+Bien que le protocole Liquity n'ait qu'un peu plus d'un an, l'équipe est active et construit depuis bien plus longtemps. Ce qui a été réalisé est vraiment unique, remarquable et nécessaire. Liquity est le **premier et toujours le seul service de prêt disponible en DeFi qui est inarrêtable** & de même, LUSD est le seul stablecoin capable de résister à toutes sortes de censures.
+
+Ce qui m'a toujours étonné, c'est que cet exploit est réalisé sans compromettre l'efficacité du protocole : Liquity est extrêmement économique pour les emprunteurs, et la conception du protocole est d'une rare élégance. Liquity est **construit comme un logiciel critique** : l'échec n'est pas une option. Je suis heureux qu'un tel protocole, fidèle à l'esprit de base de la DeFi, existe, et je suis ravi d'avoir la chance de l'aider à se développer.
+
+Si vous ne connaissez pas encore ce que fait Liquity et pourquoi c'est important, n'hésitez pas à lire cette introduction :
+**[⚖️ Liquity : un service d'emprunt inarrêtable, efficace et innovant](https://tokenbrice.xyz/fr/liquity-protocol/)**.
+
+### Que vais-je faire ?
+
+Chez Liquity, je mènerai les efforts de croissance à travers tous les canaux pertinents : documentation, stratégie de contenu, médias, événements, et plus encore, sans oublier, bien sûr, d'alimenter la mémétique. Je me concentrerai principalement sur un produit à venir, qui n'a pas encore été annoncé, mais je soutiendrai également l'existant de toutes les manières pertinentes. Avec mes efforts pour créer et développer la narrative, ainsi que le soutien de la communauté, je suis sûr que l'heure de gloire de Liquity est encore à venir !
+
+Je suis toujours entièrement convaincu que les grandes choses se construisent du bas vers le haut : je serai en contact étroit avec la communauté de Liquity pour intégrer ses idées et ses commentaires à tous les niveaux possibles.
+
+Bien que je sois enthousiasmé par la mission, mon dernier congé m'a beaucoup appris sur l'équilibre entre vie professionnelle et vie privée : j'ai donc décidé de m'impliquer à temps partiel avec Liquity. Cela me permet de m'assurer que j'ai toujours le temps pour une vie personnelle saine et des passions, y compris la DeFi, comme mener mes propres recherches et les partager avec vous sur ce blog.
+
+En ce qui concerne mes émissions en direct sur Twitch, je ne pense pas que je retrouverai le rythme hebdomadaire que j'avais auparavant, mais je n'exclus pas quelques émissions occasionnelles pour discuter de protocoles et de sujets pertinents.
+
+Je suis ravi de cette nouvelle étape de mon voyage et impatient de partager plus avec vous concernant ce qui est à venir pour la DeFi inarrêtable.
+
+🤗 Merci à tous mes lecteurs et auditeurs pour votre soutien jusqu'à présent. J'ai plusieurs articles de blog à venir avec des idées uniques à partager avec vous dans les mois à venir, alors restez à l'écoute !
diff --git a/content/post/2022/tokenbrice-liquity.md b/content/post/2022/tokenbrice-liquity.md
new file mode 100644
index 00000000..d2a98c00
--- /dev/null
+++ b/content/post/2022/tokenbrice-liquity.md
@@ -0,0 +1,51 @@
+---
+title: "Announcement: Joining Liquity to bolster the growth of unstoppable DeFi"
+description: "Where I reflect on the current state of DeFi, and why I decided to join Liquity's team to support the growth of one of DeFi's most resilient protocols."
+date: '2022-05-16T01:13:50.191Z'
+categories: [Projects, Stablecoin, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Liquity, Unstoppable DeFi, Lending]
+toc: false
+tocNum: false
+url: joining-liquity
+image: /img/2022/tokenbrice-liquity/cover.png
+difficulty: "beginner"
+---
+
+I've been a little less involved in the DeFi discussion lately and you might righfully wonder why. First, I needed to slow down and take some time for myself, and the timing could not be better. While I was off, I had the time to reflect on what drew me to DeFi in the first place and how the space has evolved since I started getting involved about four years ago. Watching protocols with massive design flaws blowing up is reassuring, especially to those who anticipated it, but not exactly what I dreamed of when I discovered DeFi.
+
+### Has DeFi lost its way?
+
+To me, it seems like we've lost our ways. TradFi turned into the non-sensical monster we know not on purpose nor by design: it was simply the result of every person and entity trying to pull the blanket to themselves: **an accumulation of individual's greed**.
+
+The developments during this last year in DeFi felt very similar to TradFi's avarice: in terms of building a resilient and self-sovereign financial system for all, close to nothing was achieved. Instead, most of the releases were focused on delivering yet another flavor of ponzinomics to sustain the greed of apes for a few weeks until they move to the next shiny farm.
+
+I remain convinced that what **we need in the end-game are systems able to resist the (potentially coordinated) attacks of states, organized crime, and whales**. Most of the current protocols available in DeFi would not stand a day against structured attacks of significant magnitude.
+
+A large share of "DeFi" protocols are vulnerable to the good old wrench attack because of their reliance on multisigs: identifying, locating and threatening a dozen individuals is not an arduous task, especially when billions are at stake. Economic attacks can also seriously affect another significant share of DeFi protocols, especially if perpetrated by an actor willing to burn money in the process. Finally, governance attacks are so commonplace it's not even exciting to cover them anymore. It is not the DeFi I signed up for.
+
+I've built a platform and shed light on the projects that brought something new and relevant to the table during the last few years. Complimentary to my analysis and commentaries, I've supported several projects, shared my insights with creative and sensible teams, and sometimes been involved in the governance processes. Lately, I've felt ready to assume a more active role within the ecosystem: today is the day! I'm confident my honest, sometimes brutal, yet always informed approach was and still is something lacking in the industry where shills are king.
+
+### Announcing: TokenBrice x Liquity
+
+I'm delighted to announce that I've joined [Liquity](https://www.defiscan.info/protocols/liquity/ethereum) as Head of Marketing to support the growth of protocol, mainly focusing on a yet-to-be-announced project.
+
+While the Liquity protocol is just over a year old, the team has already been active and building for much longer. What has been achieved is truly unique, remarkable, and needed. Liquity is the **first and still only lending service available in DeFi that is unstoppable** & likewise, LUSD is the only stablecoin capable of resisting all kinds of censorships.
+
+What always amazed me is that this feat is delivered without compromising on the protocol's efficiency: Liquity is extremely cost-efficient, and the protocol's design is one of rare elegance. Liquity is **built like mission-critical software**: failure is not an option. I'm glad such a protocol, truthful to the root spirit of DeFi, exists, and I'm thrilled to get the chance to help it grow.
+
+If you're not familiar yet with what Liquity does and why it matters, feel free this intro:
+**[⚖️ Liquity: an unstoppable, efficient and innovative borrowing service](https://tokenbrice.xyz/liquity-protocol/)**
+
+### What will I do?
+
+At Liquity, I'll spearhead the growth efforts through all relevant channels: documentation, content strategy, media, events, and more, without forgetting, of course, to fuel the memetic. While I'll mostly focus on an upcoming and yet to be announced product, I'll also support the existing one in all relevant ways. With my efforts to craft and grow Liquity's narrative, the community's support, I'm confident Liquity's prime time is yet to come!
+
+I'm still entirely convinced that great things are built from the bottom-up: I'll be in close touch with the Liquity's community to incorporate its insights and feedback at every possible level.
+
+While I'm excited by the mission, my latest time-off taught me a lot about work/life balance: therefore, I've decided to keep my involvement with Liquity part-time. It lets me make sure I still have the time for a healthy personal life and hobbies, including DeFi, such as conducting my research and sharing them with you on this blog.
+
+Regarding my live shows on Twitch, I don't think I'll get back to the weekly rhythm I used to have, but I'm not excluding some occasional shows to discuss relevant protocols and topics.
+
+I'm thrilled for this next step of my journey and eager to share more with you regarding what is coming next for unstoppable DeFi.
+
+🤗 Thanks to all my readers and listeners for your support so far. I have several upcoming blog posts with unique insights to share with you in the coming months, so stay tuned!
diff --git a/content/post/2022/unstoppable-defi.fr.md b/content/post/2022/unstoppable-defi.fr.md
new file mode 100644
index 00000000..0d2dab2f
--- /dev/null
+++ b/content/post/2022/unstoppable-defi.fr.md
@@ -0,0 +1,246 @@
+---
+title: "Dans les coulisses du théâtre de la décentralisation : étude de l’inaltérabilité des protocoles DeFi"
+description: "De la centralisation totale aux protocoles inarrêtables : définition et analyse du spectre des différents niveaux de résilience des protocoles DeFi"
+date: '2022-05-18T01:13:50.191Z'
+categories: [Analysis]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Liquity, LUSD, LQTY, Curve, Uniswap, Pooltogether, Chainlink, Oracles]
+toc: true
+tocNum: true
+url: unstoppable-defi
+image: /img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.png
+difficulty: "expert"
+---
+
+La finance décentralisée a permis l’émergence de protocoles autonomes dont les fonctionnalités sont assurées par des smart contracts parfois immuables, permettant à des individus du monde entier d’utiliser des services financiers tout à la fois souverains, accessibles mais aussi plus efficaces et résilients que ceux disponibles en finance classique. Voilà la belle histoire qu’on raconte aux nouveaux arrivants pour les endormir : la réalité est bien plus nuancée.
+
+Effectivement, il y a bien **une poignée de protocoles qui correspondent à cette réalité,** mais la plupart sont loin d’être à la hauteur. Quand les taureaux sont de sortie, l’intérêt pour la résilience des protocoles est généralement très faible : la seule chose qui importe ce sont les appréciations de prix. Mais les ours ont fait leur grand retour, et avec vient heureusement un regain d’intérêt pour ces sujets.
+
+L’implosion récente de l’écosystème Luna et de son stablecoin associé, UST, aura, je l’espère, servi de piqûre de rappel pour certains. C’était hélas une catastrophe **parfaitement évitable**. Le modèle utilisé pour ce stablecoin et ses défauts étaient déjà connus, avec de nombreuses précédentes instances couvertes à l’époque sur ce blog : BAC, MIC, ESD, DSD, etc. (au niveau applicatif sur Ethereum plutôt que protocolaire, mais avec les mêmes problèmes de fond). Tous ont connu la même fin : une spirale interminable qui les amène toujours plus proche du 0 absolu.
+
+
+Face à cet événement, de nombreux investisseurs ont pris conscience que tous les stablecoins ne se valaient pas et cherchent à se renseigner davantage sur la résilience des nombreux stablecoins disponibles sur le marché ainsi que la robustesse de différents protocoles DeFi en général. Je saisis donc ce moment exceptionnel pour discuter de ce sujet essentiel pour la pérennité de la DeFi qui me passionne depuis longtemps.
+
+En effet, l’année dernière je vous proposais déjà une analyse exhaustive des risques encourus sur les services d’emprunts en DeFi et comment les évaluer. **[Cet article](https://tokenbrice.xyz/fr/marche-monetaire-risque/)** est toujours d’actualité et sa lecture est fortement recommandée pour tout investisseur avisé.
+
+Trêve d’introduction, venons au fait, en commençant par définir le terme "inarrêtable" et ce qu’il implique concrètement au niveau d’un protocole.
+
+
+## Qu’est-ce qu’un protocole DeFi inarrêtable ?
+
+Au niveau le plus basique, on peut qualifier **un protocole DeFi d’inarrêtable[^précisions-d’inarrêtable] lorsque ses fonctions essentielles sont assurées par des smart contracts qui ne sont pas modifiables et qu’il ne requiert pas d’intervention externe pour subsister.**
+
+À cette définition plutôt simple et directe, je dois néanmoins ajouter de nombreuses notes et précisions pour couvrir la diversité des protocoles DeFi et des cas d’utilisation qu’ils desservent.
+
+
+### ⚠️ Dépendances tierces des protocoles
+
+En DeFi, il est extrêmement rare qu’un protocole fasse tout par lui-même. Le plus souvent, un protocole donné s’appuie sur différents protocoles tiers. Le cas le plus courant et le plus connu est bien sûr celui de l’oracle – la source de prix pour les actifs – un élément essentiel pour les services d’emprunts notamment.
+
+
+#### Dépendance aux oracles comme ChainLink
+
+En la matière, l’oracle le plus utilisé est [ChainLink](https://www.defiscan.info/protocols/chainlink-oracles/ethereum). Bien que techniquement robuste, l’industrie a eu récemment droit à un rappel grâce à Chris Blec et quelques autres acteurs soucieux de la résilience du service : les oracles de ChainLink sont susceptibles d’être manipulés ou censurés. Le vecteur d’attaque le plus risqué semble être **la multisig 3/20** qui permet de changer immédiatement la source de prix pour un actif donné.
+
+Concrètement, cela signifie que si 3 personnes se synchronisent parmi ces 20, ils pourraient changer l’oracle ETH/USD par exemple pour un oracle maison qui retourne un prix de $1 et quasiment tous les prêts DeFi seraient liquidés dans la foulée. Il semble assez peu probable néanmoins que des gens membres de l’équipe ChainLink ou proches de celle-ci réalisent une telle attaque.
+
+Le plus gros risque semble donc être au niveau d’une attaque perpétrée par un acteur externe qui voudrait nuire à l’ensemble de la DeFi. En effet, avec une multisig aussi permissif, il “suffirait” d’identifier 3 membres ou plus de ce multisig, les kidnapper et les menacer pour changer une source de prix de ChainLink. C’est la fameuse “🔧 wrench attack” : qu’importe la sécurité des smart contracts, s’ils sont administrés par une multisig, ils sont vulnérables à ce type d’attaque qui passe par les personnes derrière les protocoles plutôt que le code directement.
+
+L’essentiel du problème ici ce n’est pas l’existence de ce multisig, nécessaire pour mettre à jour et améliorer les services que ChainLink apporte, mais son paramétrage :
+
+1. 3/20 c’est extrêmement permissif et plus risqué d’un point de vue 🔧 wrench attack que 3/6 par exemple (qui aurait moins de cibles potentielles pour réaliser l’attaque). Un nombre plus raisonnable et aligné avec ce qu’il se fait habituellement pour 20 signataires au total serait quelque chose entre 8 et 12 requis.
+2. Absence de timelock : les changements sont donc immédiats.
+
+**⚠️ Mise à jour - 27 Mai** : Le 23 Mai (5 jours après la publication de cet article), la paramétrage de la Multisig a évolué pour devenir 4/9, offrant une meilleure protection contre les 🔧 wrench attack, mais il n'y a toujours pas de timelock.[^chainlink-multisig].
+
+#### Dépendance à d’autres protocoles moins résilients que le protocole de base
+
+Un des éléments les plus fascinants en DeFi, c’est la composabilité : les protocoles s’intègrent et s’utilisent les uns et les autres. Si cela permet l’émergence de synergies et de cas d’utilisation innovants, cela vient également avec des risques additionnels.
+
+Sans trop le détailler, puisqu’on y reviendra ensuite, on va prendre en exemple ici PoolTogether, un des protocoles les plus résilients de la DeFi et quasi–inarrêtable. Le quasi, il le doit à ses dépendances externes et plus précisément les sources de rendement utilisées : Compound ou Aave.
+
+En effet, les smart contracts de PoolTogether sont totalement immuables sauf pour la partie qui gère l’allocation des prix (v4), mais les fonds sont déployés dans des protocoles qui sont eux alimentés par des smart contracts pouvant être modifiés (nécessaire, par exemple, pour l'ajout d'un nouveau collatéral mais c'est aussi un vecteur d'attaque potentiel et un risque réel, cf xSUSHI sur Aave[^aave-xSUSHI])
+
+**La règle générale, c’est qu’un protocole est aussi résilient que le maillon le plus fragile de sa chaîne de composabilité**. Cette règle n’est pas absolue, car il reste possible de mitiger ou de contenir l’exposition prise avec une intégration, en implémentant par exemple de la redondance, comme on le verra plus bas lors des analyses détaillées.
+
+
+### ⚠️ Accès aux protocoles : la question des sites webs (front-end)
+
+Sur ce sujet, deux questions essentielles se posent :
+
+1. Le point d’accès au protocole (= le site web / front-end) est-il résilient / peut-il être censuré, par exemple par un acteur étatique ?
+2. Le site est-il sécurisé ? Peut-il être attaqué par un acteur malveillant ?
+
+#### Risque de censure des front-end
+
+Ici, il faut commencer par rappeler un point absolument fondamental : un service DeFi existe grâce à un jeu de smart contracts. Il est **tout à fait possible d’interagir avec n’importe quel service DeFi en passant directement par les contrats** – et donc, même si leur site venait à être inaccessible. Bien sûr, tous les utilisateurs de la DeFi n’ont pas la compétence technique pour interagir avec des smart contracts directement, et c’est pourquoi **la question des front-end reste importante**.
+
+Ainsi, les protocoles qui tiennent à maximiser leur résilience se doivent de réfléchir à cette question. Il y a ici deux approches principales qui peuvent être cumulées.
+
+Tout d’abord, un protocole peut avoir **plusieurs points d’accès** qui permettent l’accès à son service : si l’un d’eux venait à être inaccessible, d’autres resteront en ligne, n’entraînant ainsi qu’un désagrément mineur pour les utilisateurs du service. Par exemple, [Aave](https://www.defiscan.info/protocols/aave/ethereum) peut être utilisé via le site principal app.aave.com, mais également grâce à des outils comme [DeFiSaver](https://defisaver.com/), [InstaDapp](https://instadapp.io/) et de nombreux autres.
+
+Néanmoins, la plupart de ces sites restent hébergés par des **services centralisés** qui pourraient tous être censurés en même temps : c’est plus de travail, mais c’est techniquement possible. Pour remédier à cette limite, il reste une autre option : avoir un ou plusieurs **sites hébergés via une solution décentralisée comme [IPFS](https://ipfs.io/)**.
+
+Pour finir, en matière de résilience du front-end, la palme de l’approche la plus originale, élégante et efficace déployée à ce jour reste sans doute celle du protocole [Liquity](https://www.defiscan.info/protocols/liquity/ethereum). En effet, Liquity n’a pas de site officiel pour son application déployé et géré directement par l’équipe. À la place, l’équipe fournit **un kit pour déployer un front-end** de Liquity, utilisable par tous. Cela permet au projet d’avoir [une myriade de sites différents permettant d’utiliser son service](https://www.liquity.org/frontend), dont certains sont hébergés sur IPFS :
+
+")
+
+
+#### Risques de sécurité des front-end
+
+Enfin, il ne faut pas oublier qu’aussi résilient que les smart contracts puissent être, un front-end reste un site web qui même s’il n’est pas censuré **peut être susceptible de subir des attaques** plus ou moins conséquentes : les sites des échanges décentralisés SpiritSwap ou bien encore QuickSwap ont par exemple récemment [fait les frais d’un tel scénario](https://twitter.com/QuickswapDEX/status/1525306033400188928?s=20&t=UKpcM2Gu6nZ9Kgl65kmp3w).
+
+En l’occurrence, le vecteur d’attaque est lié au gestionnaire de nom de domaine (GoDaddy) utilisé par le service. D’autres types d’attaques sont envisageables : par exemple, les injections de code par le biais d’un service tiers que le site intègre, comme on a également pu le voir très récemment sur EtherScan et de nombreux autres sites à la suite de la compromission du tracker publicitaire utilisé (CoinZilla).
+
+
+### ℹ️ Limites des protocoles inarrêtables
+
+Tous les cas d’utilisation ne peuvent pas être couverts par des protocoles inarrêtables. En effet, en fonction de la complexité d’un protocole, il est parfois impossible d’éviter toute dépendance à un autre protocole lui-même censorable au moins en partie.
+
+Enfin, il faut également garder en tête la contrepartie qui vient avec l’immutabilité des smart contracts des protocoles inarrêtables : **une mise à jour de ceux-ci est techniquement impossible**.
+
+Ainsi, lorsqu’un protocole inarrêtable doit évoluer, il n’y a qu’un seul chemin possible : déployer une nouvelle version du protocole (avec son nouveau jeu de contrats immuables) et encourager la **migration** de ses utilisateurs vers celle-ci. C’est par exemple ce qu’a fait Uniswap à deux reprises, avec la migration vers la version 2 en Mai 2020[^UNIv2] puis un nouvelle fois un an plus tard avec la sortie de Uniswap v3 en Mai 2021[^UNIv3].
+
+
+
+En fonction des différences entre les versions, le protocole peut également proposer un outil pour faciliter la migration comme ce fut le cas pour UNIv1⇒UNIv2, mais impossible pour UNIv2⇒UNIv3 principalement à cause de l’introduction de la concentration de la liquidité.
+
+{{< notice note >}}
+Pour être exhaustif sur l’analyse coût/bénéfice des contrats immuables, rappelons qu’ils rendent les 🔧 wrench attack impossibles et peuvent également présenter un intérêt du point de vue réglémentaire.
+{{< /notice >}}
+
+## Le spectre de la résilience
+
+Maintenant que la définition d'inarrêtable avec tout ce qu’elle implique a été détaillée, je vous propose d’en venir directement à l’analyse. Avant de creuser les protocoles pertinents, je vous propose un spectre qui met en lumière différents niveaux de résilience :
+
+
+
+Détailler des protocoles centralisés ou “DINO” (Decentralized in Name Only), qui n’ont de décentralisé que le nom, n'est ni très excitant ni intéressant, je vous laisse donc creuser par vous-même. Analysons plutôt des protocoles qui se situent sur la partie la plus palpitante du spectre : à la droite de MakerDAO.
+
+## Analyse des DEX les plus résilients
+
+Avant d’en venir à la résilience d’Uniswap et de Curve, il faut rappeler quelques éléments importants sur les échanges décentralisés. Concrètement, ils ont deux types d’utilisateurs qui assument des niveaux de risques bien différents :
+
+
+1. Les utilisateurs qui échangent des tokens grâce aux DEX. Ceux-ci supportent les risques liés aux smart contracts des DEX pour le temps du swap seulement (ainsi que ceux lié aux “approve” illimité si le contrat du DEX venait à être compromis et que celui-ci est modulable)
+2. Les apporteurs de liquidité, qui sont exposés tant que leur position est maintenue.
+
+Sur Uniswap comme sur Curve, **les contrats relatifs aux deux situations sont immuables** : il est par exemple techniquement impossible d’envisager un “rug” des apporteurs de liquidité, ce qui n’est pas le cas pour tous les DEX : une telle attaque était possible sur SushiSwap par exemple à une époque à cause de leur fonction de migration.[^migrator]
+
+
+Il faut noter également que les DEX s’appuyant sur un Automated Market Maker comme Uniswap ou Curve n’ont **pas besoin d’oracle pour fonctionner**, ce qui réduit grandement leur dépendance à des services tiers potentiellement censorables.
+
+Enfin, et ce sera le dernier point de contexte pour les DEX : même si les contrats sont immuables, le risque n’est pas nul pour les apporteurs de liquidité qui assument tous les risques liés aux tokens impliqués dans la paire. La règle générale ici est similaire à celle de la chaîne de composabilité : **une position LP donnée est aussi risquée que son token le plus dangereux**.
+
+{{< notice note >}}
+La question du front-end pour les DEX est un peu moins critique puisque de nombreux points d’accès existent. Les utilisateurs les plus malins passent même par un agrégateur d’échanges décentralisés, comme [ParaSwap](https://paraswap.io).
+{{< /notice >}}
+
+### Uniswap
+
+Sur [Uniswap](https://uniswap.org/) v1, v2 et v3, les fonctions essentielles sont assurées par des contrats immuables. Depuis [Uniswap V2](https://www.defiscan.info/protocols/uniswap-v2/ethereum), la gouvernance peut voter néanmoins l’introduction d’un frais administratif[^UNI-fee-switch] (= pas pour les LP mais pour le protocole), comme c’est déjà le cas sur Curve.
+
+Ici, le cas est donc très simple. S’il y a certes une gouvernance, la bonne nouvelle (moins pour les possesseurs d’UNI), est que ce qu’elle peut faire est très limité. **Aucune saisie ou migration des fonds n’est possible**. Outre le frais, elle gère des sujets tels que le déploiement d’Uniswap sur une nouvelle chaîne, l’ajout de nouveaux tiers de frais (1bps pour les stablecoins), ou encore l’utilisation de la trésorerie du protocole[^UNI-treasury], par exemple pour financer des campagnes de liquidity mining ou encore pour distribuer des UNI à des gens sympathiques qui le demandent, sans aucune forme de limite ou comptabilité[^UNI5].
+
+### Curve Finance
+
+[Curve Finance](https://curve.fi/) est un autre exemple de DEX des plus résilient avec une approche tout aussi intéressante. Ici encore, les fonctions de base sont assurées par des contrats immuables. Néanmoins, Curve a aussi une “Emergency DAO” dont les membres sont élus par la gouvernance. Cette Emergency DAO peut “tuer” une pool (seulement celles qui ont moins de deux mois et ne sont pas des factory pools) : toutes les fonctions sauf le retrait sont désactivées. Cela permet d’éviter des pertes de fonds additionnels si un problème venait à émerger avec les contrats de Curve. L'Emergency DAO peut également "tuer" une jauge - le contrat qui gère les récompenses en CRV (et autres tokens potentiels) pour les apporteurs de liquidité. Les jauge "tuées" peuvent être ressucitées par la suite par la DAO principale.
+
+Tout comme Uniswap, Curve a une gouvernance essentiellement centrée autour de la gestion des émissions du token CRV. Le modèle est néanmoins bien plus raffiné ici, je vous invite à lire mes précédents articles sur le sujet pour mieux le comprendre :
+
+- [⚔ Guerre du CRV : comprendre la course à l'accumulation de la capacité à influencer le protocole Curve Finance](https://tokenbrice.xyz/fr/crv-wars/)
+- [⚔ Guerre du CRV avancée : analyse des protocoles construits sur Curve et Convex ](https://tokenbrice.xyz/fr/crv-wars-l2/)
+
+Contrairement à Uniswap, la participation à la gouvernance de Curve requiert le verrouillage des tokens CRV ( ⇒veCRV) jusqu’à quatre ans pour ceux qui veulent maximiser leur influence. Cela permet ainsi de protéger la gouvernance de différents types d’attaques.
+
+Enfin, la gouvernance gère également une liste blanche des smart contracts autorisés à interagir avec le contrat veCRV [^veCRV-whitelist]: des décisions lourdes de conséquences pour les apporteurs de liquidité sur Curve et possesseurs de CRV sur le long terme.
+
+{{< notice note >}}
+La gouvernance de Curve est une des plus fascinantes à suivre en DeFi. Pour l’aider à prendre des décisions plus éclairées, [une newsletter proposant des analyses de risques des différents protocoles qui demandent une jauge](https://substack.com/profile/66151946-crypto-risk-assessments) s’est mise en place. Je vous en recommande chaudement la lecture, c’est une excellente source pour parfaire sa compréhension des risques en DeFi.
+{{< /notice >}}
+
+## Analyse approfondie des autres protocoles notables
+
+Outre les échanges décentralisés, il y a d’autres types de protocoles qui s’approchent autant que possible de l’extrémité la plus résiliente du spectre. Néanmoins, les cas d’utilisations des protocoles que nous allons détailler maintenant sont plus complexes et ne peuvent pas être desservis, à ma connaissance, sans dépendances à d’autres services plus ou moins censorables.
+
+
+### Liquity
+
+[Liquity](https://www.liquity.org/) est un projet opiniâtre qui vise à créer le système d’emprunt, ainsi que le stablecoin, le plus résilient tout en maintenant un système efficace économiquement pour les emprunteurs. Je ne vais pas trop m’étendre sur ce protocole ici, je vous invite à **[lire l’article dédié](https://tokenbrice.xyz/fr/liquity-protocol/)**.
+
+Concentrons-nous donc sur les points pertinents pour notre sujet du jour :
+
+1. Le code de Liquity est entièrement immuable.
+2. Liquity n’a pas de gouvernance.
+3. Néanmoins, comme tout service d’emprunt, Liquity dépend d’un oracle (prix de ETH en USD). Ici, c’est ChainLink qui est utilisé mais un système de secours est également mis en place. Des calculs permettent de déterminer si la donnée apportée par ChainLink est jugée fiable. Si ça n’est pas le cas, alors le système passe automatiquement sur une source de prix secondaire tant que cela est nécessaire : l’oracle Tellor.[^liquity-oracle-fallback]
+4. Enfin, comme je le mentionnais plus haut, Liquity a également une approche intéressante pour maximiser la décentralisation des front-end.[^liquity-front-end]
+
+Grâce à cette approche, Liquity est le protocole d’emprunt le plus résilient disponible sur Ethereum ce qui permet également à LUSD de rafler le titre de stablecoin le plus solide et décentralisé.[^liquity-disclaimer]
+
+### PoolTogether
+
+[PoolTogether](https://pooltogether.com/) est un protocole fascinant qui explore un concept nouveau : le “sans-perte”. Concrètement, [PoolTogether](https://www.defiscan.info/protocols/pool-together-v5/ethereum) est une loterie où le joueur ne prend aucun risque financier sur son apport principal : le jeu s’appuie entièrement sur le rendement que le principal produit, et le redistribue au différents joueurs en fonction de leur chance au tirage.
+
+
+
+Pour en apprendre plus sur ce protocole, je vous invite une fois de plus à **[lire l’article dédié](https://tokenbrice.xyz/fr/pool-together/)**.
+
+Analysons donc la résilience du protocole. Ici, le principal enjeu est **la source de rendement initiale, qui est externe** : elle provient de services comme Aave ou Compound, qui ne sont pas totalement inarrêtables. Ainsi, un joueur de PoolTogether assume ce risque sur l’ensemble de son dépôt : le principal ainsi que le rendement généré (avant qu’il soit collecté et redirigé).
+
+Malgré cette dépendance tierce, le protocole PoolTogetger est particulièrement résilient. En effet, côté PoolTogether, **les contrats sont aussi immuables que possible**. Concrètement, ils le sont tous (une pool donnée ne peut donc pas changer de source de rendement), sauf pour la partie relative à la distribution des prix, qui n’affecte que le rendement généré. En effet, le modèle de distribution des prix peut évoluer suite à un vote de gouvernance (mainnet) ou à une opération du multisig (Avalanche/Polygon), nécessaire car la gouvernance cross-chain n’est pas encore disponible.
+
+Je trouve ce point fascinant et assez unique en DeFi : PoolTogether est une loterie sans perte, et ce principe de design (financier) se manifeste également au niveau des smart contracts : en excluant un problème avec Aave/Compound ou bug critique dans les contrats de PoolTogether, un joueur ne peut pas perdre son principal – c’est garanti par le code lui-même ; seul le rendement est potentiellement à risque. Et ce, même si l’équipe entière de PoolTogether subit une 🔧 wrench attack, ou que la gouvernance de PoolTogether est totalement capturée. Ainsi **la promesse du no-loss est reflétée au niveau des contrats eux-mêmes**.
+
+En matière de risques, il y a également des nuances et différences entre la V3 et V4 du protocole, le mieux reste encore de lire attentivement [la documentation](https://docs.pooltogether.com/security/risks) plutôt claire sur le sujet.
+
+
+### TrustlessFi 🏗️
+
+[Trustless](https://trustless.fi) est un protocole qui me fascine dernièrement. Il n’est pas encore live, mais je pense que l’approche a beaucoup de mérites. Pour le décrire très simplement, **TrustlessFi c’est un peu comme si Liquity et Reflexer faisaient un enfant ensemble, sur zkSync**.
+
+Ainsi, le but est, comme pour Liquity, de créer un protocole qui sera éventuellement aussi inarrêtable que possible, et le stablecoin associé (HUE) héritera de cette propriété. On retrouve d’autres mécanismes proches de Liquity, comme ETH comme seul collatéral, des liquidations immédiates ou encore la décentralisation des front-end (avec un mécanisme de validation communautaire cette fois-ci).
+
+Côté gouvernance, on a ici une approche similaire au plan de dégouvernance de Reflexer/RAI mais plus engageante : 4 phases sont envisagées, et à chaque étape le contrôle de la Foundation et de la communauté décroît, rendant le protocole de plus en plus immuable. Ces **phases seront implémentées au niveau du code des contrats eux-mêmes** : il est possible de retarder la transition vers une nouvelle phase de 45 jours jusqu'à trois fois si nécessaire, mais c’est impossible d’annuler totalement cette transition.
+
+Il y a également un mécanisme similaire au Dai Saving Rate de Maker-MCD qui permet de participer au système sans avoir forcément besoin de générer de la dette. Les possesseurs de HUE pourront ainsi le staker pour obtenir un rendement provenant des taux d’intérêt payés par les emprunteurs.
+
+Finalement, il y a également de véritables nouveautés fascinantes, comme par exemple le fait que les Troves/CDP seront tokenisés sous forme de NFT, permettant ainsi leur transfert. Ou bien encore, le déploiement de la liquidité en HUE sur Uniswap v3 avec une gestion assurée par le protocole lui-même (HUE/ETH). Au niveau de l’oracle également, on aurait ici enfin une source de prix inarrêtable avec l’utilisation d’Uniswap v3, mais cela vient sans doute avec des risques de manipulation accrus.[^^UNIv3-oracle]
+
+Dans l’ensemble, l’approche part clairement dans la bonne direction, mais il y a de nombreux nouveaux concepts dans ce protocole, il n’est donc pas aisé de se projeter pour envisager le résultat une fois disponible en production pour l’instant.[^trustlessfi-doc]
+
+
+## Conclusion et dernières précisions
+
+J’espère que cet article conséquent pourra servir de référence à tous ceux qui se posent des questions essentielles quant à la résilience des protocoles DeFi. Comme à mon habitude, plutôt que de vous livrer des analyses telles quelles, j’ai essayé de détailler autant que possible la méthodologie et le raisonnement afin de vous permettre d’étudier par vous-même la résilience de tout protocole non mentionné dans cet article.
+
+Pour approfondir, je vous invite chaudement à lire un article que j’ai publié l’année dernière qui est le parfait complément de celui-ci : il se concentre sur les marchés monétaires et services d’emprunts et vous propose là aussi une méthode d’analyse pour évaluer les différents risques potentiels qu’ils impliquent :
+
+**[De l'évaluation du risque sur les marchés monétaires en finance décentralisée](https://tokenbrice.xyz/fr/marche-monetaire-risque/)**
+
+J’imagine qu’une analyse aussi limpide d’un sujet si critique pourrait susciter des émotions plus ou moins positives. Sachez que, comme toujours, mon intention est uniquement **d’informer le plus grand nombre possible de DeFians sur des sujets que j’estime essentiels pour la DeFi en général.**
+
+Toutes mes actions éducatives et pédagogiques en DeFi n’ont pas d’autre objet que de maximiser la résilience et la pertinence de la finance décentralisée sur le long terme. J’espère que les développeurs ou promoteurs de protocoles situés à la gauche de mon spectre d’inaltérabilité suggéré sauront également comprendre et reconnaître ce mandat.
+
+_🙏 Un immense merci à tous les relecteurs et contributeurs qui ont particié à l'élaboration de cet article:_
+
+- _Relecture et clarté de l'expression : [Charles](https://twitter.com/C53300) et [Disiaque](https://twitter.com/disiaque_eth)_
+- _Relecture technique et factuelle: [Taz](https://www.radjaidjah.org/) de DeFi France, [MTorgin](https://twitter.com/MTorgin)_
+
+---
+
+## Notes de bas de page
+
+[^précisions-d’inarrêtable]: J’évoque tout au long de cet article l'inarrêtabilité de certains protocoles DeFi : on parle ici de l’immuabilité du code des smart contracts. L’ordre des transactions sur Ethereum peut malgré tout être manipulé (⇒ MEV) et les mineurs gardent un rôle important (jusqu’à la transition vers PoS). L'inarrêtabilité contractuelle évoquée dans cet article connaît donc des limites infrastructurelles.
+[^aave-xSUSHI]: [Analyse de l'incident](https://governance.aave.com/t/analysis-of-xsushis-incident/6335) sur le forum de gouvernance Aave.
+[^UNIv2]: [Annonce du lancement d’Uniswap V2](https://uniswap.org/blog/launch-uniswap-v2)
+[^UNIv3]: [Annonce du lancement d’Uniswap V3](https://uniswap.org/blog/uniswap-v3)
+[^UNI-fee-switch]: Vous pouvez suivre [les dernières discussions en la matière](https://gov.uniswap.org/t/i-think-it-is-necessary-for-uniswap-concurrently-to-turn-on-the-fee-switch-and-liquidity-mining-incentive/15645) sur le forum de gouvernance d’Uniswap.
+[^migrator]: Plus d’information sur cette fonction tant redoutée dans [cet article dédié de Rugdoc](https://rugdoc.io/education/migrator/).
+[^UNI-treasury]: Entièrement en token UNI, cette trésorerie est assez volatile. Néanmoins, il y a quand même plus de 227M UNI disponibles aujourd’hui, soit environ $1.1B. [OpenOrgs](https://openorgs.info/)
+[^UNI5]: C’est le tristement célèbre vote 005 “DeFi Education Fund”, lisez [le sujet associé sur le forum de gouvernance](https://gov.uniswap.org/t/governance-proposal-005-defi-education-fund/12963) pour plus de contexte.
+[^veCRV-whitelist]: Il y en a trois à l’heure actuelle : Yearn Finance (yveCRV), Convex (cvxCRV) et StakeDAO (sdCRV).
+[^liquity-oracle-fallback]: Cet article propose [une introduction claire au système de gestion d’oracles sur Liquity](https://www.liquity.org/blog/price-oracles-in-liquity).
+[^liquity-front-end]: Plus d’informations [sur le modèle technique et d’incitation pour les opérateurs de front-end Liquity](https://www.liquity.org/blog/liquity-runs-on-decentralized-frontends).
+[^liquity-disclaimer]: Comme vous l’avez sans doute déjà vu, je suis ravi d’avoir [rejoint l’equipe de Liquity très récemment](https://tokenbrice.xyz/fr/joining-liquity/). Je mentionne Liquity dans cet article car c’est un exemple pertinent et instructif de protocole résilient, indépendamment de mes engagements professionnels.
+[^UNIv3-oracle]: Pour vous faire une idée plus précise, Euler Finance propose [un outil permettant de simuler les attaques d'oracle potentielles lorsqu'un TWAP Uniswap V3 est utilisé](https://oracle.euler.finance/).
+[^trustlessfi-doc]: Comme toujours, l'alpha est pour ceux qui creusent et lisent attentivement les footnotes ainsi que [les documentations](https://trustlessfi.notion.site/Trustless-4be753d947b040a89a46998eca90b2c9).
+[^chainlink-multisig]: ChainLink a partagé plus d'information sur ce multisig [dans leur documentation](https://docs.chain.link/docs/using-chainlink-reference-contracts/#updates-to-proxy-and-aggregator-contracts) et vous pouvez vérifier le contrat **[directement sur EtherScan ici](https://etherscan.io/address/0x21f73d42eb58ba49ddb685dc29d3bf5c0f0373ca#readProxyContract)** 
diff --git a/content/post/2022/unstoppable-defi.md b/content/post/2022/unstoppable-defi.md
new file mode 100644
index 00000000..abc85e8f
--- /dev/null
+++ b/content/post/2022/unstoppable-defi.md
@@ -0,0 +1,238 @@
+---
+title: "Behind the scene of the decentralization theater: a study of the inalterability of DeFi protocols"
+description: "From total centralization to unstoppable protocols: a definition and analysis of the spectrum of the different resilience levels of DeFi protocols."
+date: '2022-05-18T01:13:50.191Z'
+categories: [Analysis]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Liquity, LUSD, LQTY, Curve, Uniswap, Pooltogether, Chainlink, Oracles]
+toc: true
+tocNum: true
+url: unstoppable-defi
+image: /img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.png
+difficulty: "expert"
+---
+
+Decentralized finance has allowed the emergence of autonomous protocols whose functionalities are ensured by smart contracts that are sometimes immutable. It enables individuals from all over the world to use financial services that are at the same time sovereign, accessible, and more efficient and resilient than those available in traditional finance. It's the lovely story that newcomers are told to lull them to sleep: the reality is much more nuanced.
+
+Indeed, **a handful of protocols fit this reality,** but most are far from being up to par. When the bulls are out, interest in the resilience of the protocols is generally shallow: the only thing that matters is price appreciation. But the bears have made a comeback, and thankfully it means a renewed interest in these topics.
+
+The recent implosion of the Luna ecosystem and its associated stablecoin, UST, will hopefully serve as a wake-up call for some. It was, unfortunately, a **perfectly avoidable** disaster. The model used for this stablecoin and its flaws were already known, with many previous instances covered on this blog: BAC, MIC, ESD, DSD, etc. (at the application level on Ethereum rather than the protocol level, but with the same fundamental problems). They all had the same end: an endless spiral that brought them closer to absolute 0.
+
+In the face of this event, many investors have become aware that not all stablecoins are created equal and seek to learn more about the resilience of the many stablecoins available on the market and the robustness of different DeFi protocols in general. Therefore, I'm seizing this exceptional moment to discuss this essential topic for the sustainability of DeFi; it has been a passion of mine for a long time.
+
+Indeed, last year I already proposed to you an exhaustive analysis of the risks incurred on the borrowing services in DeFi and how to evaluate them. **[This article](https://tokenbrice.xyz/money-markets-risk/)** is still relevant and a highly recommended read for any informed investor.
+
+Enough with the introduction. Let's get to the point and define the term "unstoppable" and what it implies in concrete terms at a protocol level.
+
+## What is an unstoppable DeFi protocol?
+
+At the most basic level, we can call **a DeFi protocol unstoppable [^precisions-of-unstoppable] when its essential functions are provided by smart contracts that are not modifiable, and it does not require external intervention to subsist.**
+
+To this relatively straightforward definition, I must add many notes and clarifications to cover the diversity of DeFi protocols and their use cases.
+
+### ⚠️ Third-party protocol dependencies
+
+In DeFi, it is infrequent that a protocol does everything by itself. More often than not, a given protocol relies on various third-party protocols. Of course, the most common and well-known case is the oracle - the source of prices for assets - a critical component for borrowing services in particular.
+
+#### Dependence on oracles like ChainLink
+
+In this regard, the most widely used oracle is [ChainLink](https://www.defiscan.info/protocols/chainlink-oracles/ethereum). Although technically robust, the industry recently got a reminder, thanks to Chris Blec and a few other actors concerned about the resilience of the service: ChainLink's oracles are susceptible to manipulation or censorship. The riskiest attack vector seems to be **the 3/20 multisig**, which allows the price source for a given asset to be changed immediately.
+
+Concretely, if three people synchronize among these 20, they could change the ETH/USD oracle, for example, for an in-house oracle that returns a price of $1, and almost all DeFi loans would be liquidated in the process. However, it seems rather unlikely that people on or close to the ChainLink team would carry out such an attack.
+
+The most significant risk seems to be an **attack by an external actor** who would like to harm the whole of DeFi. Indeed, with such a permissive multisig, it would be "enough" to identify three or more members of this multisig, kidnap them and threaten them to change a price source of ChainLink. It is the famous "🔧 wrench attack." No matter how secure the smart contracts are, if they are administered by a multisig, they are vulnerable to this type of attack that goes through the people behind the protocols rather than the code directly.
+
+The main problem here is not the existence of this multisig, which is necessary to update and improve the services that ChainLink provides, but its setting:
+
+1. **3/20 is extraordinarily permissive** and riskier from a 🔧 wrench attack point of view than 3/6, for example (which would have fewer potential targets to perform the attack). A more reasonable number aligned with what is usually done for 20 signers in total would be something between 8 and 12 signers required.
+2. **No timelock**: so changes are immediate.
+
+**⚠️ Update - May 27**: On May 23rd (5 days after the publication of this article), the Multisig setup has been updated to a 4/9, which makes a 🔧 wrench attack harder to perform; there is still no timelock[^chainlink-multisig].
+
+#### Dependence on other protocols that are less resilient than the base protocol
+
+One of the fascinating elements in DeFi is **composability**: protocols integrate and use each other. While this allows for the emergence of synergies and innovative use cases, it also comes with additional risks.
+
+Without going into too much detail, as we will come back to it later, we will take as an example PoolTogether, one of the most resilient protocols of the DeFi and quasi-unstoppable. The quasi comes from its external dependencies and, more precisely, the sources of yields used: Compound or Aave.
+
+Indeed, the smart contracts of PoolTogether are immutable except for the part that manages the price allocation (v4). Still, the funds are deployed in protocols powered by smart contracts that can be altered (such as adding a new collateral, a necessary feature but also a potential attack vector[^aave-xSUSHI])
+
+**The general rule is that a protocol is as resilient as the weakest link in its composability chain**. This rule is not absolute, as it is still possible to mitigate or contain the exposure taken with integrations, for example, by implementing redundancy, as we will see below in the detailed assesments.
+
+### ⚠️ Access to protocols: the question of websites (front-end)
+
+On this topic, there are two key questions:
+
+1. Is the access point to the protocol (= the website/front-end) resilient / can it be censored, for example, by a state actor?
+2. Is the site secure? Can a malicious actor attack it?
+
+#### Risk of censorship of the front-end
+
+Here, I must start by reminding you of a fundamental point: a DeFi service exists thanks to a set of smart contracts. It is **entirely possible to interact with any DeFi service by going directly through the contracts** - and thus, even if their site were to be inaccessible. Of course, not all DeFi users have the technical skills required to interact with smart contracts directly, which is why **the front-end issue remains essential**.
+
+Thus, protocols that maximize their resilience need to think about it. Two main approaches are possible and can be combined.
+
+First, a protocol can have **multiple access points** that allow access to its service: if one of them were inaccessible, others would remain online, thus causing only minor inconvenience to the service users. For example, [Aave](https://www.defiscan.info/protocols/aave/ethereum) can be used through the main app.aave.com site, but also through tools like [DeFiSaver](https://defisaver.com/), [InstaDapp](https://instadapp.io/) and many others.
+
+Nevertheless, most of these sites are still hosted by **centralized services** that could all be censored simultaneously: it's more work, but it's technically possible. To overcome this limitation, another option is available: having one or more **sites hosted via a decentralized solution like [IPFS](https://ipfs.io/)**.
+
+Finally, in terms of front-end resilience, the most original, elegant, and efficient approach deployed to date is probably the one of [Liquity](https://www.defiscan.info/protocols/liquity/ethereum) protocol. Indeed, Liquity does not have an official website for its application deployed and managed directly by the team. Instead, the team provides **a kit to deploy a front-end** of Liquity, usable by all. Because of this approach, the project now has [a myriad of different sites to use its service](https://www.liquity.org/frontend), some of which are hosted on IPFS:
+
+")
+
+#### Security risks of front-end
+
+Finally, one should not forget that a front-end remains a website. Even if it is not censored, **it may be susceptible to attacks** of varying degrees of severity: the websites of the decentralized exchange SpiritSwap and QuickSwap, for example, have recently [suffered from such a scenario](https://twitter.com/QuickswapDEX/status/1525306033400188928?s=20&t=UKpcM2Gu6nZ9Kgl65kmp3w).
+
+The attack vector is linked to the service's domain name manager (GoDaddy). Other types of attacks are possible: for example, code injections through a third-party service that the site integrates, as we recently saw on EtherScan, as an advertising tracker they use was compromised (CoinZilla).
+
+
+### ℹ️ Limitations of unstoppable protocols
+
+Unstoppable protocols cannot cover all use cases. Indeed, depending on the complexity of a protocol, it is sometimes impossible to avoid any dependency on another protocol that is itself at least partially censurable.
+
+Finally, one must keep in mind the counterpart that comes with the immutability of the smart contracts of unstoppable protocols: **an update of these is technically impossible**.
+
+Thus, when an unstoppable protocol needs to evolve, there is only one possible path: deploy a new version of the protocol (with its new set of immutable contracts) and encourage the **migration** of its users to it. This is, for example, what Uniswap has done twice, with the migration to version 2 in May 2020 [^UNIv2] and then again one year later with the release of Uniswap v3 in May 2021 [^UNIv3].
+
+
+
+Depending on the differences between the versions, the protocol may also offer a tool to facilitate migration, as was the case for UNIv1⇒UNIv2. However, it was impossible for UNIv2⇒UNIv3 mainly because of the introduction of liquidity concentration.
+
+{{< notice note >}}
+To be exhaustive on the cost/benefit analysis of immutable contracts, don't forget that they make 🔧 wrench attacks impossible and may also be of interest from a legal perspective.
+{{< /notice >}}
+
+## The Spectrum of Resilience
+
+Now that we've established the definition of "unstoppable" with all the necessary precisions, I propose to move directly to the analysis. Before digging into the relevant protocols, let me offer you a spectrum that highlights different levels of resilience:
+
+
+
+Detailing centralized or "DINO" (Decentralized in Name Only) protocols, decentralized in name only, is not very insightful, so I will let you dig for yourself. Instead, let's look at protocols on the more exciting end of the spectrum: to the right of MakerDAO.
+
+## Analysis of the most resilient DEX
+
+Before we get to the resilience of Uniswap and Curve, we need to recall a few crucial things about decentralized exchanges. Specifically, they have two types of users who assume pretty different levels of risk:
+
+
+1. Users who exchange tokens through the DEX. These users bear the risks linked to the DEX smart contracts for the time of the swap only (as well as those related to unlimited "approve" if the DEX contract is compromised and is not immutable)
+2. Liquidity providers are exposed as long as their position is maintained.
+
+On Uniswap as on Curve, **the contracts relating to the two situations are immutable**. It is technically impossible to envisage a "rug" of the liquidity providers, which is not the case for all DEXs: such an attack was possible on SushiSwap once because of their migration function. [^migrator]
+
+
+Please note that DEXs relying on an Automated Market Maker such as Uniswap or Curve do **not need an oracle to work**, which significantly reduces their dependency on potentially censorable third-party services.
+
+Finally, even if the contracts are immutable, the risk is not zero for the liquidity providers who assume all the risks related to the tokens involved in the pair. The general rule here is similar to that of the composability chain: **a given LP position is as risky as its most dangerous token**.
+
+{{< notice note >}}
+The front-end issue for DEX is less critical since many access points exist. The most competent users go through a decentralized exchange aggregator, like [ParaSwap](https://paraswap.io).
+{{< /notice >}}
+
+### Uniswap
+
+The contracts core functions are completely immutable on [Uniswap](https://uniswap.org/) v1, v2 and v3. The [Uniswap V2](https://www.defiscan.info/protocols/uniswap-v2/ethereum) release markededthe introduction of an administrative fee the governance can decided to turn on[^UNI-fee-switch] (= to the protocol), as already seen on Curve.
+
+Here, the case is straightforward. If there is indeed a governance, the good news (less for UNI holders) is that what it can do is very limited. **No seizure or migration of funds is possible**. Apart from the fee, it manages matters such as deploying Uniswap on a new chain, adding a new tier of fees (1bps for stablecoins), or using the protocol's treasury [^UNI-treasury], for example, to fund liquidity mining campaigns or to distribute UNI to friendly people who ask for it, without any limit or accounting [^UNI5].
+
+### Curve Finance
+
+[Curve Finance](https://curve.fi/) is another example of resilient DEX with an equally exciting approach. Again, the essential functions are provided by immutable contracts. Nevertheless, Curve also has an "Emergency DAO" whose members are elected by the governance. This Emergency DAO can "kill" a pool (only if pools that are younger than 2 months old and not factory pools): all functions except withdrawal are disabled. It prevents further loss of funds if a problem emerges with Curve's contracts. The Emergency DAO can also kill a gauge - that is the reward contract handling CRV (and potentially other token) rewards. Killed gauges can then be resurrected by the main DAO.
+
+Like Uniswap, Curve's governance is centered around the management of CRV token issuance and management. However, the model is much more refined here; I invite you to read my previous articles on the subject to better understand it:
+
+- [⚔ CRV War: Understanding the race to accumulate the ability to influence the Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)
+- [⚔ Advanced CRV Wars: Analysis of Protocols Built on Curve and Convex ](https://tokenbrice.xyz/crv-wars-l2/)
+
+Unlike Uniswap, participation in Curve's governance requires locking CRV tokens ( ⇒veCRV) for up to four years for those who want to maximize their influence. Thus, it protects the governance from different types of attacks.
+
+Finally, the governance also manages a whitelist of smart contracts authorized to interact with the veCRV contract [^veCRV-whitelist]: such decisions are consequential for liquidity providers on Curve and CRV owners in the long run.
+
+{{< notice note >}}
+Curve's governance is one of the most fascinating to follow in DeFi. To help it make more informed decisions, [a newsletter offering risk assesments of the various protocols that require a gauge](https://substack.com/profile/66151946-crypto-risk-assessments) has been set up. I highly recommend reading it; it's an excellent source for perfecting one's understanding of risk in DeFi.
+{{< /notice >}}
+
+## In-depth analysis of other notable protocols
+
+In addition to decentralized exchanges, other types of protocols get as close as possible to the most resilient end of the spectrum. Nevertheless, the use cases of the protocols we will detail now are more complex and cannot be served, to my knowledge, without dependencies on other more or less censorable services.
+
+
+### Liquity
+
+[Liquity](https://www.liquity.org/) is a dogged project that aims to create the most resilient borrowing system and stablecoin while maintaining an economically efficient system for borrowers. I won't go into too much detail about this protocol here, I invite you to **[read the dedicated article](https://tokenbrice.xyz/liquity-protocol/)**.
+
+So let's focus on the points relevant to our topic of the day:
+
+1. Liquity's code is entirely immutable.
+2. Liquity has no governance.
+3. Nevertheless, like any borrowing service, Liquity depends on an oracle (ETH price in USD). Here, ChainLink is used, but a backup system is also in place. Calculations are made to determine if the data provided by ChainLink is deemed reliable. If it is not, the system automatically switches to a secondary price source as long as it is needed: the Tellor oracle. [^liquity-oracle-fallback]
+4. Finally, as I mentioned above, Liquity also has an interesting approach to maximizing front-end decentralization.[^liquity-front-end]
+
+Thanks to this approach, Liquity is the most resilient borrowing protocol available on Ethereum, allowing LUSD to sweep the title of the most robust and decentralized stablecoin.[^liquity-disclaimer]
+
+### PoolTogether
+
+[PoolTogether](https://pooltogether.com/) is a fascinating protocol that explores a new concept: "no-loss". Concretely, [PoolTogether](https://www.defiscan.info/protocols/pool-together-v5/ethereum) is a prize-linked savings account where the player takes no financial risk on his principal: the game relies entirely on the yield produced by the principal. It redistributes it to the different players according to their luck at the draw.
+
+
+
+To learn more about this protocol, I invite you once again to **[read the dedicated article](https://tokenbrice.xyz/pool-together/)**.
+
+So let's analyze the resilience of the protocol. Here, the main issue is **the initial source of yield, which is external**: it comes from services like Aave or Compound, which are not unstoppable. Thus, a PoolTogether player assumes this risk on his entire deposit: the principal and the yield generated (before it is collected and redirected).
+
+Despite this third-party dependency, the PoolTogetger protocol is remarkably resilient. Indeed, on the PoolTogether side, **contracts are as immutable as possible**. Specifically, they are all immutable (so a given pool cannot change its source of yield), except for the prize distribution part, which only affects the yields generated. Indeed, the prize distribution model can change following a governance vote (mainnet) or a multisig operation (Avalanche/Polygon), which is necessary because cross-chain governance is not yet available.
+
+This point is fascinating and unique in DeFi: PoolTogether is a no-loss prize-linked savings account. This (financial) design principle also manifests itself in smart contracts. A player cannot lose his principal, excluding a problem with Aave/Compound or a critical bug in the PoolTogether contracts. The code itself guarantees this; only the return is potentially at risk. Even if the entire PoolTogether team suffers a 🔧 wrench attack or PoolTogether's governance turns hostile. So **the promise of no loss is upheld at the smart-contract level**.
+
+There are also nuances and differences between V3 and V4 of the protocol as far as risks are concerned. The best thing is to carefully read [the documentation](https://docs.pooltogether.com/security/risks).
+
+### TrustlessFi 🏗️
+
+[Trustless](https://trustless.fi) is a protocol that I've been fascinated with lately. It's not live yet, but I think the approach has a lot of merits. To describe it very simply, **TrustlessFi is like Liquity and Reflexer having a child together on zkSync**.
+
+So the goal is, as with Liquity, to create a protocol that will eventually be as unstoppable as possible, and the associated stablecoin (HUE) will inherit this property. Other mechanisms are similar to Liquity, such as ETH as the only collateral, immediate liquidations, or decentralization of the front-end (with a community validation mechanism this time).
+
+On the governance side, we have here an approach similar to the Reflexer/RAI de-governance plan but more engaging: 4 phases are envisaged, and at each stage, the control of the Foundation and the community decreases making the protocol more and more immutable. These **phases will be implemented in the code of the contracts themselves**: it is possible to delay the transition to a new phase by 45 days up to three times if necessary, but it is impossible to cancel this transition altogether.
+
+A mechanism similar to Maker-MCD's Dai Saving Rate allows participation in the system without necessarily needing to generate debt. HUE owners will be able to stake it to get a return from the interest rates paid by the borrowers.
+
+Finally, there are also some fascinating new features, such as that Troves/CDPs will be tokenized as NFTs, allowing their transfer. Another example is the deployment of HUE liquidity in Uniswap v3 (HUE/ETH), managed by the protocol. At the oracle level, we would also have an unstoppable price source using Uniswap v3, but this undoubtedly comes with increased manipulation risks.
+
+Overall, the approach is going in the right direction. Still, there are many new concepts in this protocol, so it is not easy to anticipate the result once it is available in production for the time being [^trustlessfi-doc].
+
+## Conclusion and last clarifications
+
+I hope that this definite article can serve as a reference for all those who have essential questions about the resilience of DeFi protocols. As usual, rather than delivering assesments as is, I have tried to detail as much as possible the methodology and reasoning so that you can study for yourself the resilience of any protocol not mentioned in this article.
+
+To go deeper, I warmly invite you to read an article I published last year, which perfectly complements this one, focused on money markets. It proposes a method of analysis to evaluate the different potential risks they imply:
+
+**[Assessing risk in decentralized finance: a handbook for money markets](https://tokenbrice.xyz/money-markets-risk/)**
+
+I imagine that such a precise analysis of such a critical subject could arouse more or less positive emotions. Please know that, as always, my intention is only **to inform as many DeFians as possible on matters that I consider essential for DeFi in general.**
+
+My educational and pedagogical actions in DeFi have no other purpose than maximizing the resilience and relevance of decentralized finance over the long term. I hope that developers or promoters of protocols to the left of my suggested resilience spectrum will also understand and recognize this mandate.
+
+_🙏 A huge thank you to all the proofreaders and contributors who participated in the development of this article:_
+
+- _Proofreading and clarity of expression: [Charles](https://twitter.com/C53300) and [Disiaque](https://twitter.com/disiaque_eth)_
+- _Technical and factual proofreading: [Taz](https://www.radjaidjah.org/) from DeFi France, [MTorgin](https://twitter.com/MTorgin)_
+
+---
+
+## Footnotes
+
+[^precisions-of-unstoppable]: I mention throughout this article the unstoppability of some DeFi protocols: we're talking about the immutability of smart contract code here. The order of transactions on Ethereum can still be manipulated (⇒ MEV), and miners keep an essential role (until the transition to PoS). The contractual unstoppability discussed in this article thus has infrastructural limits.
+[^aave-xSUSHI]: [Analysis of the incident](https://governance.aave.com/t/analysis-of-xsushis-incident/6335) on Aave's governance forum.
+[^UNIv2]: [Uniswap V2 launch announcement](https://uniswap.org/blog/launch-uniswap-v2)
+[^UNIv3]: [Announcement of the launch of Uniswap V3](https://uniswap.org/blog/uniswap-v3)
+[^UNI-fee-switch]: You can follow [the latest discussions on the subject](https://gov.uniswap.org/t/i-think-it-is-necessary-for-uniswap-concurrently-to-turn-on-the-fee-switch-and-liquidity-mining-incentive/15645) on the Uniswap governance forum.
+[^migrator]: The infamous migrator function, also present in many SushiSwap fork. More information on this dreaded feature in [this dedicated Rugdoc article](https://rugdoc.io/education/migrator/).
+[^UNI-treasury]: Entirely in UNI token, this treasury is quite volatile. Nevertheless, more than 227M UNI is still available today, or about $1.1B. [OpenOrgs](https://openorgs.info/)
+[^UNI5]: This is the infamous 005 "DeFi Education Fund" vote; read [the related topic on the governance forum](https://gov.uniswap.org/t/governance-proposal-005-defi-education-fund/12963) for more context.
+[^veCRV-whitelist]: There are three at present: Yearn Finance (yveCRV), Convex (cvxCRV) and StakeDAO (sdCRV).
+[^liquity-oracle-fallback]: This article provides [a clear introduction to the oracle management system on Liquity](https://www.liquity.org/blog/price-oracles-in-liquity).
+[^liquity-front-end]: More information [on the technical and incentive model for Liquity front-end operators](https://www.liquity.org/blog/liquity-runs-on-decentralized-frontends).
+[^liquity-disclaimer]: As you've probably already seen, I'm thrilled to have [joined the Liquity team very recently](https://tokenbrice.xyz/joining-liquity/). I mention Liquity in this article because it is a relevant and instructive example of resilient protocol, independent of my professional commitments.
+[^UNIv3-oracle]: To get a more precise idea on this topic, check this tool from Euler Finance, enabling you to [simulate potential Uni v3 TWAP oracle attacks](https://oracle.euler.finance/).
+[^trustlessfi-doc]: As always, the alpha is for those who dig in and read footnotes carefully as well as [documentation](https://trustlessfi.notion.site/Trustless-4be753d947b040a89a46998eca90b2c9).
+[^chainlink-multisig]: ChainLink provided more info [in their documentation](https://docs.chain.link/docs/using-chainlink-reference-contracts/#updates-to-proxy-and-aggregator-contracts) and the multisig contract can be checked **[directly on EtherScan here](https://etherscan.io/address/0x21f73d42eb58ba49ddb685dc29d3bf5c0f0373ca#readProxyContract)** 
diff --git a/content/post/2023/defi-collective.fr.md b/content/post/2023/defi-collective.fr.md
new file mode 100644
index 00000000..b7ad11c6
--- /dev/null
+++ b/content/post/2023/defi-collective.fr.md
@@ -0,0 +1,95 @@
+---
+title: "Annonce : lancement du DeFi Collective - une association conçue pour soutenir la DeFi autonome et résiliente"
+description: "Il est temps de faire le meilleur usage de mes cinq années passées à DeFi : un soutien sans faille aux biens publics."
+date: '2023-10-16T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Liquidity, Association, DeFi Collective]
+url: defi-collective
+image: /img/2023/defi-collective/twitter_banner.png
+toc: false
+difficulty: "beginner"
+---
+
+
+[Présentation du DeFi Collective](https://deficollective.org)
+
+
+Historiquement, les systèmes financiers ont été mal gérés par les États, corrompus par des intérêts privés tenaces, et incapables de remplir leur fonction première : établir un circuit neutre, juste et transparent pour permettre des échanges de valeur sans entraves.
+
+
+Il y a plus de cinq ans, j'ai découvert la finance décentralisée (alors naissante) et j'ai été rapidement convaincu qu'elle représentait une tentative crédible de fournir un système d'échange de valeur neutre, libérée de l'influence des États et capable de résister aux tentatives de corruption des acteurs privés.
+
+
+En effet, le réseau Ethereum fournit un grand livre de comptes transparent, permettant aux utilisateurs d'effectuer des transactions purement de pair à pair. Les smart contracts permettent la création de divers protocoles pour des cas d'utilisation plus avancés - dont certains peuvent approcher le niveau de résilience du réseau, comme Uniswap, une primitive financière fournissant une infrastructure pour l'échange sans permission de n'importe quel jeton qui fonctionnera aussi longtemps que le réseau Ethereum se synchronisera.
+
+
+C'est ainsi que je me suis progressivement engagé à soutenir et à concrétiser cette vision :
+
+* En 2018, j'ai commencé à écrire et à partager sur la DeFi sur différents supports, et j'ai finalement lancé ce blog quelques années plus tard.
+* Fin 2019, avec des amis, nous avons lancé [DeFi France](https://twitter.com/defi_fr) pour créer un environnement favorable à l'adoption et à l'implication de la DeFi dans les communautés francophones.
+* En 2020, j'ai commencé à [animer des émissions en direct en français](https://www.youtube.com/@DeFiFrance/featured) pour documenter les protocoles DeFi les plus pertinents et permettre à leurs utilisateurs de mieux les comprendre.
+* Enfin, en 2022, j'ai rejoint l'équipe de Liquity, pour aider à l'adoption du LUSD, une infrastructure essentielle à mes yeux, car LUSD reste le stablecoin le plus résilient disponible à ce jour.
+
+
+
+
+### Introduction du DeFi Collective
+
+Il est temps de présenter mon ultime engagement pour aider l'écosystème DeFi à réaliser ses promesses initiales : [The DeFi Collective](https://twitter.com/DeFiCollective_). Le DeFi Collective tente de résoudre un déséquilibre structurel qui pourrait conduire la DeFi à ne pas honorer ses valeurs fondamentales. En effet, la DeFi souffre d'une tension inhérente entre le respect de ses valeurs premières et les concessions que certains jugent nécessaires à sa croissance et à son adoption.
+
+Les protocoles les plus largement adoptés sont rarement les plus résistants, et nous, au Collectif, pensons que cela provient d'un problème d'incitation :
+
+Les équipes qui contrôlent étroitement leur protocole (généralement par le biais de multisigs) et qui exploitent des modèles de tokenomics agressifs ont tendance à disposer d'une plus grande puissance de feu pour attirer des capitaux et se promouvoir que celles qui valorisent la sécurité et la solidité par-dessus tout. Nous considérons le Collectif comme une ressource essentielle pour résoudre ce déséquilibre.
+
+### Une association à but non-lucratif pour soutenir les protocoles DeFi les plus robustes
+
+Comment cela se passe-t-il ? **Les protocoles qui garantissent des infrastructures publiques ouvertes, transparentes et résilientes recevront le soutien du collectif DeFi, gratuitement et sans conditions.**
+
+Le DeFi Collective est une association suisse à but non lucratif, dont le siège est à Zug, et qui est tenue par ses statuts d'utiliser ses ressources pour soutenir les protocoles du DeFi les plus solides. Qu'est-ce que cela implique ? Le Collectif clarifiera et publiera ses lignes directrices pour les protocoles peu après son lancement : tout protocole qui y correspond sera éligible à son soutien.
+
+Mais de quel type de soutien s'agit-il ? De toute l'expertise critique qu'un protocole a besoin d'exploiter pour se développer et prospérer :
+
+* Gestion de liquidité
+* Gouvernance
+* Sensibilisation et éducation
+* Intégration et networking
+* Soutient juridique
+
+Le Collectif est **un groupe d'experts qui ne peut pas être embauché ; au lieu de cela, il s'auto-désigne sur des protocoles qui correspondent à ses directives exigeantes.** Incarné par les fourmis, le Collectif a l'intention de démontrer que la coordination sociale est primordiale. Ensemble, les fourmis construiront une colonie de plus en plus grande, agissant comme un réseau organique nourrissant un écosystème où la DeFi anti-fragile peut prospérer.
+
+### Les fourmis aiment et exploitent les tokens directeurs de liquidité
+
+Pour réaliser sa vision, le collectif a reçu le soutien d'équipes de premier ordre qui s'alignent sur sa vision, notamment Liquity, Maverick, CatInaBox, Diva, DYAD, Zero & Retro. **Cela permet au Collectif d'être autonome dès le premier jour, et en contrôle de tokens directeurs de liquidité capable d'attirer 25 millions de dollars d'actifs dans les pools des DEX pertinents sur différents layers**, y compris mainnet, Optimism, Arbitrum, zkSync, Polygon zkEVM et plus encore.
+
+
+En effet, le Collectif contrôle d'importantes positions de tokens directeurs de liquidité, notamment veVELO, vlLIQ, vlAURA, veRAM, veZERO, veRETRO et autres, et gère des trésoreries sur tous les réseaux mentionnés ci-dessus, afin de soutenir la liquidité des jetons concernés par le biais de votes, d'apport de liquidité direct et toute autre activité pertinente à cet effet. Le collectif adhère à des pratiques de gestion de trésorerie extrêmement prudentes visant à préserver et à accroître son capital d'une manière synergétique avec ses objectifs et sa vision.
+
+### Au-delà de la gestion de la liquidité
+
+
+La gestion et le soutien de la liquidité est un domaine d'expertise essentiel pour le Collectif, ainsi que les activités liées à la gouvernance pour accroître l'adoption des protocoles soutenus dans l'ensemble de l'écosystème DeFi - ce seront mes deux principaux axes. Cependant, le DeFi Collective est une aventure bien plus grande que moi, et j'ai la chance de pouvoir compter sur le soutien de deux membres fondateurs tout aussi importants - Nils Bundi et Florian Prantl, qui mettent à profit leur expertise dans leurs domaines respectifs :
+
+
+- [Nils Bundis](https://www.linkedin.com/in/nils-bundi-6246b998/) est un architecte et développeur du protocole DeFi avec une formation en ingénierie financière. En tant que dévelopeur expérimenté en DeFi, il connaît les défis liés à la construction de protocoles "véritablement décentralisés". Outre l'aspect technique, Nils soutiendra également le Collectif grâce à son expertise en matière d'exigences opérationnelles.
+- [Florian Prantl](https://twitter.com/floowp_) est un avocat qui conseille des projets de DeFi et de CeFi pour les aider à déjouer les pièges juridiques et réglementaires lors de la mise en place et de l'expansion de leurs services. Il apporte également son expérience précieuse en la matière auprès des autorités pour militier pour des réglementations progressives et équilibrées. Au sein du Collectif, il apporte son expertise en matière de conformité opérationnelle, en fournissant des conseils aux protocoles soutenus et en contribuant à mise en place de lignes directrices pour aider les protocoles anti-fragile à émerger et se différencier, aussi bien auprès des utilisateurs que des régulateurs.
+
+Leurs compétences et leurs connaissances aideront le collectif à mener des recherches, à établir et à promouvoir des lignes directrices d'autorégulation et à entreprendre toute autre activité pertinente jugée nécessaire pour réaliser **son objectif de soutenir les protocoles DeFi résilients existants et de favoriser un écosystème dans lequel les créateurs de protocoles sont davantage incités à suivre la voie de la solidité, de l'immuabilité et de la résilience**.
+
+
+### Une infrastructure rationalisée et sous contrôle
+
+Tous les membres du conseil d'administration et les contributeurs du collectif sont limités à un engagement représentant au maximum 50 % de leurs heures de travail total. Cette politique a été conçue pour garder la structure sous contrôle et éviter les situations où la préservation/croissance de la structure devient prioritaire par rapport à la réalisation de ses objectifs finaux, ce qui est souvent le cas dans les institutions publiques et les associations.
+
+
+Les contributeurs ont accepté une rémunération bien inférieure au taux du marché pour leurs efforts, tandis que les membres du conseil d'administration ne recoivent aucune compensation pour leur activité. Cela permet au Collectif de minimiser ses dépenses de départ et de composer agressivement ses revenus pour faire croître ses trésoreries onchain, lui donnant ainsi plus de moyens pour réaliser sa vision à terme.
+
+**Le DeFi Collective est désormais mon principal engagement**, ce qui signifie que je ne serai malheureusement plus en mesure de contribuer directement à Liquity en tant que membre de l'équipe. Cette décision n'a pas été facile à prendre. Pourtant, elle était nécessaire pour me permettre de continuer à me concentrer sur mes domaines d'expertise (la gestion des liquidités et la gouvernance) et de continuer à les développer. Le protocole Liquity, l'une des infrastructures de prêt les plus résilientes qui soient, correspond aux lignes directrices du Collectif et fera partie des protocoles soutenus parmi plusieurs autres qui seront introduits prochainement. Le Collectif sera ainsi en mesure de supporter la croissance et l'expansion de Liquity avec des activités liées à la gestion de la liquidité et d'aider LUSD à être plus largement soutenu à travers les protocoles DeFi et L2.
+
+### Suivez les fourmis et impliquez-vous dans la colonie
+
+Vous êtes en accord avec la vision du collectif et vous voulez faire la différence en DeFi ? Vous pouvez façonner le Collectif : faites-nous part de votre expertise pour aider le Collectif en tant que contributeur ou ami, ou impliquez-vous activement en devenant membre - tout cela se passe sur [le Discord du DeFi Collective](https://discord.gg/KFhE3tpGsM) : un endroit où il faut être !
+
+Pour rester en contact avec le DeFi Collective, vous pouvez également [nous suivre sur Twitter](https://twitter.com/DeFiCollective_), où nous tiendrons la communauté au courant de nos actualités, y compris le premier point en direct que j'animerai prochainement : **[rejoignez-nous le jeudi 19 octobre à 19h GMT+2](https://discord.gg/NsaQNpC65C?event=1164186718375772261)**.
+
+* [Site DeFi Collective](https://deficollective.org)
+* [Introducing the DeFi Collective](https://deficollective.org/blog/the-defi-collective-introduction/)
\ No newline at end of file
diff --git a/content/post/2023/defi-collective.md b/content/post/2023/defi-collective.md
new file mode 100644
index 00000000..27892e09
--- /dev/null
+++ b/content/post/2023/defi-collective.md
@@ -0,0 +1,95 @@
+---
+title: "Introducing my next step: contributing to a DeFi mastermind geared to support trustless and unstoppable DeFi: The DeFi Collective"
+description: "It's time to put my five years in DeFi to the best use: unfettered support for the public goods"
+date: '2023-10-16T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Liquidity, Association, DeFi Collective]
+url: defi-collective
+image: /img/2023/defi-collective/twitter_banner.png
+toc: false
+difficulty: "beginner"
+---
+
+[Proudly introducting The DeFi Collective](https://deficollective.org)
+
+Historically, financial systems have been mismanaged by states, corrupted by entrenched private interests, and unable to deliver an equitable, fair, and transparent baseline to enable unfettered value exchanges.
+
+Over five years ago, I discovered the (back then) nascent decentralized finance ecosystem and was promptly convinced it embodies a credible attempt to deliver a neutral value exchange layer, freed from the influence of states and able to resist the corruption attempts of private actors.
+
+Indeed, the Ethereum network provides a neutral ledger, enabling users to transact in a purely peer-to-peer fashion. Its ability to support smart contracts allows for the creation of various protocols for more advanced use cases — some of which can approach the network's resilience level, such as Uniswap, a financial primitive providing infrastructure for the permissionless exchange of any token that will operate as long as the Ethereum network synchronizes.
+
+Thus, I progressively became more engaged and committed to upholding and delivering on this vision:
+
+* In 2018, I started to write and share about DeFi on various mediums, and eventually launched this blog a couple of years later.
+* In late 2019, with friends, we launched [DeFi France](https://twitter.com/defi_fr) to nurture a supportive environment to broaden adoption and involvement in DeFi amongst the French-speaking communities.
+* In 2020, I started to [host live shows in French](https://www.youtube.com/@DeFiFrance/featured) to document the most relevant DeFi protocols and deepen the users’ comprehension of them.
+* And finally, in 2022, I joined the Liquity team, to help grow the adoption of LUSD, a critical piece of infrastructure in my perspective, as it remains the most resilient stablecoin available to date.
+
+
+
+
+
+### Proudly introducing The DeFi Collective
+
+It’s time to introduce my latest commitment to help the DeFi ecosystem deliver on its initial promises: [The DeFi Collective](https://twitter.com/DeFiCollective_). The DeFi Collective attempts to solve a structural imbalance that could ultimately lead DeFi to fail to deliver on its core values. DeFi suffers from an inherent tension between delivering on its base values and the concessions some think are needed for growth and adoption.
+
+The most widely adopted protocols are rarely the most resilient, and we at the Collective believe it stems from an incentive misalignment:
+
+Teams who tightly control their protocol (usually through multisigs) and harness aggressive tokenomics models tend to have more firepower to attract capital and promote themselves than those who value security and sturdiness above all else. We picture the Collective as a critical resource in reverting this imbalance.
+
+
+### A nonprofit association to support the sturdiest DeFi protocols
+
+How? It’s straightforward; you’ll see that the **DeFi Collective delivers a competitive edge, allocated only to the highest-quality DeFi protocols.** Protocols that ensure open, transparent, and resilient public infrastructures will receive the support of the DeFi Collective, free of charge and without conditions.
+
+The DeFi Collective is a Swiss nonprofit association incorporated in Zug, bound by its status to use its resources to support the most resilient and relevant DeFi protocols. What does this entail? The Collective will clarify and publish its “protocol guidelines” shortly after launch: any protocol that matches them is eligible for its support.
+
+But what kind of support are we talking about? About all the critical expertise a protocol needs to harness to grow and thrive:
+
+
+
+* Liquidity management
+* Governance
+* Awareness and education
+* Integrations and networking
+* Legal & self-policing
+
+The Collective is **a group of experts that cannot be hired; instead, it self-appoints on protocols that match its demanding guidelines.** Embodied by the ants, The Collective intends to demonstrate that social coordination is paramount. Together, ants will build an ever-growing colony, acting as an organic mesh network nurturing an ecosystem where trustless DeFi can thrive.
+
+
+### Ants like and harness liquidity-driving tokens
+
+To deliver on its vision, The Collective received support from top-notch teams that align with it, including Liquity, Maverick, CatInaBox, Diva, DYAD, Zero & Retro. **It enables the Collective to be self-sustainable from day one, and able to direct and sustain over $25M of assets in liquidity pools of relevant DEXes across various layers,** including mainnet, Optimism, Arbitrum, zkSync, Polygon zkEVM & more.
+
+Indeed, the Collective controls sizable liquidity-driving positions, including veVELO, vlLIQ, vlAURA, veRAM, veZERO, veRETRO & more, and manages treasuries on all the networks mentioned above, to support the liquidity of relevant tokens through liquidity-driving votes and liquidity-providing activities. The Collective adheres to extremely risk-averse treasury management practices intended to preserve and grow its capital in a manner that is synergistic with its goals and vision.
+
+
+### Beyond Liquidity Management
+
+Liquidity management and support is a critical area of expertise for the Collective that I will champion, along with governance-related activities to increase the adoption of the tokens from the supported protocols across the broader DeFi ecosystem. However, the DeFi Collective is an adventure much bigger than myself, and I am blessed with the support of two equally critical founding board members – Nils Bundi and Florian Prantl, who deliver on their expertise in their respective areas:
+
+- [Nils Bundis](https://www.linkedin.com/in/nils-bundi-6246b998/) is a DeFi protocol architect and developer with a background in financial engineering. As an experienced DeFi builder, he knows the challenges of building “truly decentralized” protocols. Apart from the technical depth, Nils will also support the Collective with his expertise in the operational requirements, ensuring secure and trusted DeFi services.
+- [Floria Prantl](https://twitter.com/floowp_) is a lawyer and policy specialist with a background in advising DeFi and CeFi projects, navigating the legal and regulatory pitfalls in setting up and expanding their services. He also brings valuable experience advocating with authorities for progressive and balanced regulations. At the Collective, he particularly lends his expertise to operational compliance, offering guidance to supported protocols and contributing to the Collective's self-policing, networking, and other vital initiatives.
+
+Their skills and knowledge will help the Collective to conduct research, establish and promote self-policing guidelines, and entertain any other relevant activities deemed necessary to deliver on **its vision of supporting the existing resilient and DeFi-aligned protocols and foster an ecosystem where protocol builders have increased incentives to walk the path of sturdiness, immutability, and resilience**.
+
+
+### A streamlined infrastructure, kept in check
+
+All board members and contributors to the Collective are capped to a commitment accounting for at max 50% of their working hours. This policy was designed to keep the structure in check and avoid situations where the preservation/growth of the structure is given more priority than achieving its end goals, which is often seen in public institutions and associations.
+
+Contributors have agreed to compensation well below the market rate for their efforts. Boardmembers are not compensated for their activity. This enables the Collective to minimize its starting expenses and aggressively compounds its earnings to grow its onchain treasuries, giving it more means to deliver on its vision.
+
+**The DeFi Collective is now my main focus and commitment**, meaning that I will sadly no longer be able to contribute directly to Liquity as a team member. It was not an easy decision to make. Still, it was necessary to enable me to keep focusing on my areas of expertise (liquidity management and governance) and keep growing them. As one of the most resilient lending infrastructures available, the Liquity protocol matches the Collective guidelines and will be part of the supported protocols amongst several others to be introduced shortly. The Collective will thus be able to support Liquity’s growth and expansion with liquidity-management-related activities and help LUSD get more broadly supported across DeFi protocols and L2.
+
+
+### Follow the ants and get involved with the colony
+
+Do you resonate with the Collective’s vision and want to make a difference in DeFi? You can shape the Collective: let us know about your unique expertise to assist the collective as a contributor or a friend, or get actively involved to join as a member – all of this is happening on [the Collective Discord](https://discord.gg/KFhE3tpGsM): a place to be!
+
+To keep in touch with The DeFi Collective, you can also [follow us on Twitter](https://twitter.com/DeFiCollective_), where we will update the community with our news, including the upcoming first Collective Live Session I’ll be hosting: **[join us Thursday, October 19, at 7 PM GMT+2](https://discord.gg/NsaQNpC65C?event=1164186718375772261)**.
+
+Learn more about the Collective:
+
+* [DeFi Collective website](https://deficollective.org)
+* [Introducing the DeFi Collective](https://deficollective.org/blog/the-defi-collective-introduction/)
\ No newline at end of file
diff --git a/content/post/2023/jr-strategist.md b/content/post/2023/jr-strategist.md
new file mode 100644
index 00000000..e70bb5a6
--- /dev/null
+++ b/content/post/2023/jr-strategist.md
@@ -0,0 +1,47 @@
+---
+title: "Hiring a Junior DeFi Strategist to help foster the growth of immutable protocols"
+description: "I'm looking for a part-time DeFi enthusiast to join me on my adventures growing liquidity and utility for key unstoppable tokens. If harnessing the power of unstoppable code is something you like to do on the weekends, this mission is a fit for you."
+date: '2023-03-29T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized Finance, Liquity, Unstoppable DeFi, Lending]
+toc: false
+tocNum: false
+url: jr-strategist
+image: img/2023/jr-strategist/jr-strategist-cover.png
+difficulty: "beginner"
+---
+
+
+I'm looking for a Junior DeFi Strategist to join me on my daily DeFi adventures, learn and grow. The fundamental missions are governance proposals, liquidity management, business development, and partnerships, but the scope is quite flexible.
+
+This is a unique opportunity for a passionate DeFi curious to jumpstart his/her career in crypto. Be the first hire for a community-led effort to cater governance-minimized and immutable protocols to achieve the mission of DeFi.
+
+You'll be working closely with me and learn my tactics to successfully grow liquidity and utility for immutable DeFi projects.
+
+### Your activities
+- Seek and find new partnership opportunities for DeFi projects
+- Collaborate with other DeFi protocols and DAOs
+- Write governance proposals, and support proposals submitted by third parties.
+- Manage strategies enforced on the various liquidity-driver tokens owned.
+- Optimize Protocol Owned Liquidity strategies across main net and L2s
+- Write and tweet about partnerships and liquidity opportunities
+
+### Your experience and skills
+
+- Extensive DeFi on chain track record - who cares about diplomas? Show me a wallet.
+- Actively involved in DeFi, owning some key governance tokens, knowledgeable about the main models (Liquity, Curve, Aave, etc.)
+- Solid understanding of DEXs like Curve, Uniswap, Balancer and voting protocols I.e. Convex, Aura as well as ve(3,3) models like e.g. Velodrome
+- Well versed in the differences of cvxCRV, yCRV, sdCRV, uCRV, and aCRV
+Solid understanding of the top DeFi protocols and good overview of the promising newcomers
+- You’re already active on various governance forums or DeFi-related Discords.
+- Written and spoken English proficiency.
+- You can work independently as well as team up with your peers
+
+### What I can offer
+
+- Exciting part time position (~50%) with a monthly retainer in FIAT (for the beginning)
+- Drive a community-led initiative (more to be announced soon)
+- Be part of a top notch and proven DeFi team
+- Work remotely (ideally in Europe or US timezone)
+
+Interested? **[Please apply via this form](https://forms.gle/6qaXgkczuhiaqNTV6)**. I'll get back in touch shortly.
\ No newline at end of file
diff --git a/content/post/2023/liquidity-shaping-maverick.fr.md b/content/post/2023/liquidity-shaping-maverick.fr.md
new file mode 100644
index 00000000..a2b988f4
--- /dev/null
+++ b/content/post/2023/liquidity-shaping-maverick.fr.md
@@ -0,0 +1,227 @@
+---
+title: "Maverick et la transition du Liquidity Mining au Liquidity Shaping"
+description: "La guerre des DEX fait rage, plus compétitive que jamais. A côté des cartels de la licorne, du lama et de l'échelle, un quatrième centre de pouvoir émerge grâce à des caractéristiques sans précédent : une structure de liquidité inégalée associée à un modèle d'incitation immensément plus efficace : **le façonnage de liquidité**."
+date: '2023-07-07T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Maverick, DEX, Liquidity Management, Liquidity Shaping, Concentrated Liquidity, veCRV, Solidly, Velodrome]
+toc: false
+tocNum: false
+url: maverick-liquidity-shaping
+image: img/2023/liquidity-shaping-maverick/cover.png
+difficulty: "expert"
+---
+
+Cela fait quatre mois que Maverick est sorti, et quelques jours que le jeton MAV a rejoint la mêlée. Pourtant, la plupart des acteurs de la DeFi se demandent encore comment Maverick peut offrir une efficacité du capital 2 à 3 fois supérieure à celle de son principal concurrent, Uniswap.
+
+Le moment était donc venu de plonger dans les innovations apportées par le modèle et le nouveau paradigme qu'il favorise en matière de gestion des liquidités : **le liquidity shaping** (le façonnage de liquidité).
+
+
+## Innovations sur DEX ? Plutôt des outils permettant aux LP de s'exprimer
+
+Fondamentalement, un échange décentralisé peut innover à deux niveaux :
+
+1. **La structure de liquidité** : les options offertes aux fournisseurs de liquidité pour concevoir l'activité d'approvisionnement qui correspond le mieux à leur thèse.
+2. Et / ou **le modèle d'incitation** : les outils et les modalités permettant aux DAO et aux projets d'encourager des structures de liquidité personnalisées ou non.
+
+La plupart des nouveaux DEX qui sortent recyclent une infrastructure existante et se concentrent sur l'innovation dans une seule dimension - généralement le modèle d'incitation - comme on l'a vu récemment avec la vague de forks Solidly/Velodrome - **[ve(3,3), la prochaine étape logique après veCRV ?](https://tokenbrice.xyz/fr/solidly-velodrome-fork/)**.
+
+Il y a cependant quelques moments critiques dans l'industrie où un nouveau DEX est sorti et a apporté **une innovation critique sur les deux fronts :**
+
+1. **[Uniswap V1/V2](https://www.defiscan.info/protocols/uniswap-v2/ethereum)** a établi une infrastructure solide pour les pools `x*y=k` et le modèle d'incitation de base : 30 points de base de frais, composé automatiquement & la possibilité d'avoir des programmes de Liquidity Mining sur les tokens LP mis en jeu (ERC20).
+2. **Curve** a fourni un modèle de liquidité innovant et efficace pour les actifs indexés (stableswap) tout en étant le pionnier d'un modèle basé sur le ve/gauge pour l'incitation des fournisseurs de liquidité en introduisant une capture de revenus au niveau du jeton (frais d'administration).
+3. **[UniswapV3]( https://www.defiscan.info/protocols/uniswap-v3/ethereum)** a fourni les outils nécessaires à la gestion d'une structure de liquidité plus avancée exploitant efficacement la liquidité concentrée et offrant une plus grande flexibilité en termes de frais (frais de 1, 5, 30, 100 points de base, non composés automatiquement).
+4. Enfin, **[Maverick](https://www.defiscan.info/protocols/maverick-v2/ethereum)**, qui va encore plus loin qu'UniswapV3 dans la personnalisation de la structure de liquidité qu'il propose, offre une gestion rationalisée des positions (rééquilibrage natif) et un niveau de contrôle sans précédent en ce qui concerne les options d'incitation, marquant la naissance d'un nouveau paradigme : le façonnage de la liquidité.
+
+Chacune de ces innovations fondamentales **permet une plus grande expressivité pour les LPs : ils ont accès à des outils de plus en plus raffinés et personnalisés permettant même aux thèses les plus complexes de trouver un moyen adéquat pour être exprimées onchain**.
+
+Cependant, avant de plonger dans la profondeur de la formation de la liquidité, quelques points sur Maverick sont nécessaires. En effet, pour bien comprendre l'impact du façonnage de liquidité sur Maverick, il faut d'abord maîtriser ses structures de liquidité et leurs conséquences.
+
+## LES STRUCTURES DE LIQUIDITÉ DE MAVERICK
+
+En effet, l'une des principales innovations de Maverick réside dans ses structures de liquidité, qui permettent à l'échange d'atteindre un niveau sans précédent d'efficacité du capital.
+
+Maverick offre quatre options aux apporteurs de liquidité qui pourraient être regroupées en deux catégories pour plus de simplicité :
+
+1. Le mode statique est similaire à une liquidité UNIv3 fournissant une gamme personnalisée, avec **immensément plus de flexibilité**.
+2. Et trois modes dynamiques offrent **différents types de rééquilibrage aux LP** pour optimiser davantage leurs gains : gauche (suit le prix à gauche), droite (suit le prix à droite), et les deux (suit le prix dans les deux sens).
+
+### Pourquoi le mode statique de Maverick change la donne
+
+Beaucoup n'ont pas encore compris à quel point le mode statique de Maverick est une amélioration par rapport à UNIv3, alors concentrons-nous un instant sur ce point. Voici un tableau rapide récapitulant les principales différences pour commencer :
+
+| Objet | Uniswap v3 | Pool Statique Maverick |
+| ------------------------------------------------------------ | --------------------- | ----------------------------- |
+| Apport de liquidité en range personalisable et arbitraire, même avec un seul token | ✅ | ✅ |
+| Permet de distribuer la liquidité de manière discontinue ou inéquitable | ❌ | ✅ |
+| Customisation des frais et largeur des ticks | 4 tiers de frais | Customisation quasi-infinie |
+| Permet la création de token LP wrappé en ERC-20 pour faciliter le dépot des LPs et leur incitation | ❌ | ✅ (Boosted Pools) |
+| Permet la distribution de récompense aux LPs (Liquidity Mining) | ✅ | ✅ |
+| Permet une distribution pondérée et précisément ciblée de récompense aux LPs (Liquidity Shaping) | ❌ | ✅ |
+
+Comme UniswapV3, Maverick prend en charge la fourniture de liquidité dans **une plage arbitraire personnalisée,** même potentiellement avec un seul jeton, par exemple, une LP sur ETH/USDC de 2000 $ à 2400 $.
+
+Si le prix actuel est inférieur à 2000 $ (au moment de la rédaction : 1900 $), la LP sera alimentée uniquement en ETH et se rééquilibrera progressivement en USDC au fur et à mesure que le prix augmente, pour finir entièrement en USDC à 2400 $.
+
+
+
+Mais qu'en est-il des LP dont la thèse est encore plus raffinée ? Qu'en est-il du LP qui voit l'ETH dans cette fourchette pendant une semaine, mais surtout dans la zone des 2150-2250 $ ? Ne serait-il pas agréable pour lui de pouvoir exprimer cette thèse à travers la structure de liquidité qu'il choisit ? C'est précisément ce que permet Maverick :
+
+
+
+Dans la capture d'écran ci-dessus, vous voyez une distribution de $2000 à $2400 sur la paire ETH/USDC ; cependant, **à la différence d'Uniswap, qui distribue nécessairement la liquidité de manière égale à travers la gamme de prix, Maverick permet aux LP de choisir**. Pour mieux correspondre à notre thèse, la plupart des liquidités sont concentrées sur les trois ticks couvrant la zone de prix 2150-2250 $.
+
+### Maximiser l'expressivité offerte aux LP
+
+L'expressivité offerte aux LP sur Maverick est virtuellement infinie. Je m'attends à voir émerger rapidement des cas d'utilisation intéressants, en particulier pour les protocoles qui exploiteront Maverick dès le départ (protocoles "natifs Maverick"). Par exemple, vous pourriez envisager Maverick comme **mécanisme de stabilisation du prix d'un stablecoin ou d'un actif indexé**.
+
+En supposant que le projet de stablecoin contrôle une certaine liquidité, il pourrait la fournir de manière très expressive en cas de besoin pour restreindre la fourchette de prix. Voici une structure de liquidité "buy wall"(mur d'achat) sur le LUSD : toute la liquidité de ce LP est fournie sur un seul tick, le premier où le LUSD vaut moins de 1,00 USDC.
+
+
+
+Avec un prix actuel >1,00 USDC, cette LP est approvisionnée à 100% en USDC et agit comme une réserve d'achat : si le prix du LUSD baisse, la LP sera rééquilibrée. Ces positions sont prometteuses, car elles peuvent exercer une pression à l'achat et à la vente, ce qui permet de mieux contraindre les actifs de référence dans des fourchettes plus étroites, ce qui réduit considérablement le coût de l'incitation à la liquidité.
+
+### Qu'en est-il des modes dynamiques ?
+
+Les modes dynamiques de Maverick offrent une solution pratique et facile pour les LPs qui maximisent leur exposition aux prix du marché afin de maximiser le volume traité. Les trois modes exploitent essentiellement la même structure, mais offrent des options différentes aux LPs :
+
+- Suivre le prix dans un seul sens (gauche ou droite) - il y a des tonnes de paires où cela a beaucoup de sens, comme wstETH/ETH (wstETH étant "up-only" par rapport à ETH grâce au rendement du staking).
+- Suivre le prix dans les deux sens, une bonne solution pour les LP qui cherchent à maximiser la liquidité et les frais perçus au détriment d'un risque accru d'IL sur le principal. Il est particulièrement adapté aux paires d'actifs stables et ancrés, mais pas seulement.
+
+
+
+Ce qu'il faut comprendre ici, c'est que **Maverick fournit un rééquilibrage natif à ses LPs**, et là encore, il va au-delà de ce qui a précédé en termes d'options de personnalisation. Le mot clé est "natif", ce qui signifie que le rééquilibrage peut être **fait de manière intelligente et économe en gas**.
+
+Sur Curve, les LPs n'ont pas d'options : leur liquidité est concentrée, mais tous les LPs d'une paire donnée sont soumis au même régime. Cela facilite la gestion, mais tue l'expressivité. Avec Uniswap, les LPs peuvent rééquilibrer dynamiquement leur position à l'aide d'outils tiers comme Arrakis ; cela s'accompagne d'hypothèses de confiance considérables, de frais potentiels et de coûts de gas élevés. Il permet une plus grande expressivité mais nécessite une gestion plus active.
+
+Bien que le rééquilibrage des liquidités de Maverick, basé sur un TWAP et avec quelques délais pour éviter les manipulations, présente certaines limites, il reste un outil crucial pour aider les LPs à maximiser le temps effectivement passé dans la fourchette / dans le tick de prix actuel.
+
+## LE MODÈLE D'INCITATION DE MAVERICK : LA FAÇONNAGE DE LIQUIDITÉ
+
+Avec une meilleure compréhension de la première innovation fondamentale apportée par Maverick - l'expressivité sans précédent offerte aux LP dans la conception et la gestion de leur position - nous pouvons maintenant explorer la deuxième jambe de Maverick : son nouveau modèle d'incitation.
+
+L'histoire est à la fois courte et longue. **En bref, Maverick offre le même niveau de personnalisation au niveau de l'incitation qu'au niveau de la création des pools.**
+
+Cela nous amène à une histoire plus longue, avec des exemples plus explicites. Il est possible de reproduire la plupart des structures de liquidité et des modèles d'incitation existants sur Maverick. Mais ce qui est encore plus intéressant, ce sont les nouveaux modèles qui n'ont jamais été essayés parce qu'ils n'étaient pas techniquement réalisables avant Maverick : il est temps d'explorer et d'expérimenter !
+
+### Murs d'achat/de vente dynamiques déclenchés par un contrat
+
+Souvenez-vous de l'exemple précédent concernant le projet stablecoin qui déploie des liquidités en tant que mur d'achat pour limiter le prix. **Le projet n'a même pas besoin de ses liquidités pour le faire**, car le même processus peut être reproduit avec une boosted pool :
+
+1. Le projet crée une boosted pool où toutes les liquidités sont distribuées un tick en dessous du prix comme ci-dessus.
+2. Le projet fournit des incitations à la boosted pool pour la durée de son choix et les singes feront le reste.
+
+L'ensemble de ce processus peut être automatisé et déclenché entièrement par des contrats intelligents, ce qui signifie qu'un autre contrat pourrait gérer dynamiquement les incitations.
+
+### Le cas de cvxCRV/CRV
+
+Étudions un autre cas d'échec et mat, celui de cvxCRV. En effet, le pool cvxCRV/CRV Curve est le pire des cas :
+
+- Il exploite une structure de pool classique, **absolument sous-optimale pour un actif se négociant dans une fourchette contrainte comme le cvxCRV**.
+- Il exploite un **modèle d'incitation de liquidité "stupide" où tous les LPs sont payés de la même manière**, ce qui conduit à des dépôts de cvxCRV, qui représentent 75% du pool, gagnant 75% des récompenses - tout en étant presque inutile du point de vue de la liquidité (car il y a déjà trop de cvxCRV dans ce pool).
+
+#### Que peut-on faire de mieux ?
+
+Tout d'abord, la concentration pourrait être affinée au niveau de la structure de liquidité. Le cvxCRV est un "actif à sens unique" : vous pouvez convertir des CRV en cvxCRV 1:1 par le biais des contrats Convex, mais la conversion de cvxCRV en CRV se fait sur un DEX avec une décote.
+
+=> Cela signifie que le cvxCRV a un prix plafond par rapport au CRV : dans aucun monde, le cvxCRV ne pourrait valoir >1 CRV, et le prix actuel est d'environ 0,95 CRV par cvxCRV.
+
+==> La structure idéale pour une telle pool pourrait être **une concentration allant de 1cvxCRV = 0,9 CRV à 1 cvxCRV = 0,99 CRV, offrant une efficacité de liquidité largement supérieure**.
+
+En ce qui concerne la couche d'incitation, des gains considérables peuvent être réalisés grâce à un petit changement. Au lieu de payer tous les LPs de la même manière alors que le pool est massivement déséquilibré, pourquoi ne pas se concentrer sur ceux qui apportent le plus de valeur au pool, c'est-à-dire la composante CRV ?
+
+=> J'opterais pour deux pools conjointes afin de couvrir au mieux cette paire sur le plan de l'incitation : **Tout d'abord, un LP statique sur dix bins** centré sur le prix actuel - cela permet au prix de s'exprimer avec suffisamment de liquidité et cette structure est déjà >100x plus efficace que le pool Curve V2 existant.
+
+==> Pour enfoncer le clou, nous pouvons **ajouter une pool gauche-droite d'un seul tick au prix pour maximiser l'efficacité de la liquidité**.
+
+Les détails de cet exemple vous aident à comprendre que si vous amenez ce pool à Maverick, l'effet composé de la structure de liquidité supérieure avec un modèle d'incitation beaucoup plus efficace conduit à des résultats d'une ligue différente.
+
+
+
+Il y a actuellement 54 millions de dollars de TVL dans le pool cvxCRV/CRV de Curve pour un volume quotidien d'environ 300 000 dollars par jour (0,5 % d'utilisation). Avec une incitation de base de 12% CRV, ~**$6M de jetons CRV sont dépensés chaque année pour maintenir cette liquidité**.
+
+**Sur Maverick, une pool de ~500K$ correctement structuré** (250k$ statique à large gamme + 250k$ gauche-droite) **serait suffisante pour traiter régulièrement le volume quotidien de 300k$** avec des prix plus intéressants que sur Curve. En supposant la même intensité d'incitation, **cela coûterait 60 000 $ par an à maintenir**.
+
+
+### Proto Liquidity Shaping avec Bunni ?
+
+J'espère qu'à ce stade, vous avez une meilleure idée de la raison pour laquelle le façonnage de liquidité est véritablement révolutionnaire, car il permettra un autre saut d'ordre de grandeur en ce qui concerne l'efficacité des structures de liquidité et des modèles d'incitation.
+
+Il existe des itérations antérieures, moins complètes, d'un tel concept, fournies par les gestionnaires de liquidité construit au-dessus d'UniswapV3 qui permettent l'incitation sur une gamme personnalisée, par exemple, des récompenses pour LUSD/USDC LP, mais seulement pour la gamme LUSD = 0,999 USDC à LUSD = 1,01 USDC. [Bunni](https://bunni.pro/) est un bon exemple de ce type de services.
+
+Ces services pourraient être qualifiés de "proto liquidity shaping", car ils permettent de forcer une fourchette de prix spécifique, mais ne peuvent pas appliquer des pondérations différentes à chaque tick au sein de cette fourchette : ils sont limités par le modèle de pool Uniswap V3, qui offre moins de flexibilité que Maverick. Au final, les deux sont assez complémentaires car Bunni peut être utilisé pour forcer une large fourchette, qui peut être affinée avec une pool Maverick statique et inégale, et enfin maintenue très liquide au prix actuel avec une pool gauche-droite sur Maverick également.
+
+## MAV TOKEN
+
+Avec des perspectives claires sur la nouvelle structure des pools, le modèle d'incitation et leurs conséquences, nous sommes maintenant prêts à ajouter la dernière pièce du puzzle, une pièce qui vous est probablement plus familière, mais ici aussi, il y a des différences clés : le token MAV.
+
+Lancé il y a quelques semaines, le token MAV a été distribué aux premiers fournisseurs de liquidités et aux utilisateurs du protocole. Cette distribution n'est que **la première d'une longue série**, et d'autres sont prévues, pour les LPs, mais aussi pour les protocoles qui exploitent Maverick ou s'appuient sur lui. Pour plus de détails sur la distribution prévue, consultez l'article [Maverick Ecosystem Incentive Program](https://medium.com/maverick-protocol/maverick-ecosystem-incentive-program-95cf76dbfa5e).
+
+En tant que lecteurs de ce blog, j'imagine que vous êtes largement familiarisés avec le modèle veCRV et ses implications. Si ce n'est pas le cas, vous avez de la lecture :
+
+**[⚔ Guerre du CRV : comprendre la course à l'accumulation de la capacité à influencer le protocole Curve Finance](https://tokenbrice.xyz/fr/crv-wars/)**.
+
+### veMAV & Liquidity Directing Voting (façonnage des liquidités par le vote)
+
+
+
+Le lancement du jeton MAV est séquentiel, actuellement en phase 1, où les utilisateurs peuvent réclamer leur drop, LP MAV, ou le verrouiller pour obtenir veMAV. **La phase 2 introduira le Liquidity Directing Voting de Maverick et marquera le véritable début de la guerre du MAV**.
+
+La principale différence ici est, bien sûr, l'expressivité permise par Maverick qui aura également un impact sur les tokenomics : contrairement à veCRV ou veBAL, où les projets allouent des liquidités à un pool entier, ici, avec Maverick, **les protocoles seront en mesure de cibler leur pouvoir de vote sur une partie spécifique de la distribution de l'AMM**. Vous trouverez plus d'informations sur veMAV ici : [Introducing Maverick Protocol's Voting-Escrow Model](https://medium.com/maverick-protocol/introducing-maverick-protocols-voting-escrow-model-c29a60120339).
+
+### Stratégie x-chain pour Maverick & veMAV
+
+Un autre point essentiel à noter concernant le jeton MAV est qu'il met en œuvre la norme [Layer Zero's Omnichain Fungible Token (OFT) standard](https://layerzero.gitbook.io/docs/evm-guides/layerzero-omnichain-contracts/oft), ce qui facilite grandement les opérations inter-chaînes. Il permet à MAV d'exister nativement sur toutes les chaînes et devrait faciliter la tâche de l'équipe chargée de lancer le système de jauge sur un nouveau réseau.
+
+À première vue, ce n'est pas grand-chose, mais cela pourrait faire une énorme différence. En effet, Curve et Balancer ont été lents à exporter leur modèle de jauge complet vers des réseaux autres que le réseau principal sur lequel ils opèrent initialement. **Je m'attends à ce que Maverick évolue beaucoup plus rapidement**, et les premières données empiriques le confirment. En ~3 mois d'existence, Maverick a déjà lancé deux chaînes en dehors du réseau principal : zkSync et BSC.
+
+### Une autre différence majeure avec veCRV
+
+veMAV met en œuvre plusieurs autres changements par rapport à un modèle veCRV de base, et je vous invite à les identifier tous. En voici d'autres :
+
+- La pondération des veMAV par MAV n'est pas linéaire ici, même si elle favorise toujours ceux qui s'engagent le plus (4 ans) ; le blocage min d'une semaine donne un veMAV/MAV, tandis que le blocage max donne 5veMAV/MAV.
+- Il n'y a **pas de décroissance linéaire** comme pour les veCRV - une amélioration significative de l'expérience utilisateur. Cela pourrait également avoir des conséquences très positives pour les wrappers de liquide veMAV, en rendant plus facile de rester proche du peg.
+- Cependant, il existe toujours des incitations à rester engagé. En effet, le ratio veMAV/MAV est calculé à l'aide de la formule `1.5^(lock end - contract launch)`. Avec la fin du lock comme paramètre principal, les holders veMAV qui veulent maximiser leur puissance doivent prolonger leur lock fréquemment.
+
+En ce qui concerne les wrappers, plusieurs projets existants ont déjà exprimé leur intention de s'appuyer sur Maverick ou veMAV, notamment Paladin, SpiralDAO et StakeDAO. Les guerres de MAV seront vicieuses, alors lisez bien tous les détails avant de verrouiller vos MAV ailleurs que dans le contrat veMAV.
+
+## Perspectives d'avenir et mots d'adieu
+
+Maverick est actuellement en ligne sur le mainnet, zkSync et BSC. Il est intéressant de remarquer à quel point il domine le volume sur zkSync, même avec une fraction de la TVL de ses concurrents :
+
+")
+
+")
+
+Sur le réseau principal, Maverick trouve son audience sur les paires ETH-LSDs (wstETH, swETH, etc.) et les stablecoins. La structure de liquidité efficace de Maverick est très compétitive par rapport à Curve, Uniswap et Balancer.
+
+En ce qui concerne les jetons volatils, les LPs sont encore un peu timides, tout comme il a fallu quelques mois pour que les gens s'habituent à la nouveauté apportée par Uniswap V3. Il est intéressant de noter que les LPs expérimentent davantage sur zkSync, en particulier sur des paires telles que ETH/USDC, grâce à la baisse des coûts du gas, ce qui conduit à une efficacité globale du capital encore plus importante que sur le mainnet, voici les statistiques pour aujourd'hui (06 juillet 2023) :
+
+- Uniswap V3 - réseau principal : 0.23
+- Maverick - réseau principal : 0.3
+- Maverick - zkSync : 0.93
+
+### Démarrer avec Maverick en tant qu'utilisateur
+
+Il y a une courbe d'apprentissage pour Maverick, car comprendre comment structurer correctement la liquidité peut être intimidant en raison de toutes les options fournies. Pourtant, plus d'options signifient plus d'expressivité et, par conséquent, plus d'efficacité et de rendement lorsqu'elles sont exploitées de manière adéquate.
+
+**Pour tirer le meilleur parti de Maverick en tant qu'utilisateur et découvrir le protocole dans un environnement où les frais sont peu élevés, je vous recommande de fournir vos premiers LPs sur zkSync** - car cela vous permettra de les modifier à peu de frais si nécessaire. Comme pour la plupart des nouveaux produits DeFi, la meilleure façon de le maîtriser est de l'utiliser et de voir comment il se comporte dans différentes conditions de marché, alors lancez-vous : vous pourriez également bénéficier d'un double airdrop, de sorte que l'expérience peut être très gratifiante.
+
+N'hésitez pas également à aller voir les Boosted Pools, qui en plus de leurs incitations - ont une configuration de la liquidité pré-définie, elles sont donc plus accessibles pour les LPs.
+
+### Liquidity Managers, il est temps de se réveiller !
+
+Du côté des projets, **il est absolument nécessaire que les gestionnaires de liquidité comprennent et maîtrisent Maverick**, car c'est de loin la plateforme qui offre le plus d'efficacité en matière de liquidité. Je serais heureux de les aider dans ce processus, puisque c'est devenu ma spécialité. N'hésitez pas à me contacter si vous souhaitez discuter de la manière dont votre projet pourrait exploiter la mise en forme des liquidités.
+
+{{< notice note >}}
+Info : Au cas où vous auriez manqué la nouvelle, je conseille l'équipe de Maverick depuis l'année dernière.
+
+**[Annonce : TokenBrice 🤝 Maverick](https://tokenbrice.xyz/fr/maverick-x-tokenbrice/)**
+{{< /notice >}}
+
+Il sera intéressant de voir comment se dérouleront les prochains mois de la guerre des DEX ; Maverick étant déjà régulièrement dans le top 5 des DEX Ethereum par volume traité, je pense qu'il n'est pas exagéré de l'envisager dans le top 3 d'ici la fin de l'année, au plus tard lorsque les jauges veMAV seront publiées.
+
+J'espère que cet article vous a aidé à mieux comprendre le changement de paradigme que représente la transition du liquidity mining / ve(3,3) de base à la puissance de Maverick qui met en œuvre le façonnage de la liquidité par le vote. N'hésitez pas à suivre les événements en direct, en surveillant les données onchain comme le font les OGs.
+
+Enfin, pour parfaire votre compréhension de Maverick à l'issue de la lecture de cette article, je ne peux que chaudement vous recommander le marathon réalisé avec Remi et Laurent de MEVCapital :
+
+{{< youtube gvVVshJ0yK4 >}}
diff --git a/content/post/2023/liquidity-shaping-maverick.md b/content/post/2023/liquidity-shaping-maverick.md
new file mode 100644
index 00000000..ef9eb25d
--- /dev/null
+++ b/content/post/2023/liquidity-shaping-maverick.md
@@ -0,0 +1,221 @@
+---
+title: "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping"
+description: "The DEX war rages on, more competitive than ever. Next to the unicorn, llama and scale cartels, a fourth center is emerging thanks to unprecedented features: umatched liquidity structures paired with an immensely more efficient incentivization models: **liquidity shaping**. Will it be enough for Maverick to prevail?"
+date: '2023-07-07T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Maverick, DEX, Liquidity Management, Liquidity Shaping, Concentrated Liquidity, veCRV, Solidly, Velodrome]
+toc: true
+tocNum: true
+url: maverick-liquidity-shaping
+image: img/2023/liquidity-shaping-maverick/cover.png
+difficulty: "expert"
+---
+
+It's been four months since Maverick is out, and a few days since the MAV token joined the fray. Yet, most of DeFi is still scratching its head regarding how Maverick delivers 2-3x the capital efficiency of its top competitor, Uniswap.
+
+So the time was right for a deep dive into the innovations brought by the model and the new paradigm it fosters regarding liquidity management: **liquidity shaping**.
+
+## Innovations on DEX? More like tools for LP to express themselves
+
+Fundamentally, a decentralized exchange can innovate at two levels:
+
+1. **The liquidity structure**: the options offered to liquidity providers to design the supply activity that best matches their thesis.
+2. And/or **the incentivization model**: the tools and modalities enabling DAOs & projects to incentivize customized or not liquidity structures.
+
+Most new DEX being released recycle an existing infrastructure and focus on innovating on only one dimension - usually the incentivization model - as seen recently with the wave of Solidly/Velodrome forks - **[ve(3,3), the logical next step after veCRV?](https://tokenbrice.xyz/solidly-velodrome-fork/**
+
+There are, however, a few critical moments in the industry when a new DEX was released and provided **critical innovation on both fronts:**
+
+1. **[Uniswap V1/V2](https://www.defiscan.info/protocols/uniswap-v2/ethereum)** established a solid infrastructure for `x*y=k` pools & basic incentivization model: 30 bps fees auto compounded & the possibility of having Liquidity Mining programs on the staked LP tokens (ERC20).
+2. **Curve** provided an innovative and efficient liquidity model for pegged assets (stableswap) while pioneering a ve/gauge-based model for liquidity provider incentivization introducing a revenue capture at the token level (admin fee).
+3. **[UniswapV3]( https://www.defiscan.info/protocols/uniswap-v3/ethereum)** delivered the tools to manage a more advanced liquidity structure harnessing concentrated liquidity efficiently and providing more flexibility fee-wise (1, 5, 30, 100 bps fees, not auto-compounded)
+4. And finally came **[Maverick](https://www.defiscan.info/protocols/maverick-v2/ethereum)**, which goes even further than UniswapV3 in the customization of the liquidity structure it provides, offers streamlined position management (native rebalancing) and an unprecedented level of control regarding incentivization options, marking the birth of a new paradigm: liquidity shaping.
+
+Each core innovations **enable more expressivity for LPs: they get access to increasingly refined and customized tools enabling even the most intricate thesis to find a proper medium to be expressed onchain**.
+
+Yet, before diving into the depth of liquidity shaping, some pointers on Maverick are necessary. Indeed, to fully understand the impact of liquidity shaping on Maverick, you first need to master its liquidity structures and their consequences.
+
+## MAVERICK'S LIQUIDITY STRUCTURES
+
+Indeed, one of Maverick's critical innovations is its liquidity structures, enabling the exchange to reach an unprecedented level of capital efficiency.
+
+Maverick offers four options to LP that could be regrouped into two categories for simplicity:
+
+1. The static mode is similar to a UNIv3 liquidity providing across a custom range, with **immensely more flexibility**.
+2. And three dynamic modes offer **various flavors of rebalancing to LP** to optimize further their earning: left (follows price to the left), right (follows price to the right), and both (follows price both ways).
+
+### Why Maverick's Static Mode is a game changer
+
+Many still have to understand how much of an improvement Maverick's static mode is over UNIv3, so let us focus on it for a minute. Here's a quick table recapping the main difference to get started:
+
+| Item | Uniswap v3 | Maverick Static Pools |
+| ------------------------------------------------------------ | --------------------- | ----------------------------- |
+| Supply liquidity in an arbitrary custom range, even potentially only with one token | ✅ | ✅ |
+| Support an uneven liquidity distribution within that range | ❌ | ✅ |
+| Supports customized fees and width | 4 fees tiers, 1 width | Near-infinite fee/width tiers |
+| Supports the creation of ERC-20-wrapped LP tokens to ease LP onboarding & incentivization | ❌ | ✅ (Boosted Pools) |
+| Supports natively the distribution of rewards (Liquidity Mining) | ✅ | ✅ |
+| Supports natively the weighted & customized distribution of rewards to LP (Liquidity Shaping) | ❌ | ✅ |
+
+Like UniswapV3, Maverick supports supplying liquidity in **an arbitrary custom range,** even potentially only with one token, for instance, an LP on ETH/USDC from $2000 to $2400.
+
+If the current price is below $2000 (at the time of writing: $1900), the LP will be supplied purely with ETH and progressively rebalances to USDC as the price moves upwards, ending entirely in USDC at $2400.
+
+
+
+But what about LPs that have an even more refined thesis? What about the LP that sees ETH in that range for a week but mainly in the $2150-2250 area? Wouldn't it be nice for him to be able to express this thesis through the liquidity structure he chooses? It is precisely what Maverick enables:
+
+
+
+In the screenshot above, you see a distribution from $2000 to $2400 on the ETH/USDC pair; however, **unlike Uniswap, which necessarily distributes liquidity evenly across the range, Maverick enables LPs to choose**. To better fit our LP thesis, most of the liquidity is concentrated over the three ticks covering the $2150-2250 price zone.
+
+### Maximizing the expressivity offered to LPs
+
+The expressivity offered to LP on Maverick is virtually infinite. I expect to see some interesting use cases emerge soon, especially for the protocols that will harness Maverick from the get-go ("Maverick-native" protocols). For instance, y**ou could envision Maverick as a price stabilization mechanism for a stablecoin or a pegged asset**.
+
+Assuming the stablecoin project controls some liquidity, it could supply it in very expressive ways in times of need to constraint the price range. Here's a "buy wall" liquidity structure on LUSD: the whole liquidity of this LP is supplied on a single tick, the first one where LUSD is worth below 1.00 USDC.
+
+
+
+With a current price >1.00 USDC, this LP is supplied 100% in USDC and acts like a buying reserve: if the price of LUSD falls, the LP will rebalance. Such positions are promising, as they can exert buy/sell pressure helping to better constrain peg assets within narrower ranges, which massively reduces the cost of their liquidity incentivization.
+
+### What about the dynamic modes?
+
+Maverick dynamic modes offer a convenient and easy solution for LPs who maximize their exposure to market prices to maximize the volume processed. All three modes essentially harness the same structure but give different options to LP:
+
+- Follow the price just one way (left or right) - there are tons of pairs where it makes a lot of sense, like wstETH/ETH (wstETH being "up-only" against ETH thanks to the staking yield)
+- Follow the price both ways, a good match for LP looking to maximize adequate liquidity and fees collected at the expense of increased IL risk on the principal. It's particularly suited for stable and pegged asset pairs, but not only.
+
+
+
+The key thing to understand here is that **Maverick delivers native rebalancing to its LP**, and here again, it goes above and beyond what preceded in terms of customization options. "Native" is the keyword here, meaning the rebalancing can be **done cleverly and gas-efficiently**. While this is not new by itself, here again, the devil lies in the details:
+
+On Curve, LPs have no options: their liquidity is concentrated, but all LPs of a given pair are under the same regime. It eases the management, but kills the expressivity. With Uniswap, LPs can dynamically rebalance their position using third-party tools like Arrakis; it comes with sizable trust assumptions, potential fees, and hefty gas costs. It allows more expressivity but requires more active management.
+
+While there are some limits to Maverick's liquidity rebalancing, based on a TWAP and with some delays to avoid manipulations, it remains a crucial tool to help LPs maximize the time effectively spent in range / in the current price tick.
+
+## MAVERICK'S INCENTIVIZATION MODEL: LIQUIDITY SHAPING
+
+With a better understanding of the first fundamental innovation brought by Maverick - the unprecedented expressivity offered to LP in the design and management of their position - we can now explore Maverick's second leg: its novel incentivization model.
+
+The story here is both short and long. **In short, Maverick provides the same level of customization at the incentivization layer as at the pool creation level.**
+
+It leads us to a longer story, with examples to be more explicit. Replicating most existing liquidity structures and incentivization models on Maverick is possible. But what's even more interesting are the new ones previously never tried because they were not technically feasible before Maverick: it's time to explore and experiment!
+
+### Dynamic contract-triggered buy/sell walls
+
+Remember the example from earlier about the stablecoin project posting liquidity as a buying wall to constrain the price? **The project does not even needs its liquidity to do it**, as the same process can be replicated with a boosted pool:
+
+1. The project creates a boosted pool where all the liquidity is distributed on one tick below the price like above.
+2. The project supplies incentives to the boosted pool for the duration of its choice & apes will do the rest.
+
+This whole process can be automated and triggered entirely through smart contracts, meaning another contract could dynamically manage the incentives.
+
+### The case of cvxCRV/CRV
+
+Let's study another checkmate case, the one of cvxCRV. Indeed, the cvxCRV/CRV Curve pool is the absolute worst offender:
+
+- It harnesses a **a regular structure, absolutely sub-optimal for an asset trading in a constrained range like cvxCRV**.
+- It harnesses a **"dumb" liquidity mining model where all LPs are paid equally**, leading to cvxCRV deposits, which make 75% of the pool, earning 75% of the rewards - while being close to useless liquidity-wise (as there are already too much cvxCRV in that pool).
+
+#### So what can be done better?
+
+First, the concentration could be finetuned much more at the liquidity structure level. cvxCRV is a "one-way asset": you can wrap CRV to cvxCRV 1:1 through the Convex contracts, but converting cvxCRV to CRV is done on a DEX at a discount.
+
+=> This means cvxCRV has a price ceiling against CRV: in no world, cvxCRV could be worth >1 CRV, and the current price is around 0.95 CRV per cvxCRV.
+
+==> The ideal structure for such a pool could be **a concentration going from 1cvxCRV = 0.9 CRV to 1 cvxCRV = 0.99 CRV, offering vastly superior liquidity efficiency**.
+
+Now, for the incentivization layer, massive gains are to be made with a switch. Instead of paying all LPs equally while the pool is massively unbalanced, why not focus on those who bring the most value to the pool, aka the CRV component?
+
+=> I'd go with two joint pools to best cover that pair incentivize-wise: **first, a static LP over ten bins** centered around the current price - it provides room for the price to express itself with sufficient liquidity & this structure is already >100x more efficient than the existing Curve V2 pool.
+
+==> For the nail in the coffin, we can **add a one-tick left-right pool one top to maximize liquidity efficiency**.
+
+The details of this example help you understand that if you take this pool to Maverick, the compounded effect of the superior liquidity structure with a vastly more efficient incentivization model leads to results from a different league.
+
+
+
+There are currently $54M TVL in Curve cvxCRV/CRV pool for a daily volume of around $300k daily (0.5% utilization). With a base incentive of 12% CRV, ~**$6M of CRV tokens are expanded yearly to maintain this liquidity**.
+
+**On Maverick, a ~$500K properly structured pool** ($250k static broad range + $250k left-right) **would be sufficient to consistently process the $300k daily volume** with better prices than on Curve. Assuming the same incentivization intensity, **it would cost $60k a year to maintain**.
+
+### Proto Liquidity Shaping with Bunni?
+
+I hope that, at this point, you get a better sense of why liquidity shaping is genuinely revolutionary, as it will allow another order-of-magnitude leap regarding the efficiency of both the liquidity structures and the incentivization models.
+
+There are earlier, less complete iterations on such a concept, provided by the liquidity manager built on top of UniswapV3 that allows incentivization on a customized range, for instance, rewards for LUSD/USDC LP, but only for the LUSD = 0.999 USDC to LUSD = 1.01 USDC range. [Bunni](https://bunni.pro/) is a good example of such services.
+
+Those could be described as "proto liquidity shaping," as they enable to force a specific price range but cannot apply different weights to each tick in that range: they are limited by the Uniswap V3 pool model that offers less flexibility than Maverick. In the end, both are quite complimentary as Bunni can be used to force a wide range, which can be further refined with a uneven static Maverick pool & finally maintained uber liquid at current price with a left-right on Maverick too.
+
+## MAV TOKEN
+
+With clear perspectives on both the novel pool structure and incentivization model and their consequences, we're now ready to add the last piece of a puzzle, one you're likely more familiar with, but here too, there are key differences: the MAV token.
+
+Released just a few weeks ago, the MAV token has been airdropped to early liquidity providers and protocol users. The initial airdrop is just **the first of many**, and more are planned, for LPs, but also protocols harnessing Maverick or building on top of it. For more details on the intended distribution, check this [Maverick Ecosystem Incentive Program](https://medium.com/maverick-protocol/maverick-ecosystem-incentive-program-95cf76dbfa5e) article.
+
+As readers of this blog, I imagine you are extensively familiar with the veCRV model and its implications. If not, you've got some reading to do:
+
+**[⚔ CRV wars: understanding the race to accumulate power to influence Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)**
+
+### veMAV & Liquidity Directing Voting (vote-directed liquidity shaping)
+
+
+
+The launch of the MAV token is sequential, currently in phase 1, where users can claim their drop, LP MAV, or lock it to obtain veMAV. **Stage 2 will introduce Maverick's Liquidity Directing Voting and mark the true beginning of the MAV races.**
+
+The main difference here is, of course, the expressivity enabled by Maverick that will also impact the tokenomics: unlike on veCRV or veBAL, where projects allocate liquidity to a whole pool, here, with Maverick, **protocols will be able to target their voting power to a specific part of the AMM distribution**. You'll find more information on veMAV here: [Introducing Maverick Protocol's Voting-Escrow Model](https://medium.com/maverick-protocol/introducing-maverick-protocols-voting-escrow-model-c29a60120339).
+
+### Maverick & veMAV X-chain strategy
+
+Another critical thing to note with the MAV token is that it implements [Layer Zero's Omnichain Fungible Token (OFT) standard](https://layerzero.gitbook.io/docs/evm-guides/layerzero-omnichain-contracts/oft), greatly facilitating cross-chain operations. It enables MAV to exist natively on every chain and should ease the operational overhard for the team to launch the gauge system on a new network.
+
+It might not seem much at first glance, but it could make a massive difference. Indeed, Curve and Balancer have been slow to export their full gauge model to networks other than the mainnet they initially operate on. **I expect Maverick to move much more quickly**, and the early empirical data validate it. In ~3 months of existence, Maverick has already launched two chains apart from mainnet: zkSync and BSC.
+
+### Another main difference with veCRV
+
+veMAV implements several other changes compared to a base veCRV model, and I invite you to identify them all. Here are some other ones:
+
+- The veMAV per MAV weighting is not linear here, even if it still favors max lockers (4 years); the min lock of 1 week gives one veMAV/MAV, while max locking gives 5veMAV/MAV.
+- **There is no linear decay** like on veCRV - which is a significant UX improvement. It could also have very positive consequences for veMAV liquid wrappers, making it easier to keep close to the peg.
+- Yet there are still incentives to stay committed. Indeed, The veMAV/MAV ratio is computed with the formula `1.5^(lock end - contract launch)`. With the lock end as the main parameter, veMAV lockers who want to maximize their power must extend their lock frequently.
+
+Regarding wrappers, several existing projects have already expressed their intention of building on top of Maverick or veMAV, including Paladin, SpiralDAO, and StakeDAO. The MAV wars will be vicious, so read the fine print before locking your MAV somewhere else than in the veMAV contract.
+
+## Forward outlook & parting words
+
+Maverick is currently live on mainnet, zkSync, and BSC. It's interesting to remark on how much it dominates the volume on zkSync, even with a fraction of its competitor TVL:
+
+")
+
+")
+
+On mainnet, most of the success has been found with ETH-LSDs pairs (wstETH, swETH, etc.) and stablecoins. Maverick's efficient liquidity structure is highly competitive with Curve, Uniswap, and Balancer.
+
+On volatile tokens, LPs are a bit shy still, just like it took a few months for people to get used to the novelty brought in by Uniswap V3. Interestingly, LPs are experimenting more on zkSync, especially on pairs such as ETH/USDC, thanks to the lowered gas costs, leading to an overall capital efficiency even more significant than on mainnet, here are the stats for today (July 06 2023):
+
+- Uniswap V3 - mainnet: 0.23
+- Maverick - mainnet: 0.3
+- Maverick - zkSync: 0.93
+
+### Getting started with Maverick as a user
+
+There is a learning curve for Maverick, as understanding how to structure liquidity properly can be intimidating because of all the options provided. Yet more options mean more expressivity and, thus, more efficiency and returns when adequately harnessed.
+
+**To make the most of Maverick as a user and discover the protocol in an environment with low fees, I'd recommend supplying your first LPs on zkSync** - as it will enable you to modify them at a low cost if needed. Like most new DeFi products, the best way to master it is to use it and see it behaves in various market conditions, so get at it: you might also be double-dipping on airdrops so that it can be quite a rewarding experience.
+
+Don't hesitate to check out the Boosted Pools, which - in addition to their incentives - have a pre-defined liquidity configuration, making them more accessible to LPs.
+
+### Liquidity Managers, it's time to wake up!
+
+On the project side, **it's an absolute necessity for liquidity managers to understand and master Maverick**, as it's by far the venue delivering the most liquidity efficiency. I'd be happy to help them in the process, since it has become a specialty of mine. Feel free to reach out if you'd like to discuss how your project could harness liquidity shaping.
+
+{{< notice note >}}
+Disclosure: In case you missed the news, I've been advising the Maverick team since last year.
+
+**[Announcement: TokenBrice 🤝 Maverick](https://tokenbrice.xyz/maverick-x-tokenbrice/)**
+{{< /notice >}}
+
+It will be interesting to see how the next few months of the DEX wars will unfold; with Maverick already consistently in the top 5 of Ethereum DEXes by volume processed, I think it's no stretch to envision it breaking into the top 3 by the end of year latest as the veMAV gauges will be released.
+
+I hope this article helped you better understand the paradigm shift that lies with the transition from liquidity mining / basic ve(3,3) to Maverick's powerhouse implementing vote-directed liquidity shaping. Feel free to follow the events live, monitoring onchain data like as OGs do.
diff --git a/content/post/2023/maverickxtokenbrice.fr.md b/content/post/2023/maverickxtokenbrice.fr.md
new file mode 100644
index 00000000..f915bab8
--- /dev/null
+++ b/content/post/2023/maverickxtokenbrice.fr.md
@@ -0,0 +1,71 @@
+---
+title: "Annonce : TokenBrice 🤝 Maverick"
+description: "Je supporte l'équipe Maverick en conseillant la stratégie de croissance, la tokénomique"
+date: '2023-04-21T01:13:50.191Z'
+categories: [Projects, DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Maverick, DEX, Liquidity Management, Liquidity Shaping, Concentrated Liquidity]
+toc: false
+tocNum: false
+url: maverick-x-tokenbrice
+image: img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.png
+difficulty: "intermediate"
+---
+
+Ce billet est plus une annonce personnelle : je voulais vous faire savoir ce que je fais et ce qui se passe avec Maverick. Alors ne tournons pas autour du pot : je suis ravi d'annoncer que **je soutiens l'équipe de Maverick en tant que conseiller, en aidant à la stratégie de croissance, à la tokenomics, et au développement des affaires**.
+
+### Storytime
+
+Tout comme moi, vous devez être saturé de DEX. Si vous suivez DeFi de près, vous avez vu plusieurs de ces lancements par jour. Pourtant, la plupart d'entre eux adoptent toujours les structures de liquidité fondamentales : x\*y=k pour les paires volatiles et le stableswap, et se concentrent plutôt sur l'innovation en matière de tokenomics : les désormais célèbres DEX ve(3,3).
+
+**Cela faisait un moment que je cherchais un DEX qui innoverait à un niveau plus profond**, alors en mai de l'année dernière, lorsque Bob m'a contacté pour me parler de Maverick, j'étais tout ouïe. J'ai rapidement réalisé que Maverick pouvait redéfinir la façon dont nous envisageons la liquidité dans DeFi et contribuer à améliorer son efficacité. Je suis donc heureux d'annoncer ma participation aujourd'hui : Maverick est déjà en ligne, se développe rapidement et est prêt à connaître une croissance encore plus exponentielle.
+
+Mais avant de nous plonger dans ce qui rend Maverick si intéressant, nous devons prendre un peu de recul et considérer le contexte plus large de la liquidité dans DeFi :
+
+
+### La structuration de la liquidité en profondeur
+
+**Au début, il y avait Uniswap**, et sa facilité d'utilisation pour les fournisseurs de liquidité a conduit les gens à penser qu'il s'agissait d'une activité triviale. Pourtant, toute activité d'apport de liquidité sur un DEX implique deux décisions :
+
+1. Choisir une paire (ou plus) de jetons (ex : ETH/USDC)
+2. **Formuler des hypothèses de prix concernant l'un ou les deux jetons (🐂, 🐻, ou 🦀). **
+
+La deuxième décision est **souvent implicite**, comme avec UniswapV2, où vous n'avez pas d'option mais un seul choix : 50/50, ce qui signifie que votre scénario optimal est que les deux tokens évoluent latéralement en termes de prix avec un volume d'échange important.
+
+Lorsque l'Uniswap V3 est apparu, la deuxième hypothèse est devenue soudainement plus explicite pour les utilisateurs de DeFi grâce à la concentration de la liquidité. Cependant, la V3 a ajouté de la complexité à l'expérience des fournisseurs de liquidité et à la gestion active. Elle **s'adresse principalement aux utilisateurs puissants qui peuvent se permettre des rééquilibrages fréquents**, ou **qui ont besoin d'outils externes** pour être exploités efficacement par les LPs, le gestionnaire de liquidité - Arrakis, Bunni, etc.
+
+
+### Qu'est-ce que Maverick a d'unique ?
+
+En termes simples, Maverick est le descendant spirituel d'UniV3 et de CurveV2. Il offre une flexibilité infinie dans la conception de la position d'apport de liquidité, similaire à Uniswap V3, mais avec une exécution rationalisée et autonome, tout comme sur Curve. En effet, les LPs sur Maverick peuvent décider de redistribuer leurs liquidités pour suivre le prix dans une ou deux directions. **Si nécessaire, le rééquilibrage est effectué au niveau du DEX, ce qui garantit l'efficacité du gaz.** Maverick prend également en charge les "pools statiques" (range).
+
+**Cette caractéristique fait de Maverick un outil fantastique pour les actifs ancrés, en particulier ceux qui ne sont pas continuellement négociés précisément à l'ancrage** et qui sont donc mal desservis par les structures de liquidité habituelles, telles que la paire LUSD/USDC :
+
+* Curve stableswap, qui optimise la liquidité pour un prix de 1:1, n'est pas idéal lorsque le LUSD est au dessus du peg.
+* Uniswap v3, où les LPs finissent généralement par être super concentrés autour du prix actuel du marché, ce qui est efficace, mais les met rapidement hors de portée lorsque le prix évolue.
+
+
+
+Sur Maverick, une telle paire peut être exploitée de manière optimale par chaque LP, en fonction de son objectif réel. **Cela permet à chaque investisseur de créer une position qui s'ajuste automatiquement et qui met en œuvre une stratégie correspondant à ses hypothèses et à ses besoins**. Voici quelques exemples d'objectifs <-> d'appariement de la structure de liquidité :
+
+* 🎚️ | Vous recherchez un rendement sûr avec un risque minimal ? Un LP statique peut être préférable, car les résultats sont prévisibles.
+* 🐂/🐻 | Penser que le LUSD est actuellement sur/sous-évalué : vous pouvez fournir de la liquidité directionnelle et gagner un supplément si votre hypothèse se vérifie.
+* 🦀 | Vous voulez parier sur le volume avec des prix qui vont de côté ? Vous pouvez simplement concentrer votre liquidité sur quelques bacs autour du prix et activer le **mode gauche-droite** pour rééquilibrer constamment le prix actuel, maximisant ainsi la liquidité disponible et les frais perçus, mais aussi la perte potentielle impermanente.
+
+Jusqu'à présent, Maverick a trouvé **une adéquation produit/marché exceptionnelle sur des pools telles que wstETH/ETH**, avec un taux d'utilisation quotidien moyen de plus de 100 %. Voici par exemple ce qui s'est passé aujourd'hui (20/4) :
+
+* Curve : TVL = $1.5B, Volume =$34M, Utilisation = 2,26%
+* Maverick : TVL = $10.6M, Volume =$10.45M, **Utilisation = 98,5%**
+
+")
+
+### Que se passe-t-il ensuite ?
+
+Lancé il y a seulement quelques semaines sur le mainnet Ethereum, Maverick enregistre déjà un volume impressionnant et un taux d'utilisation de la liquidité sans précédent, en particulier sur les paires d'actifs ancrés.
+
+Maverick a également été lancé sur zkSync, son premier L2, il y a quelques jours. Au fur et à mesure que d'autres projets DeFi OG y déploieront leurs services, Maverick aura de nombreuses occasions de démontrer l'efficacité supérieure que ses modèles de liquidité peuvent offrir aux LPs.
+
+Je suis très enthousiaste à l'idée des prochaines étapes : en tant que stratège DeFi chez Liquity, la sortie de Maverick m'a fait l'effet d'un Noël anticipé ; je pense que ce n'est qu'un début !
+
+Je contribuerai à Maverick en tant que conseiller, ce qui signifie que mon objectif principal reste mon engagement envers les protocoles immuables, en particulier Liquity, en les aidant à se développer par le biais de diverses activités onchain et offchain. Je suis convaincu que Maverick s'avérera rapidement un outil décisif pour atteindre cet objectif.
+
+Vous entendez parler de Maverick pour la première fois et voulez en savoir d'avantage ? **[Consultez-le site](https://mav.xyz/)** ou rejoignez [le serveur Discord](https://discord.gg/mavprotocol).
diff --git a/content/post/2023/maverickxtokenbrice.md b/content/post/2023/maverickxtokenbrice.md
new file mode 100644
index 00000000..a638750b
--- /dev/null
+++ b/content/post/2023/maverickxtokenbrice.md
@@ -0,0 +1,72 @@
+---
+title: "Announcement: TokenBrice 🤝 Maverick"
+description: "I am supporting the Maverick team as an advisor, helping with the growth strategy, tokenomics, and BD."
+date: '2023-04-21T01:13:50.191Z'
+categories: [Projects, DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Maverick, DEX, Liquidity Management, Liquidity Shaping, Concentrated Liquidity]
+toc: false
+tocNum: false
+url: maverick-x-tokenbrice
+image: img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.png
+difficulty: "intermediate"
+---
+
+This post is more of a personal announcement: I wanted to let you know what I am up to and what's happening with Maverick. So let's not beat around the bush: I'm thrilled to announce that **I'm supporting the Maverick team as an advisor, helping with the growth strategy, tokenomics, and business development.**
+
+### Storytime
+
+Just like me, you must be over-saturated with DEXes. If you follow DeFi closely, you've seen several of these launches daily. Yet most still adopt fundamental liquidity structures: x\*y=k for volatile pairs and stableswap, and focus on innovating on the tokenomics instead: the now famous ve(3,3) DEXes.
+
+**I've been looking for a DEX that would innovate at the fundamental level** for a while, so in May last year, when Bob reached out to let me know about Maverick, I was all ears. I quickly realized Maverick could reshape how we envision liquidity in DeFi and help further improve its efficiency. So I’m glad to announce my involvement today: Maverick is already live, growing quickly, and poised for even exponential growth.
+
+But before we dive into what makes Maverick so interesting, we need to take a step back and consider the broader context of liquidity in DeFi:
+
+
+### Liquidity Structuring Deep Dive
+
+**In the beginning, there was Uniswap**, and its ease of use for liquidity providers led people to believe it was a trivial activity. Yet, any liquidity-providing activity on a DEX involves two decisions:
+
+1. Picking a pair (or more) of tokens (ex: ETH/USDC)
+2. **Forming price assumptions regarding one/both tokens (🐂, 🐻, or 🦀) **
+
+The second decision is **often implicit**, like with UniswapV2, where you get no option but only one choice: 50/50, meaning that your optimal scenario is both tokens going sideways in price with a large trading volume.
+
+When Uniswap V3 emerged, the second assumption was suddenly more explicit to DeFi users thanks to concentrated liquidity. However, V3 added complexity to the liquidity provider experience and active management. It **mainly caters to power-users who can afford frequent rebalancing**, or **require external tooling** to be harnessed effectively by LPs, the liquidity manager – Arrakis, Bunni, etc.
+
+
+### What's unique about Maverick?
+
+Simply put, Maverick is the spiritual descendant of UniV3 and CurveV2. It offers infinite flexibility in the design of liquidity-providing position, similar to Uniswap V3, but with streamlined and autonomous execution, just like on Curve. Indeed, LPs on Maverick can decide to redistribute their liquidity to follow the price in one or both directions. **If needed, the rebalancing is done at the DEX level, ensuring gas efficiency.** Maverick also supports “static pools” that are range-bound too.
+
+**This feature makes Maverick a fantastic fit for pegged assets, especially those that are not continually trading precisely at the peg** and so underserved by the usual liquidity structures, such as a LUSD/USDC pair:
+
+* Curve stableswap, which optimizes liquidity for a 1/1 price, is not ideal when LUSD is overpeg.
+* Uniswap v3, where LPs usually end up super concentrated around the current market price, which is efficient, but also quickly through them out of range as the price move
+
+
+
+On Maverick, such a pair can be harnessed optimally by each LP, depending on their actual goal. **It enables each LP to craft an automatically adjusting position that enforces a strategy fitting his assumptions and needs**. Here are some examples of goals <-> liquidity structure matching:
+
+* 🎚️ | Looking for a safe yield with minimal risk? A static LP might be preferable, as the outcomes are predictable.
+* 🐂/🐻 | Thinking LUSD is currently over/undervalued: you can supply directional liquidity and earn extra if your assumption verifies.
+* 🦀 | Want to bet on volume with prices going sideways? You can simply focus your liquidity a few bins around the price and activate the **left-right mode** to constantly rebalance the current price, thus maximizing the available liquidity and fees collected but also the potential impermanent loss.
+
+So far, Maverick has found **a beast of a product/market fit on pools like wstETH/ETH**, often averaging over 100% daily utilization rate. Here’s today, for instance (4/20):
+
+* Curve: TVL = $1.5B, Volume =$34M, Utilization = 2,26%
+* Maverick: TVL = $10.6M, Volume =$10.45M, **Utilization = 98,5%**
+
+")
+
+
+### What's next?
+
+Launched just a few weeks ago on the Ethereum mainnet, Maverick is already seeing an impressive volume and unprecedented liquidity utilization rate, especially on pegged asset pairs.
+
+Maverick was also launched on zkSync, its first L2, a few days ago. As more staple DeFi projects roll out service there, Maverick will have many opportunities to demonstrate the superior efficiency its liquidity designs can offer to LPs.
+
+I’m excited about the next steps: as a DeFi Strategist at Liquity, the release of Maverick felt like early Christmas to me; I think it's just getting started!
+
+I’ll contribute to Maverick as an advisor, meaning that my main focus remains my commitment to immutable protocols, especially Liquity, helping them grow through various onchain and offchain activities. I’m confident Maverick will quickly prove to be a decisive tool in achieving that purpose.
+
+Just hearing about Maverick? **[Check it out](https://mav.xyz/)** or [join the Discord server.](https://discord.gg/mavprotocol)
diff --git a/content/post/2023/solidly-velodrome-template.fr.md b/content/post/2023/solidly-velodrome-template.fr.md
new file mode 100644
index 00000000..607689e4
--- /dev/null
+++ b/content/post/2023/solidly-velodrome-template.fr.md
@@ -0,0 +1,119 @@
+---
+title: "ve(3,3) : l'étape logique après le modèle veCRV?"
+description: "On creuse les modèles de Solidly et Velodrome pour comprendre en quoi les DEX ve(3,3) augmentent le modèle veCRV."
+date: '2023-04-28T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, veCRV, Velodrome, veVELO, Aerodrome, veAERO]
+toc: true
+tocNum: false
+url: solidly-velodrome-fork
+image: img/2023/solidly-velodrome-template/cover.png
+difficulty: "intermediate"
+---
+
+
+Les forks Solidly/Velodrome ont poussé comme des champignons, en particulier sur les layers 2 populaires comme Arbitrum ou zkSync. Solidly est maintenant le troisième protocole le plus forké en DeFi et l'un des rares cas où les forks (comme Velodrome) sont les leaders du marché. À première vue, on pourrait croire qu'il s'agit d'un nouveau train de hype, comme lorsque nous avons eu la saison des forks Uni/Sushi, la saison des forks Olympus, etc.
+
+En effet, c'est exagéré : une quantité absurde de DEX sont lancés chaque semaine, et 95% d'entre eux ne seront plus d'actualité dans six mois. Cependant, comme dans la plupart des cas de hype similaire, il existe une innovation fondamentale dans la conception des échanges décentralisés qui vaut la peine d'être étudiée.
+
+Cet article se penchera donc sur les modèles Solidly et Velodrome afin de comprendre pourquoi ils sont devenus un modèle de fork standard. Cela étant dit, nous serons dans une excellente position pour réfléchir aux prochaines étapes pour ces DEX et à ce à quoi ce marché pourrait ressembler dans quelques mois.
+
+C'est parti !
+
+{{< notice note >}}
+Cet article suppose une compréhension minimale de la finance décentralisée et une compréhension approfondie du modèle veCRV. Si vous avez besoin d'une remise à niveau, consultez : [⚔ CRV Wars : comprendre la course à l'accumulation de CRV pour influencer le protocole Curve Finance](https://tokenbrice.xyz"/content/posts/2021/crv-wars.fr.md).
+{{< /notice >}}
+
+## Introduction aux DEX ve(3,3)
+
+Avant de nous plonger dans la manière dont Solidly s'est appuyé sur le modèle veCRV et a tenté de l'améliorer, prenons un peu de recul.
+
+
+### Structure de l'AMM VS couche d'incitation
+
+Pour comprendre l'histoire des DEX ve(3,3), nous devons faire la distinction entre deux niveaux qui sont tout aussi importants pour un échange décentralisé :
+
+
+
+1. **La structure de la liquidité** : les différents modèles d'AMM utilisés pour maintenir la liquidité, tels que x\*y=k d'UNIv2 ou le stableswap de Curve.
+2. **Le modèle d'incitation** : les frais + toutes les autres incitations destinées au fournisseur de liquidités, y compris les émissions de jetons (comme dans le modèle CRV).
+
+Si, en fin de compte, la première couche - la structure de la liquidité - est le cœur du jeu, la deuxième couche - les incitations - est cruciale pour attirer et maintenir une liquidité suffisante.
+
+Curve a innové dans les deux domaines, mais les modèles dont nous allons parler aujourd'hui sont construits sur cette base et **se concentrent entièrement sur l'amélioration de la couche d'incitation**. En effet, au stade actuel, la plupart des DEX ve(3,3) exploitant le modèle Solidly ou Velodrome n'offrent que deux types de structure de liquidité bien connus : x\*y=k & stableswap.
+
+{{< notice info >}}
+Selon les DEX, ces deux modèles de liquidité sont appelés corrélé/volatile ou stable/volatile.
+{{< /notice >}}
+
+Parlons donc de ce qui était si intéressant dans le Solidly original d'Andre Cronje et des enseignements que nous pouvons tirer de son échec.
+
+
+## Les innovations apportées par Solidly
+
+Solidly a été présenté au début de 2022 sur [le medium de Andre Cronje](https://andrecronje.medium.com/ve-3-3-44466eaa088b) ; la partie cruciale de la vision de Solidly était une amélioration significative de l'utilité pour ceux qui vérouillent des tokens - les lockers. Sur Curve, les lockers sont engagés pour quatre ans, sans aucun transfert possible. Bien que cela soit excellent pour l'alignement des incitations à long terme de tous les participants de l'écosystème Curve, cela crée également une barrière importante à l'entrée.
+
+C'est ainsi qu'est né ve(3,3), avec en son cœur **le veNFT**. Alors que les veCRV sont illiquides, les positions veSOLID sont représentées par le veNFT qui est lui liquide, ce qui permet leur transfert ou leur vente/achat de gré à gré. Cela permet de rendre le verrouillage moins effrayant. Pour l'encourager davantage, Cronje a introduit les "**rebases anti-dilutives**", un concept tiré d'Ampleforth/Olympus.
+
+L'idée est simple : étant donné que le modèle Curve/Solidly DEX émet des jetons chaque semaine aux fournisseurs de liquidités, les détenteurs de jetons sont constamment dilués. Ils doivent constamment augmenter leur position afin de maintenir leur part de vote actuelle. Pour compenser cela, les détenteurs de veSOLID reçoivent un rebasement hebdomadaire proportionnel aux émissions. Cela leur permet de conserver leur part de vote même si aucun nouveau jeton n'est bloqué.
+
+Hormis ces changements, Solidly a hérité de la plupart des éléments du modèle Curve, y compris **la fonction LP boost**, qui permet aux détenteurs de vetokens d'obtenir des rendements accrus sur leur position de liquidité. Cette fonctionnalité a des conséquences réelles puisqu'elle "appelle pratiquement un Convex". En effet, la conclusion logique d'une telle fonctionnalité est qu'un ou quelques acteurs s'emparent de quantités significatives de vetokens et fournissent leur LP boost aux déposants moyennant une commission.
+
+La présence ou l'absence de cette caractéristique constitue la différence essentielle entre les modèles de Solidly et de Velodrome, et nous y reviendrons plus tard.
+
+Enfin, il y a une dernière particularité essentielle sur le modèle d'incitation des votants. Sur Curve, les LP reçoivent la moitié des frais d'échange collectés + les émissions de CRV, alors que les votants ne sont pas exposés aux frais de la pool sur laquelle ils votent. Cela peut conduire à une situation où les veCRV holders votent pour des pools uniquement pour les incitations de vote, même si la pool ne fournit aucun volume à l'échange.
+
+Sur Solidly, les LP ne sont récompensés que par l'émission SOLID, et les frais collectés sur la paire sont redirigés vers les votants de la pool. Ainsi, en tant que détenteur de veSOLID, pour optimiser vos gains, vous êtes incité à prendre en compte le volume de la pool sur lequel vous votez, et pas seulement les pots-de-vin. Cela abouti à un meilleur alignement des incitations des principaux participants du protocole (swapper, apporteur de liquidité, veHolder).
+
+Solidly a aussi innové sur la stratégie de lancement, avec **un airdrop ciblé sur les protocoles**, en fonction de leur activité onchain sur Fantom, où Solidly se trouvait. Ensemble, toutes ces innovations et le battage médiatique ont permis d'attirer rapidement une quantité massive de liquidités sur l'échange.
+
+Mais la mise en œuvre initiale de Solidly présentait quelques faiblesses majeures, notamment une baisse agressive des émissions et une création de jauges entièrement sans permission qui permettait à n'importe quel pool de recevoir des récompenses SOLID. Il était possible de jouer, alors on a joué. Rapidement, des jetons ont été créés dans le seul but de farmer SOLID : le prix du SOLID s'est écroulé et la spirale de la mort s'est enclanchée.
+
+
+
+La TVL a disparu aussi rapidement qu'elle est apparue, et Solidly est entré dans l'histoire pour la plupart des gens. Mais ceux qui ont suivi les événements de près savaient que l'échec de Solidly ne provenait pas d'une faiblesse du modèle ve(3,3) mais plutôt d'un **détail négligé de son implémentation**, ce qui signifie que même si Solidly n'existait plus, ve(3,3) referait probablement surface. Et c'est ce qui s'est passé, quelques mois plus tard, sur une autre chaîne, et conçu par une autre équipe : Velodrome.
+
+## Les améliorations apportées par Velodrome au modèle Solidly
+
+[Velodrome](https://www.defiscan.info/protocols/velodrome-v2/optimism) a exploité le modèle de Solidly et a résolu le problème des émissions en mettant en place une **validation pour les jauges**, ce qui permet d'éviter la situation où les récompenses sont attribuées à des jetons inventés, comme c'est le cas sur Solidly.
+
+Velodrome est allé bien au-delà d'un simple fork et a mis en œuvre d'autres améliorations, notamment un modèle d'émissions plus durable et la **suppression de la fonction LP boost**, ce qui signifie qu'il n'y a pas de traitement préférentiel pour les détenteurs de veVELO en termes de rendement. Cela simplifie également l'expérience pour les nouveaux LP qui pourraient être déconcertés par la gamme de rendement que l'on voit sur les DEX avec la fonction LP boost.
+
+Au-delà des caractéristiques techniques, une grande partie du succès de Velodrome est due à **l'exécution et au soin apporté par l'équipe aux stratégies de développement commercial**, une partie essentielle du modèle ve(3,3). Construit sur Optimism, Velodrome a trouvé son PMF comme la source de liquidité de la chaîne. Grâce à son modèle, le maintien de la liquidité sur Velodrome est beaucoup plus rentable pour les projets que, par exemple, sur Uniswap.
+
+Comme Solidly, **Velodrome a airdrop plusieurs protocoles avec un NFT veVELO,** sans conditions, ce qui a énormément aidé à attirer l'activité initiale de vote et d'incitation. Le protocole a trouvé une bonne place, principalement auprès d'autres protocoles émettant des stablecoins ou des dérivés d'enjeux liquides ETH :
+
+
+
+
+Cela fait presque un an, et l'activité s'est maintenue, grâce à des ajustements prudents et progressifs des **incitations OP attribuées sur le protocole**, connu sous le nom de [Tour de OP](https://medium.com/@VelodromeFi/tour-de-op-updates-631268181baa). La plupart d'entre eux sont utilisés pour encourager deux comportements essentiels pour soutenir la vélocité de la flywheel :
+
+1. Les incitations au vote (bribes), qui sont encouragées grâce à un matching en OP.
+2. Verrouillage de veVELO, encouragé par des OP bonus attribués aux lockers de VELO.
+
+Le matching des bribes est encore augmentée pour les projets qui verrouillent veVELO ou déploient des quantités importantes de liquidité (Protocol Owned Liquidity), ce qui contribue à amplifier l'effet de renforcement : ceux qui veulent construire des liquidités soutenues à long terme sur Velodrome ont de bonnes raisons d'acheter veVELO, de verrouiller et de voter, de soumettre des incitations de vote et de fournir de la POL, **idéalement tout cela en même temps**.
+
+Cela permet à Velodrome d'être en tête du classement des protocoles TVL sur Optimism et de traiter environ 30% du volume total de la chaîne, contre 50% pour Uniswap, qui a environ ¼ de la TVL de Velodrome.
+
+
+
+Alors, pourquoi un tel écart entre les deux ? C'est simple : Le ratio Volume/TVL d'Uniswap est ~9x supérieur à celui de Velodrome car la liquidité sur Uniswap est beaucoup plus concentrée et donc plus efficace. Mais cela est sur le point de changer car Velodrome V2 arrive bientôt.
+
+
+
+### Présentation de Velodrome V2
+
+Bien qu'Uniswap ait eu une longueur d'avance avec la liquidité concentrée, cela va changer rapidement. La licence v3 [a expiré le 1er avril 2023](https://docs.uniswap.org/contracts/v3/guides/governance/liscense-modifications), ce qui signifie que le modèle est maintenant beaucoup plus facile à réimplémenter. De nombreux DEX, y compris les forks Solidly/Velodrome, ont l'intention d'exploiter cette possibilité. Cependant, pour garder cet article concentré, nous ne couvrirons que ce qui est annoncé pour Velodrome V2, attendu dans les semaines/mois à venir.
+
+En effet, Velodrome V2 ne marquera pas seulement **l'introduction du style UNI-v3 de LP sur le DEX** mais aussi des améliorations significatives de l'UX/UI, un relayeur pour faciliter la gestion des veNFT, des illustrations pour les veNFT, et bien d'autres choses encore. Consultez l'[article d'annonce de la V2](https://medium.com/@VelodromeFi/velodrome-the-road-ah-43488531bb0e) pour plus de détails.
+
+## Conclusion
+
+J'espère que cet article vous a aidé à comprendre les avantages des modèles Solidly et Velodrome. Bien que je mentionne la myriade de forks dans l'introduction, j'ai gardé le cap dans cet article. Je pense que cela appelle une suite où je passe au peigne fin les principaux forks et les modifications qu'elles apportent au modèle : bientôt !
+
+## Principaux enseignements
+
+* **L'importance des capacités humaines/commerciales de l'équipe** | ve(3,3), tout comme Curve, sont des protocoles pour des protocoles. Le professionnalisme de l'équipe et sa capacité à établir des priorités et à mettre en œuvre le développement commercial sont des facteurs de réussite importants pour le DEX à long terme.
+* **L'importance des bons partenaires**| Même si le BD est bien fait, un DEX ve(3,3) donné n'est bon que dans la mesure où ses meilleurs coureurs le sont. Oui, vous voulez qu'ils postent des incitations de vote, qu'ils apportent de la liquidité, qu'ils votent et qu'ils fassent connaître le marché, mais pas seulement. La qualité des liquidités acheminées vers le DEX est également importante (rapport volume/TVL & nature de la liquidité).
+* **LP Boost et conséquences** | Si un ve(3,3) implémente le LP boost, il appelle des protocoles de type Convex. Le succès du ve(3,3) dépendra de l'ampleur et de la qualité des résultats obtenus par les protocoles Convex-like construits dessus. Pour suivre les statistiques clés des différents wrappers et des principaux détenteurs de jetons ve, consultez - [DeFiWars](https://www.defiwars.xyz/wars).
+* **Impact de l'arrivée des liquidités concentrées** | Bien que ve(3,3) soit une innovation significative pour la couche d'incitation du DEX, il exploite actuellement des structures de liquidité basique. Une bonne adéquation entre le modèle d'incitation ve(3,3) et une structure de liquidité efficace de type UNIv3 permettra d'améliorer encore l'efficacité de la flywheel.
diff --git a/content/post/2023/solidly-velodrome-template.md b/content/post/2023/solidly-velodrome-template.md
new file mode 100644
index 00000000..9fe35b5c
--- /dev/null
+++ b/content/post/2023/solidly-velodrome-template.md
@@ -0,0 +1,119 @@
+---
+title: "ve(3,3), the logical next step after veCRV?"
+description: "A deeper look at the Solidly and then later Velodrome model for understanding their improvement on the base Curve / veCRV template."
+date: '2023-04-28T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, veCRV, Velodrome, veVELO, Aerodrome, veAERO]
+toc: true
+tocNum: false
+url: solidly-velodrome-fork
+image: img/2023/solidly-velodrome-template/cover.png
+difficulty: "intermediate"
+---
+
+Solidly/Velodrome forks have been popping up like mushrooms, especially across the popular layer 2 like Arbitrum or zkSync. Solidly is now the top #3 forked protocol in DeFi and one of the rare cases where the forks (such as Velodrome) are the market leaders. At first glance, it could seem like just another fork hype train, like when we had the Uni/Sushi fork season, Olympus fork season, etc.
+
+And indeed, it’s overblown: an absurd amount of such DEXes are launching weekly, and 95% of them won’t be relevant six months from now. However, like with most of such hype trains, there is deep down, below the fluff, an actual fundamental innovation in how decentralized exchanges are designed that is worth looking into.
+
+So this article will dive deep into the Solidly and Velodrome models to understand why they became a standard fork template. With that said, we’ll be in an excellent position to ponder the next steps for these DEXes and what this market might look like in a few months.
+
+Let’s get right to it!
+
+
+{{< notice note >}}
+This article assumes a minimal understanding of decentralized finance and a thorough understanding of the veCRV model. If you need a refresher, check: [⚔ CRV Wars: understanding the race to accumulate power to influence Curve Finance protocol](https://tokenbrice.xyz/crv-wars/)
+{{< /notice >}}
+
+## Introduction to ve(3,3) DEXes
+
+Before we dive into how Solidly built on top and tried to improve the veCRV model, let’s take a step back to consider the scope first.
+
+
+### AMM Structure VS Incentivization Layer
+
+Indeed, to grasp the ve(3,3) DEXes story, we need to distinguish between two layers that are equally important for a decentralized exchange:
+
+
+
+1. **The liquidity structure layer**: the various AMM models used to sustain liquidity, such as UNIv2’s x\*y=k or Curve’s stableswap.
+2. **The incentivization layer**: fees + all other incentives directed to the liquidity provider, including token emissions (such as in the CRV model).
+
+While at the end of the day, 1 – the liquidity structure – is the heart of the game, the second layer – incentives – is crucial in attracting and sustaining sufficient liquidity.
+
+Curve innovated on both. While the models we'll discuss today harnessed it, they **focus entirely on improving the incentivization layer**. Indeed at the current stage, most of ve(3,3) DEXes harnessing the Solidly or Velodrome model only offer two well-known liquidity structure types: x\*y=k & stableswap.
+
+{{< notice info >}}
+Depending on the DEXes, those two liquidity models are called correlated/volatile or stable/volatile.
+{{< /notice >}}
+
+So, let’s talk about what was so interesting about Andre’s Cronje original Solidly and what insights we can draw from its failure.
+
+
+## Andre Cronje’s Solidly Innovations
+
+Introduced in early 2022 on [Cronje’s medium](https://andrecronje.medium.com/ve-3-3-44466eaa088b), the crucial part of Solidly’s vision was a significant improvement in the utility for lockers. On Curve, lockers are committed for four years with non-transferable vote-escrowed tokens. While it’s great for the long-term incentives alignment of all the participants of the Curve ecosystem, it also creates a sizable barrier to entry.
+
+Thus came ve(3,3), with at its core **the veNFT**. While veCRV are illiquid, veSOLID positions are represented by the veNFT, enabling their transfer or OTC sale/purchase. It helps make locking less scary. To further incentivize it, Cronje introduced “**anti-dilutive rebases**”, a concept drawn from Ampleforth/Olympus.
+
+The idea here is simple: since the Curve/Solidly DEX model emits tokens weekly to liquidity providers, vetokens holders are constantly diluted. They must keep increasing their position even to maintain their current vote share. To compensate for this, veSOLID holders receive a weekly rebase proportional to the weekly emissions under the Solidly model. This allows them to maintain their voting share even if no new tokens are locked.
+
+Apart from these changes, Solidly inherited most of the Curve model, including **the LP boost** feature, enabling vetokens holders to earn boosted yields on their liquidity position. This feature has real consequences since it pretty much “calls for a Convex.” Indeed, the logical conclusion of such a feature is one/a few actors seizing significant amounts of vetokens and providing their LP boost to depositors for a fee.
+
+The presence/absence of this feature is the critical difference between the Solidly and Velodrome models, so we’ll touch back on it later.
+
+Finally, there one last critical twist to the voter incentives model. On Curve, LP get half of the trading fees collected + CRV emissions, while voters have no exposure to the fees of the pool they are voting on. It can lead to situation where voters are voting for pools just for the bribes, even if the pool provides no volume to the exchange.
+
+On Solidly, the LPs are only rewarded with SOLID emission, and the LP fees are redirected to the voters of the pool. Thus, as a veSOLID holder, to optimize your earnings, you are incentivized to consider the volume on the pool you are voting on, and not just the bribes. This leads to a better alignment of the incentives of the main participants of the protocol (swapper, liquidity provider, veHolder)
+
+Solidly also innovated on the launch strategy, with **an airdrop targeted at protocols**, depending on their onchain activity on Fantom, where Solidly was. Together, all those innovations and the hype led to a massive amount of liquidity quickly attracted to the exchange.
+
+But Solidly’s initial implementation had a few key weaknesses, including an aggressively steep decline in emissions and fully permissionless gauge creation that allowed any pools to receive SOLID rewards. It was gamable, so it was gamed. Soon, tokens were created for the sole purpose of farming SOLID, and the price quickly spiraled, along with the TVL.
+
+
+
+The TVL disappeared as quickly as it came, and Solidly became a part of history for most. But those who followed the events closely knew that Solidly’s failure did not come from a weakness in the ve(3,3) model but more of **an overlooked detail of its implementation**, meaning that while Solidly was no more, ve(3,3) would likely resurface. And it did, a few months later, on another chain made by another team: enter Velodrome.
+
+
+## Velodrome’s refinements to the Solidly model
+
+[Velodrome](https://www.defiscan.info/protocols/velodrome-v2/optimism) harnessed the Solidly model and fixed the issue with emissions by implementing a **whitelist for gauges**, helping to avoid the situation where rewards are allocated to made-up tokens, as seen on Solidly.
+
+Velodrome went far beyond a mere fork, though, and implemented further improvements; among them were a more sustainable emissions model and **removing the LP boost feature**, meaning there is no preferential treatment for veVELO holders in terms of yield. Velodrome also streamlines the experience for first-time LPs who might be confused with the yield range you see on DEXes with LP boost implemented.
+
+Beyond the technical features, a large part of Velodrome’s success is due to the **team’s execution and care for the business development strategies**, an essential part of the ve(3,3) model. Built on Optimism, Velodrome found its PMF as the chain liquidity layer. Thanks to its model, sustaining liquidity on Velodrome is much more cost-effective for projects than, say, on Uniswap.
+
+Like Solidly, **Velodrome airdropped several protocols with a veVELO NFT,** no strings attached, which helped immensely to attract the initial voting and bribing activity. The protocol found a good fit, mostly with other protocols emitting stablecoins or ETH liquid stake derivatives:
+
+
+
+
+It’s been almost a year, and the activity has sustained, thanks to careful and progressive adjustments of the **OP incentives allocated on the protocol**, known as [Tour de OP](https://medium.com/@VelodromeFi/tour-de-op-updates-631268181baa). Most of them are used to incentivize two behaviors essential to sustain the flywheel:
+
+1. Bribes from protocols, incentivized by OP bribes matching.
+2. Locking of veVELO, incentivized by an OP lock bonus.
+
+The bribe matching is further increased for projects which lock veVELO or deploy sizeable amounts of protocol-owned liquidity to the exchange, helping further amplify the reinforcing effect: those who want to build liquidity sustained over the long term on Velodrome have been given solid reasons to buy VELO, lock and vote, bribe, and supply POL, **ideally all at once**.
+
+It leads to Velodrome topping the protocols TVL charts on Optimism and processing about 30% of the total volume of the chain vs 50% for Uniswap, which has roughly ¼ of Velodrome’s TVL.
+
+
+
+So, why such a spread between the both? Simple: Uniswap's Volume/TVL ratio is ~9x above Velodrome right now because the liquidity on Uniswap is much more concentrated and thus more efficient. But it’s about to change as Velodrome V2 is arriving soon.
+
+
+### Introducing Velodrome V2
+
+While Uniswap had a headstart with concentrated liquidity, it will change rapidly. The v3 license [expired on April 1st 2023](https://docs.uniswap.org/contracts/v3/guides/governance/liscense-modifications), meaning the model is now much easier to re-implement. Many DEXes, including Solidly/Velodrome forks, intend to harness this. Still, to keep this article focused, we’ll only cover what is announced for Velodrome V2, expected in the next few weeks/months.
+
+Indeed, Velodrome V2 will not just mark **the introduction of UNI-v3 style of LP on the DEX** but also significant UX/UI improvements, a relayer to ease the management of veNFT, artwork for the veNFT, and much more. Check the [V2 announcement article](https://medium.com/@VelodromeFi/velodrome-the-road-ah-43488531bb0e) for details.
+
+## Conclusion
+
+I hope this article helped you understand the benefits of the Solidly and Velodrome models. While I mention the myriad of forks in the introduction, I’ve stayed on course with this article. I guess this calls for a follow-up where I comb through their main forks and the modifications they implement into the template: stay tuned.
+
+## Key Takeaways
+
+* **Importance of Business Development** | ve(3,3), just like Curve, are protocols for protocols. The team's professionalism and ability to efficiently prioritize and executive on BD is a sizable success factor of the DEX over the long term.
+* **Quality of the launch/airdrop/top racers rooster** | Even if BD is done well, a given ve(3,3) DEX is only as good as its top racers. Yes, you want them bribing, voting, and driving awareness, but not only. The quality of the liquidity driven to the DEX also matters (volume/TVL ratio).
+* **LP Boost and its consequences** | If a ve(3,3) implements LP boost, it calls for Convex-like protocols. The success of the ve(3,3) will be impacted by how much and how well its Convex-likes do. To follow the key stats on the various wrappers and main veTokens holders, check - [DeFiWars](https://www.defiwars.xyz/wars).
+* **ve(3,3) + Liquidity Concentration** | While ve(3,3) is a significant innovation for the incentives layer of the DEX, it currently harnesses sub-par liquidity structures. Properly matching the ve(3,3) incentives model with an efficient UNIv3-style liquidity structure will help further improve the effectiveness of the flywheel.
diff --git a/content/post/2023/stablecoin-marauder-map.fr.md b/content/post/2023/stablecoin-marauder-map.fr.md
new file mode 100644
index 00000000..695d8f88
--- /dev/null
+++ b/content/post/2023/stablecoin-marauder-map.fr.md
@@ -0,0 +1,319 @@
+---
+title: "La carte du Maraudeur des stablecoins"
+description: "Chaque semaine de nouveaux stablecoins émergent : suivre les innovations est devenu une exercice difficile. AMO ? PSM ? DSR ? pegKeeper ? Cet article passe en revue les différents mécanismes qui sous-tendent les stablecoins afin d’en apprécier leur pertinence."
+date: '2023-09-15T01:13:50.191Z'
+categories: [Stablecoin]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Aave, GHO, crvUSD, LUSD, fETH, xETH, Interest Rate]
+url: stablecoin-marauder-map
+image: img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.png
+difficulty: "beginner"
+---
+
+De nouveaux stablecoins plus ou moins décentralisés émergent chaque jour, et avec la multiplication des modèles dont ils s’inspirent, des blockchains et des couches (layers 2), la tendance n'est pas prête de s'arrêter. **Naviguer dans le paysage des stablecoins devient une compétence essentielle en DeFi**.
+
+Les modèles de stablecoins centralisés sont les plus faciles à évaluer au contraire des stablecoins décentralisés qui exploitent divers mécanismes complexes, plus difficiles à comparer. Pourtant, des dizaines de stablecoins décentralisés pertinents apparaissent chaque année, et je ne m'attends pas à ce que cette tendance s'arrête de sitôt.
+
+Cet article a donc pour but de fournir une carte du maraudeur pour naviguer sur la mer des stablecoins décentralisées. Avant de passer au peigne fin les innovations dans ce domaine, permettez-moi de revenir une minute sur le contexte : pourquoi nous intéressons-nous tant aux monnaies stables (décentralisées) ?
+
+
+## Une question de valeur - la taille compte
+
+En d'autres termes, **les stablecoins sont de très loin les produits les mieux adaptés aux marchés cryptos**. La DeFi, c'est cool, non ? C’est l’objet passion de ce blog. Pourtant il y a environ 3 fois plus de valeur bloquée dans les stablecoins que dans les protocoles DeFi.
+
+Actuellement, la TVL totale de la DeFi est d'environ 38 milliards de dollars pour 124 milliards de dollars de stablecoins en circulation, principalement centralisés : l'USDT en représente 66 % et l'USDC 20 %.
+
+{{< notice note >}}
+
+N'oubliez pas que ces deux mesures sont redondantes, car les stablecoins sont largement utilisés en DeFi, de sorte que l'écart effectif est encore plus élevé.
+
+{{< /notice >}}
+
+Et maintenant, le vif du sujet ! Au fur et à mesure que nous examinerons les modèles de stablecoins décentralisés utilisés, j'illustrerai leurs mécanismes avec des exemples issus de projets réels : imaginez cet article à la croisée d’un livre de recettes et d’une carte de maraudeur, mais sur le thème des stablecoins décentralisés.
+
+
+## COMMENT CONSTRUIRE UN STABLECOIN DÉCENTRALISÉ
+
+Il existe une gamme quasi infinie de modèles pour produire des monnaies stables décentralisées ; cependant, tous reposent sur deux éléments fondamentaux :
+
+
+
+1. **La stabilisation du prix** | Trouver un moyen efficace de stabiliser le prix sans trop de compromis.
+2. **La liquidité** | Gérer activement la liquidité du stablecoin afin d'en optimiser l'efficacité.
+
+Si ces deux thèmes répondent à la même nécessité, c’est à dire garantir que le stablecoin peut être échangé à sa valeur de référence en toutes circonstances, ils fonctionnent toutefois sur des périodes de temps différentes. Les mécanismes de stabilisation sont construits de manière à ce que les stablecoins tendent vers leur parité sur des périodes moyennes à longues. Les stratégies de liquidité sont là pour garantir que même des quantités importantes de stablecoins peuvent être achetées et vendues au plus près de leur valeur de référence.
+
+Il s'agit là de deux conditions préalables pour qu'un concept de stablecoin soit pertinent et ait une chance de s'imposer. Une faille dans l’une de ces deux dimensions met en péril l'ensemble de la conception. Examinons donc les principaux mécanismes de stabilisation des prix et leurs conséquences.
+
+
+### MÉCANISMES DE STABILISATION DES PRIX
+
+Face à une demande importante, les stablecoins décentralisés peuvent se déprécier, c'est-à-dire s'écarter de leur prix d’ancrage, généralement 1 dollar, soit vers le haut (overpeg), soit vers le bas (depeg). Bien que similaires, ces deux mouvements résultent de problèmes de conception très différents. Commençons par le plus courant, le depeg : lorsqu'un stable vaut moins que sa valeur d'ancrage.
+
+
+#### Depeg illustré par le GHO
+
+Cela se produit généralement lorsque le stablecoin est principalement utilisé pour l'effet de levier et manque d'autres cas d'utilisation significatifs - **un excellent exemple actuel est le GHO d'Aave, qui se négocie autour de 0,97 $**. GHO est l'un des stablecoins les moins chers à emprunter (1,5% APY max), ce qui a créé une forte demande initiale. Cependant, GHO n’offre pas beaucoup d’options d’utilisation directe, à part fournir de la liquidité. Ainsi, de nombreux emprunteurs échangent leur GHO contre, par exemple, du DAI, afin d'exploiter le rendement de 5% du DSR.
+
+En outre, la DAO d’Aave a tardé à prendre des mesures pour soutenir GHO. Bien que le stablecoin soit en ligne depuis mi-juillet, il y a encore très peu d'incitations visant à augmenter sa liquidité ; par ailleurs, les incitations présentes sont mal réparties car elles se concentrent principalement sur les pools de stableswaps où GHO est surpondéré en raison de son prix. Comme ces pools sont composés à 80 % de GHO, ils fournissent peu de liquidité adéquate au prix actuel :
+
+
+
+A l'heure actuelle, la seule pression pour le repeg du GHO vient de ses emprunteurs qui, s'ils pouvaient emprunter et échanger GHO autour de 1$, rembourseraient leur dette avec une décote de ~3%.
+
+GHO aura besoin d’options de rentabilité attrayantes directement au sein du protocole pour s'approcher à nouveau de la parité, comme par exemple de nouvelles options d'apport de liquidité. Néanmoins, un module de staking basé sur GHO, avec partage des revenus, conviendrait parfaitement. Globalement, nous avons besoin de plus de réserve de GHO, c'est-à-dire de mécanismes permettant de frapper des GHO et de les conserver en tant que tels pendant de longues périodes. Pour l’instant, la gouvernance semble s’orienter vers un soutien accru à la liquidité de GHO et un potentiel PSM (Peg Stability Module) : vous trouverez plus d'informations ci-dessous, dans les paragraphes relatifs à Maker/DAI.
+
+Les défis actuels que GHO rencontre sont relatifs à son jeune âge et, côté DAO, à un manque de préparation du lancement. La DAO s'améliore à cet égard, et de nombreuses propositions ont été avancées pour remédier à la situation, notamment l'établissement d'un [comité de liquidité pour GHO](https://governance.aave.com/t/arfc-treasury-management-gho-liquidity-strategy-update/14801). Je devrais y contribuer.
+
+
+#### Overpeg illustré par le LUSD
+
+[Liquity](https://www.defiscan.info/protocols/liquity/ethereum) utilise un mécanisme unique de *Redemption* pour maintenir la stabilité de son prix. Dans Liquity, les utilisateurs déposent des ETH comme garantie pour emprunter et frapper des stablecoins (LUSD). La principale innovation réside dans le mécanisme de *Redemption*, qui permet aux utilisateurs d’échanger leurs LUSD contre la garantie sous-jacente (ETH) à taux fixe, même si le prix du marché de l'ETH chute de manière significative.
+
+Ce mécanisme incite les utilisateurs à stabiliser le prix du LUSD en le rachetant lorsque le prix de l’ETH est bas, ce qui réduit ainsi l’offre en circulation en maintenant son cours au plus près de celui de l'USD. **Les détenteurs de LUSD ont ainsi un accès immédiat et immuable au collatéral du LUSD** sans devoir accéder à de la liquidité sur un échange décentralisé.
+
+Les rachats offrent un niveau de garantie supplémentaire aux détenteurs de LUSD mais ajoutent de la complexité du côté de l'emprunt, poussant les emprunteurs à surveiller et à ajuster leur TVL par rapport à d'autres utilisateurs du protocole et aux conditions du marché.
+
+{{< notice note >}}
+
+Les *Redemptions* offrent l'accès le plus direct à la garantie sous-jacente d'un stablecoin. Les stablecoins centralisés comme l’USDC ou l’USDT utilisent un mécanisme similaire, bien que soumis à autorisation, pour permettre la *Redemption* en USD.
+
+{{< /notice >}}
+
+Le LUSD s'est négocié à un prix élevé pendant la majeure partie de son existence, même si la situation s'est récemment améliorée. En effet, plusieurs facteurs ont contribué à accroître la liquidité et la pression sur les prix : le succès des [Chicken Bonds](https://chickenbonds.net/), les stratégies de liquidité avancées sur les nouveaux DEX comme [Maverick](https://mav.xyz/), ou l'accumulation de LUSD par les DAO et les trésoreries.
+
+La raison de ce prix élevé reste à déterminer avec précision. L'un des principaux facteurs probables est que **LUSD dessert une niche unique**, le stablecoin à la résilience optimale, où il y a généralement plus de demande (personnes souhaitant détenir LUSD) que d'offre (détenteurs d'ETH empruntant LUSD et le vendant). [Ce sujet a été traité en profondeur l'année dernière sur le blog de Liquity](https://www.liquity.org/blog/the-premium-of-resiliency#:~:text=LUSD%20est%20un%20stablecoin%20mais%20vient%20avec%20des%20défis%20de%20scalabilité.).
+
+Si le depeg est globalement plus préoccupant, l’overpeg peut aussi avoir un impact non négligeable en rendant les coûts d'emprunt effectifs moins prévisibles pour les utilisateurs.
+
+L'overpeg du LUSD est principalement le fait de mécanismes psychologiques : un long pic de dépassement a été observé lors de mouvements de panique sur le marché lorsqu’un certain stablecoin centralisé de premier plan a été perçu comme en danger.
+
+En effet, grâce à sa résilience, le LUSD est considéré comme **un stablecoin sûr**. Une performance remarquable mais qui a un prix : les foules se ruent sur le LUSD lorsque d'autres stablecoins sont en panne, comme lorsque l'USDC a perdu 10 % de sa valeur à la suite du bank run de la Silicon Valley Bank. Le LUSD a connu un volume d'échange incroyable ce jour-là, avec des achats importants au-dessus de 1,03 $, 1,04 $ et 1,05 $ alors que le marché perdait pied. Dans un tel contexte de panique certains utilisateurs sont prêts à payer le prix fort pour se mettre à l'abri.
+
+
+#### Le DAI et le PSM : résoudre le problème de l’overpeg, non sans coût
+
+À ses débuts, avant la mise à jour du Mutli Collateral Dai, le DAI était confronté aux mêmes problèmes que le LUSD : il avait tendance à overpeg. Avec la mise à jour, Maker a introduit le Peg Stability Module (PSM) pour stabiliser le prix de son stablecoin DAI. Le PSM agit comme un tampon entre le marché et l'écosystème DAI. Il permet aux utilisateurs d'échanger des actifs stables comme l'USDC contre des DAI à un taux de change fixe.
+
+En ajustant le taux de change en fonction des dynamiques du marché, MakerDAO peut influencer l'offre de DAI et maintenir son prix proche de la parité avec l'USD. Ce qui a permis à Maker de résoudre le problème d’ancrage du DAI. Cependant, cela a eu un coût : l’accumulation d'USDC et d'autres stablecoins centralisés comme garanties du DAI.
+
+
+
+#### AMO (Algorithmic Market Operations) de FRAX : scaler la liquidité et le risque à l'infini
+
+FRAX est un stablecoin décentralisé qui utilise un algorithme pour ajuster son ratio de collatéralisation en fonction des conditions du marché, et maintient donc son prix. Lorsque le prix du FRAX se négocie au-dessus de sa parité, le système frappe de nouveaux FRAX et les injecte dans des paires de liquidité.
+
+Inversement, lorsque le prix du FRAX tombe en dessous de la parité, l’AMO réduit le ratio de collatéralisation afin d'encourager les utilisateurs à frapper du FRAX et à rétablir la parité. Les AMOs s'accompagnent de risques supplémentaires, liés à l'utilisation d’actifs frappés sans garantie : plus cette exposition est élevée, plus le risque est important.
+
+Les principaux risques d'une telle conception se manifestent lorsqu'un problème survient avec l'un des services connexes (généralement les marchés monétaires ou DEX). Supposons que 10 millions de FRAX soient frappés par l'AMO et déposés sur un marché monétaire pour être empruntés par les utilisateurs. Or, le marché monétaire souffre d'un problème avec l'une de ses garanties et se vide : il y a maintenant 10 millions de FRAX de plus en circulation avec 0 garantie.
+
+Pour y remédier, une gestion très active des AMOs est nécessaire - par des humains et via un multisig. Ce n'est pas idéal en terme de sécurité, car les AMOs peuvent frapper du FRAX à volonté, sans aucune contrepartie / garantie.
+
+
+#### crvUSD pegKeeper : un meilleur PSM ?
+
+Pour assurer la stabilité du crvUSD, Curve a exploré une voie similaire à celle du PSM, mais légèrement améliorée. En effet, ici, la contribution des utilisateurs n'est plus nécessaire :
+
+Avec Maker PSM, c’est toujours l'utilisateur qui décide : en cas de dépassement, les utilisateurs fournissent des USDC comme garantie à Maker PSM et frappent des DAI, ce qui contribue à faire baisser son prix. Si le prix du DAI devait baisser, les utilisateurs pourraient de la même manière acheter du DAI (à moins de 1 $) pour le racheter contre 1 USDC, ce qui contribuerait à ramener son prix à son niveau de référence.
+
+crvUSD fonctionne de manière similaire(si crvUSD>1$ => frapper, si crvusd<$1 => brûler) mais ne nécessite aucune action : le système se stabilise de lui-même grâce à ses contrats pegKeepers. Ces contrats spéciaux peuvent créer des crvUSD non collatéralisés sous certaines conditions et pour des cas d'utilisation spécifiques uniquement.
+
+Il y a 4 pegKeepers, chacun connecté à une pool différente de crvUSD et stablecoins centralisés redeemables (USDC, USDT, USDP et TUSD). Lorsque le crvUSD est surcoté, ils peuvent frapper du crvUSD pour l'échanger dans le pool associé, contribuant ainsi à ramener le prix du crvUSD à 1$. Lorsque le crvUSD est sous-coté, le pegKeeper peut racheter du crvUSD sur son pool associé (en utilisant les soldes stables centralisés accumulés pendant la surcote) et le brûler pour ramener le prix du crvUSD à sa valeur de référence.
+
+Ainsi, les PegKeepers accumulent une dette en crvUSD envers le protocole lorsque le stablecoin est surcompensé, pour être idéalement résorbée une fois que le crvUSD est sous-compensé. La clé réside ici dans l'équilibre, en veillant à ce que l'écart entre l'offre de crvUSD (y compris la dette Pegkeeper) et l'offre empruntée ne devienne pas trop important.
+
+
+
+Bien que les pegKeepers représentent toujours un risque pour le protocole, tout comme l'AMO de FRAX ou le PSM de Maker, il semble plus atténué ici. Mais le crvUSD est encore jeune, et seul le temps permettra d'évaluer avec précision la résilience effective du système.
+
+
+### GESTION DES LIQUIDITÉS
+
+La gestion de la liquidité en matière de stablecoin pourrait faire l’objet d’une thèse. C'est l'un des sujets les plus mal compris dans l'espace. Il m’importe que vous, chers lecteurs, soyez conscient de son aspect crucial.
+
+
+#### La gestion des liquidités en tant que non-sujet
+
+Si vous lisez ce blog, vous avez probablement déjà compris que **les stratégies de liquidité sont au cœur des guerres entre stablecoins.** Pourtant, de nombreuses équipes n'ont pas encore pris conscience de cette réalité. Elles les considèrent comme un élément peu critique, que la DAO traitera plus tard… ce qui est incroyablement dangereux.
+
+En effet, les DAOs ne sont pas les meilleures structures pour gérer la liquidité car elles ont tendance à utiliser des solutions non optimisées, à surpayer, et ont simplement besoin d'être plus rapides pour s'adapter au rythme soutenu des fluctuations de liquidité. Ce n'est pas une surprise, nous avons déjà établi depuis longtemps que les **DAOs/gouvernances sont adaptées aux orientations stratégiques (long terme) mais inaptes à la gestion à moyen/court terme (tactique),** grâce à l'exemple de MakerDAO (où, malgré l'absurdité de la chose, les détenteurs de MKR votent encore le taux d'intérêt de chaque vault, un paramètre purement opérationnel).
+
+La solution évidente serait que la DAO **désigne un comité de liquidité** - une petite équipe de spécialistes disposant d'un budget à mobiliser en toute autonomie. Le comité pourrait être engagé pour une durée déterminée, et la DAO conserverait le droit de ne pas renouveler ou révoquer ce comité, comme cela se pratique avec n'importe quel prestataire de services.
+
+Je vous invite à regarder les principaux projets de stablecoins gérés par des DAO et à identifier ceux qui ont déjà un comité. A ma connaissance, [seul Aave l'envisage enfin pour GHO](https://governance.aave.com/t/temp-check-treasury-management-create-and-fund-gho-liquidity-committee/14800). Le comité permet agilité et facilité opérationnelle pour la gestion de la liquidité tout en ettayant la réflexion et la prévoyance de la DAO dans son approche de la liquidité. Cela lui permet d'explorer des partenariats et des collaborations avec des acteurs finement sélectionnés, tels que le soutien d'un DEX innovant dès le premier jour de son lancement, contre de nombreux mois nécessaires pour expliquer la pertinence de l'innovation aux parties prenantes de la DAO, le vote d’un budget et sa mise en œuvre...
+
+
+#### Les compétences sont rares
+
+La dure réalité de la gestion des liquidités est que les compétences sont extrêmement rares. Cela souligne la raison pour laquelle le sujet doit être mieux compris alors qu'il n'est que rarement priorisé lors de la conception du projet et même dans les discussions ultérieures de la gouvernance. Un bon gestionnaire de liquidités doit avoir une compréhension précise des éléments suivants :
+
+
+
+* Modèle de structure de liquidité de base, x\*y=k
+* Structures de liquidité personnalisées telles que le stableswap
+* Liquidité concentrée de base, style UNIv3
+* Couche de gestion des liquidités Uniswap (Bunni, Merkl, etc.)
+* Modèle de gestionnaire de liquidité CL (Gamma, Arrakis, etc.)
+* veCRV tokenomics & ecosystem // veBAL
+* Les marchés de vote et la culture des bribes
+* Liquidité concentrée avancée, style Maverick
+* Modèle d'incitation Maverick (Boosted Pool)
+* Maverick tokenomics (veMAV)
+* Panorama des agrégateurs de DEX et logique de pathing (optimisation des routes de swap)
+
+**L'étendue des outils, services et protocoles utilisés pour la gestion des liquidités augmente de façon exponentielle, et très peu d'acteurs suivent de près**. Il est fréquent d'observer des écarts absurdes entre les dépenses de liquidité de deux projets similaires, avec parfois des écarts à plusieurs ordres de grandeur en terme de $ investis / résultats.
+
+
+## Comment attirer des ETH&LSD ?
+
+Jusqu'à présent, nous nous sommes concentrés sur les stablecoins à modèle de CDP (Collateralized Debt Position), comme Maker, Liquity ou Reflexer, où les utilisateurs doivent déposer une garantie pour contracter une dette vis à vis du protocole (chaque emprunteur sur un protocole CDP crée sa "propre" dette). Il s'agit d'une conception élégante qui permet au protocole de mettre en œuvre divers dispositifs pour absorber la volatilité du collatéral, maximisant ainsi l'inertie du prix du stablecoin.
+
+
+### Les limites d'un stablecoin adossé à un CDP
+
+**Il est toutefois difficile, voire impossible, d'atténuer la volatilité d'un collatéral tel que l'ETH sans marge d'erreur**. Par exemple, sur Liquity, le ratio de collatéralisation minimum toléré est de 110%, or le ratio moyen observé sur le protocole est de 226,3%.
+
+La surcollatéralisation, limite principale du modèle CDP, est difficile à surmonter. En effet, l'abaissement de l'exigence de collatéralisation pourrait attirer davantage d'emprunteurs, mais augmenterait également le risque sur le stablecoin produit. Ainsi, la mise à l'échelle d'un stablecoin basé sur un CDP est une tâche difficile. Il existe d'autres idées pertinentes pour attirer davantage d'emprunteurs, comme la diversification de l'offre de garanties, comme indiqué ci-dessous. Mais là encore, cela s'accompagne de risques accrus pour le stablecoin, comme pour le DAI, qui a observé une dégradation importante des garanties au cours de ces dernières années.
+
+Néanmoins, de nombreux projets explorent des approches qui pourraient aboutir à un stablecoin avec moins de compromis que le DAI, tout en atteignant une échelle similaire. Examinons quelques directions actuellement explorées pour faire évoluer le stablecoin décentralisé.
+
+
+#### Élargir l'offre de garanties et de chaînes : les forks de Liquity
+
+2023 est l'année des forks Liquity : de nombreux protocoles ont été lancés cette année, exploitant un modèle plus ou moins similaire à celui de Liquity, avec quelques modifications. Il s'agit notamment de Gravita, Prisma, Lybra, etc.
+
+##### Gravita Protocol
+
+Commençons par [Gravita](https://www.gravitaprotocol.com/), probablement le plus proche du modèle de base de Liquity. Ici, l'accent est mis sur l'amélioration de l'attractivité du protocole pour les emprunteurs, avec plusieurs ajouts bienvenus, notamment la possibilité d'emprunter en utilisant des ETH liquides comme stETH ou rETH en tant que garantie ou la mise à disposition du protocole sur L2 comme Arbitrum. Bien sûr, il s'agit ici d'un jeu d'équilibre, car la règle spécifiée ci-dessus s'applique toujours.
+
+{{< notice note >}}
+
+**Les conditions imposées aux emprunteurs définissent les garanties fournies aux détenteurs de stablecoins**.
+
+{{< /notice >}}
+
+##### Prisma Finance
+
+[Prisma Finance](https://prismafinance.com/) explore également une approche similaire, il s'agit d'un autre fork Liquity permettant l'utilisation d'ETH-LSD comme collatéral, construit par une équipe proche de l'écosystème Curve/Llama. Des composants de veTokenomics sont également envisagés sur le jeton de partage des frais/gouvernance PRISMA, mais ils doivent encore être mis en place.
+
+##### Lybra Finance
+
+Une autre équipe, [Lybra](https://lybra.finance/), a expérimenté un modèle de verrouillage/escrow sur son jeton de gouvernance LBR. Bien que cela semble avoir bien fonctionné au départ pour attirer une quantité importante de capitaux, le défi avec de telles tactiques est de les maintenir dans le temps...
+
+##### DYAD
+
+Enfin, parlons de [DYAD](https://dyadstable.xyz/). Techniquement, il ne s'agit pas d'un fork de Liquity à proprement parler, mais plutôt d'un protocole inspiré de Liquity, en particulier en ce qui concerne le mécanisme de stabilisation du prix de leur stablecoin.
+
+Le principal problème qu'ils tentent de résoudre est l'intégration de nouvelles garanties dans un protocole CDP actif sans étendre la portée du risque du protocole de base plus qu'il n'est nécessaire. Pour ce faire, DYAD introduit une "couche de licence sociale", essentiellement la couche de gouvernance.
+
+Pourtant, elle ne ressemble en rien à la gouvernance à laquelle nous sommes habitués : ici, il n'y a pas de jeton de gouvernance, de sorte qu'il ne s'agit pas de la ploutocratie habituelle. Au lieu de cela, le pouvoir de gouvernance se trouve directement au sein du dNFT nécessaire pour utiliser le protocole : chaque dNFT contrôle un seul "interrupteur" pour chaque type de garantie proposé.
+
+Les possesseurs de dNFT peuvent changer la position de cet interrupteur à tout moment, aussi souvent qu'ils le souhaitent. Une garantie donnée peut faire partie du panier de garanties de DYAD si elle conserve une supermajorité de 2/3 de commutateurs "activés". Le seul moyen d'accroître son pouvoir de gouvernance est de contrôler davantage de dNFT.
+
+DYAD obtient également des points bonus pour avoir préservé l'immutabilité autant que possible. Si le protocole peut être modifié puisqu'il peut intégrer de nouvelles garanties, l'ensemble de la couche de gouvernance est immuable. DYAD n'est pas encore live (seulement les dNFTs), mais arrive très prochainement.
+
+Je m’en tiens ici aux principaux acteurs : LSDfi a fait fureur il y a quelques mois, et nous avons vu de nombreux protocoles offrir des options ETH-LSD se lancer récemment. Bien que ce sous-marché soit probablement déjà encombré, il y a de la place pour un modèle basé sur la CDP fournissant un stablecoin légèrement moins résilient que le LUSD mais avec des caractéristiques supplémentaires. La question est de savoir lequel.
+
+
+#### Soyez doux avec vos emprunteurs : LLAMA/crvUSD
+
+Une autre façon pour attirer beaucoup de ETH / LSD : rendre les conditions plus attrayantes pour les emprunteurs / adoucir les pénalités de liquidation. En effet, l'une des principales innovations de crvUSD réside dans le modèle de liquidation qui diffère grandement des autres services à effet de levier.
+
+Le LLAMA (Lending Liquidating AMM Algorithm) remplace les liquidations habituelles par des "liquidations douces", où les emprunteurs sous-évalués sont rééquilibrés à travers des "bandes", chacune représentant un segment de prix différent.
+
+Elle offre une protection importante contre les liquidations liés aux mouvements de marché brutaux. Au lieu des liquidations soudaines que nous connaissons, les liquidations douces du LLAMA sont plus graduelles, car la garantie est progressivement ajustée en proportion de son prix de marché.
+
+
+#### Arrosez-les : DSR (DAI Saving Rate) & variantes
+
+Pourquoi se donner la peine d'améliorer la conception d'un stablecoin alors qu'il existe des voies plus directes pour aller de l'avant ? MakerDAO a été le premier à proposer un rendement "sans risque" aux détenteurs de stablecoins pour stimuler la demande : le taux d'épargne du DAI, actuellement de 5 %.
+
+Le maintenir s'avère très coûteux pour la DAO, qui s'oriente vers des garanties lucratives mais plus risquées pour se maintenir à flot. Une part importante des garanties sont désormais des actifs du monde réel (RWA) gérés par des dépositaires, dont certains sont lents, voire ne respectent pas leurs obligations de rendement ou de reporting, ou sont tout simplement sous-optimaux (MakerDAO gagne actuellement 3 % sur son USDC, tandis que [les particuliers peuvent obtenir 5 % avec Circle](https://cryptoslate.com/coinbase-raises-usdc-interest-rate-to-5/)).
+
+Néanmoins, surprise, surprise : les incitations fonctionnent, du moins au début. Ainsi, cette conception brutale, peu contraignante et peu efficace à long terme se répand aujourd'hui :
+
+
+
+* [Raft a lancé un concept similaire à 6 %](https://mirror.xyz/0xa486d3a7679D56D545dd5d357469Dd5ed4259340/1qSAAQtVdNCW_xn9cObEjwrQzFpwEshNrm0sjX0nkG8)
+* Frax travaille également sur [sFRAX / Frax Saving Rate targeting 5%](https://gov.frax.finance/t/fip-2xx-sfrax-governance-proposal/2585).
+
+
+
+L'avenir nous informera sur l'impact d'une telle conception sur le long terme. De mon point de vue, ces protocoles **épuisent la plupart de leurs revenus pour l'acquisition d'utilisateurs sur une base continue** - ils perdront la plupart des utilisateurs acquis avec le DSR à la minute où ils s'arrêteront. Ils auront brûlé une énorme quantité d'argent pour maintenir le cap, de l'argent qui aurait pu, par exemple, être dépensé sur des actifs stratégiques qui fournissent des incitations à vie aux fournisseurs de liquidité. **Cette conception est une excellente tactique, mais c'est l'une des stratégies les plus inconséquentes que je n’aie jamais vues**.
+
+
+## Vers un stablecoin garanti par des réserves ?
+
+Un changement se prépare ! Alors que les modèles basés sur le CDP, tels que Maker, Liquity ou Reflexer, sont en plein essor, les **monnaies stables garanties par des réserves** sont également de plus en plus considérées.
+
+En effet, comme nous l'avons souligné plus haut, il existe une tension inhérente aux stablecoins purement basés sur l'emprunt / CDP. Pour le dire simplement :
+
+
+
+* La mise à l'échelle d'un stablecoin décentralisé basé sur le prêt nécessite d'attirer et de recycler une quantité importante d'ETH / ETH-LSD.
+* Mais plus le protocole est permissif à l'égard des emprunteurs, moins le stablecoin qu'il produit est désirable.
+
+L'état d'un stablecoin basé sur un CDP dépend entièrement des actions de ses usagers.
+Dans le cadre du modèle de réserve, le protocole gère et frappe directement sa réserve de stablecoins en lieu et place des utilisateurs. Ainsi, les modèles basés sur une réserve offrent une réponse crédible aux lacunes des CDP, et permettent à l'offre de stablecoins d'augmenter potentiellement, grâce à la réserve native qui permet une plus grande inertie du prix.
+
+Résumons cet article en examinant deux excellents exemples de mise en œuvre d'un modèle de stablecoin garanti par des réserves. Je serai bref et fluide, et j'ajouterai des ressources pour aller plus loin.
+
+
+### f(x) : pas de levier de financement & ETH à volatilité amortie de 90%
+
+F(x) est un protocole fascinant fraîchement sorti ! C’est un produit double, qui permet aux déposants de stETH de s'exposer à deux types d'actifs dans les proportions qu'ils souhaitent :
+
+1. xETH : un "ETH à effet de levier à haute volatilité".
+2. fETH : un "stablecoin flottant à faible volatilité".
+
+Comme dans un protocole avec CDP, les utilisateurs déposent de l'ETH (ou du stETH) pour frapper du fETH ou du xETH. Cependant, contrairement à Liquity/Maker/Other CDP, l'utilisateur ne gère pas sa position (un Trove). Au lieu de cela, le protocole gère directement la réserve de stETH. Une fonction de rachat permet aux détenteurs de fETH ou de xETH de récupérer le stETH sous-jacent. Cependant, le montant du rachat dépend de l'état du système, notamment de sa valeur nette d'inventaire : la valeur globale des stETH en réserve.
+
+
+
+Lancé il y a quelques semaines, le protocole en est encore à ses débuts avec environ 1300 ETH de TVL, et la liquidité sur fETH est encore en cours d'élaboration. Un troisième jeton, FXN, le jeton de gouvernance du protocole, est également prévu.
+
+La proposition de valeur de xETH et fETH est pertinente à mes yeux et devrait répondre à la demande une fois que le protocole sera plus mature. À mon avis, avec le crvUSD, c'est l'une des nouveautés les plus excitantes que nous ayons eues cette année dans le domaine des stablecoins : j'attends juste le bon moment pour expérimenter xETH.
+
+
+### Liquity v2 : levier efficace et protégé
+
+"Liquity v2" (nom de code) n'est pas encore opérationnel mais a été [présenté par Robert Lauko lors du dernier Stable Summit en juin](https://www.youtube.com/watch?v=Zps__IMxtTs).
+
+Comme fETH, v2 offrira un effet de levier non liquidable sur les LSDs d'ETH sans frais de financement et ajoutera même une protection à la baisse. Ce nouveau stablecoin sera adossé à une réserve facilitant son développement et sa croissance. Ses besoins en liquidités sont également minimisés puisque le protocole agit comme un AMM primaire pour le stablecoin : les utilisateurs peuvent frapper et échanger le stablecoin pour 1 $ d'ETH.
+
+La V2 est construite en public : si vous souhaitez en savoir plus ou même vous impliquer, n'hésitez pas à venir sur le [canal Discord de Liquity dédié à la v2](https://discord.gg/RCRp2CJR2S).
+
+
+### En savoir plus sur AladinDAO's F(x) & Liquity V2
+
+J'ai fait court sur les stablecoins garantis par des réserves, car je publierai probablement plusieurs articles sur ce sujet dans les mois à venir. En attendant, n'hésitez pas à obtenir votre alpha directement de la bouche des créateurs - voici une sélection d'articles et d'interviews pour en savoir plus sur les deux protocoles :
+
+
+
+* [Un appel récent de la communauté, lorsque Robert et moi avons rejoint l'équipe AladinDAO/Protocol F(x) pour discuter plus largement des stablecoins décentralisés [60min]](https://twitter.com/aladdindao/status/1684141750900736000?s=20)
+* [Community Call - Deep Dive into f(x) [30min]]](https://www.youtube.com/watch?v=_xA6AFufGoQ&t=3871s)
+* [Protocole f(x) avec Kmets et Crouger de AladinDAO(Leviathan News) [28min]](https://www.youtube.com/watch?v=Nzy7xO09SFw)
+* [Présentation de Liquity v2 - Liquity Blog](https://www.liquity.org/blog/introducing-liquity-v2)
+* [Liquity v2 avec Colin Platt (Leviathan News)](https://www.youtube.com/watch?v=KOnGCPE5gaU)
+
+
+## LES PRINCIPAUX ENSEIGNEMENTS
+
+La gestion de la liquidité est le nerf de la guerre des stablecoins : observez et analysez les stratégies déployées par les projets que vous suivez - leur efficacité est l'un des principaux moteurs du succès du protocole sous-jacent.
+
+**👉️ TODO:** Suivez l'événement entourant la gestion des liquidités de GHO sur [Aave Governance Forum](https://governance.aave.com/) et essayez de structurer votre thèse. Si vous pouvez anticiper le repeg avec précision, vous obtenez 3% de profit gratuit qui vous attend (GHO ~$0.97 à $1.00).
+
+**👉️ BONUS-TODO:** GRAI, un autre stablecoin (Liquity fork), se négocie actuellement à ~$0.985 avec son plafond de rachat augmentant au cours des prochaines semaines ; un jeu similaire peut être envisagé ici.
+
+LSD-FI (protocoles pour tirer parti de LSD) a été surchargé au cours des derniers mois. La plupart des protocoles de cette catégorie sont en perte de vitesse.
+
+**👉️ TODO:** Examinez la structure d'incitation de protocoles tels que Gravita, Raft ou Lybra, et confrontez-la à leurs mesures de croissance - essayez d'évaluer la structure d'incitation qui semble persistante par rapport à celle qui est en perte de vitesse.
+
+Après 4 ans de repli sur le modèle basé sur les CDP, il semble que les équipes les plus avisées aient commencé à chercher une autre voie.
+
+**👉️ TODO:** Préparez l'avenir ! Grâce aux ressources partagées ci-dessus, approfondissez les modèles de stablecoins basés sur les réserves en vous familiarisant avec des protocoles tels que f(x) ou v2.
+
+{{< notice info >}}
+
+Un grand merci à Arem qui s'est chargé de la traduction de cet article. Arem contribue activement à la communauté DeFi France et est impliquée dans de nombreuses initiatives : faites comme Arem, **[suivez Arem](https://twitter.com/aremd_)**, et dites-le lui si cette traduction vous a été utile !
+
+{{< /notice >}}
diff --git a/content/post/2023/stablecoin-marauder-map.md b/content/post/2023/stablecoin-marauder-map.md
new file mode 100644
index 00000000..e80f986a
--- /dev/null
+++ b/content/post/2023/stablecoin-marauder-map.md
@@ -0,0 +1,308 @@
+---
+title: "The Maurauder's Map of Decentralized Stablecoins"
+description: "New stables are launching weekly, so keeping track of the relevant innovations is challenging. AMO? PSM? DSR? pegKeeper? This article examines the various mechanisms harnessed by stablecoin projects and evaluates their relevance."
+date: '2023-09-15T01:13:50.191Z'
+categories: [Stablecoin]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Stable Assets, Money Markets, Aave, GHO, crvUSD, LUSD, fETH, xETH, Interest Rate]
+url: stablecoin-marauder-map
+image: img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.png
+difficulty: "beginner"
+---
+
+Wild new stablecoins are constantly appearing, and with the multiplication of chains, layers, and viable stablecoin models the trend is not stopping anytime soon. **Navigating the stablecoin landscape is turning into a critical skill for DeFi**.
+
+While centralized stablecoin models are easier to evaluate, decentralized stablecoins harness various complex mechanisms, making it harder to compare their data face to face. Yet, dozens of relevant new decentralized stablecoins are appearing yearly, and I don’t expect the trend to stop anytime soon.
+
+Thus, this article intends to provide a marauder map to help navigate the landscape of decentralized stablecoin designs. Before combing through the innovations for decentralized stablecoins, allow one more minute to the context: why do we care so much about (decentralized) stablecoins in the first place?
+
+
+## Size matters
+
+Simply put, **stablecoins are cryptocurrency’s top product-market fit by a wide margin**. DeFi is cool, right? We love it on this blog. Yet size-wise, there are about 3 times more value locked in stablecoins than in DeFi protocols.
+
+Currently, the total TVL in DeFi is around $38B for $124B of stablecoins circulating, serviced mainly by centralized options: USDT makes 66% of the total, and USDC is another 20%.
+
+{{< notice note >}}
+
+Remember that there is a lot of redundancy between the two metrics as stablecoins are widely used across DeFi, so the effective spread is even higher.
+
+{{< /notice >}}
+
+Now, let’s dive in! As we consider the various designs harnessed to deliver decentralized stablecoins, I’ll illustrate the mechanisms discussed using examples from live projects: picture this article as recipe book meets marauder map on the topic of decentralized stablecoins.
+
+
+## HOW TO BUILD A DECENTRALIZED STABLECOIN
+
+There is a virtually infinite range of designs that can be harnessed to output decentralized stablecoins; however, they all rely on two essential core needs:
+
+
+
+1. **Stablecoin Price Stabilization** | Finding an effective way to stabilize the stablecoin price without too much compromise.
+2. **Stablecoin Liquidity** | The active management of the liquidity on the stablecoin to maximize its effectiveness.
+
+While both themes address the same need: ensuring that the stablecoin can be traded at peg whatever the circumstances, they operate on different time frames. Stabilization mechanisms are built so that stablecoins tend to their peg over the mid/long time-frames. Liquidity strategies are here to ensure even sizable amounts of the stablecoin can be bought/sold as close as possible to the peg.
+
+Those are two prerequisites for a stablecoin design to be relevant and have a chance at gathering traction. Faults on those two dimensions jeopardize the whole design, so let’s look at the leading price stabilization mechanisms harnessed and their consequences.
+
+
+### PRICE STABILIZATION MECHANISMS
+
+When faced with sizable demand, decentralized stablecoins can depeg - that is, divert from the peg, usually $1, either upwards or downwards. While similar, the two depegs stem from vastly different design challenges. Let’s start with the most common, the depeg when a $ stable is worth less than $1.
+
+
+#### Underpegging illustrated with GHO
+
+It usually happens when the stablecoin is mainly used for leverage and lacks significant direct use cases – **a current prime example is Aave’s GHO, trading around $0.97**. GHO is one of the cheapest stablecoins to borrow (1.5% max APY), creating a lot of initial demand for it. Yet, there is not much to do with GHO directly apart from providing liquidity. Thus, many borrowers swap their GHO for something else, for instance, DAI, to harness the 5% yield from the DSR.
+
+Besides, the AaveDAO has been slow to take action to support GHO. Despite the stablecoin being live since mid-July, there are still very few incentives directed to growing GHO’s liquidity, and they are poorly allocated as most of them focus on stableswap pools where GHO is overweight because of its price. Since these pools are 80% composed of GHO, they provide little adequate liquidity at the current price:
+
+
+
+Right now, the only pressure for GHO to repeg comes from the existing borrowers who could consider repaying their debt with a ~3% discount if they could borrow and swap GHO around $1.
+
+GHO will need attractive earning options directly available in GHO to approach the peg again, such as liquidity-providing options. Still, a GHO-based staking module with revenue sharing would fit the task nicely. Overall, we need more GHO-sinks: mechanisms resulting in GHO being minted and held as such for long periods. Right now, it seems like governance is pushing forward increased support for GHO’s liquidity incentives and a potential GHO PSM (Peg Stability Module): more on this design is below while we address Maker/DAI.
+
+Since it was launched a few weeks ago, most of GHO’s current challenges come from its young age, coupled with a lack of preparation for the launch on the DAO side. The DAO is improving in that regard, with many propositions pushed forward to address the situation, including establishing [a liquidity committee for GHO](https://governance.aave.com/t/arfc-treasury-management-gho-liquidity-strategy-update/14801) I should contribute to.
+
+
+#### Overpegging illustrated with LUSD
+
+[Liquity](https://www.defiscan.info/protocols/liquity/ethereum) utilizes a unique mechanism called Redemptions to maintain its price stability. In Liquity, users deposit their ETH as collateral to borrow and mint stablecoins (LUSD). The key innovation lies in the redemption mechanism, which enables users to redeem LUSD for the underlying collateral (ETH) at a fixed ratio, even if the market price of ETH drops significantly.
+
+This mechanism incentivizes users to stabilize the price of LUSD by redeeming it when ETH prices are low, thereby reducing the circulating supply of LUSD and supporting its peg to the USD. It provides **immediate and immutable access to LUSD’s collateral to LUSD holders** without the need for liquidity on a decentralized exchange.
+
+Redemptions provide an additional layer of guarantee to LUSD holders but add complexity on the borrowing side, pushing borrowers to monitor and adjust their LTV against other protocol users and market conditions.
+
+Collateral redemptions provide the most direct access to the underlying backing of a stablecoin. Centralized stablecoins like USDC or USDT use a similar, although permissioned, mechanism to enable redeemability to USD.
+
+LUSD traded at a premium for most of its existence, even though the situation has improved recently. Indeed, several factors contributed to enhancing the liquidity and the peg pressure: the success of the [Chicken Bonds](https://chickenbonds.net/), advanced liquidity strategies on novel DEXes like [Maverick](https://mav.xyz/), or the accumulation of LUSD by DAOs and treasuries.
+
+The why of the premium still needs to be pinpointed precisely. One of the likely main factors is that **LUSD is servicing a unique niche**, the resilience-maximized stablecoin, where there is usually more demand (people wanting to hold LUSD) than offer (ETH holders borrowing LUSD and selling it). [This topic was covered in depth last year on Liquity’s blog](https://www.liquity.org/blog/the-premium-of-resiliency#:~:text=LUSD%20is%20a%20stablecoin%20fully,also%20comes%20with%20scalability%20challenges.).
+
+While underpegging is usually more concerning, overpegging can have real consequences, too, as it can make effective borrowing costs less predictable for the users.
+
+LUSD’s overpeg stems from mostly psychological mechanisms: the worst case of sustained overpegging was observed during movements of market panic, especially when a prominent centralized stablecoin is perceived at risk.
+
+Indeed, thanks to its resilience, LUSD is seen as a **safe haven stablecoin**. A remarkable feat, but it comes with a price: crowds rush to LUSD when other stablecoins are at fault, such as when USDC depegged 10% following the bank run on Silicon Valley Bank. LUSD saw an incredible trading volume that day, with sizeable purchases above $1.03, $1.04, and $1.05 as the market panicked. Amid the panic, some users are willing to pay a high price to fly to safety.
+
+
+#### DAI and the PSM: solving overpegging, for a price
+
+In its early days, before the Mutli Collateral Dai update, DAI had similar challenges to LUSD: it tended to overpeg. With the update, Maker introduced the Peg Stability Module (PSM) to manage the price stability of its stablecoin DAI. The PSM acts as a buffer between the market and the DAI ecosystem. It allows users to swap stable assets like USDC for DAI at a fixed exchange rate.
+
+By adjusting the exchange rate in response to market dynamics, MakerDAO can influence the supply of DAI in the market and keep its price close to the USD peg. It helped MakerDAO resolve the DAI problem over pegging, observed before the PSM. Still, it came with a cost: an accumulation of USDC and other centralized stablecoins as DAI’s collateral.
+
+
+
+#### FRAX's AMO (Algorithmic Market Operations): scale liquidity and risk to infinity
+
+FRAX is a decentralized stablecoin that utilizes Algorithmic Market Operations to maintain its peg. FRAX employs an adaptive mechanism that adjusts its collateralization ratio based on market conditions. When the FRAX price trades above its peg, the system mints new FRAX and buys back collateral, increasing the stability of the peg.
+
+Conversely, when the FRAX price falls below the peg, it reduces the collateralization ratio to encourage users to mint FRAX, which helps restore the peg. AMOs come with additional risks, mainly depending on the usage of the assets minted without collateral: the riskier their exposure, the bigger the threat.
+
+The principal risks of such a design manifest when an issue with one of the services harnessed (usually money markets or DEX) arises. Say 10M FRAX are minted by the AMO and deposited into a money market to be borrowed by users. Now, the money market suffers an issue with one of its collateral and gets drained: there are now 10M more FRAX in open circulation with 0 collateral.
+
+Mitigating this requires very active management of the AMOs - by humans, through a multisig, which is not ideal from a security perspective, as AMOs can mint FRAX at will with no backing.
+
+
+#### crvUSD pegKeeper: a better PSM?
+
+To ensure the peg-stability of crvUSD, Curve explored a path similar to the PSM, but slightly improved. Indeed, here, the need for users’ input is removed:
+
+With Maker PSM, it’s still user-driven: when overpeg, users supply USDC as collateral to Maker PSM and mint DAI, helping to push its price back. If DAI was to underpeg, users could similarly buy DAI (below $1) to redeem it for 1 USDC, helping to restore its price to peg.
+
+crvUSD works similarly at a high level (if crvUSD>$1 => mint, if crvusd<$1 => burn) but does not require any input: the system stabilizes itself thanks to its pegKeepers contract. These special contracts can mint non-collateralized crvUSD under certain conditions and for specific use cases only.
+
+There are 4 pegKeepers, each plugged into a different pool of crvUSD paired against a redeemable centralized stablecoin: USDC. USDT, USDP & TUSD. When crvUSD is overpeg, they can mint crvUSD to trade into the associated pool, helping to push crvUSD price back to $1. When crvUSD is underpeg, the pegKeeper can repurchase crvUSD on their associated pool (using centralized stable balances accumulated during overpeg) and burn it to push crvUSD’s price back to peg.
+
+Thus, pegKeepers accumulate a crvUSD debt to the protocol when the stablecoin is overpegged, to be ideally resorbed once crvUSD is underpeg. The key here lies in the balance, ensuring that the spread between the supply of crvUSD (incl. Pegkeeper debt) and the borrowed supply does not grow too big.
+
+
+
+While pegKeepers still pose a decent threat to the protocol, just like the FRAX’s AMO or Maker’s PSM, the risk seems more mitigated there. Yet, crvUSD is still quite a young stablecoin, and only time will tell.
+
+
+### LIQUIDITY MANAGEMENT
+
+Liquidity management, even just for a stablecoin, could be a good topic for a thesis. It’s one of the most misunderstood topics across the space. I wanted you, dear reader, to be aware of its importance.
+
+
+#### Liquidity management as a non-topic
+
+If you read this blog, you’ve likely already internalized that **liquidity strategies are the heart of the storm of the stablecoin wars.** Yet, many teams have yet to attain this realization. They picture it as something of low criticality that the DAO will handle later, which is incredibly dangerous.
+
+Indeed, DAOs are not the best structure to manage liquidity, they tend to harness suboptimal solutions, overpay, and simply need more velocity to match the fast pace of the liquidity games. No surprise here; we’ve already established ages ago that **DAOs/governance are a good fit for strategical (long-term) orientations but inapt at mid/short term (tactics) management,** thanks to the example of MakerDAO (where, despite the absurdity of it, MKR holders are still voting on the vault’s interest rate, a purely operational parameter).
+
+The obvious solution would be for the DAO to **appoint a liquidity committee** - a small team of liquidity specialists provided with a budget they can mobilize autonomously. The committee could be hired for a set term, while the DAO retains the right not to renew the committee or even revoke it similarly to other service providers.
+
+I invite you to look at the main stablecoin projects run by DAOs and see which one has a committee yet. As far as I know, [only Aave is finally considering it for GHO](https://governance.aave.com/t/temp-check-treasury-management-create-and-fund-gho-liquidity-committee/14800). Besides the increased agility and operational capacity provided by the committee, it also enables the DAO to be more structured and forward-planning in its liquidity approach, allowing it to explore partnerships and collaboration with more relevant actors, such as supporting an innovative DEX from day one at launch, instead of the many months required to explain the relevancy of the innovation to the DAO’s stakeholders and have a budget being voted and implemented.
+
+
+#### Competence is scarce
+
+The hard truth about liquidity management is that competence is extremely scarce. This could explain why the topic needs to be better understood and rarely prioritized at the project's design stage or later in the governance discussions. An apt liquidity manager must have an accurate understanding of the following:
+
+
+
+* Base liquidity structure model, x\*y=k
+* Custom liquidity structures like stableswap
+* Basic concentrated liquidity, UNIv3 style
+* Uniswap liquidity management layer (Bunni, Merkl, etc.)
+* CL liquidity manager model (Gamma, Arrakis, etc.)
+* veCRV tokenomics & ecosystem // veBAL
+* Vote marketplaces and bribe culture
+* Advanced concentrated liquidity, Maverick style
+* Maverick incentives model (Boosted Pool)
+* Maverick tokenomics (veMAV)
+* DEX Aggregator landscape and pathing logic
+
+**The scope of tools, services, and protocols used for liquidity management is increasing exponentially, and very few actors are following closely**. It’s frequent to observe absurd spreads between the liquidity spending of two similar projects, with sometimes spreads of several orders of magnitude of difference in terms of $ invested / results.
+
+
+## How to attract piles of ETH&LSDs onchain?
+
+So far, we focused on stablecoins harnessing the CDP (Collateralized Debt Position) model, such as Maker, Liquity, or Reflexer, where users must deposit collateral to contract debt directly against the protocol (every borrower on a CDP protocol mints their “own” debt). It’s an elegant design that enables the protocol to implement various devices to absorb the volatility of the collateral, thus maximizing the price inertia of the stablecoin.
+
+
+### The limits of CDP-based stablecoin
+
+**Yet, CDP-based stablecoins come with one main downside: the over-collateralization requirement.** Indeed, it’s difficult, if not impossible, to dampen the volatility of collateral such as ETH without any margin of error. For instance, on Liquity, the minimum collateralization ratio tolerated is 110%, yet the average ratio observed on the protocol is 226.3%.
+
+Overcollateralization is the central limit of the CDP model, and is hard to overcome. Indeed, lowering the collateralization requirement could attract more borrowers, increasing the risk scope of the stablecoin outputted. Thus, scaling a CDP-based stablecoin is a tough job. There are other relevant ideas to attract more borrowers, such as diversifying the collateral offering, as shown below. But here again, it comes with increased risks on the stablecoin, as seen with DAI, which observed a sizeable collateral degradation over the last years.
+
+Nevertheless, many projects are exploring approaches that could result in a stablecoin with fewer compromises than DAI while achieving a similar scale. Let’s consider a few directions currently explored to scale decentralized stablecoin further.
+
+
+#### Expand the collateral & chain offering: Liquity forks
+
+2023 is the year of the Liquity fork: many protocols were launched this year, harnessing a model more or less similar to Liquity, with some twists. These include Gravita, Prisma, Lybra, and more.
+
+##### Gravita
+
+Let’s start with [Gravita](https://www.gravitaprotocol.com/), probably the closest to the base Liquity model. Here, the focus is put on making the protocol more attractive to borrowers, with several welcome additions, including the possibility of borrowing using liquid staked ETH like stETH or rETH as collateral or the protocol being made available on L2 like Arbitrum. Of course, it’s a game of balance here, as the rule specified above still applies.
+
+{{< notice note >}}
+
+**The conditions enforced on the borrowers dictate the guarantees provided to stablecoin holders**.
+
+{{< /notice >}}
+
+##### Prisma Finance
+
+[Prisma Finance](https://prismafinance.com/) is also exploring a similar approach, another Liquity fork enabling the usage of ETH-LSD as collateral, built by a team close to the Curve/Llama ecosystem. Components of the veTokenomics are also envisioned on the fee-sharing/governance token PRISMA, but they still need to be made live.
+
+##### Lybra Finance
+
+Another team, [Lybra](https://lybra.finance/), experimented with a lock/escrow model on their governance token LBR. While it seems to have initially worked nicely to attract a sizeable amount of capital, the challenge with such tactics is to sustain them over time…
+
+##### DYAD
+
+Finally, let's talk about [DYAD](https://dyadstable.xyz/). This one is technically not a Liquity-fork per se, but more of a Liquity-inspired protocol, especially regarding the price stabilization mechanism of their stablecoin.
+
+The main challenge they are trying to solve is onboarding new collateral on a live CDP protocol without expanding the risk scope of the base protocol more than it needs to. To do so, DYAD introduces a "Social Licensing Layer," essentially the governance layer.
+
+Yet, it looks like none of the governance we're used to: here, there is no governance token, so that it won't be your usual plutocracy. Instead, governance power lies directly within the dNFT needed to use the protocol: each dNFT gets to control a single "switch" for each proposed collateral type.
+
+They can change the position of this switch at any time from off to on or on to off and back again, as often as they want. A given collateral can comprise part of DYAD's collateral basket if it maintains a 2/3 supermajority of "on" switches. The only way to increase your governance power is to control more dNFTs.
+
+DYAD also gets bonus points for preserving immutability as much as possible. While the protocol can be changed since it can onboard new collateral, the whole governance layer is immutable. DYAD is not fully live yet, only dNFTs are, but I'm eager to see how it goes!
+
+I’m keeping with the majors here: LSDfi was all the rage a few months ago, and we’ve seen many protocols providing options to leverage ETH-LSD launching lately. While this sub-market is likely already crowded, there’s room for a CDP-based model delivering a stablecoin slightly less resilient than LUSD but with additional features. The question is which?
+
+
+#### Be gentle with your borrowers: LLAMA/crvUSD
+
+Another way to create a sink for ETH/ETH-LSD: make the conditions more attractive to borrowers / soften the liquidation penalties. Indeed, one of the main innovations behind crvUSD lies with the liquidation model that differs vastly from other services providing leverage.
+
+LLAMA (Lending Liquidating AMM Algorithm) replaces the usual liquidations with “soft liquidations”, where underwater borrowers are rebalanced across “bands,” each representing a different price segment.
+
+It provides a sizeable protection against liquidations stemming from brutal but unsustained market movements. Instead of the sudden liquidations we’ve been used to, LLAMA's soft liquidations are more gradual, as the collateral is progressively adjusted in proportion to its market price.
+
+
+#### Make it rain: Dai Saving Rate & variants
+
+Why even bother improving your design when there are more direct paths forward? MakerDAO pioneered this idea of offering a “risk-free” yield to stablecoin holders to drive the demand: the DAI Saving Rate, currently at 5%.
+
+Sustaining it proves very costly for the DAO, which is increasingly pushed towards riskier but more lucrative collateral to keep afloat. A sizeable share of the collateral are now real-world assets (RWA) managed by custodians, some of which are slow or even fail to meet their yield or reporting obligations or simply sub-optimal (MakerDAO is currently earning 3% on its USDC while [retail can score 5% with Circle](https://cryptoslate.com/coinbase-raises-usdc-interest-rate-to-5/)).
+
+Nevertheless, surprise, surprise: incentives work, at least at first. Thus, this brutal, low effort, and poorly efficient design over the long term is now spreading:
+
+
+
+* [Raft launched a similar concept at 6%.](https://mirror.xyz/0xa486d3a7679D56D545dd5d357469Dd5ed4259340/1qSAAQtVdNCW_xn9cObEjwrQzFpwEshNrm0sjX0nkG8)
+* Frax is also working on [sFRAX / Frax Saving Rate targeting 5%](https://gov.frax.finance/t/fip-2xx-sfrax-governance-proposal/2585).
+
+
+
+Now, time will tell for the impact of such design over the long run. The way I see it, these protocols are **depleting most of their revenues to pay for acquisition on an ongoing basis** — they will lose most of the users acquired with DSR the minute they stop. They would have burned a massive amount of money to sustain the charade, money that could have been spent on strategic assets providing life-long incentives to the liquidity providers of their stablecoin, for instance. **This design is a great tactic but one of the most short-sighted strategies I have ever seen**.
+
+
+## A shift to reserve-backed stablecoin?
+
+A shift is brewing! While CDP-based models, such as Maker, Liquity, or Reflexer, are flourishing, **reserve-backed stablecoins** are also getting increasingly considered.
+
+Indeed, as we highlighted above, there is an inherent tension in purely borrow–based / CDP stablecoins. To put it simply:
+
+
+
+* Scaling a decentralized lending-based stablecoin requires attracting and retraining a sizeable amount of ETH / ETH-LSDs.
+* But the more permissive the protocol is to borrowers, the less desirable the stablecoin its output will become.
+
+The state of a CDP-based stablecoin depends entirely on its users' actions. Under the reserve model, the protocol directly manages the reserve and minting of stablecoins instead of individual positions. Thus, reserve-based models seem to offer a credible answer to CDP-based stable shortcomings, enabling the stablecoin supply to potentially scale more thanks to the native protocol reserve providing increased price inertia.
+
+Let’s summarize this article by examining two prime examples of implementing a reserve-backed stablecoin model. I’ll keep it short and digestible and add resources for diving further.
+
+
+### f(x): leverage with no fundind costs & 90% volatility dampened ETH
+
+F(x) is a fascinating protocol freshly released! It’s a dual product, enabling stETH depositors to expose themselves to two types of assets in the proportion they desire:
+
+1. xETH: a “high-volatility leveraged ETH”
+2. fETH: a “low-volatility floating stablecoin”
+
+Similarly to a CDP protocol, users deposit ETH (or stETH) to mint fETH or xETH. However, unlike Liquity/Maker/Other CDP, the user does not manage its position (a Trove). Instead, the protocol directly manages the stETH reserve. A redemption feature enables holders of fETH or xETH to reclaim the underlying stETH. However, how much they redeem depends on the system's state, most notably its Net Asset Value: the overall value of stETH in reserve.
+
+
+
+Launched just a few weeks ago, the protocol is still in its early stages with about 1300 ETH of TVL, and the liquidity on fETH is still being worked on. A third token, FXN, the governance token of the protocol, is also planned.
+
+The value proposition of both xETH and fETH is relevant to me and should be met with demand once the protocol is more mature. In my view, along with crvUSD, it’s one of the most exciting releases we got stablecoin-wise this year: I’m just waiting for the right time to experiment-ape into xETH.
+
+
+### Liquity v2: protected LSD leveraging
+
+“Liquity v2” (codename) is not live yet but has been [introduced by Robert Lauko at the last Stable Summit in June](https://www.youtube.com/watch?v=Zps__IMxtTs).
+
+Like fETH, v2 will offer non-liquidatable leverage on ETH-LSD with no funding fee and even add downside protection. The novel, reserve-backed stablecoin the protocol will output is optimized for scaling. Its liquidity needs are also minimized since the protocol acts as a primary AMM for the stablecoin: users can mint and redeem the stablecoin for $1 of staked ETH.
+
+V2 is being built in public: if you’d like to learn more about it or even get involved, make sure to come by the [Liquity’s Discord dedicated v2 channel](https://discord.gg/RCRp2CJR2S).
+
+
+### Learn more on AladinDAO’s F(x) & Liquity V2
+
+I kept it short on the reserve-backed stablecoins, as I will likely publish several articles focusing on this topic over the coming months. Meanwhile, feel free to get your alpha directly from the builder’s mouth — here’s a selection of articles & interviews to learn more about both protocols:
+
+
+
+* [A recent community call, when Robert and I joined the AladinDAO/Protocol F(x) team to discuss decentralized stablecoins more broadly [60min]](https://twitter.com/aladdindao/status/1684141750900736000?s=20)
+* [Community Call - Deep Dive into f(x) [30min]](https://www.youtube.com/watch?v=_xA6AFufGoQ&t=3871s)
+* [f(x) protocol with Kmets and Crouger from AladinDAO (Leviathan News) [28min]](https://www.youtube.com/watch?v=Nzy7xO09SFw)
+* [Introducing Liquity v2 — Liquity Blog](https://www.liquity.org/blog/introducing-liquity-v2)
+* [Liquity v2 with Colin Platt (Leviathan News)](https://www.youtube.com/watch?v=KOnGCPE5gaU)
+
+
+## KEY TAKEAWAYS
+
+Liquidity management is the nerve of the stablecoin wars: observe & analyze the strategies deployed by the projects you monitor – their effectiveness is one of the main drivers of the success of the underlying protocol.
+
+**👉️ TODO:** Follow the event surrounding GHO’s liquidity management on [Aave Governance Forum](https://governance.aave.com/) and try to articulate your thesis. If you can anticipate the repeg accurately, you get 3% of free profit waiting for your (GHO ~$0.97 to $1.00).
+
+**👉️ BONUS-TODO:** GRAI, another stablecoin (Liquity fork), is currently trading at ~$0.985 with its redemption ceiling increasing over the next few weeks; a similar play can be considered there.
+
+LSD-FI (protocols to leverage LSD) has been overcrowded over the last few months. Most protocols in the vertical are losing traction:
+
+**👉️ TODO:** Look at the incentive structure of protocols like Gravita, Raft, or Lybra, and confront it with their growth metrics — try to evaluate the incentive structure that seems persistent versus the ones losing steam.
+
+After ~4 years of going autistic with the CDP-based model, it seems like the most savvy teams started to look another way.
+
+**👉️ TODO:** Prepare for the future! Thanks to the resources shared above, deep-dive the reserve-based stablecoin models by getting familiar with protocols like f(x) or v2.
diff --git a/content/post/2024/crv-vs-velo.fr.md b/content/post/2024/crv-vs-velo.fr.md
new file mode 100644
index 00000000..2c185dd0
--- /dev/null
+++ b/content/post/2024/crv-vs-velo.fr.md
@@ -0,0 +1,158 @@
+---
+title: "Nuances subtiles avec de grandes conséquences : une analyse croisée de Curve et Velodrome"
+description: "Le modèle Velodrome, inspiré par veCRV, atteint un alignement supérieur entre les trois participants clés d'un DEX - les LPs, les détenteurs de tokens et les projets ayant besoin de liquidité. Pourtant, la plupart de l'espace DeFi ne comprend toujours pas pourquoi : mais pas vous anon - une fois que vous aurez lu cet article."
+date: '2024-03-21T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, veCRV, Velodrome, veVELO, Aerodrome, veAERO]
+url: crv-vs-velo
+image: img/2024/crv-vs-velo/cover.png
+difficulty: "expert"
+---
+
+Aujourd'hui, je veux aborder Velodrome/Aerodrome, une véritable success story en DeFi. J'ai couvert les DEX de manière extensive sur ce blog, en particulier Curve : cet article comparera les deux modèles et expliquera comment Velodrome a amélioré le modèle veCRV.
+
+Tout d'abord, commençons par un avertissement : il y a deux composants principaux d'un DEX que tout le monde doit connaître pour comprendre ce qui suit :
+
+1. Les structures de liquidité qu'il fournit (x\*y=k, stableswap, CL, stableswap-NG, curve V2, etc.)
+2. Le modèle d'incitations, qui pour un DEX est synonyme de ses tokenomics.
+
+Cet article se concentre sur ce dernier, le cœur de l'innovation de [Velodrome](https://www.defiscan.info/protocols/velodrome-v2/optimism). Cet article suppose une familiarité de base avec les tokenomics veCRV de Curve ; si ce n'est pas le cas, je vous encourage à [lire mon écrit précédent à ce sujet](https://tokenbrice.xyz/fr/crv-wars), posté il y a trois ans mais toujours utile pour comprendre le modèle.
+
+## A/ veCRV/veVELO Collecte et Distribution des Frais
+
+La collecte et la redistribution des frais sont les lignes de vie d'un échange décentralisé. Ici, la simplicité est généralement bonne, car le leader du segment DEX Uniswap opère toujours sous un modèle extrêmement simple mais brutalement efficace, où 100 % de l'argent collecté va aux fournisseurs de liquidité.
+
+Avec le lancement de son token CRV en août 2020, Curve a exploré une voie alternative, où 50 % des frais collectés sur une paire donnée vont aux fournisseurs de liquidité et les 50 % restants à la « DAO » (frais admin), c'est-à-dire aux détenteurs de veCRV. Curve a introduit le concept de « gauges de liquidité », où les détenteurs de tokens verrouillés (veCRV) peuvent diriger les émissions à recevoir par les fournisseurs de liquidité, créant une base d'incitations indépendante du volume traité.
+
+Velodrome a été lancé deux ans plus tard, à la fin de mai 2022, et a exploré une autre division, inspirée d'un projet précédent itérant sur le modèle Curve : Solidly. Ici, **les LPs n'ont aucune exposition aux frais collectés sur les paires pour lesquelles ils fournissent de la liquidité et sont entièrement incités par les émissions de tokens**.
+
+La différence principale entre veCRV et veVELO réside dans la manière dont ils gèrent les frais collectés au niveau du DEX/DAO, où nous observons des différences dans le montant des frais collectés et leur modèle de distribution.
+
+Plongeons dans les nuances de ce sujet : elles sont clés pour comprendre les avantages et inconvénients de chaque mode.
+
+### A.1/ Montant des frais distribués : VELO = 2 x Curve
+
+Curve et Velodrome opèrent sous la même logique de base : chaque semaine, un montant donné de tokens CRV/VELO est émis et distribué aux fournisseurs de liquidité. Chaque pool a une gauge associée pour laquelle les détenteurs de veCRV/veVELO peuvent voter, et l'allocation budgétaire hebdomadaire suit la proportion du « vote de gauge » : si une gauge reçoit 1 % du vote total veCRV/veVELO, 1 % de toutes les émissions produites cette semaine lui sera dirigé.
+
+Ces émissions sont essentiellement le coût principal pour le DEX : le prix payé pour attirer et retenir la liquidité. Ce qui compte alors est ce qui se trouve de l'autre côté du bilan – les revenus : dans notre cas, ce sont les frais collectés.
+
+Sur Curve, les revenus proviennent des « frais admin » de chaque pool, qui sont généralement fixés à 50 %. Cela signifie que les frais collectés sur une pool donnée sont divisés 50/50 entre le LP et la DAO/détenteurs de veCRV.
+
+
+
+Sur Velodrome, c'est simple : les fournisseurs de liquidité n'ont aucune exposition aux frais collectés sur la pool qu'ils fournissent ; ils sont incités uniquement par les émissions $VELO, ce qui signifie que la DAO/détenteurs de veVELO obtiennent 100 % des frais générés sur le DEX.
+
+Bien que cette différence principale ait déjà un impact massif, la suivante est encore plus significative car elle concerne la manière dont ces frais sont distribués aux détenteurs de veCRV/veVELO.
+
+### A.2/ Modèle de distribution des frais : une approche plus juste et plus efficace
+
+Curve utilise un modèle qui pourrait être décrit comme **un système de mutualisation des frais** : les frais que reçoivent les détenteurs de veCRV dépendent uniquement du montant de veCRV qu'ils contrôlent. Sans entrer dans les détails techniques, ces frais sont collectés dans les divers tokens impliqués dans la pool (comme USDC/USDT/DAI pour la 3pool), et chaque semaine, récoltés, échangés contre des tokens LP 3pool, puis rendus disponibles pour réclamation aux détenteurs de veCRV – comme vous pouvez le voir, cela nécessite une infrastructure pour fonctionner, dont le coût augmente avec le nombre de pools sur le DEX Curve.
+
+D'un autre côté, Velodrome fournit un modèle supérieur sur toutes les dimensions, car il atteint un meilleur alignement DEX/LP/détenteur de token sans aucune infrastructure requise. Voyons comment.
+
+Simplement dit, **Velodrome relie l'activité de vote de gauge à la distribution des frais**. Ici, le montant de veVELO que l'on contrôle compte, mais ce qui est encore plus important est la pool pour laquelle on vote puisque les **votants sont exposés uniquement aux frais collectés sur les paires pour lesquelles ils votent.** Ils collectent les frais en tant que tels (c'est-à-dire qu'un votant de la pool ETH/USDC obtient ETH et USDC), ce qui signifie que l'infrastructure requise est beaucoup plus gérable.
+
+Velodrome lie la distribution des frais à l'activité de vote de gauge : les détenteurs de veVELO reçoivent les frais collectés sur la pool qu'ils votent SEULEMENT, payés en tant que tels chaque semaine. Cela permet un meilleur alignement des détenteurs de veVELO avec les meilleurs intérêts de Velodrome en tant que DEX par rapport à Curve.
+
+Cette simple torsion crée un volant d'inertie de vote intéressant. Les paires à haut volume collectent beaucoup de frais, ce qui signifie des incitations élevées pour les votants. Cela conduit à de nombreux votes, qui dirigent des émissions sensées vers la paire, attirant plus de fournisseurs de liquidité, permettant plus de volume traité, etc., jusqu'à ce qu'un point d'équilibre soit atteint. Cela signifie que les paires à haut volume se maintiennent d'elles-mêmes sans pots-de-vin ou un baleinier votant bienveillant minimisant les profits, ce qui n'est pas le cas avec Curve.
+
+
+Aperçu des Revenus de Velodrome - [source: tableau de bord 0xkhmer](https://dune.com/0xkhmer/velodrome)
+
+
+Aperçu des Revenus d'Aerodrome - [source: tableau de bord 0xkhmer](https://dune.com/0xkhmer/aerodrome)
+
+### A.3/ Ce que cela signifie en pratique
+
+Assez avec les explications ; illustrons en considérant le cas d'un votant veCRV/veVELO, qui a décidé de voter pour une paire traitant un volume minimal (la situation est courante).
+
+Sur Curve :
+
+1. Un détenteur significatif de veCRV vote pour une pool traitant un montant marginal de volume par rapport à sa TVL, soit pour collecter un pot-de-vin, soit parce qu'il veut soutenir les tokens impliqués dans la pool.
+2. Son activité de vote est préjudiciable à Curve en tant que DEX car il dirige les émissions là où elles sont inutiles.
+3. Il reçoit la même quantité de 3CRV qu'un votant plus aligné sur Curve avec un sac veCRV équivalent essayant de diriger les incitations pour maximiser le volume.
+
+Maintenant sur Velodrome :
+
+1. Un détenteur significatif de veVELO vote pour une pool traitant un montant marginal de volume par rapport à sa TVL, soit pour collecter un pot-de-vin, soit parce qu'il veut soutenir les tokens impliqués dans la pool.
+2. Son activité de vote est préjudiciable à Velodrome en tant que DEX car il dirige les émissions là où elles sont inutiles.
+3. Il reçoit un montant marginal de frais puisque la pool pour laquelle il vote traite un volume marginal.
+
+La situation est la même en sens inverse pour voter sur une pool à haut volume qui serait d'intérêt pour le DEX :
+
+* Sur Curve, ce votant aligné sur le DEX recevra la même quantité de 3CRV que quiconque détenant le même sac.
+* Sur Velodrome, ce votant aligné sur le DEX sera bien récompensé, car il sera un votant majoritaire sur une paire à haut volume : une situation idéale pour maximiser les frais gagnés.
+
+Des deux côtés, des pots-de-vin sont payés aux votants et peuvent mener à des situations où les votes sont dirigés vers des pools qui ne sont pas optimaux en termes de volume traité. Cependant, sur Curve, il n'y a aucune pénalité pour le faire. Sur Velodrome, les corrupteurs de tels pools concurrencent les pools à haut volume offrant des APR attractifs aux votants, avec ou sans pots-de-vin.
+
+La même chose, sous un autre angle : sur Curve, le coût des pots-de-vin dépend uniquement de la valeur des émissions CRV. Sur Velodrome, le prix de base qu'un projet doit payer pour rassembler des votes dépend des pots-de-vin totaux + des frais collectés sur les autres pools. Cela signifie que les pools à haut volume poussent le coût des pots-de-vin à la hausse, entretenant encore un autre volant d'inertie dans le volant d'inertie.
+
+Comprendre ce qui précède signifie comprendre la différence principale entre les modèles Curve et Velodrome. Cependant, pour obtenir l'image complète, plus d'éléments doivent être considérés. Discutons maintenant du boost LP.
+
+## B/ Boosts LP et son impact sur l'écosystème
+
+Le boost LP, comme on l'appelle, est une fonctionnalité spécifique à Curve. De nombreux protocoles forçant les tokenomics veCRV, comme Balancer avec son veBAL, l'utilisent également. Il permet aux détenteurs de veCRV de gagner plus de récompenses CRV sur leur LP, en tenant compte de plusieurs éléments, y compris la taille de leur sac veCRV et la taille de leurs diverses LPs. Ainsi, avec une propriété veCRV appropriée, un LP peut obtenir un « Boost LP » jusqu'à 2,5x par rapport au taux d'émission de base.
+
+### B.1/ Boost LP expliqué
+
+Pour maximiser le boost obtenu, jusqu'à 2,5x maximal, il faut :
+
+1. Posséder autant de veCRV que possible
+2. Avoir des positions LP dans autant de pools que possible.
+3. Avoir un montant proportionnel/équilibré de TVL dans ces diverses pools.
+
+**Simplement dit, le Boost LP est un jeu truqué dès le départ**. Il n'est pas conçu pour bénéficier aux détenteurs individuels de veCRV sur leur LP mais pour attirer des méta-protocoles, comme Convex, qui peuvent atteindre 1+2+3 de manière consistente. **La croissance de Convex n'est pas une success story ; elle est par design (le design de Curve)**. Si ce n'était pas Convex, un autre protocole similaire posséderait la plupart de l'offre veCRV. Nous avons observé des patterns similaires avec d'autres protocoles qui ont adopté le Boost LP : Balancer a Aura. Convex et Aura contrôlent > 50 % de l'offre veCRV/veBAL.
+
+Velodrome et Aerodrome évitent complètement la possibilité d'un nouveau protocole gobant l'offre en n'ayant aucun mécanisme de boost. Comme nous l'avons vu avec Curve, Convex a émergé et capturé la plupart de l'offre ; maintenant, tous les LPs gagnent avec un boost, et aucun ne bénéficie d'une quantité disproportionnée de CRV. Le système a convergé vers tout le monde gagnant à peu près le même boost effectif, ou dans le cas de Velodrome/Aerodrome, aucun boost puisque le résultat futur aurait été des LPs gagnant le même boost effectif. L'autre fait reste que puisque Convex a une majorité de CRV verrouillé, ils contrôlent la gouvernance future de CRV.
+
+### B.2/ Conséquences du Boost LP
+
+L'existence du Boost LP appelle une couche comme Convex au-dessus du DEX ; il n'y a pas moyen d'y échapper. À ce stade, certains pourraient penser : « Donc vous avez un protocole qui gobe la plupart de vos émissions et les verrouille pour toujours ; quel est le problème ? »
+
+La réponse est simple : c'est simplement un design inefficace puisque ces méta-couches fournissent des fonctionnalités qui pourraient être délivrées de manière moins convolutée au niveau de base (par le DEX lui-même) et sans les frais.
+
+Curve a besoin de Convex et du marché des pots-de-vin : Votium, Warden, et Hidden Hands. Mais aussi l'auto-compoundeur/gestionnaire de délégation de vote : Airforce Union, Concentrator, etc. Vous finissez avec des dizaines de protocoles prenant des frais ici et là pour délivrer quelque chose que Velodrome parvient à intégrer nativement. Cela rend l'expérience plus complexe pour les utilisateurs, qui doivent connaître ces dizaines de protocoles et leurs subtilités pour tirer le meilleur parti de Curve.
+
+Rappelez-vous aussi comment, en discutant de la distribution des frais, nous avons mentionné que Curve nécessitait une infrastructure beaucoup plus dense pour fonctionner ? Eh bien, imaginez le chaos que veCRV + Boost LP est en backend. Il y a une raison pour laquelle à la fois Curve et Balancer prennent des âges pour déployer sur une nouvelle L2, et souvent avec des fonctionnalités partielles (comme pas de Boost LP, surprise surprise.).
+
+## Expansion fluide au-delà de ce que Curve offre
+
+Sur Velodrome, le marché des pots-de-vin est intégré : les projets peuvent poster leurs pots-de-vin directement sur le frontend de Velodrome, et les votants peuvent vérifier les pots-de-vin disponibles et voter au même endroit. De nouvelles fonctionnalités continuent d'être délivrées et ajoutées à la même interface utilisée par tous les participants : LPs, projets, et détenteurs de tokens.
+
+### Relais Velodrome
+
+Elles vont des améliorations de qualité de vie / économie de gaz, comme le « auto-max-lock », économisant aux verrouilleurs qui souhaitent rester max-verrouillés pour maximiser leur pouvoir de vote de gauge la peine de le faire manuellement, à des fonctionnalités beaucoup plus étendues, comme Relay, un système de gestion de positions veVELO.
+
+
+
+C'est un outil destiné aux projets utilisant Velodrome pour développer la liquidité sur leurs paires. Il leur permet de configurer leur stratégie de vote et de corruption et de l'implémenter automatiquement : plus besoin de soumettre des transactions hebdomadaires. Relay a un autre avantage, puisque actuellement, la stratégie disponible est une veVELO-maxi, composant tous les frais et pots-de-vin collectés en VELO et les reverrouillant pour maximiser le pouvoir de vote : cela crée un puits VELO considérable, directement indexé sur les frais distribués par l'échange. [Presque 1/5 de tous les veVELO y sont déjà](https://twitter.com/VelodromeFi/status/1762908204894445834).
+
+Au fur et à mesure que la fonctionnalité Relay mûrit, plus de stratégies seront disponibles pour ses utilisateurs, y compris certaines qui composent tous les frais et pots-de-vin gagnés en veVELO mais, par exemple, les rendent réclamables en ETH ou USDC. Cela s'avérera très pratique pour les détenteurs de veVELO qui ne cherchent pas à soutenir un projet en particulier.
+
+### veNFT : Positions verrouillées tokenisées
+
+Velodrome a d'autres innovations astucieuses intégrées, comme le veNFT encore sous-apprécié : avec Curve, veCRV est non transférable, rendant leur gestion douloureuse. Velodrome peut atteindre le même alignement mais permet la transférabilité : les positions veVELO sont représentées par un veNFT qui peut être transféré. Il n'y a aucun moyen de racheter un veNFT donné pour les tokens VELO sous-jacents à part attendre l'expiration du verrou. Cependant, cela facilite la gestion d'une telle position en permettant son transfert. Il y a aussi [un marché OTC pour les veNFT veVELO](https://decode.market/), où les détenteurs peuvent vendre leur position à des acheteurs intéressés à un discount fluctuant par rapport à la valeur des tokens VELO sous-jacents.
+
+### Une compréhension profonde de la nature du jeu
+
+Des échanges comme Curve ou Velodrome sont un type de produit particulier dans le paysage DeFi. En termes d'affaires réguliers, **ils pourraient être décrits comme B2B2C : Business to Business to Consumer**. Ils sont B2B parce que leurs premiers clients sont d'autres projets – les divers protocoles cherchant de la liquidité. S'ils servent avec succès ce marché, les projets qu'ils intègrent à leur DEX feront le travail B2C pour eux, car leurs pools de liquidité présentent des opportunités à leurs détenteurs de tokens respectifs.
+
+À cet égard, je pense que Curve a complètement échoué. Avec sa pyramide de solutions imbriquées les unes sur les autres, Curve est particulièrement peu convivial pour l'intégration des projets. Ils veulent corrompre ? D'accord, décidez entre veCRV ou vlCVX sur Bribe.crv, Votium, Warden, ou StakeDAO. Ils veulent gérer leur propre CRV ? Bien, choisissez juste entre veCRV, aCRV, cvxCRV, sdCRV, vlCVX, uCRV, etc. Bien que cette myriade d'options puisse ravir les enthousiastes de Curve, elle se transforme, à mon avis, en une qualité négative pour le côté B2B des choses.
+
+En contraste, l'expérience avec Velodrome est fluide : un endroit où tout se passe, une option pour chacune – sans besoin de comparer entre une demi-douzaine d'alternatives cryptiques et parfois trompeuses. Couplé aux caractéristiques précédentes des jeux veCRV discutées avant, en particulier le Boost LP, cela rend [l'écosystème Curve particulièrement peu convivial pour les nouveaux entrants](https://tokenbrice.xyz/farewell-glc/#the-case-of-the-crv-wars) : **qui voudrait entrer dans une course truquée en faveur des premiers entrants trois ans après son début** ?
+
+
+
+De plus, les efforts BD de Velodrome sont remarquables ; l'équipe est largement disponible pour aider à intégrer de nouveaux projets, et plusieurs programmes sont conçus pour rendre l'expérience aussi simple et convaincante pour les nouveaux entrants, regroupés sous l'umbrella « Tour de OP », qui inclut un programme de matching de pots-de-vin, des bonus de verrou et des boosts de vote.
+
+## MOTS DE LA FIN
+
+Comme vous avez pu le voir, à la fois Velodrome & Aerodrome ont attiré beaucoup d'attention dernièrement, grâce à leur token voyant un momentum positif : je pense que c'est bien mérité. La sortie de Slipstream, l'implémentation de Velodrome de la Liquidité Concentrée, augmentera le volume traité par unité de TVL, débloquant la prochaine phase de croissance du volant d'inertie. Aerodrome, le fork de Velodrome sur le réseau Base, a vu une croissance spectaculaire depuis son lancement il y a six mois, démontrant davantage la viabilité du modèle.
+
+À plus long terme, l'équipe Velodrome commence à [se référer à Velo comme un « MetaDEX »](https://medium.com/@VelodromeFi/velodrome-the-metadex-48e4af1ef9a4), hintant à Velodrome devenant le hub de liquidité de base non seulement d'Optimism mais pour toute la Superchain : toutes les chaînes construites sur la stack OP.
+
+Le temps dira, mais Velodrome est déjà un succès retentissant sur Optimism, donc gérer un DEX cross-chain correctement serait un game changer. C'est particulièrement vrai en considérant à quel point Curve & Balancer ont échoué là – non parce qu'ils n'ont pas essayé, mais simplement parce que leur infrastructure convolutée avec Boost LP rend le déploiement cross-chain douloureux (Bonjour AuraFinance distribuant AURA sur des chaînes où... il n'y a pas de liquidité pour $AURA).
+
+PS : J'adresse ici la partie DEX de la suite de produits, qui est le produit complet pour Velodrome mais pas pour Curve, qui a maintenant crvUSD et Llamalend. Pourtant, même avec crvUSD inclus, Aerodrome collecte et redistribue maintenant plus de frais que Curve, tout cela en étant présent sur une seule chaîne vs 13 pour Curve. Alors que Curve-DEX a été sous-performant pendant un moment, l'équipe a prouvé à plusieurs reprises être innovante et capable de rebondir. Les revenus crvUSD ont déjà dépassé ceux de Curve-DEX, et qui sait ce que Llamalend pourrait accomplir.
+
+Game on : attendons et voyons.
\ No newline at end of file
diff --git a/content/post/2024/crv-vs-velo.md b/content/post/2024/crv-vs-velo.md
new file mode 100644
index 00000000..f92639b4
--- /dev/null
+++ b/content/post/2024/crv-vs-velo.md
@@ -0,0 +1,180 @@
+---
+title: "Subtles nuances with great consequences: a cross analysis of Curve and Velodrome"
+description: "The Velodrome model, inspired by veCRV, achieves superior alignment between the three key participants of a DEX - LPs, tokenholders, and projects needing liquidity. Yet, most of the DeFi space still fails understand why: but not you anon - once you read this post."
+date: '2024-03-21T01:13:50.191Z'
+categories: [DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, veCRV, Velodrome, veVELO, Aerodrome, veAERO]
+url: crv-vs-velo
+image: img/2024/crv-vs-velo/cover.png
+difficulty: "expert"
+---
+
+Today, I want to address Velodrome/Aerodrome, a genuine success story in DeFi. I’ve covered DEXes extensively on this blog, especially Curve: this article will compare the two models and explain how Velodrome improved on the veCRV template.
+
+First, let me start with a disclaimer: there are two core components to a DEX that everyone needs to be aware of to understand what follows:
+
+
+
+1. The liquidity structures it provides (x\*y=k, stableswap, CL, stableswap-NG, curve V2, etc.)
+2. The incentives model, which for a DEX is synonymous with its tokenomics.
+
+This post focuses on the latter, the core of [Velodrome](https://www.defiscan.info/protocols/velodrome-v2/optimism)'s innovation. This post assumes basic familiarity with Curve’s veCRV tokenomics; if not, I urge you to [read my previous writing about it](https://tokenbrice.xyz/crv-wars), posted three years ago but still helpful to understand the model.
+
+
+## A/ veCRV/veVELO Fees Collection & Distribution
+
+Fee collection and redistribution are the lifelines of a decentralized exchange. Here, simplicity is usually good, as the DEX segment leader Uniswap is still operating under an extremely simple yet brutally efficient model, where 100% of the collected money goes to the liquidity providers.
+
+With the launch of its CRV token in August 2020, Curve explored an alternative path, where 50% of the fees collected on a given pair go to liquidity providers and the remaining 50% to the “DAO” (admin fees), meaning the veCRV holders. Curve introduced the concept of “liquidity gauges,” where locked token holders (veCRV) can direct emissions to be received by liquidity providers, creating an incentive baseline independent of the volume processed.
+
+Velodrome launched two years later, at the end of May 2022, and explored yet another split, inspired by a previous project iterating on the Curve model: Solidly. Here, **LPs get no exposure to the fees collected on the pairs they provide liquidity for and are fully incentivized by token emissions**.
+
+The core difference between veCRV and veVELO lies in how they handle the fees collected at the DEX/DAO level, where we observe differences in the amount of fees collected and their distribution model.
+
+Let’s dive into the nuances of this topic: they are key to understanding the pros and cons of each mode.
+
+
+### A.1/ Amount of fees distributed: VELO = 2 x Curve
+
+Curve and Velodrome operate under the same base logic: every week, a given amount of CRV/VELO tokens are emitted and distributed to liquidity providers. Each pool has an associated gauge for which veCRV/veVELO holders can vote, and the weekly budget allocation follows the proportion of the “gauge vote”: if a gauge receives 1% of the total veCRV/veVELO vote, 1% of all the emissions produced that week will be directed to it.
+
+These emissions are essentially the main cost for the DEX: the price paid to attract and retain liquidity. What matters then is what comes on the other side of the balance sheet – the revenues: in our case, it’s the fees collected.
+
+On Curve, revenues stem from the “admin fees” of each pool, which are usually set at 50%. This means the fees collected on a given pool are split 50/50 between the LP and the DAO/veCRV holders.
+
+
+
+On Velodrome, it's straightforward: liquidity providers get no exposure to the fees collected on the pool they supply; they are incentivized through $VELO emissions only, meaning that the DAO/veVELO holders get 100% of the fees generated on the DEX.
+
+While this core difference already has a massive impact, the following one is even more meaningful as it pertains to how those fees are distributed to veCRV/veVELO holders.
+
+
+### A.2/ Model for the distribution of fees: a fairer and more efficient approach
+
+Curve harnesses a model that could be described as **a fee mutualization system**: the fees veCRV holders receive depend only on the amount of veCRV they control. Without getting too technical, those fees are collected in the various tokens involved in the pool (such as USDC/USDT/DAI for the 3pool), and every week, harvested, swapped for 3pool LP token, and then made available for claiming to veCRV holders – as you can see, this means somewhat of an infrastructure to operate, the cost of which scale with the number of pools on the Curve DEX.
+
+On the other hand, Velodrome provides a superior model on all dimensions, as it achieves better DEX/LP/token holder alignment without any infrastructure required. Let’s see how.
+
+Simply put, **Velodrome connects gauge-voting activity with fee distribution**. Here, the amount of veVELO one controls matters, but even more important is which pool one votes for since the **voters are exposed to the fees collected on the pairs they vote for only.** They collect the fees as such (i.e., a voter of the ETH/USDC pool gets ETH and USDC), meaning the infrastructure required is much more manageable.
+
+Velodrome ties fee distribution to the gauge-voting activity: veVELO holders receive the fees collected on the pool they vote ONLY, paid as such every week. It enables the better alignment of veVELO holders with the best interest of Velodrome as a DEX compared to Curve.
+
+This simple twist creates an interesting voting flywheel. High-volume pairs collect lots of fees, meaning high incentives for voters. This leads to many votes, which direct sensible emissions to the pair, attracting more liquidity providers, enabling more volume processing, etc., until an equilibrium point is reached. This means that high-volume pairs sustain themselves without bribes or a benevolent profit-minimizer whale-voter needed, which is not the case with Curve.
+
+
+Velodrome Revenues Overview - [source: 0xkhmer dashboard](https://dune.com/0xkhmer/velodrome)
+
+
+Aerodrome Revenues Overview - [source: 0xkhmer dashboard](https://dune.com/0xkhmer/aerodrome)
+
+
+### A.3/ What it means in practice
+
+Enough with the explainer; let’s illustrate by considering the case of a veCRV/veVELO voter, who decided to vote for a pair processing minimal volume (the situation is common).
+
+On Curve:
+
+
+
+1. A significant veCRV holder votes for a pool processing a marginal amount of volume compared to its TVL, either to collect a bribe or because he wants to support the tokens involved in the pool.
+2. His voting activity is detrimental to Curve as a DEX because he directs emissions where they are unnecessary.
+3. He receives the same amount of 3CRV as a more Curve-aligned voter with an equivalent veCRV bag trying to direct incentives to maximize volume.
+
+Now on Velodrome:
+
+
+
+1. A significant veVELO holder votes for a pool processing a marginal amount of volume compared to its TVL, either to collect a bribe or because he wants to support the tokens involved in the pool.
+2. His voting activity is detrimental to Velodrome as a DEX because he directs emissions where they are unnecessary.
+3. He receives a marginal amount of fees since the pool he is voting for is processing a marginal volume.
+
+The situation is the same in reverse for voting on a high-volume pool that would be of interest to the DEX:
+
+
+
+* On Curve, this DEX-aligned voter will receive the same amount of 3CRV as anyone holding the same bag.
+* On Velodrome, this DEX-aligned voter will be well rewarded, as he will be a majority voter on a high-volume pair: an ideal situation to maximize fees earned.
+
+On both sides, bribes are paid to voters and can lead to situations where votes are directed to pools that are not optimal in terms of volume processed. However, on Curve, there is no penalty for doing so. On Velodrome, bribers of such pools compete with high-volume pools offering attractive APR to voters, with or without bribes.
+
+The same thing, from another angle: on Curve, the cost of bribes depends only on the value of CRV emissions. On Velodrome, the baseline price a project must pay to gather votes depends on the total bribes + fees collected on other pools. This means that high-volume pools push the cost of bribes upward, entertaining yet another flywheel in the flywheel.
+
+Understanding the above means understanding the core difference between the Curve and Velodrome models. However, to get the full picture, more elements must be considered. Let’s discuss the LP boost now.
+
+
+## B/ LP boosts & its impact on the ecosystem
+
+LP boost, as it is called, is a Curve-specific feature. Many protocols forking the veCRV tokenomics, such as Balancer with its veBAL, also use it. It enables veCRV holders to earn more CRV rewards on their LP, factoring in several elements, including the size of their veCRV bag and the size of their various LPs. Thus, with appropriate veCRV ownership, an LP can get an “LP Boost” of up to 2.5x compared to the base emission rate.
+
+
+### B.1/ LP Boost explained
+
+To maximize the boost obtained, up to 2.5x maximal, one must:
+
+
+
+1. Own as much veCRV as possible
+2. Have LP positions in as many pools as possible.
+3. Have a proportionate/balanced amount of TVL in those various pools.
+
+**Simply put, LP Boost is a rugged game from the get-go**. It is not designed to benefit individual veCRV holders over their LP but to attract meta-protocol, such as Convex, who can achieve 1+2+3 consistently. **The growth of Convex is not a success story; it is by design (Curve’s design)**. If it were not for Convex, another similar protocol would own most of the veCRV supply. We observed similar patterns with other protocols that adopted LP Boost: Balancer has Aura. Convex and Aura control > 50% of the veCRV/veBAL supply.
+
+Velodrome and Aerodrome completely avoid the possibility of a new protocol to gobble up the supply by not having any boosting mechanism. As we’ve seen with Curve, Convex emerged and captured most of the supply; now, all LPs are earning with a boost, and none are benefiting from any disproportionate amount of CRV. The system has converged to everyone earning about the same effective boost, or in Velodrome/Aerodrome’s case, no boost since the future outcome would’ve been LPs earning the same effective boost. The other fact remains that since Convex has a majority of CRV locked, they control the future governance of CRV.
+
+
+### B.2/ Consequences of LP Boost
+
+The existence of the LP-Boost calls for a Convex-like layer on top of the DEX; there is no avoiding it. At this point, some could think: "So you have a protocol gobbling most of your emissions and locking them forever; what's the problem?"
+
+The answer is simple: it's simply inefficient design since those meta-layers provide features that could be delivered less convoluted at the base level (by the DEX itself) and without the fees.
+
+Curve needs Convex and the bribe marketplace: Votium, Warden, and Hidden Hands. But also the auto-compounder/vote delegation manager: Airforce Union, Concentrator, etc. You end up with dozens of protocols taking some fees here and there to deliver something that Velodrome manages to pack in natively. This makes the experience more complex for the users, who must know about these dozens of protocols and their subtleties to make the most of Curve.
+
+Also, remember how, while discussing the fee distribution, we mentioned that Curve required a much more dense infrastructure to operate? Well, imagine the mess that veCRV+LP Boost is in the backend. There is a reason why both Curve and Balancer are taking ages to ship on a new L2, and often with partial functionality (such as no LP boost, surprise surprise.).
+
+
+## Seamlessly expanding beyond what Curve offers
+
+On Velodrome, the bribe marketplace is built-in: projects can post their bribes directly on the Velodrome frontend, and voters can check available bribes and vote in the same place. New features keep being delivered and added to the same interface used by all participants: LPs, projects, and tokenholders.
+
+
+### Velodrome Relays
+
+They go from quality-of-life / gas-saving upgrades, such as the “auto-max-lock”, saving lockers for those who wish to remain max-locked to maximize their gauge-voting power the hassle of doing it manually, to much more extensive features, like Relay, a veVELO position management system.
+
+
+
+It’s a tool catering to projects using Velodrome to grow liquidity on their pairs. It enables them to set up their voting and bribing strategy and implement it automatically: no need to submit weekly transactions anymore. Relay has another benefit, since currently, the strategy available is a veVELO-maxi one, compounding all fees & bribes collected into VELO and relocking it to maximize voting power: it creates a sizeable VELO sink, directly indexed on the fees distributed by the exchange. [Almost 1/5 of all veVELO are already there](https://twitter.com/VelodromeFi/status/1762908204894445834).
+
+As the Relay feature matures, more strategies will be available to its users, including some that compound all the fees and bribes earned into veVELO but, for instance, make them claimable in ETH or USDC. It will prove very convenient for veVELO holders that are not looking to support a project in particular.
+
+
+### veNFT: Tokenized locked positions
+
+Velodrome has other neat innovations packed in, such as the still under-appreciated veNFT: with Curve, veCRV is non-transferable, making their management painful. Velodrome can achieve the same alignment but enables transferability: veVELO positions are represented by a veNFT that can be transferred. There is no way of redeeming a given veNFT for the underlying VELO tokens apart from waiting for the lock to expire. However, it eases the management of such a position by enabling its transfer. There is also [an OTC market for veVELO veNFTs](https://decode.market/), where holders can sell their position to interested buyers at a fluctuating discount compared to the value of underlying VELO tokens.
+
+
+### A deep understanding of the nature of the game
+
+Exchanges like Curve or Velodrome are a particular product type in the DeFi landscape. In regular business terms, **they could be described as B2B2C: Business to Business to Consumer**. They are B2B because their first customers are other projects – the various protocols looking for liquidity. If they successfully service this market, the projects they onboard to their DEX will do the B2C work for them, as their liquidity pools present opportunities to their respective token holders.
+
+In that regard, I feel like Curve utterly failed. With its pyramid of solutions nested on top of one another, Curve is particularly unfriendly to onboard for projects. They wanna bribe? All right, decide between veCRV or vlCVX bribes on Bribe.crv, Votium, Warden, or StakeDAO. Do they want to manage their own CRV? Fine, just pick between veCRV, aCRV, cvxCRV, sdCRV, vlCVX, uCRV, etc. While this myriad of options might ravish Curve-enthusiasts, it turns, in my perspective, into a negative quality for the B2B side of things.
+
+In contrast, the experience with Velodrome is seamless: one place where everything happens, one option for each – without needing to compare between half a dozen cryptic and sometimes misleading alternatives. Coupled with the previous characteristics of the veCRV games discussed before, especially the LP Boost, it makes the [Curve ecosystem particularly unfriendly to new entrants](https://tokenbrice.xyz/farewell-glc/#the-case-of-the-crv-wars): **who would want to enter a race rigged in favor of the first entrants three years after it began**?
+
+
+
+Moreover, the Velodrome BD efforts are remarkable; the team is broadly available to help onboard new projects, and several programs are designed to make the experience as simple and compelling for new entrants, regrouped under the “Tour de OP” umbrella, which includes a bribe matching program, lock bonuses and vote boosting.
+
+
+## PARTING WORDS
+
+As you might have seen, both Velodrome & Aerodrome have attracted much attention lately, thanks to their token seeing positive momentum: I think it's well deserved. The release of Slipstream, Velodrome’s implementation of Concentrated Liquidity, will increase the volume processed per unit of TVL, unlocking the flywheel's next growth phase. Aerodrome, Velodrome’s fork on the Base network, has seen spectacular growth since it launched six months ago, further demonstrating the model's viability.
+
+In the longer term, the Velodrome team is starting to [refer to Velo as a "MetaDEX"](https://medium.com/@VelodromeFi/velodrome-the-metadex-48e4af1ef9a4), hinting at Velodrome becoming the base liquidity hub not just of Optimism but for the whole Superchain: all chains built on the OP stack.
+
+Time will tell, but Velodrome is already a resounding success on Optimism, so managing a cross-chain DEX properly would be a game changer. This is especially true considering how much Curve & Balancer has failed there—not because they did not try, but simply because their convoluted infrastructure with LP boost makes cross-chain deployment painful (Hello AuraFinance distributing AURA on chains where... there is no liquidity for $AURA).
+
+PS: I’m addressing the DEX part of the product suite here, which is the complete product for Velodrome but not for Curve, which now has crvUSD and Llamalend. Still, even with crvUSD included, Aerodrome is now collecting and redistributing more fees than Curve, all of this while being present on one chain only vs 13 for Curve. While Curve-DEX has been sub-par for a while, the team has repeatedly proven innovative and able to bounce back. crvUSD revenues have already flipped those of Curve-DEX, and who knows what Llamalend could achieve.
+
+Game on: let’s wait and see.
diff --git a/content/post/2024/farewell-glc.fr.md b/content/post/2024/farewell-glc.fr.md
new file mode 100644
index 00000000..0adc8eac
--- /dev/null
+++ b/content/post/2024/farewell-glc.fr.md
@@ -0,0 +1,108 @@
+---
+title: "Adieu au GHO Liquidity Committee et réflexions sur l'essor du novlangue DeFi"
+description: "J'ai démissionné du GHO Liquidity Committee - cet article explique pourquoi et réfléchit sur les défis principaux observés dans la gouvernance et les comités DeFi"
+date: '2024-02-08T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Liquidity, GHO, GHO Liquidity Committee]
+url: farewell-glc
+difficulty: "intermediate"
+---
+
+J’ai démissionné du GHO Liquidity Committee et je souhaite, dans cet article de blog, partager plus de contexte sur ses aventures et les leçons que nous pouvons en tirer.
+
+* [Message onchain de tokenbrice.eth](https://etherscan.io/verifySig/35543)
+* [Transaction de retrait du signataire](https://etherscan.io/tx/0x39760c8cd33beba102cbcb6a3c50489a24b1a50d8290de7c42c09845cf814dba)
+
+Pour ceux dont la première réaction sera « pas envie de lire tout ça », voici un récapitulatif des principaux manquements que je vois dans le comité qui ont conduit à ma décision :
+
+1. Le modèle opérationnel du comité est inefficace et empêche l'émergence et la mise en œuvre d'une vision cohérente.
+2. Le champ de responsabilités du comité est flou, menant à une attitude passive (vis-à-vis des faux pas de gouvernance) assumée par la plupart des membres.
+3. Le comité est principalement composé de professionnels de la gouvernance qui manquent de toute expertise sérieuse sur le sujet en question – la gestion de liquidité. Cela résulte en des opérations inefficaces, des conflits d'intérêts en raison de leurs nombreux autres engagements, et une utilisation sous-optimale des ressources du Comité.
+
+La gouvernance est toujours un défi. En effet, cela peut sembler fou de donner du pouvoir à des gens aléatoires sur internet, et ça l'est souvent. Il y a une hypothèse démocratique intégrée dans les opérations de gouvernance – bien que la plupart des gouvernances soient purement plutocratiques – qui entrave sévèrement toute structuration sérieuse qui permettrait d'atteindre des objectifs communément acceptés. Le GHO Liquidity Committee a été nommé par la gouvernance Aave précisément parce qu'elle a reconnu – dans un éclair de lucidité – son incompétence et son ineptie en matière de gestion directionnelle de la liquidité.
+
+Pourtant, je vais vous dire ce qui est encore plus fou : donner du pouvoir à des gens que la foule perçoit comme des « experts » sur un sujet. C'est tout un spectacle : l'expert le plus reconnu et médiatique d'un domaine donné n'est jamais celui qui est réellement le plus informé sur le sujet. Moi, pour ma part, je sais pas mal de choses sur la question, avec mon propre domaine de spécialisation — la gestion, la modélisation et l'incitation de la liquidité — un sujet prone à la manipulation de la perception publique plus que tout autre en raison des enjeux financiers inhérents associés.
+
+## Le cas des CRV Wars
+
+Illustrons : en matière de liquidité, le mot dans la rue est que Curve est le meilleur modèle, et que tous les pros et experts utilisent Curve, non ? **C'est si bon que lors du dernier round (62), les projets dépensent 1 $ pour recevoir 0,7 $ d'incitations pour leurs pools** : une donation instantanée de 30 % du montant qu'ils dépensent en pots-de-vin aux détenteurs de veCRV/vlCVX. Cela signifie que si les projets qui ont corrompu avaient alloué le même montant à un mining de liquidité direct, ils auraient délivré 30 % de plus $ à leurs LPs et ainsi attiré plus de liquidité pour le même coût, tout cela sans assumer le risque de prix associé aux fluctuations de CRV pendant une semaine.
+
+
+
+Alors, que se passe-t-il là ? Pas mal de choses, et ce n'est pas le plat principal du menu d'aujourd'hui, juste l'entrée, donc je vais passer rapidement là-dessus :
+
+1. **La plupart des projets n'ont personne en interne compétent en liquidité**, donc ils font souvent des gaspillages aléatoires comme ceux-ci. De nombreux projets DeFi proéminents reconnus pour les jeux de liquidité sont de gros dépensiers mais pas exactement astucieux.
+2. **Les Curve Wars sont un meme depuis un moment** : il n'y a pas eu de véritables nouveaux entrants dans ces guerres depuis des lustres – simplement parce que ce n'est pas rentable financièrement pour la plupart des joueurs, surtout ceux sans liens avec l'écosystème Curve. De plus, les structures de liquidité disponibles sur Curve (stableswap et V2) sont sous-optimales par rapport à Uniswap ou Maverick pour de nombreux types très courants de tokens DeFi – LSDs, LRTs, stablecoins loosely peggés, et wrappers liquides. Vous pouvez marquer en toute confiance tout protocole produisant un token de ce type construisant sa liquidité principalement sur Curve comme inapte en gestion de liquidité.
+3. Ce qui reste sont des **« protocoles insiders »**, des équipes construisant sur l'écosystème Curve qui possèdent généralement des positions veCRV/vlCVX importantes, leur permettant de récupérer une grande part de leurs pots-de-vin (1. Posséder veCRV/vlCVX ⇒ 2. Poster un pot-de-vin ⇒ 3. Voter sur le pool que vous venez de corrompre ⇒ 4. Collecter et répéter au round suivant). Cette tactique manipule la perception publique en faisant croire que de l'argent réel est dépensé dans ces guerres Curve. Certains de ces insiders sont à l'origine des protocoles externes, comme Inverse ou Alchemix, qui ont décidé d'embrasser l'anneau du lama pour le meilleur et pour le pire.
+
+Ne me croyez pas sur parole ; regardez simplement les top dépensiers : Frax, Convex, Alchemix, CLever (Aladin), Prisma, Conic, Inverse, etc. **Pour faciliter la visualisation, voici les top dépensiers du dernier round, classés par montant dépensé, avec les protocoles insiders surlignés en rouge** :
+
+
+
+Assez avec Curve, les lamas me détestent déjà ; je voulais juste souligner l'exemple de Curve, « le roi de la liquidité », étant un lieu peu efficace pour construire et maintenir la liquidité. Curve, « faiseur ou briseur de stablecoins », en tant que DEX avec des structures de liquidité sous-optimales pour la plupart des pools de stablecoins : **Le novlangue est arrivé en DeFi, et la perception publique/les mots utilisés sont souvent complètement en désaccord avec la réalité observable onchain**. Malheureusement, un pattern similaire a été observé avec le GHO Liquidity Committee, le sujet d'aujourd'hui, donc passons-y.
+
+## Le cas du GHO Liquidity Committee
+
+**Le GHO Liquidity Committee est un exemple parfait de mauvaise attribution d'expertise**, car il était composé d'un mélange malsain de « politiciens DeFi » professionnels (plus sur cela ci-dessous), de personnes avec une faible expertise et un intérêt vested dans un DEX donné, et de personnes proches de la DAO Aave / ex équipe Aave mais dépourvues de toute expertise sur le sujet de la liquidité.
+
+Cela a conduit à un gaspillage de ressources, des luttes sans fondement, et des décisions heavily mal informées. Au final, le **GLC est comme un gros sac d'argent que tout le monde essayait de tirer pour diriger vers un protocole dans lequel ils ont un intérêt**.
+
+Plongeons-y : quelles étaient ses limitations, et qu'est-ce que quiconque intéressé par la gouvernance, basée sur un comité ou non, peut en apprendre ?
+
+### Modèle opérationnel du GLC
+
+Dans ses premiers mois, le GLC opérait de manière erratique, menant parfois plusieurs initiatives qui étaient en désaccord les unes avec les autres et qui avaient besoin d'une vision plus cohérente. C'était simplement un groupe de degens avec une grande quantité de GHO dans un multisig **qui sprayait et priait**. Le summum a été atteint quand des pots-de-vin ont été alloués à un pool dont la forme de liquidité était préjudiciable aux efforts de repegging, qui, heureusement pour le Comité, s'est retrouvé hors range avant que les émissions ne commencent, permettant sa terminaison prompte : un net burn de GHO.
+
+J'ai finalement été élu chef du comité et [ai assumé une dictature temporaire et basée sur des objectifs](https://x.com/TokenBrice/status/1719328410479059227?s=20). Cela a permis au comité d'arrêter d'allouer des ressources sur un soutien de liquidité qui faisait un disservice à la cause du repegging de GHO et **de concentrer l'énergie, les ressources et les efforts là où cela comptait vraiment.**
+
+Pourtant, l'histoire a aussi soulevé des sourcils et attiré l'attention des médias ([CoinDesk](https://www.coindesk.com/business/2023/11/28/aaves-gho-stablecoin-nears-elusive-dollar-peg/), [DeFiant](https://thedefiant.io/benevolent-dictator-succeeds-in-bringing-aave-s-stablecoin-gho-near-parity-with-usd), etc.) car elle soulignait l'échec de la gouvernance par elle-même – du moins du point de vue desdits médias. **Pendant mes deux mandats, deux objectifs ont été fixés : le premier a été manqué de quelques points de base (après une augmentation de ~200 bps), et le second a été manqué de quelques jours**. Mes objectifs étaient ambitieux, surtout en considérant qu'ils reposaient autant sur des livrables externes au comité de liquidité (gestion des taux d'intérêt, staking single-sided pour GHO, etc.). Après deux mandats, j'ai laissé tomber le rôle de leader début janvier.
+
+⇒ Quand la gouvernance élit un comité pour gérer une tâche spécifique, elle reconnaît son inefficacité sur la question. **De tels comités ne devraient pas hésiter à nommer un leadership, car la propriété et la responsabilité peuvent être très saines,** surtout dans les gouvernances « décentralisées » où les éminences sont souvent grises, et donc la propriété et la responsabilité souvent manquantes.
+
+### Champ d'application du GLC
+
+Le GLC a hérité de plusieurs « dettes de gouvernance » : des décisions prises par la gouvernance qui s'avèrent absolument indéfendables dans l'état actuel des choses et des opérations. Il a même échoué à trouver la volonté de les contester et a plutôt décidé de les appliquer malgré l'avertissement de quelques membres du comité.
+
+Exemple : Mobiliser le CRV du comité en tant que sdCRV, une option sous-optimale au niveau technique, car elle nécessite un vote hebdomadaire du comité (pas de report de vote), a une faible liquidité, et prive le comité de son pouvoir de vote de gauge CRV dû sauf s'il possède veSDT / bénéficie d'une délégation de boost veSDT, tout cela dans un beau désordre éthique, car cela renforce les liens avec un protocole/équipe qui opère avec de nombreuses pratiques questionable et plusieurs membres du comité sont détenteurs de veSDT et proches de ladite équipe.
+
+{{< notice note >}}
+⇒ Le champ d'application de tout comité nommé doit être clairement défini – et le comité devrait être capable et disposé à contester les décisions précédemment prises par la gouvernance sur son domaine d'expertise.
+{{< /notice >}}
+
+### Ce que signifie « professionnalisme » en novlangue DeFi
+
+Les participants à des groupes comme le GHO Liquidity Committee sont censés être des « professionnels » — vous, chers lecteurs, et moi comprendrions par là : maîtres de leur sujet, précis, toujours essayant de servir le but du comité, et disponibles pour leur mission.
+
+Mais nous sommes mal placés, car en novlangue DeFi, « professionnalisme » a un sens entièrement différent ; c'est en fait l'opposé, car les profils « professionnels » DeFi tendent à :
+
+* Ne pas faire de vagues, et éviter tout ce qui est perçu comme « politique », même si cela signifie associer avec des escrocs : vous ne pouvez pas mettre des partenaires commerciaux dans une position difficile.
+* Faire taire les vérités difficiles à avaler mais qui seraient d'intérêt public pour permettre à la communauté d'apprendre des erreurs passées. Par exemple, **l'échec des développeurs de GHO à anticiper le depeg n'est jamais discuté**. Cependant, il avait été attendu par beaucoup – moi inclus — jusqu'à un an avant le lancement de GHO. Le modèle de taux d'intérêt et l'absence d'une option de staking single-sided pour GHO au lancement étaient tous deux des manques évidents que tout développeur de stablecoin compétent aurait dû anticiper et résoudre **avant le lancement**.
+* Utiliser des structures comme le GLC pour promouvoir le protocole dans lequel ils ont des intérêts vested par tous les moyens possibles, même si cela signifie arriver à des situations qui, si décrites honnêtement, qualifieraient de conflits d'intérêts.
+* Démontrer, par leurs initiatives onchain et la communication qu'ils partagent dans des groupes privés, une compréhension approximative, sinon manquante, du sujet de leur expertise.
+
+{{< notice note >}}
+⇒ Les participants à la gouvernance devraient apprendre à mieux placer leur confiance. Grâce à leurs plateformes existantes, les figures les plus visibles publiquement sont généralement sélectionnées quand les comités sont élus.
+{{< /notice >}}
+
+Ma présence dans ce comité était une anomalie qui a émergé par nécessité, car la gouvernance savait qu'une compréhension profonde de la modélisation de liquidité, surtout Maverick, était nécessaire pour donner au GLC les meilleures chances de succès. De nombreux experts réels traînant autour des forums de gouvernance et des Discords restent impuissants malgré leurs connaissances et bonnes intentions simplement parce qu'ils ne sont pas des figures bien connues en DeFi.
+
+### L'essor des politiciens DeFi et ses conséquences
+
+La gouvernance est un théâtre. Quiconque impliqué en DeFi le sait, mais même moi j'ai été surpris de réaliser l'étendue de la scénarisation des interactions de gouvernance. Tout comme en politique IRL, où nous avons des politiciens professionnels dépourvus d'expertise sur les sujets qu'ils gèrent, nous observons le même phénomène en DeFi, où une caste de politiciens assume une responsabilité croissante sur diverses DAOs.
+
+**De tels profils se spécialisent dans les opérations liées à la gouvernance et opèrent exactement comme les spécialistes PR IRL : leur soin principal est sur la perception publique et comment la manipuler pour atteindre leur but** (généralement obtenir l'allocation d'un budget important de la DAO à leur structure de gouvernance). La discussion de gouvernance ne se passe pas publiquement sur le forum — le forum n'est qu'une scène. Les discussions réelles se passent en coulisses : dans des appels, des réunions IRL, et des DMs. Les discussions sur le forum sont évitées autant que possible, surtout si elles sont anticipées comme controversées. Le forum est simplement là pour enregistrer des matters précédemment et privément discutés : regardez les conversations sur la plupart des propositions : elles paraissent si fausses que, à ce stade, on pourrait suspecter que des bots parlent entre eux, ce qui me rappelle une fois de plus la politique IRL. Cela m'est arrivé plusieurs fois qu'un tel profil me contacte alors que je tapais une réponse à leur post de gouvernance, essayant d'éviter toute forme de discours public :
+
+
+
+{{< notice note >}}
+⇒ Les politiciens DeFi confirmés (= ceux qui gagnent leur argent principalement/seulement via des activités liées à la gouvernance) devraient simplement être interdits de participer à toute structure ayant même un pouvoir distant – car ils sont le fléau de la décentralisation, le diable en Prada de la DeFi. La professionnalisation de la gouvernance est synonyme de sa capture et donc de sa centralisation.
+{{< /notice >}}
+
+
+## Mots de la fin
+
+Comme [Hayden le dit](https://x.com/haydenzadams/status/1710510768469237827?s=20), **la gouvernance se trouve au bas de la liste des tiers en termes de décentralisation et devrait donc être une solution de dernier recours.** Non seulement elle est inefficace, mais elle est aussi simplement trop prone à être manipulée, et la probabilité que cela arrive augmente avec le pouvoir et les ressources que la gouvernance gère. **Une fois qu'une gouvernance donnée a suffisamment grandi, sa corruption est simplement inévitable**, du moins sous le modèle de gouvernance plutocratique dominant actuel : 1 token = 1 vote, bonjour l'âge de pierre de la gouvernance où nous semblons être coincés depuis cinq ans.
+
+Pour conclure, permettez-moi une dernière analogie avec la politique IRL puisque nous avons établi que des acteurs similaires participent à la gouvernance DeFi. Les professionnels de la gouvernance adorent rejeter des idées parce qu'ils les jugent « trop politiques ». Cela leur permet d'apparaître comme des figures raisonnables, non alignées. Pourtant, **le non-alignement n'existe pas : chaque décision est politique**. Ceux qui disent le contraire tendent généralement à être positionnés à l'extrême-centre du spectre : un alignement maximaliste brutal du profit enveloppé dans un costume de neutralité douce, aka l'équivalent DeFi d'un Emmanuel Macron.
+
+En ce qui concerne les comités nommés par la gouvernance, il est peu probable que je participe à un autre après celui-ci – sauf si son champ d'application est clairement défini et qu'il est donné les moyens de contester les décisions sous-optimales de la gouvernance.
\ No newline at end of file
diff --git a/content/post/2024/farewell-glc.md b/content/post/2024/farewell-glc.md
new file mode 100644
index 00000000..7ee1fcb2
--- /dev/null
+++ b/content/post/2024/farewell-glc.md
@@ -0,0 +1,116 @@
+---
+title: "Farewell to the GHO Liquidity Committee and reflections on the rise of DeFi newspeak"
+description: "I've resigned from the GHO Liquidity Committee - this post explains why and reflect on the core challenges observed in DeFi's governance and committees"
+date: '2024-02-08T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Liquidity, GHO, GHO Liquidity Committee]
+url: farewell-glc
+difficulty: "intermediate"
+---
+
+I’ve resigned from the GHO Liquidity Committee and would like, in this blog post, to share more context on its adventures and the learning we can draw from it.
+
+* [Onchain message from tokenbrice.eth](https://etherscan.io/verifySig/35543)
+* [Signer removal transaction](https://etherscan.io/tx/0x39760c8cd33beba102cbcb6a3c50489a24b1a50d8290de7c42c09845cf814dba)
+
+For those whose first reaction will be “ain’t ready all of that,” here is a recap of the main shortcoming I see in the committee that led to my decision:
+
+1. The committee's operating model is inefficient and prevents a coherent vision from emerging and being delivered.
+2. The committee's scope of responsibilities is unclear, leading to a passive attitude (towards governance mishaps) assumed by most members.
+3. The committee mainly comprises governance professionals who lack any serious expertise in the topic at play – liquidity management. It results in inefficient operations, conflicts of interest because of their numerous other commitments, and subpar use of the Committee’s resources.
+
+Governance is always a challenge. Indeed, it can seem insane to give power to random people on the internet, and it often is. There is a built-in democratic assumption in governance operations – although most governances are purely plutocratic – that severely hinders any serious structuration that would enable delivering upon commonly agreed goals. The GHO Liquidity Committee was appointed by the Aave governance precisely because it recognized – in a flash of lucidity – its incompetence and ineptitude in directional liquidity management.
+
+Yet, I’ll tell you what’s even crazier: giving power to people that the crowds perceive as “experts” on a topic. It’s all a show: the most recognized and mediatic expert of a given field is never the one actually the most informed on the topic. I, for one, would know quite a bit on the matter, with my own field of specialization — liquidity management, shaping, and incentivization — a topic prone to public perception manipulation more than any other because of the financial stakes inherently associated with it.
+
+
+## The case of the CRV Wars
+
+Let’s illustrate: regarding liquidity, the word on the street is that Curve is the best model, and all pros and experts use Curve, right? **It’s so good that over the last round (62), projects are spending $1 to receive $0.7 of incentives to their pools**: an instant donation of 30% of the amount they spend on bribes to veCRV/vlCVX holders. It means that if projects which bribed would have allocated the same amount to direct liquidity mining instead, they would have delivered 30% more $ to their LPs and thus attracted more liquidity for the same cost, all of which without assuming the price risk associated with CRV fluctuations for a week.
+
+
+
+So what’s happening there? Quite a few things, and it’s not the main course on today’s menu, just the appetizer, so I’ll go over this quickly:
+
+1. **Most projects have no one internally competent with liquidity**, so they often do random wastes like these. Many prominent DeFi projects recognized for the liquidity games are big spenders but not exactly savvy.
+2. **The Curve Wars have been a meme for a while**: there have been no genuine new entrants in these wars for ages – simply because it’s not worth it financially for most players, especially those without ties to the Curve ecosystem. Moreover, the liquidity structures available on Curve (stableswap and V2) are suboptimal compared to Uniswap or Maverick for many very common types of DeFi tokens – LSDs, LRTs, loosely pegged stablecoins, and liquid wrappers. You can confidently mark any protocol outputting a token of this type building liquidity primarily on Curve as inapt in liquidity management.
+3. What you are left with are **“insider protocols,”** teams building on top of the Curve ecosystem who usually own sizeable veCRV/vlCVX positions, allowing them to recoup a large share of their bribes (1. Own veCRV/vlCVX ⇒ 2. Post a bribe ⇒ 3. Vote on the pool you just bribed ⇒ 4. Collect and repeat next round). This tactic manipulates public perception into thinking that real money is being spent on these Curve wars. Some of these now insiders are originally external protocols, such as Inverse or Alchemix, which decided to kiss the llama ring for the better and the worse.
+
+Don’t take my word for it; simply look at the top spenders: Frax, Convex, Alchemix, CLever (Aladin), Prisma, Conic, Inverse, etc. **To make it easy to visualize, here are the top spenders of the last round, ranked by amount spent, with the insider protocols highlighted in red**:
+
+
+
+
+
+Enough with Curve, llamas already hate me; I just wanted to highlight the example of Curve, “the king of liquidity,” being a poorly efficient venue to build and sustain liquidity. Curve, “maker or breaker of stablecoins,” as the DEX with arguably subpar liquidity structures for most stablecoin pools: **Newspeak arrived in DeFi, and public perception/words used are often entirely at odds with the onchain observable reality**. Sadly, a similar pattern has been observed with the GHO Liquidity Committee, today's topic, so let’s get to it.
+
+
+## The case of the GHO Liquidity Committee
+
+**The GHO Liquidity Committee is a prime example of expertise misplacement**, as it was composed of an unhealthy mix of professionals “DeFi politicians” (more on this below), people with low expertise and vested interest in a given DEX, and people close to the Aave’s DAO / ex Aave team but devoid of any expertise on the topic of liquidity.
+
+It led to a waste of resources, baseless struggles, and heavily misinformed decisions. At the end of the day, the **GLC is like a big bag of cash everyone was trying to pull from to direct to protocol they have an interest in**.
+
+So let’s dive in: what were its limitations, and what anyone interested in governance, whether committee-based or not, can learn from it?
+
+
+### Operating model of the GLC
+
+In its first months, the GLC operated erratically, sometimes leading several initiatives that were at odds with each other and needed a more coherent vision. It was simply a bunch of degens with a large amount of GHO in a multisig **spraying and praying**. The pinnacle was reached when bribes were allocated to a pool whose liquidity shape was detrimental to the repegging efforts, which, luckily for the Committee, ended out of range before the emissions began, enabling its prompt termination: a net burn of GHO.
+
+I was eventually elected head of the committee and [assumed a temporary and objective-based dictatorship](https://x.com/TokenBrice/status/1719328410479059227?s=20). It enabled the committee to stop allocating resources on liquidity support that were doing a disservice to the cause of repegging GHO and **focus the energy, resources, and efforts where it actually mattered.**
+
+Yet the story also raised eyebrows and attracted media attention ([CoinDesk](https://www.coindesk.com/business/2023/11/28/aaves-gho-stablecoin-nears-elusive-dollar-peg/), [DeFiant](https://thedefiant.io/benevolent-dictator-succeeds-in-bringing-aave-s-stablecoin-gho-near-parity-with-usd), etc.) as it highlighted the failure of governance by itself – at least from the perspective of said media. **During my two mandates, two targets were set: the first was missed by a few basis points (after an increase of ~200 bps), and the second was missed by a few days**. My targets were ambitious, especially considering that they relied as much on deliverables external to the liquidity committee (interest rate management, single-sided staking for GHO, etc.). After two terms, I let go of the leading role early in January.
+
+⇒ When governance elects a committee to handle a specific task, it acknowledges its inefficiency on the matter. **Such committees should not shy away from appointing a leadership, as ownership and responsibility can be very healthy,** especially in “decentralized” governances where the eminences are often gray, and thus ownership and responsibility often lacking.
+
+
+### Scope of the GLC
+
+The GLC inherited several “governance debts”: decisions made by the governance that prove absolutely indefensible in the current state of affairs and operations. It failed even to find the will to challenge them and instead decided to enforce them despite the warning of a couple of committee members.
+
+Example: Mobilizing the CRV of the committee as sdCRV, a subpar option at the technical level, as it requires weekly voting of the committee (no vote carry-over), has low liquidity, and strips the committee of its due CRV gauge voting power unless it owns veSDT / benefits from a veSDT boost delegation, all of that in a lovely ethical mess, as it strengthens ties with a protocol/team that operates with many questionable practices and several committee members are veSDT holders and in proximity with the said team.
+
+{{< notice note >}}
+⇒ The scope of any appointed committee must be clearly defined – and the committee should be able and willing to challenge decisions previously enacted by governance on its matter of expertise.
+{{< /notice >}}
+
+### What “professionalism” means in DeFi newspeak
+
+Participants in groups such as the GHO Liquidity Committee are expected to be “professionals” — you, dear readers, and I would understand by that: master of their topic, accurate, always trying to serve the committee's purpose, and available for their mission.
+
+But we’re misplaced, as in DeFi newspeak, “professionalism” has an entirely different meaning; it’s actually the opposite, as DeFi “professional” profiles tend to:
+
+
+* Make no waves, and avoid anything perceived as “political”, even if that means associating with scammers: you cannot put business partners in a tough spot.
+* Silence truths that are hard to swallow but would be of public interest to enable the community to learn from previous mistakes. For instance, **the failure of the developers of GHO to anticipate the depeg is never discussed**. However, it had been expected by many – myself included — up to one year before GHO’s launch. The interest rate model and the absence of a GHO single staking option at the launch were both apparent lacks that any competent stablecoin developer should have anticipated and resolved **before launch**.
+* Harness structures such as the GLC to promote the protocol they have vested interests in by all means possible, even if that means arriving at situations that, if described honestly, would qualify as conflicts of interest.
+* Demonstrate, by their onchain initiatives and the communication they share in private groups, an approximate, if not missing, understanding of the topic of their expertise.
+
+{{< notice note >}}
+⇒ Participants in governance should learn how to place their trust better. Thanks to their existing platforms, the most publicly visible figures are usually selected when committees are elected.
+{{< /notice >}}
+
+My presence in this committee was an oddity that emerged out of necessity, as governance knew that a deep understanding of liquidity shaping, especially Maverick, was needed to give the GLC the best chances of success. Many actual experts hanging around governance forums and Discords remain powerless despite their knowledge and good intentions simply because they are not well-known figures in DeFi.
+
+
+### The rise of DeFi politicians and its consequences
+
+Governance is a theater. Anyone involved in DeFi knows that, but even myself was surprised to realize the extent of the scenarization of governance interactions. Just like IRL politics, where we have professional politicians devoid of expertise about the topics they are handling, we’re observing the same phenomenon in DeFi, where a caste of politicians is assuming an increasing responsibility over various DAOs.
+
+**Such profiles specialize in governance-related operations and operate exactly like the IRL PR specialists: their primary care is about public perception and how to manipulate it to achieve their purpose** (usually obtaining the allocation of a sizeable budget from the DAO to their governance structure). Governance discussion is not happening publicly on the forum — the forum is just a stage. The actual discussions are happening backstage: in calls, IRL meetings, and DMs. Discussions on the forum are avoided as much as possible, especially if they are anticipated to be controversial. The forum is simply here to record previously and privately discussed matters: look at the conversations on most proposals: they look so fake that, at this point, one could suspect bots are talking to one another, which once again reminds me of IRL politics. It happened to me several times that such a profile contacted me as I was typing an answer to their governance post, trying to avoid any form of public discourse:
+
+
+
+{{< notice note >}}
+⇒ Confirmed DeFi politicians (= those who earn their money mostly/only through governance-related activities) should simply be banned from participating in any structure having even a remote power – as they are the bane of decentralization, the devil in Prada of DeFi. The professionalization of governance is synonymous with its capture and thus centralization.
+{{< /notice >}}
+
+
+## Parting Words
+
+As [Hayden puts it](https://x.com/haydenzadams/status/1710510768469237827?s=20), **governance stands at the bottom of the tier list in terms of decentralization and thus should be a solution of last resort.** Not only is it inefficient, but it’s also simply too prone to be manipulated, and the probability of it happening increases with the power and resources the governance manages. **Once a given governance has grown enough, its corruption is simply unavoidable**, at least under the current dominant plutocratic governance model: 1 token = 1 vote, hello stone age of governance we’ve been seemingly stuck at for five years.
+
+To wrap this up, allow me one last analogy with IRL politics since we’ve established that similar actors participate in DeFi’s governance. Governance professionals love to dismiss ideas because they deem them “too political.” It enables them to appear as reasonable, non-aligned figures. Yet, **non-alignment does not exist: every decision is political**. Those who say otherwise usually tend to be positioned at the “extreme-center” end of the spectrum: a brutal profit maximalist alignment wrapped in a costume of gentle neutrality, aka the DeFi equivalent of an Emmanuel Macron.
+
+When it comes to committees appointed by governance, I am unlikely to participate in any other after this one – unless its scope is clearly defined and it's given the means to challenge governance's suboptimal decisions.
diff --git a/content/post/2024/lending-protocol-renaissance.fr.md b/content/post/2024/lending-protocol-renaissance.fr.md
new file mode 100644
index 00000000..de64067a
--- /dev/null
+++ b/content/post/2024/lending-protocol-renaissance.fr.md
@@ -0,0 +1,283 @@
+---
+title: "Est-ce une Renaissance du Lending ?"
+description: "De nouveaux modèles sont explorés à la fois pour les protocoles CDP et les marchés monétaires, et certains protocoles fusionnent même les deux en un seul : est-ce une renaissance des protocoles de prêt ?"
+date: '2024-07-01T01:13:50.191Z'
+categories: [Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Money Markets, Liquity, Tapioca, Dyad, BOLD, LUSD, LQTY, Aave, Morpho, Interest Rate]
+url: lending-protocol-renaissance
+image: img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.png
+difficulty: "intermediate"
+---
+
+Au cours des derniers mois, nous avons vu une avalanche de protocoles de prêt novateurs et excitants arriver sur le marché, tels que Morpho, DYAD, Fluid ou Tapioca ; encore plus sont attendus dans les mois à venir, comme Liquity V2 (Bold) ou Euler V2. Tous sont innovants, dans l'arène, essayant des choses au point que je me demande si nous ne vivons pas une renaissance des protocoles de prêt après quelques années à ressasser les mêmes concepts.
+
+Ainsi, dans cet article, j'aimerais vous faire un tour des idées intéressantes que j'ai vues être explorées — nous passerons en revue certains des protocoles mentionnés ci-dessus et, pour chacun, nous nous concentrerons sur la compréhension de leur innovation principale.
+
+## Protocoles de Position de Dette Collatéralisée (CDP) vs Marché Monétaire
+
+Plongeons-y, en commençant par un rappel sur les différences entre les protocoles CDP (ex : Maker ou Liquity) et les marchés monétaires (ex : Aave ou Morpho). Cela sera utile car nous discuterons des deux dans cet article et nous finirons même avec un projet fusionnant les deux modèles en un seul protocole.
+
+
+
+
+
+
+ CDP (ex : Liquity)
+
+ Marché Monétaire (ex : Aave)
+
+
+
+ Taux d'Intérêt pour l'Emprunteur
+
+ Prévisible, peut même être fixe ou frais d'initiation seulement
+
+ Volatile, entièrement dépendant de l'utilisation du pool
+
+
+
+ Collatéral Accepté
+
+ Options généralement limitées, ne peut pas mélanger les collatéraux
+
+ Collatéraux variés : une position donnée peut mélanger plusieurs collatéraux à la fois
+
+
+
+ Actifs qui Peuvent Être Empruntés
+
+ Seulement le stablecoin du protocole (DAI sur Maker, LUSD sur Liquity)
+
+ Divers – tout actif activé comme actif empruntable
+
+
+
+ Ré-hypothéque du Collatéral
+
+ Aucune
+
+ Les collatéraux sont déposés dans un pool et donc potentiellement re-prêtés à d'autres utilisateurs
+
+
+
+ Défi Principal du Protocole
+
+ Stabiliser le stablecoin produit & sécuriser suffisamment de liquidité sur celui-ci
+
+ Attirer suffisamment d'actifs empruntables (USDC, ETH) pour satisfaire la demande d'emprunt
+
+
+
+ Risque Principal du Protocole
+
+ Défaillance de l'oracle ⇒ valeur du collatéral non évaluée précisément ⇒ certains utilisateurs peuvent emprunter plus que la valeur de leur collatéral ⇒ spirale de mort du stablecoin
+
+ Défaillance de l'oracle ⇒ valeur du collatéral non évaluée précisément ⇒ certains utilisateurs peuvent emprunter plus que la valeur de leur collatéral ⇒ tous les actifs empruntables sont drainés
+
+
+
+
+
+Les protocoles CDP se distinguent par leur capacité à faciliter des coûts d'emprunt moins chers, stimulant ainsi plus de demande du côté des emprunteurs, un exploit difficile à réaliser. Cela est dû à la caractéristique unique des CDP, où l'utilisateur contracte directement une dette contre le protocole, éliminant le besoin de sourcer et de payer un déposant de stablecoin externe exigeant un taux d'intérêt compétitif, comme c'est le cas avec un marché monétaire comme Aave. Le défi principal avec les CDP réside dans la stabilité et la liquidité du stablecoin produit.
+
+D'un autre côté, les marchés monétaires tendent à être plus flexibles. Grâce à leur structure, ils permettent aux utilisateurs de mélanger et d'assortir les collatéraux et peuvent rapidement intégrer de nouveaux. Pourtant, ils tendent à nécessiter plus de maintenance, car les paramètres des collatéraux doivent être constamment ajustés pour refléter les réalités du marché. Cela crée une charge assez importante pour la gouvernance, comme vu sur Aave, où [plus de mille propositions](https://boardroom.io/aave/overview) ont déjà été traitées en quatre ans et demi : environ 22 par mois. Ça fonctionne, mais ça semble sur-ingénierie ; il doit sûrement y avoir une meilleure façon.
+
+## DYAD : Flirter avec le tabou du collatéral endogène
+
+Dyad est un protocole CDP qui implémente plusieurs idées novatrices, comme délivrer un emprunt gratuit à ses utilisateurs, qui doivent posséder un NFT pour participer (Note). Il sert également de couche de coordination de base du protocole. Je vous invite à [lire la documentation](https://dyad.gitbook.io/dyad-docs-v2/) pour vous familiariser davantage avec lui. Concentrons-nous aujourd'hui sur l'approche novatrice de Dyad pour gérer un sujet clé pour les protocoles CDP : la sur-collatéralisation.
+
+{{< notice info >}} Pour les stablecoins, on parle de collatéral endogène vs exogène. Pour le savoir rapidement, posez-vous cette question : si le stablecoin échoue, le collatéral échoue-t-il aussi ? Si oui, votre collatéral est endogène (ex : mes bien-aimés & défunts [stablecoins basés sur seigniorage](https://tokenbrice.xyz/posts/2021/seigniorage-basis-vs-esd/)) ; si non, il est exogène (ex : ETH pour Liquity). {{< /notice >}}
+
+Les stablecoins utilisant un collatéral endogène ou aucun collatéral peuvent scaler rapidement, comme vu avec ESD, Basis Cash, ou Terra/UST. Cependant, ils peuvent et généralement explosent encore plus vite. Pour cette raison, utiliser un collatéral endogène est considéré comme une pratique risquée – digne d'un Red Flag / F instantané sur l'agence de notation de stablecoins [Bluechip](https://bluechip.org/).
+
+
+
+
+
+Ce sur quoi j'aimerais me concentrer aujourd'hui concernant Dyad est son token utilitaire, KEROSENE, qui est un mécanisme pour allouer le droit de mint contre le surplus de collatéral existant dans le système. Par défaut, le ratio de collatéralisation minimal du système est de 150 %. Cependant, les détenteurs de KEROSENE peuvent le déposer dans leurs Notes pour réduire leur ratio de collatéral exogène à 100 %.
+
+Ainsi, KEROSENE n'est pas techniquement un collatéral endogène mais un mécanisme pour pricer et permettre aux utilisateurs d'utiliser la sur-collatéralisation exogène du protocole. L'utilité de KEROSENE lui donne une « valeur déterministe » correspondant à son utilité lorsqu'il est déposé dans une Note. Puisque KEROSENE est principalement farmé en fournissant de la liquidité sur DYAD, cela pourrait entretenir un volant d'inertie intéressant.
+
+
+
+Lancé à la fin de l'année, le protocole a vu une croissance douce et régulière, bien que encore limitée. Le déploiement est progressif : les fonctionnalités de base sont live (Note, minting de DYAD, incitations LP, utilité KEROSENE), mais beaucoup plus arrive : sDYAD, momentum (un mécanisme pour mieux aligner les participants du protocole), un marché de prêt, etc. Ça vaut la peine de suivre pour tout amateur de stablecoin comme moi.
+
+## Liquity v2 – Le taux de base de la DeFi
+
+Le LUSD de Liquity reste l'un des stablecoins décentralisés les plus réussis sur le mainnet, donc quand la v2 a été annoncée, elle a attiré beaucoup d'attention. Après avoir recherché une approche novatrice utilisant un modèle de réserve, l'équipe a pivoté vers un protocole CDP, grandissant des leçons de la première itération. La v2 est attendue pour la fin de l'année.
+
+Aujourd'hui, je veux me concentrer sur un aspect en particulier, la gestion des taux d'intérêt.
+
+La gestion des taux d'intérêt est cruciale pour tous les protocoles de prêt, même les protocoles CDP. Le taux peut être facilement défini en fonction du taux d'utilisation du marché sur les marchés monétaires. Pour les protocoles CDP, répliquer une approche similaire est impossible, et d'autres voies doivent être explorées ; plusieurs l'ont été :
+
+* Défini par la gouvernance (ex : Maker / DAI) : bien que cette approche offre de la flexibilité, elle génère de l'incertitude pour les emprunteurs et des défis en gouvernance.
+* Algorithmique (ex : Liquity / LUSD) : pas de gouvernance est toujours mieux, quand possible ; cependant, cela ne vient pas sans inconvénients non plus. Dans le cas de Liquity, les frais d'initiation fixés se sont avérés inflexibles, ce qui a conduit le protocole à s'ajuster à un environnement de taux d'intérêt plus élevé avec des redemptions et, ainsi, par une baisse de l'offre globale de LUSD.
+
+Avec la v2, le protocole passe à un modèle de taux d'intérêt (plus de frais d'initiation), ce qui devrait déjà fournir plus d'agilité. Ce qui est plus intéressant est [comment ce taux d'intérêt est décidé : directement par les utilisateurs](https://www.liquity.org/blog/liquity-v2-why-user-set-interest-rates). L'équipe introduit un autre jeu au niveau du protocole avec des paramètres simples : les redemptions seront traitées en fonction du taux d'intérêt payé par l'utilisateur, du plus bas au plus haut.
+
+Ainsi, les utilisateurs qui choisissent un taux d'intérêt très bas se mettent en première ligne pour les redemptions, tandis que ceux qui choisissent le plus haut seront protégés au maximum. Pour faciliter la participation de tout utilisateur, la délégation de taux d'intérêt sera possible, avec divers délégués délivrant différents mandats attendus au lancement.
+
+Cela permettra au protocole de s'ajuster rapidement à tous types d'environnements de marché, des taux bas aux hauts, évitant les longues phases de redemption comme vues en v1 tout en restant immuable et en délivrant une plus grande prévisibilité aux emprunteurs.
+
+
+
+Au fur et à mesure que le protocole gagne en adoption, le taux d'intérêt moyen observé pourrait même informer au-delà de Liquity v2 lui-même, car il correspondra à un taux de base que les emprunteurs sont prêts à payer sur un protocole minimisant les risques et immuable. Les protocoles plus risqués devront offrir un taux d'intérêt plus bas pour attirer les emprunteurs. La v2 regroupe beaucoup d'autres innovations intéressantes. Pour vous mettre à jour, je recommande de vérifier [le thread des threads de Bojan](https://x.com/bjnpck/status/1772227278606389496).
+
+## Tapioca – Convergence CDP x Marché Monétaire
+
+Tapioca a été lancé il y a quelques semaines seulement et est encore en cours de déploiement progressif, car certains composants du protocole doivent encore être mis en live. Dans la mise en lumière d'aujourd'hui, j'aimerais me concentrer sur deux éléments principaux :
+
+1. Convergence des modèles CDP et Marché Monétaire avec Tapioca
+2. Le modèle innovant de verrouillage de token utilisé
+
+Plongeons-y. Pour plus de contexte sur Tapioca, comme souvent, [la documentation officielle](https://docs.tapioca.xyz/tapioca) est une excellente source.
+
+### Convergence de CDP et Marché Monétaire
+
+Les protocoles CDP font face à un défi : ils doivent délivrer un rendement compétitif sur le stablecoin qu'ils produisent pour stimuler la demande. Liquity v2 redirigera la plupart des frais collectés, grâce au taux d'intérêt, aux stakers BOLD, Maker a le DSR / sDAI, etc.
+
+Pourtant, une autre façon d'assurer que les minteurs de stablecoin peuvent accéder à des rendements compétitifs est de construire un marché monétaire sur le stablecoin : c'est précisément ce que fait Tapioca. En effet, Tapioca est essentiellement un double protocole.
+
+D'abord, il y a le CDP—marqué « Big Bang », où les utilisateurs peuvent mint USDO contre un collatéral sélectionné : tokens gas et LSDs. La sélection de collatéral est volontairement restrictive, car les tokens acceptés ici affectent directement le backing d'USDO. Les emprunteurs paient un taux d'intérêt et, en fonction de la situation de peg d'USDO, potentiellement un frais d'initiation jusqu'à 1 % (si underpeg). Cela permet aux utilisateurs de loop-leverage leur exposition ETH / LSD ou simplement d'utiliser leur ETH / LSD comme collatéral pour emprunter de l'USDO.
+
+Ensuite, il y a le marché monétaire — marqué « Singularity », qui fournit des marchés isolés où les utilisateurs peuvent fournir divers types de collatéraux pour emprunter USDO, fourni par les emprunteurs du côté CDP. Cela crée un rendement natif pour les détenteurs d'USDO qui est décorrélé du côté CDP, ainsi qu'une approche élégante pour gérer tous types de collatéraux :
+
+* Majors résistants à la censure ⇒ collatéral CDP = backing USDO
+* Dérivés / tokens plus risqués ⇒ Singularity = rendement aux détenteurs USDO sans compromettre le backing d'USDO.
+
+Cette structure duale permet à Tapioca d'héberger divers collatéraux, avec des mesures de mitigation de risque appropriées pour chacun. Puisque singularity utilise des marchés isolés, le risque pour chaque collatéral intégré là est isolé, et il peut être géré davantage avec sa paramétrisation (LTV, taux d'intérêt, et bonus de liquidation) et des limites.
+
+### twAML : un modèle innovant de verrouillage de token
+
+Après avoir suivi et commenté les évolutions des DEX, commençant par veCRV et [les améliorations observées avec Velodrome (veNFT)](https://tokenbrice.xyz/crv-vs-velo/), j'anticipais de voir des modèles de verrouillage de token utilisés sur des protocoles de prêt aussi. Cela a été fait, mais seulement de manière primitive, avec des émissions basées sur gauge & verrouillage de token de gouvernance pour les allouer, comme vu sur Prisma.
+
+Tapioca délivre enfin avec une approche excitante utilisant un nouveau type de verrouillage de token (twAML), à la fois pour leur token de gouvernance TAP et pour les fournisseurs du marché monétaire, pour sécuriser le côté supply et ainsi stimuler plus de demande d'emprunt. Ainsi, après que Velodrome ait amélioré le modèle veCRV et délivré la première amélioration crédible sur veCRV, nous pourrions voir sa troisième itération se concrétiser. Voici les points forts :
+
+
+
+
+ Aperçu Principal des Modèles de Verrouillage
+
+
+
+ Nom
+
+ veCRV
+
+ veNFT (ex : veVELO)
+
+ twAML (ex : twTAP)
+
+
+
+ Signification
+
+ Vote Escrowed
+
+ Vote Escrowed NFT
+
+ Time Weighted Average Magnitude Lock
+
+
+
+ Position Verrouillée Représentée par
+
+ Aucune
+
+ NFT
+
+ NFT
+
+
+
+ Position Verrouillée Transférable
+
+ Non
+
+ Oui
+
+ Oui
+
+
+
+ Ratio TKN <> veTKN
+
+ Uniquement dépendant de la durée de temps, un veTKN par TKN si verrouillage de 4 ans
+
+ même que veCRV
+
+ Dépend de twAML – la durée moyenne de verrouillage des autres verrouilleurs : si égal/supérieur, alors un veTKN par TKN
+
+
+
+ Décroissance veTKN <> TKN
+
+ Oui, linéaire dans le temps (ex, après 2 ans de verrouillage, seulement 0,5 veTKN par TKN)
+
+ même que veCRV
+
+ Pas de Décroissance
+
+
+
+ Revenus pour les Verrouilleurs
+
+
+
+
+Part pro-rata des frais collectés sur Curve
+
+Pots-de-vin potentiels
+
+Revenus de boost LP
+
+
+
+
+
+
+Rebase hebdomadaire ajouté au veNFT
+
+Frais de la pool votée
+
+Pots-de-vin potentiels
+
+
+
+
+
+
+Intérêts USDO Accumulés
+
+Parts de Profit de Liquidation
+
+Frais de Création USDO
+
+Frais de Mint Flash
+
+
+
+
+
+
+
+
+
+L'innovation principale réside dans la flexibilité et la couche supplémentaire de théorie des jeux que ce modèle implémente. Au lieu d'une correspondance linéaire veTKN à TKN, dépendant du temps verrouillé et maxant à quatre ans, comme avec veCRV et veAERO, twAML regarde la durée moyenne de verrouillage des autres verrouilleurs (pondérée par magnitude). En pratique, atteindre une correspondance 1:1 TKN<->veTKN ne nécessite plus un verrouillage de quatre ans mais simplement de verrouiller pour autant / plus longtemps que les verrouillages existants. Ainsi, le temps de verrouillage augmentera rapidement pendant la première époque, passant du maximum initial de 4 semaines jusqu'à ce qu'il trouve un point d'équilibre et potentiellement commence à décroître.
+
+
+
+Libéré pour la première fois avec un ajustement dynamique, le twAML a été rencontré avec une dégénérescence excessive et a rapidement dépassé les quatre ans. Ainsi, l'équipe est retournée au travail et a changé l'ajustement en basé sur époque. La nouvelle itération est attendue dans les semaines à venir, un autre développement à surveiller pour les amateurs de stablecoins et de tokens verrouillés.
+
+Tapioca est un protocole assez costaud, deux ans de travail. J'ai à peine effleuré la surface ici, car il y a beaucoup d'autres composants dignes de commentaire :
+
+* Il est nativement omnichain utilisant le standard de token fongible omnichain de Layer 0
+* Tapioca, comme Liquity, sera l'un des rares protocoles CDP à rediriger les frais générés par le minting de stablecoin vers ses détenteurs de token via le modèle twTAP.
+* Les récompenses pour les verrouilleurs USDO sont distribuées en oTAP, un token d'option connecté à la logique twAML.
+* Le protocole est keen sur l'accumulation de Liquidité Possédée par le Protocole, à la fois pour TAP et USDO, ce qui lui permettra de baisser ses coûts de maintenance de liquidité et potentiellement de le transformer en une entreprise profitable.
+
+Je voulais couvrir plus de protocoles, mais cet article est déjà costaud, donc je m'arrête là pour aujourd'hui. Il y a beaucoup de développements excitants pour les protocoles de prêt dignes de discussion, comme la croissance des marchés isolés avec des protocoles comme Morpho ou Silo. Tout cela et plus me font croire qu'après des années de domination d'Aave & Maker sur le paysage des protocoles de prêt, nous pourrions voir des challengers monter à une taille similaire, sinon les dépasser dans les années à venir.
+
+Je surveillerai, et vous devriez aussi.
+
+_Merci à Gray pour l'image de couverture._
\ No newline at end of file
diff --git a/content/post/2024/lending-protocol-renaissance.md b/content/post/2024/lending-protocol-renaissance.md
new file mode 100644
index 00000000..a8caf99c
--- /dev/null
+++ b/content/post/2024/lending-protocol-renaissance.md
@@ -0,0 +1,298 @@
+---
+title: "Is this a Lending Protocol Renaissance?"
+description: "New models are being explored both for CDP protocols and money markets, and some protocols are even merging the two into one: is this a lending protocol renaissance?"
+date: '2024-07-01T01:13:50.191Z'
+categories: [Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Stablecoins, Money Markets, Liquity, Tapioca, Dyad, BOLD, LUSD, LQTY, Aave, Morpho, Interest Rate]
+url: lending-protocol-renaissance
+image: img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.png
+difficulty: "intermediate"
+---
+
+In the last few months, we’ve seen a flurry of novel and exciting lending protocols come to market, such as Morpho, DYAD, Fluid, or Tapioca; even more are expected in the coming months, such as Liquity V2 (Bold) or Euler V2. All are innovative, in the arena, trying things to the point that I wonder if we’re not experiencing a lending protocol renaissance after a few years of rehashing the same concepts.
+
+Thus, in this article, I’d like to give you a tour of the interesting ideas I’ve seen being explored — we’ll go through some of the protocols mentioned above and, for each, focus on understanding their main innovation.
+
+
+## Collateralized Debt Position (CDP) protocols vs Money Market
+
+Let’s dive in, starting with a primer on the differences between CDP protocols (e.g., Maker or Liquity) and money markets (e.g., Aave or Morpho). It will come in handy as we will discuss both in this article and even finish with a project merging the two models into one protocol.
+
+
+
+
+
+
+ CDP (ex: Liquity)
+
+ Money Market (ex: Aave)
+
+
+
+ Borrower Interest Rate
+
+ Predictable, can even be fixed or initiation fee only
+
+ Volatile, entirely dependent on pool usage
+
+
+
+ Collateral accepted
+
+ Usually limited options, cannot mix collateral
+
+ Various collateral: a given position can mix several collaterals at once
+
+
+
+ Assets that can be borrowed
+
+ Only the protocol stablecoin (DAI on Marker, LUSD on Liquity)
+
+ Diverse – any asset enabled as a borrowable asset
+
+
+
+ Collateral re-hypothecation
+
+ None
+
+ Collateral are deposited in a pool and thus potentially re-lent to other users
+
+
+
+ Protocol core challenge
+
+ Stabilizing the stablecoin outputted & securing enough liquidity on it
+
+ Attracting sufficient borrowable assets (USDC, ETH) to fulfill borrowing demand
+
+
+
+ Protocol main risk
+
+ Oracle failure ⇒ collateral value not accurately evaluated ⇒ some users can borrow more than their collateral worth ⇒ stablecoin death spiral
+
+ Oracle failure ⇒ collateral value not accurately evaluated ⇒ some users can borrow more than their collateral worth ⇒ all borrowable assets are drained
+
+
+
+
+
+CDP protocols stand out for their ability to facilitate cheaper borrowing costs, thereby stimulating more borrowing-side demand, a challenging feat to achieve. This is due to the unique feature of CDPs, where the user directly contracts debt against the protocol, eliminating the need to source and pay an external stablecoin depositor demanding a competitive interest rate, as is the case with a money market like Aave. The primary challenge with CDPs lies in the stability and liquidity of the stablecoin that is produced.
+
+On the other hand, money markets tend to be more flexible. Thanks to their structure, they allow users to mix and match collateral and can quickly onboard new ones. Yet, they tend to require more maintenance, as collateral parameters must be constantly adjusted to reflect the realities of the market. This creates quite the load for governance, as seen on Aave, where [over a thousand proposals](https://boardroom.io/aave/overview) were already processed in four and a half years: approximately 22 per month. It works, but it seems overengineered; surely there must be a better way.
+
+
+## DYAD: Flirting with the endogenous collateral taboo
+
+Dyad is a CDP protocol that implements several novel ideas, such as delivering free borrowing to its users, who must own an NFT to partake (Note). It also serves as the protocol's base coordination layer. I invite you to [read the documentation](https://dyad.gitbook.io/dyad-docs-v2/) to become more familiar with it. Let’s zoom in on Dyad’s novel approach to handling a key topic for CDP protocols: overcollateralization.
+
+{{< notice info >}} For stablecoins, we talk about endogenous vs exogenous collateral. To quickly tell, ask yourself this question: if the stablecoin fails, does the collateral also fail? If yes, your collateral is endogenous (ex: my beloved & defunct [seigniorage-based stablecoins](https://tokenbrice.xyz/posts/2021/seigniorage-basis-vs-esd/)); if not, it’s exogenous (ex: ETH for Liquity). {{< /notice >}}
+
+Stablecoins harnessing endogenous or no collateral can scale quickly, as seen with ESD, Basis Cash, or Terra/UST. However, they can and usually do explode even faster. For this reason, harnessing endogenous collateral is considered a risky practice – worthy of an instant Red Flag / F on the stablecoin rating agency [Bluechip](https://bluechip.org/).
+
+
+
+
+
+What I would like to focus on today regarding Dyad is its utility token, KEROSENE, which is a mechanism for allocating the right to mint against existing surplus collateral in the system. By default, the system's minimal collateralization ratio is 150%. However, KEROSENE holders can deposit it into their Notes to reduce their exogenous collateral ratio to 100%.
+
+Thus, KEROSENE is not technically an endogenous collateral but a mechanism to price and enable users to harness the protocol's exogenous over-collateralization. KEROSENE’s utility gives it a “deterministic value” corresponding to its utility while deposited into a Note. Since KEROSENE is mostly farmed by supplying liquidity on DYAD, it could entertain an interesting flywheel.
+
+
+
+Launched at the end of the year, the protocol has seen gentle and steady growth, although still limited. The rollout is progressive: the base functionalities are live (Note, DYAD minting, LP incentives, KEROSENE utility), yet much more is coming: sDYAD, momentum (a mechanism to better align protocol participants), a lending market, etc. It’s worth following for any stablecoin enjoyer such as myself.
+
+
+## Liquity v2 – The base rate of DeFi
+
+Liquity’s LUSD remains one of the most successful genuinely decentralized stablecoins on the mainnet, so when v2 was announced, it gathered a lot of attention. After researching a novel approach harnessing a reserve model, the team pivoted back to a CDP protocol, growing from learning the first iteration. V2 is expected to be released by the end of the year.
+
+Today, I want to focus on one, in particular, on interest rate management.
+
+Interest-rate management is crucial for all lending protocols, even CDP protocols. The rate can be easily defined based on the market utilization rate in money markets. For CDP protocols, replicating a similar approach is impossible, and other venues must be explored; several were:
+
+
+
+* Governance-defined (ex: Maker / DAI): while this approach provides flexibility, it generates uncertainty for borrowers and challenges in governance.
+* Algorithmic (ex: Liquity / LUSD): no governance is always better, when possible; however, it doesn’t come without shortcomings either. In the case of Liquity, the set initiation fee proved inflexible, which led to the protocol adjusting to a higher interest rate environment with redemptions and, thus, through a lowering of the overall LUSD supply.
+
+With v2, the protocol switches to an interest rate model (no more initiation fee), which should already provide more agility. What’s more interesting is [how this interest rate is decided: directly by the users](https://www.liquity.org/blog/liquity-v2-why-user-set-interest-rates). The team introduces another protocol-level game with straightforward parameters: redemptions will be processed based on the interest rate paid by the user, from lowest to highest.
+
+Thus, users who choose a very low interest will put themselves first in line for redemptions, while those who pick the highest interest will be maximally protected. To make it easy for any user to partake, interest rate delegation will be possible, with various delegates delivering different mandates expected at launch.
+
+This will allow the protocol to rapidly adjust to all kinds of market environments, from low interest rates to high, avoiding the long redemption phases as seen in v1 while remaining immutable and delivering greater predictability to borrowers.
+
+
+
+As the protocol gains adoption, the average interest rate observed could even inform beyond Liquity v2 itself, as it will correspond to a base rate borrowers are willing to pay on a risk-minimized and immutable protocol. Riskier protocols will have to offer a lower interest rate to attract borrowers. The v2 packs many more interesting innovations. To get up to speed, I recommend checking out [Bojan’s thread of threads](https://x.com/bjnpck/status/1772227278606389496).
+
+
+## Tapioca – CDP x Money Market Convergence
+
+Tapioca was launched just a few weeks ago and is still being progressively released, as some protocol components still need to be made live. In today’s highlight, I’d like to focus on two main items:
+
+
+
+1. Convergence of the CDP and Money Market model with Tapioca
+2. The innovative token lock model harnessed
+
+Let’s dive right in. For more context about Tapioca, as often, [the official documentation](https://docs.tapioca.xyz/tapioca) is a great source.
+
+
+### Convergence of CDP and Money Market
+
+CDP protocols face a challenge: they must deliver competitive yield on the stablecoin they output to drive demand. Liquity v2 will redirect most of the fees collected, thanks to the interest rate, to BOLD stakers, Maker has the DSR / sDAI, etc.
+
+Yet, another way to ensure stablecoin minters can access competitive yields is to build a money market on top of the stablecoin: that’s precisely what Tapioca is doing. Indeed, Tapioca is essentially a double protocol.
+
+First, there is the CDP—branded “Big Bang,” where users can mint USDO against selected collateral: gas tokens and LSDs. The collateral selection is purposely restrictive, as tokens accepted here directly affect USDO backing. Borrowers pay an interest rate and, depending on USDO’s peg situation, potentially an initiation fee of up to 1% (if underpeg). It enables users to loop-leverage their ETH / LSD exposure or simply harness their ETH / LSD as collateral to borrow some USDO.
+
+Then, there is the money market — branded “Singularity,” which provides isolated markets where users can supply various types of collateral to borrow USDO, supplied by borrowers on the CDP side. This creates a native yield for USDO holders that is decorrelated from the CDP side, as well as offering an elegant approach to handle all types of collateral:
+
+
+
+* Censorship resistant majors ⇒ CDP collateral =backing USDO
+* Derivatives / more risky tokens ⇒ Singularity = yield to USDO holders without compromising USDO’s backing.
+
+This dual structure allows Tapioca to host various collateral, with appropriate risk-mitigation measures for each. Since singularity harnesses isolated markets, the risk for each collateral onboarded there is isolated, and it can be further managed with its parametrization (LTV, interest rate, and liquidation bonus) and limits.
+
+
+### twAML: an innovative token-locking model
+
+After following and commenting on the DEX evolutions, starting with veCRV and [the improvements we observed with Velodrome (veNFT)](https://tokenbrice.xyz/crv-vs-velo/), I anticipated seeing token lock models harnessed on lending protocols too. It has been, but only in a primitive manner, with gauge-based emissions & governance token locking to allocate them, such as seen on Prisma.
+
+Tapioca finally delivers with an exciting approach harnessing a new type of token locking (twAML), both for their governance token TAP and for the suppliers of the money market, to secure the supply side and thus drive more borrowing demand. Hence, after Velodrome improved the veCRV model and delivered the first credible improvement over veCRV, we might see its third iteration come to fruition. Here are the highlights:
+
+
+
+
+ Main Locking Model Overview
+
+
+
+ Name
+
+ veCRV
+
+ veNFT (ex: veVELO)
+
+ twAML (ex: twTAP)
+
+
+
+ Meaning
+
+ Vote Escrowed
+
+ Vote Escrowed NFT
+
+ Time Weighted Average Magnitude Lock
+
+
+
+ Locked Position Represented by
+
+ None
+
+ NFT
+
+ NFT
+
+
+
+ Locked Position Transferable
+
+ No
+
+ Yes
+
+ Yes
+
+
+
+ TKN <> veTKN ratio
+
+ Solely dependent on time duration, one veTKN per TKN if 4-year lock
+
+ same as veCRV
+
+ Depends on twAML – the average lock duration of other lockers: if equal/above, then one veTKN per TKN
+
+
+
+ veTKN <> TKN Decay
+
+ Yes, linear over time (ex, after 2 years of lock, only 0.5 veTKN per TKN)
+
+ same as veCRV
+
+ No Decay
+
+
+
+ Revenues for lockers
+
+
+
+
+Pro-rata share of the fees collected on Curve
+
+Potential bribes
+
+LP boost revenue
+
+
+
+
+
+
+Weekly rebase added to veNFT
+
+Fees from pool voted on
+
+Potential bribes
+
+
+
+
+
+
+USDO Interest Accrued
+
+Liquidation Profit Shares
+
+USDO Creation Fees
+
+Flash Mint Fee
+
+
+
+
+
+
+
+
+
+The main innovation lies in the flexibility and additional game theory layer this model implements. Instead of a linear veTKN to TKN correspondence, depending on the time locked and maxing at four years, like with veCRV and veAERO, twAML looks at other lockers' average lock time (magnitude weighted). In practice, achieving a 1:1 TKN<->veTKN correspondence no longer requires a four-year lock but simply to lock for as much / longer than the existing locks. Thus, the lock time will rapidly increase during the first epoch, ramping up from the 4-week maximum initially set up until it finds an equilibrium point and potentially starts to decay.
+
+
+
+Released for the first time with dynamic adjusting, the twAML was met with excessive degeneracy and quickly ramped up over four years. Thus, the team has returned to work and switched the adjustment to epoch-based. The new iteration is expected in the coming weeks, another development worth monitoring for stablecoin and lock tokens enjoyers.
+
+Tapioca is quite the beefy protocol, two years in the work. I’ve barely scratched the surface there, as there are many other components worthy of commentary:
+
+
+
+* It’s natively omnichain harnessing Layer 0's omnichain fungible token standard
+* Tapioca, like Liquity, will be one of the few CDP protocols redirecting fees generated from stablecoin minting to its token holders through the twTAP model.
+* Rewards for USDO lockers are distributed in oTAP, an option token connected to the twAML logic.
+* The protocol is keen on accruing Protocol-Owned Liquidity, both for TAP and USDO, which will enable it to lower its liquidity maintenance costs and potentially turn it into a profitable endeavor.
+
+I wanted to cover more protocols, but this article is already beefy, so I’ll keep it there for today. There are many exciting developments for lending protocols worth discussing, such as the growth of isolated markets with protocols like Morpho or Silo. All of this and more leads me to believe that after years of Aave & Maker dominating the lending protocol landscape, we might see some challengers rising to a similar size, if not overtaking them in the coming years.
+
+I’ll be watching, and so should you.
+
+_Thanks to Gray for the cover image._
+
diff --git a/content/post/2025/defi-ux-disaster.fr.md b/content/post/2025/defi-ux-disaster.fr.md
new file mode 100644
index 00000000..39336a73
--- /dev/null
+++ b/content/post/2025/defi-ux-disaster.fr.md
@@ -0,0 +1,135 @@
+---
+title: "Le cauchemard UX de la DeFi : comment la curation pourrait sauver l'innovation"
+description: "Où je révèle le sombre secret de la DeFi : la crise de la couche de curation - et ce que nous pouvons faire pour y remédier."
+date: '2025-03-08T01:13:50.191Z'
+categories: [Thesis]
+tags: [DeFi, Ethereum, Decentralized Finance, DeFi, Public Good, DeFiScan, BlueChip, L2Beat]
+url: defi-ux-disaster
+image: /img/2025/defi-ux-disaster/defi-ux-disaster-cover.png
+difficulty: "beginner"
+---
+
+Tout le monde se soucie des couches d'applications et d'infrastructures, et c'est mignon, mais qu'en est-il de la couche de curation ? Sans elle, les deux autres sont presque inutiles, car la complexité de l'espace est déjà bien trop grande pour que la plupart des gens puissent la gérer. Aujourd'hui, je veux plaider pour combler la plus grande lacune de DeFi, éclairée par mon expérience de plus de six ans à éduquer les gens à ce sujet, à onboarder à peu près tous ceux qui le souhaitaient dans mon entourage et en ligne, et à faire un suivi avec eux.
+
+## Définir les trois couches : infrastructure, application et curation
+
+Avant d'aller plus loin, nous devons nous aligner sur les termes clés – ces trois couches. Une image vaut mille mots, alors étudions un exemple réel et intéressant qui présente des éléments de chacune des trois couches :
+
+
+
+Il s'agit d'un flux assez dense impliquant :
+
+- Réseau principal Ethereum (infrastructure)
+- wBTC (application)
+- Bridge Mayan (infrastructure)
+- Aave sur Optimism (application)
+- USDC (application)
+- Jumper (application + curation), utilisant Li.FI (infrastructure).
+
+Faire cela « manuellement » représenterait une série d'opérations conséquentes :
+
+1. Approuver wBTC sur l'échange
+2. Échanger wBTC contre USDC sur mainnet
+3. Approuver USDC sur le bridge
+4. Bridge USDC du réseau principal vers Optimism
+5. Approuver USDC sur Aave/Optimism
+6. Déposer USDC sur Aave/Optimism
+
+Hourra ! Voilà pour la couche applicative qui opère sa magie ! Mais j'aimerais me concentrer sur une autre dimension encore plus critique ici - la dimension curation de Jumper :
+
+Jumper a automatiquement détecté les tokens que j'avais dans mon portefeuille dès que je me suis connecté, me permettant de trouver rapidement mes wBTC. Il a trouvé deux bridges potentiels et en a « recommandé » un en le plaçant en premier (parce qu'il a les meilleurs rendements). Il a trouvé les contrats des tokens respectifs et le protocole dont j'avais besoin. Il m'a également fourni une interface pour exécuter tout cela sans me soucier de savoir si j'étais sur le point d'envoyer mes tokens à un escroc — cela peut ne pas sembler grand-chose pour vous ou moi, mais pour un normie, c'est presque tout.
+
+Donc, à partir de cet exemple, prenons une minute pour fixer les définitions :
+
+1. **Couche d'infrastructure : la couche de base**, qui peut inclure les blockchains (Ethereum), mais aussi des éléments d'infrastructure sur lesquels on construit à la couche suivante (scénario Li.Fi>Jumper).
+2. **\>> Couche applicative : la couche pour l'utilisateur final**, où ils interagissent réellement avec DeFi – cela inclut tous les protocoles, frontends et outils (DeBank, DeFiSaver, Jumper, etc.) que vous connaissez.
+3. **\>>>> Couche de curation : la couche de « conseils »**, aidant les utilisateurs à naviguer parmi les options disponibles avec la couche applicative. Bien qu'elle existe indépendamment, ses informations et conseils peuvent et doivent être intégrés dans la couche applicative.
+
+Cette perspective est essentiellement une version simplifiée du [DeFi Stack de Schär](https://www.researchgate.net/figure/The-Decentralized-Finance-DeFi-Stack_fig4_340061422) où ses couches "Settlement" et "Asset" sont fusionnées dans ma couche Infrastructure, ses couches "Protocol"+"Application" dans ma couche Application, et sa couche "Aggregation" est élargie et rebaptisée dans ma couche Curation :
+
+
+
+Les champions de la couche Curation, en plus des outils largement utilisés avec un élément de curation/répertoire tels que [CoinGecko](https://coingecko.com/) (aidant les utilisateurs à valider les contrats de tokens et les URLs des frontends des protocoles), [Jumper](https://jumper.exchange/) ou [Debank](https://debank.com/), sont actuellement des sites web/frameworks fournissant des informations essentielles et vérifiables sur des verticales clés telles que [L2Beat](https://l2beat.com/) (évaluation de la décentralisation des L2), [DeFillama](https://defillama.com/) (données DeFi + répertoire), [Bluechip](https://bluechip.org/) (évaluations économiques des stablecoins), [DeFiSafety](https://www.defisafety.com/) (évaluation des pratiques de développement) ou [DeFiScan](https://defiscan.info/) (évaluation de la décentralisation des protocoles).
+
+La curation peut inclure diverses initiatives :
+
+- **Validation** : Aider les utilisateurs à vérifier la validité des informations, comme CoinGecko agissant comme une source de vérité pour les adresses de contrats ou DeFillama pour les URLs des frontends des protocoles, ou les divers avertissements de Rabby aidant les utilisateurs à réaliser s'ils interagissent avec une version spoofée d'un protocole donné.
+- **Agrégation** : La curation est fournie en plus de l'agrégation (« voici la meilleure route »). Cela inclut tous les DEX et agrégateurs de bridges (ParaSwap, CowSwap, Bungee, Jumper, etc.).
+- **Informations vérifiables** : Les fournisseurs de services d'information comme L2Beat, DeFiScan ou Bluechip permettent aux utilisateurs d'accéder à des informations contextualisées et vérifiables (onchain et par rapport à leur framework respectif) dans leur verticale donnée.
+
+## La couche de curation : le talon d'Achille de DeFi
+
+Si vous n'êtes pas convaincu de l'urgence d'une meilleure couche de curation, je vous supplie d'onboarder votre maman à DeFi, de lui expliquer les bases d'un portefeuille, de lui envoyer quelques ETH, et de la regarder se gratter la tête.
+
+Tu veux échanger ? Bien sûr, nous avons 200 DEX, 20 agrégateurs, des agrégateurs d'agrégateurs, et aussi ces nouveaux agrégateurs de bridges qui gèrent maintenant les échanges, ah et n'oublions pas les protocoles basés sur les intents ; au fait, tu savais que vous peux également échanger indirectement en fournissant une pool UNIv3 ? Alors, lequel allez-tu choisis ? Oh, tu as entendu parler d'Uniswap ? D'accord, essayons ça. Non, maman, ne clique pas sur ce premier lien dans les résultats de recherche ; ce n'est pas le vrai Uniswap. « Mais c'est écrit Uniswap »...
+
+### La curation est la pièce manquante pour l'onboarding de masse
+
+**Quel a été la plus grande aide lors de l'onboarding des gens ? Ce n'est pas Aave, Eigen, ou les dernières chaînes excitantes comme Bera ou Abstract. C'étaient des outils simples, directs et faciles à utiliser comme DeBank ou Jumper.** En plus de l'utilité, les deux agissent également comme une mini couche de curation : DeBank aide les utilisateurs à connaître leurs positions et leur fournit un lien sûr et vérifié vers les frontends des protocoles.
+
+Jumper a essentiellement rendu le bridging accessible à un normie. Avant Jumper, ils devaient connaître les divers bridges disponibles pour un itinéraire donné, trouver en toute sécurité leur site web et non une copie de phishing assise en haut de la requête associée grâce à Google Ads ; et si leur token était un peu « exotique », ils devaient également être familiers avec le flux de recherche, copie et collage de l'adresse du contrat. Tout cela a été abstrait dans une interface simple et sûre à utiliser, rendant les novices en DeFi immensément plus à l'aise avec le monde multichain. J'en ai été témoin de première main avec mes apprentis ; il y avait un avant et un après Jumper dans ce qu'ils pouvaient accomplir de manière autonome sans s'inquiéter.
+
+Bien que DeBank et Jumper aient des composants de curation, ce n'est pas leur principal objet. Si nous voulons élargir la base d'utilisateur qui peut exploiter DeFi, **nous devons accentuer l'effort sur la curation**, avec des applications et services dédiés bien intégrés avec les principales passerelles que les utilisateurs exploitent déjà (portefeuilles, trackers de portefeuille, agrégateurs, etc.).
+
+## Comment en sommes-nous arrivés là ?
+
+Pour les lecteurs paresseux, je vais le dire directement : **les piliers de DeFi nous ont laissé tomber** – c'est-à-dire les principaux protocoles, institutions et autres acteurs bien financés de l'espace.
+
+**Pensez à ces protocoles éminents comme Aave, Uniswap ou Maker et leurs DAOs associées : les avez-vous déjà vus financer quelque chose qui ressemble de près ou de loin à un bien public DeFi ?** Pensez aux grandes fondations de layer 2 ou layer 1 ; les voyez-vous entretenir de telles initiatives ? Le plus proche que nous ayons eu était peut-être avec Uniswap et le DeFi Education Fund, mais il a des limitations ; son champ d'action est principalement le lobbying pour les réglementations, et il reste [des préoccupations non adressées concernant son financement et sa transparence](https://gov.uniswap.org/t/demand-for-transparency-from-defi-education-fund/13299).
+
+La seule exception ici serait que DeFiLlama a été initialement financé par d'anciens membres de l'équipe Curve. Cependant, cela a été fait à titre personnel, pas au nom de Curve Finance : néanmoins, **cela mérite des éloges, car cela montre une préoccupation authentique pour le bien commun de la DeFi**, et pas seulement pour le succès de Curve — une initiative généralement cruellement absente dans DeFi, et la principale raison à l'origine de notre situation actuelle.
+
+Pour mieux illustrer cela, laissez-moi vous raconter une histoire. Lorsque le [DeFi Collective](https://deficollective.org/) n'était encore qu'une idée, nous avons contacté diverses équipes que nous pensions alignées sur nos valeurs pour leur proposer de faire un don au Collective. Notre idée principale et notre pitch étaient que :
+
+1. Le DeFi Collective aidera la véritable DeFi à prospérer
+2. Si vous êtes un protocole de premier plan, vous bénéficiez d'avoir un écosystème fort
+3. Ainsi, même si vous ne bénéficiez pas directement de l'existence et du succès du Collective, vous en bénéficierez indirectement sur un horizon plus long, et vous pourriez envisager de faire un don malgré tout.
+
+Quelques-uns ont reconnu les mérites du projet, et nous ne pouvons pas les remercier assez (ils sont listés sur [la page d'accueil](https://deficollective.org)). Mais pour la plupart, les conversations se sont essentiellement déroulées ainsi :
+
+- Moi : « Bonjour, TokenBrice ici, /insert_pitch/ »
+- Eux : « Belle idée ! Donc notre protocole, où se situerait-il dans le framework ? »
+- Moi, étant honnête : « Eh bien, cela dépend ; il pourrait être à l'étape 1 ou 2, mais même si c'est le cas, nous n'allouerons probablement pas de fonds à cela au moins au début, car nous devons démontrer l'impact positif que le Collective peut avoir avec des projets plus petits d'abord. »
+- Eux : « Donc il n'y a rien pour nous ? »
+- Moi : « Pas directement, mais vous bénéficierez d'avoir l'écosystème DeFi florissant : cela signifie des protocoles et des tokens plus résilients pour votre protocole à intégrer. »
+- Eux : « Pas intéressé. »
+
+Vous pourriez penser que c'est juste nous, mais ce n'est pas le cas ! Regardons la situation avec les autres projets de la couche curation mentionnés précédemment. Nous avons deux exceptions, DeFillama et L2beat, qui, bien qu'ils aient eu des difficultés initialement, sont maintenant bien financés et reçoivent souvent des dons. À part cela, c'est à peu près un cauchemar :
+
+- Bluechip a initialement exploré une structure à but non lucratif financée par des dons mais n'a pas pu obtenir un financement suffisant, donc il a dû évoluer vers une entreprise à but lucratif.
+- DeFiSafety est porté par un seul chad, Rex, et a dû introduire des [paiements](https://www.defisafety.com/pricing). Malgré la livraison de critiques de haute qualité et actionnables, exploitées par beaucoup pendant des années, il reste à peine à flot.
+
+### Les nouveaux projets de la couche curation peinent à émerger
+
+Comme vous pouvez le voir ci-dessus, le problème central n'est pas tant le financement des projets de la couche curation déjà établis et bien connus, mais **l'émergence des projets plus petits et plus récents qui ne parviennent pas à trouver le financement dont ils ont besoin pour croître en premier lieu**.
+
+Une fois qu'un projet atteint une taille et une notoriété comme L2Beat / DeFillama, le soutenir peut être vu comme un « coût marketing » pour les projets adjacents. Par exemple, plusieurs L2 ont alloué une part de leur supply de tokens à L2Beat : cela avait un sens économique pour eux, car cela augmentait la notoriété de leur L2. Cela a permis de soutenir un bien public en même temps – un plan gagant-gagnant ! Grâce à leur notoriété et leur portée, ces deux projets de la couche curation sent sortent également bien sur les plateformes de dons comme Gitcoin.
+
+### Le coût de l'information gratuite
+
+Le fait est que ces **services de la couche curation ont des coûts sérieux**, des coûts qu'ils ne peuvent pas récupérer auprès de leurs lecteurs s'ils veulent garder l'information qu'ils produisent accessible au maximum – c'est-à-dire gratuite et ouverte à tous.
+
+Je peux vous donner des perspectives sur DeFiScan. En ne tenant pas compte :
+
+- Des mois que nous avons passés à rechercher et itérer sur le cadre.
+- Tous les membres de DeFiCollective qui sont sérieusement sous-payés (1500-2500 $/mois pour un mi-temps) pour leur expertise et leur engagement (a.k.a. des Chads vraiment alignés sur les valeurs, je ne peux pas les remercier assez), qui soutiennent également DeFiScan.
+- De nombreux contributeurs, moi y compris, travaillent plus près d'un temps plein pour DeFiCollective/DeFiScan (pour un salaire de mi-temps).
+- DeFiCollective couvre tous les coûts d'infrastructure et de service encourus par DeFiScan.
+
+Nous **estimons** le coût effectif d'une revue dans la fourchette de 3000 $ (petit protocole immuable) à 10 000 $ (grande base de code, protocole mutable), et potentiellement encore plus (bonjour Aave et votre base de code infinie). Notez que chaque revue n'est pas seulement écrite par celui à son initiative (qui peut être l'un de nous ou quelqu'un lié au protocole revu) mais aussi soigneusement discutée et analysée par d'autres membres de l'équipe. Avec 14 revues déjà publiées, c'est essentiellement **un coût de 91k$ en cinq mois d'existence**. Si nous comptabilisons les revues en cours (total incluant celles publiées = 35), **ce coût saute à 227 500 $, soit ~45 500 $ par mois**.
+
+Veuillez noter que ce qui précède est une estimation, car personne ne paie pour DeFiScan – ni vous, les lecteurs/utilisateurs, ni les projets revus. Pour avoir une autre perspective, regardons Bluechip puisque Ben a accepté de partager leur tarification – ce que les projets paient pour être revus : 15k $ pour une évaluation holistique et des frais de maintenance annuels de 5k $, commençant après un an.
+
+Je n'écris pas cela pour mendier votre argent – nous nous débrouillons seuls, grâce à la situation unique du DeFiCollective, et explorons toutes les autres options pertinentes. C'est un rappel que l'information (curation, dans notre cas) a un coût.
+
+## Que pouvez-vous, cher lecteur, faire à ce sujet ?
+
+Encore une fois, je tiens à souligner que le but de cet article, le message qu'il porte, n'est pas « faites un don à vos services de curation ». Cependant, vous êtes les bienvenus, et à notre niveau, vous l'avez déjà fait. Lorsque nous avons offert à notre communauté l'opportunité de faire un don pour le premier anniversaire du DeFi Collective, vous [avez sauté sur l'occasion](https://deficollective.org/blog/first-anniversary-nft/). Vous avez contribué au maximum possible (10 ETH) en moins de trois jours.
+
+Au lieu de cela, le message que j'aimerais diffuser concerne davantage **1) l'importance critique de la couche curation, 2) la réalisation des coûts de l'information précieuse qu'ils fournissent, et 3) le besoin pour vous, moi, et essentiellement tout le monde d'être beaucoup plus proactif dans la préconisation de son financement**. Il est assez clair que les grandes DAOs et autres institutions bien financées ne sont pas trop enthousiastes à l'idée de financer cela, donc c'est à nous de les aider à voir la lumière.
+
+Encore une fois, grâce à la situation unique au DeFi Collective, nous ne nous inquiétons pas pour notre survie à court/moyen terme ; cependant, je pense que c'est une nécessité pour la survie à long terme de la DeFi de voir DeFiSafety, Bluechip, et d'autres projets encore émerger et prospérer. Nous discutons bien sûr tous les trois déjà et envisageons une « Alliance des fournisseurs de services d'information DeFi » (nom temporaire), dans laquelle nous aimerions voir des projets plus importants comme DeFiLlama et L2Beat également.
+
+Si vous avez lu mon plaidoyer et entendu mon appel, la prochaine étape est simple : **allez dans les DAOs sur lesquelles vous êtes actif et demandez-leur ce qu'ils font pour soutenir l'espace au-delà de leurs avantages immédiats**. La situation actuelle, avec sa couche curation sérieusement sous-dimensionnée, a des conséquences graves qui devraient être évidentes pour tous : **les débutants se font massacrer**, rugger, escroquer, etc. En conséquence, toute notre industrie ressemble à un cirque de l'extérieur. **La DeFi ne peut devenir mainstream que si l'utilisateur moyen est raisonnablement en sécurité** ; ce n'est actuellement pas le cas. En outre, les outils de curation sont également une demande importante de la part des clients institutionnels qui recherchent activement de telles ressources : **une couche de curation améliorée signifie donc que nous serons en mesure d'attirer et de retenir à la fois les particuliers et les institutions**.
+
+Alors allez pousser les baleines publiques et bien connues et autres institutions bien financées à faire plus. Les protocoles de la taille d'Aave, Maker, Uniswap, Eigen, et plus ont la responsabilité de soutenir l'écosystème plus large. Puisqu'ils le font à peine/pas actuellement, c'est notre travail de leur rappeler et de plaider dans cette direction, car c'est la beauté de DeFi : s'ils échouent à le faire parce qu'ils ne voient pas d'avantages immédiats pour eux, je suis convaincu qu'ils souffriront à long terme et feront face à des coûts réels à cause de cela.
diff --git a/content/post/2025/defi-ux-disaster.md b/content/post/2025/defi-ux-disaster.md
new file mode 100644
index 00000000..1c5e2cd2
--- /dev/null
+++ b/content/post/2025/defi-ux-disaster.md
@@ -0,0 +1,161 @@
+---
+title: "DeFi’s UX Disaster: Curation Could Save Innovation"
+description: "Shining a light on DeFi’s dirty secret: the curation layer crisis - and what can we do to address it."
+date: '2025-03-08T01:13:50.191Z'
+categories: [Thesis]
+tags: [DeFi, Ethereum, Decentralized Finance, DeFi, Public Good, DeFiScan, BlueChip, L2Beat]
+url: defi-ux-disaster
+image: /img/2025/defi-ux-disaster/defi-ux-disaster-cover.png
+difficulty: "beginner"
+---
+
+Everyone worries about the infrastructure and app layers, and that’s cute, but what about the curation layer? Without it, the two others are nearly useless, as the complexity of the space is already far too great for most of the population to handle. So today, I want to plead to address the most significant lack in DeFi, informed by my experience with over six years spent educating people about it, onboarding pretty much anyone willing in my surroundings and online, and following up with them.
+
+## Defining the infrastructure, application, and curation layers
+
+Before we move forward, we need to align on the key terms – those three layers. An image is worth a thousand words, so let’s study an interesting example taken from the wild that features bits of each of the three layers:
+
+
+
+
+
+This is a pretty dense flow involving:
+
+
+
+* Ethereum mainnet (infrastructure)
+* wBTC (application)
+* Mayan bridge (infrastructure)
+* Aave on Optimism (application)
+* USDC (application)
+* Jumper (application + curation), powered by Li.FI (infrastructure).
+
+Doing this “manually” would represent a hefty sequence of operations:
+
+
+
+1. Approve wBTC on exchange
+2. Swap wBTC to USDC on mainnet
+3. Approve USDC on bridge
+4. Bridge USDC from mainnet to optimism
+5. Approve USDC on Aave/Optimism
+6. Deposit USDC on Aave/Optimism
+
+Hurray! Here’s for the application layer working its magic! But I’d like to focus on another even more critical dimension here - the curation dimension of Jumper:
+
+Jumper auto-detected the tokens I had in my wallet as soon as I connected, allowing me to find my wBTC quickly. It found two potential bridges and “recommended” one by placing it first (because it has the best returns). It found the respective token contracts and protocol I needed. It also provided me with an interface to execute all this without worrying if I was about to send my tokens to a scammer — that might not seem much to you or me, but to a normie, that is close to everything.
+
+So from that example, let’s take a minute to settle the definitions:
+
+
+
+1. **Infrastructure layer: the base layer**, which can include blockchains (Ethereum), but also pieces of infrastructure that are built upon at the next layer (Li.Fi>Jumper scenario).
+2. **>> Application layer: the end-user layer**, where they actually interact with DeFi – these include all the protocols, frontends, and toolings (DeBank, DeFiSaver, Jumper, etc.) you are aware of.
+3. **>>>> Curation layer: the “guidance” layer**, helping users navigate the options available at the application layer. While it exists independently, its insights can and should be integrated into the application layer.
+
+This perspective is essentially a simplified version of [Schär's DeFi Stack](https://www.researchgate.net/figure/The-Decentralized-Finance-DeFi-Stack_fig4_340061422) where his Settlement and Asset layers are merged into my Infrastructure layer, his Protocol+Application layer into my Application layer, and his Aggregation layer is broadened and rebranded into my Curation Layer:
+
+
+
+
+
+The Curation layer champions, others than widely used tools with a curation/directory element such as [CoinGecko](https://coingecko.com/) (helping users to validate token contract & protocols front end URLs), [Jumper](https://jumper.exchange/) or [Debank](https://debank.com/) currently are websites/frameworks providing essential and verifiable insights on key verticals such as [L2Beat](https://l2beat.com/) (L2s decentralization evaluation), [DeFillama](https://defillama.com/) (DeFi data + directory), [Bluechip](https://bluechip.org/) (stablecoin economic ratings), [DeFiSafety](https://www.defisafety.com/) (development practices evaluation) or [DeFiScan](https://defiscan.info/) (protocol decentralization evaluation).
+
+Curation can include various endeavours:
+
+
+
+* **Validation**: Helping users verify the validity of information, such as CoinGecko acting as a source of truth for contract addresses or DeFillama for protocol frontend URLs, or Rabby various warnings helping users to realize if they are interacting with a spoofed version of a given protocol.
+* **Aggregation**: Curation is provided on top of the aggregation (“here is the best route”). This includes all DEXes and bridge aggregators (ParaSwap, CowSwap, Bungee, Jumper, etc).
+* **Verifiable Insights**: Information service providers like L2Beat, DeFiScan, or Bluechip enable users to access contextualized and verifiable information (onchain and against their respective framework) in their given vertical.
+
+
+## The Curation Layer: DeFi’s Achilles’ Heel
+
+If you are unconvinced about the urgent need for a better curation layer, I beg you to onboard your mom to DeFi, explain the basics of a wallet, send her some ETH, and watch her scratch her head.
+
+Wanna swap? Sure, we have 200 DEXes, 20 aggregators, aggregators of aggregators, and also those new bridge aggregators that now handle swap, ah and let’s not forget the intent-based protocols; by the way, do you know you can also indirectly swap by supplying a UNIv3 pool? So which one is it gonna be? Oh, you heard of Uniswap? Right, let’s try this. No, Mom, don’t click that first link on the search results; it’s not the real Uniswap. “But it’s written Uniswap”...
+
+
+### Curation is the missing piece to mass onboarding
+
+**What was the biggest helper when onboarding people? It’s not Aave, Eigen, or the latest shiny chains like Bera or Abstract. It was simple, straightforward, and easy to use tools such as DeBank or Jumper.** On top of the utility, both also act as a mini curation layer: DeBank helps users know their positions and provides them with a safe and verified link to the protocol frontends.
+
+Jumper essentially made bridging something a normie can handle. Before Jumper, they needed to know about the various bridges available for a given route, safely find their website and not a phising copy of it sitting at the top of the associated query thanks to Google Ads; and if their token was just a little bit “exotic”, they also needed to be familiar with the contract address find, copy and paste flow. All of this was abstracted in a simple and safe-to-use UI, making DeFi newcomers immensely more comfortable with the multichain world. I’ve witnessed it firsthand with my trainees; there was a before and an after Jumper in how much they could accomplish independently without worrying.
+
+While both DeBank and Jumper have curating components, it’s not their primary focus. If we want to broaden the base that can harness DeFi, **we need to double down on curation**, with dedicated apps and services well integrated with the main gateways users already harness (wallets, portfolio trackers, aggregators, etc).
+
+
+## How did we get there?
+
+For the lazy readers, I’ll give it straight: **the DeFi staples failed us** – that is, the top protocols, institutions, and other well-funded actors of the space.
+
+**Think about those prominent protocols like Aave, Uniswap, or Maker and their associated DAOs: have you ever seen them fund something remotely close to a DeFi public good?** Think about the big layer 2 or layer 1 foundations; do you see them entertaining such endeavours? The closest we got was maybe with Uniswap and the DeFi Education Fund, but it has limitations; its scope is mainly lobbying for regulations, and there remain [unaddressed concerns about its funding and transparency](https://gov.uniswap.org/t/demand-for-transparency-from-defi-education-fund/13299).
+
+The only exception here would be that DeFiLlama was initially funded by ex-Curve team members. However, it was done at a personal level, not in the name of Curve Finance: still, **it is worthy of praise, as it shows genuine concern for the overall good of the space**, and not just Curve’s success — an endeavour usually direly lacking in DeFi, and the main driver behind our current predicament.
+
+To illustrate this better, let me tell you a story. When the [DeFi Collective](https://deficollective.org/) was still an idea, we contacted various teams that we thought were value-aligned to offer them to donate to the Collective. Our core idea and pitch were that:
+
+
+
+1. DeFi Collective will help genuine DeFi thrive
+2. If you are a top protocol, you benefit from having a strong ecosystem
+3. Thus, even if you do not directly benefit from the existence and success of the Collective, you will benefit indirectly over a longer timeframe, and you might consider donating nonetheless.
+
+A few resonated with the project, and we can’t thank them enough (they are listed on [the homepage](https://deficollective.org)). But for most, the conversations went essentially like this:
+
+
+
+* Me: “Hello, TokenBrice here, /insert_pitch/”
+* Them: “Nice idea! So our protocol, where would it stand on the framework?”
+* Me, being honest: “Well, it depends; it could be stage 1 or 2, but even if that is, we will most likely not allocate funds to it at least early on, as we have to demonstrate the positive impact the Collective can have with smaller projects first.”
+* Them: “So there’s nothing in it for us?”
+* Me: “Not directly, but you will benefit from having the DeFi ecosystem thriving: that means more resilient protocols and tokens for your protocol to integrate.”
+* Them: “Not interested.”
+
+You might think it is just us, but it is not! Let’s look at the situation with the other curation-layer projects mentioned before. We have two oddities, DeFillama and L2beat, which, although they struggled initially, are now well-funded and often receive donations. Apart from that, it’s pretty much a nightmare:
+
+
+
+* Bluechip initially explored a non-profit structure funded by donations but could not get sufficient funding, so it had to evolve into a for-profit venture.
+* DeFiSafety is carried by only one chad, Rex, and had to introduce [payments](https://www.defisafety.com/pricing). Despite delivering high-quality and actionable reviews harnessed by many for years, it still barely stays afloat.
+
+
+### New curation layer projects struggle to emerge
+
+As you can see above, the core issue is not so much about the funding of already successful and well-known curation layer projects but **about smaller and newer projects not being able to source the funding they need to grow in the first place**.
+
+Once a project reaches an L2Beat / DeFillama size and awareness, supporting it can be seen as a “marketing cost” for adjacent projects. For instance, several L2s allocated a share of their token supply to L2Beat: it made economic sense for them, as it raised awareness of their L2. It achieved support for a public good simultaneously – a win-win! Thanks to their awareness and reach, these two curation layer projects also usually perform well on donation platforms such as Gitcoin.
+
+
+### The cost of free-to-access information
+
+The thing is that these **curation-layer services have serious costs**, costs they cannot recoup with their readers if they want to keep the information they produce maximally available – that is, free and open to all.
+
+I can give you insights on DeFiScan. Discounting:
+
+
+
+* The months we spent researching and iterating on the framework.
+* All DeFiCollective members who are seriously underpaid ($1500-2500/month for a half time) for their expertise and commitment (a.k.a. proper value-aligned Chads, I can’t thank them enough), are also supporting DeFiScan.
+* Many contributors, myself included, work closer to full-time for DeFiCollective/DeFiScan (for a half-time pay).
+* DeFiCollective covers all infrastructure and service costs incurred by DeFiScan.
+
+We **estimate** the effective cost of a review in the $3000 (small immutable protocol) to $10 000 range (large codebase, mutable protocol), and potentially even more (hello Aave and your infinite codebase). Mind that each review is not only written by the initial submitter (who can be one of us or someone tied to the reviewed protocol) but also carefully discussed and reviewed by other team members. With 14 reviews already published, that’s essentially **a “burn” of $91k already in about five months** of existence. **If we account for the review in progress (total including the live ones = 35), this cost jumps to $227,500, or a ~$45,500 monthly burn.**
+
+Please remember that the above is an estimation, as no one is paying for DeFiScan – not you, the readers/users, or the projects reviewed. For some perspective, let’s look at Bluechip since Ben agreed to share their pricing – what projects pay to get reviewed: $15k for a holistic evaluation and a $5k annual maintenance fee, starting after a year.
+
+I’m not writing this to beg for your money – we are figuring it out on our own, thanks to the unique situation of the DeFiCollective, and exploring all other relevant options. This is a reminder that information (curation, in our case) has a cost.
+
+
+### What can you, dear reader, do about this?
+
+Again, I’d like to stress that the goal of this article, the message it carries, is not “donate to your curation layer services”. However, you are welcome to, and at our level, you already have. When we offered our community the opportunity to donate for the first anniversary of the DeFi Collective, you [jumped at the occasion](https://deficollective.org/blog/first-anniversary-nft/). You contributed the maximum possible (10 ETH) in not even three days.
+
+Instead, the message I would love to spread is more about **1) the critical importance of the curation layer, 2) realizing the costs of the valuable information they provide, and 3) the need for you, me, and essentially everyone to be much more proactive in advocating for its funding.** It’s pretty clear that big DAOs and other well-funded institutions are not too eager to fund this, so it is up to us to help them see the light.
+
+Again, thanks to the unique situation at the DeFi Collective, we’re not worried about our short/mid-term survival; however, I think it’s a necessity for the long-term survival of DeFi to see DeFiSafety, Bluechip, and other projects yet to emerge and thrive. We are, of course, all three chatting to one another already and contemplating a “DeFi Information Service Provider Alliance” (name is a work in progress), in which we would love to see more significant projects like DeFiLlama and L2Beat as well.
+
+If you read my plea and heard my call, the next step is simple: **go to the DAOs you are active on and ask them what they are doing to support the space beyond their immediate benefits.** The current situation, with its seriously undersized curation layer, has severe consequences that should be obvious to all: **newcomers are getting butchered**, rugged, scammed, etc. As a result, our whole industry looks like a circus from the outside. **DeFi can only go mainstream once the average new user is reasonably safe**; that is currently not the case. Moreover, curation tools are also a big ask from institutional clients actively seeking such resources: **an enhanced curation layer means we will be better at attracting and retaining both individuals and institutions**.
+
+So go nudge public and well-known whales and other well-funded institutions to do more. Protocols of the size of Aave, Maker, Uniswap, Eigen, and more have a responsibility to support the broader ecosystem. Since they are currently barely/not doing it, **it’s our job to remind them and advocate in that direction**, as that’s the beauty of DeFi: if they fail to do it because they see no immediate benefits for them, I’m convinced that they will suffer long-term and face real costs because of it.
diff --git a/content/post/2025/lending-aggregation.fr.md b/content/post/2025/lending-aggregation.fr.md
new file mode 100644
index 00000000..2aeed409
--- /dev/null
+++ b/content/post/2025/lending-aggregation.fr.md
@@ -0,0 +1,89 @@
+---
+title: "Le cycle de l'agrégation tourne, avec le prêt"
+description: "Dans le prêt, le véritable avantage n'est pas de trouver le taux ; c'est de posséder les rails qui les connectent tous."
+date: '2025-08-10T01:13:50.191Z'
+categories: [Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Lending, Aggregator, Fluid, Euler]
+url: lending-aggregation
+image: /img/2025/lending-aggregation/aggregration-lending-cover.png
+difficulty: "intermediate"
+---
+
+Quelque chose de grand se passe dans le prêt onchain. Sous la surface, un changement discret est en train de remodeler la façon dont la liquidité se déplace, dont les marchés se connectent et dont les utilisateurs accèdent au rendement. Une vague de nouveaux modèles, d'intégrations et d'étoiles montantes comme Euler et Fluid ont réécrit les règles avec une efficacité et une flexibilité sans précédent. Une nouvelle couche de coordination émerge et pourrait redéfinir le prêt lui-même : aujourd'hui, nous levons le voile sur l'agrégation de prêts.
+
+## Le Cycle de l'Agrégation
+
+J'ai vu un scénario similaire se dérouler du côté des DEX, avec l'essor d'Uniswap, suivi par la concurrence de Sushi, les agrégateurs et l'arrivée d'UNIv3. Les concepts de base nécessaires pour analyser les deux transitions sont similaires, et je les expliquerai dans cet article.
+
+La première chose à noter est qu'il s'agit d'un modèle, dans lequel je vois quatre moments :
+
+1. **Inception Verticale** : D'abord, une nouvelle verticale est découverte.
+2. **Prolifération des Produits** : À mesure que plus d'équipes entrent dans la verticale, le nombre d'options disponibles pour les utilisateurs augmente, menant à une situation de saturation de l'offre.
+3. **Agrégation** : Les agrégateurs émergent car ils apportent une valeur tangible aux utilisateurs (meilleur prix, plus rapide, plus sûr, etc.) par rapport à l'expérience site par site sous-jacente.
+4. **Personnalisation du Côté de l'Offre** : Avec les agrégateurs maintenant courants, le marché est mûr pour une plus grande personnalisabilité du côté de l'offre, que les agrégateurs peuvent maintenant traiter et distribuer aux utilisateurs.
+
+Ce scénario représente le niveau de base, généralement complété par un autre flux observé à la fois pour les échanges et les prêts : **l'augmentation de la personnalisabilité du côté de l'offre**, résultant d'un passage d'un modèle de pool à des offres plus à la demande et personnalisées (OTC). À mesure que cela se produit, les agrégateurs deviennent encore plus cruciaux car ils livrent maintenant à l'utilisateur ce qu'il ne découvrirait pas nécessairement par lui-même. Pour le dire autrement : tandis que **les agrégateurs trouvent leur PMF en exploitant les pools sous-jacents** (ex, UNIv2, Curve), **leur utilité brille vraiment une fois que la couche d'offre plus personnalisée est développée**.
+
+Notez que bien que nous discuterons d'instances de ce modèle pour les prêts et les échanges décentralisés, la situation est similaire pour le bridging, avec la couche d'agrégation qui se renforce (Jumper, Bungee, Infinex Swidge, etc.).
+
+## Le « Problème » : Densification des Offres de Prêts
+
+L'agrégation de prêts a émergé pour résoudre un problème tangible, manifesté par la démultiplication des chaînes, des protocoles de prêts et de leurs modèles, permettant ensemble **un nombre exponentiellement croissant de façons de collatéraliser onchain**.
+
+D'abord, vous avez les **marchés monétaires généralistes larges** comme Aave ou Compound. Ils ont une couverture de collatéral et des offres similaires. Tous deux supportent de nombreuses variantes d'ETH staké, de stables portant du rendement et de BTC tokenisé comme collatéral.
+
+Les protocoles CDP **fournissent des outils plus adaptés aux cas d'utilisation avancés, tels que le looping ou l'emprunt à haut LTV. Ici encore, les options se multiplient : c'est **[la saison des forks de BOLD](https://www.liquity.org/blog/forkonomics-collaboration-not-competition)** !
+
+Vous devez également prendre en compte le problème des chaînes : les protocoles mentionnés ci-dessus existent souvent sur **plusieurs chaînes avec des marchés segregués**, ce qui ajoute une toute autre couche d'opportunités. Vous avez aussi des tendances plus petites mais impactantes, telles que le relending, où des stables émis par un autre protocole et déjà mobilisés sont utilisés comme collatéral, avec [Level](https://www.level.money/), [Resupply](https://resupply.fi/), ou [Asymmetry](http://asymmetry.finance/).
+
+Et enfin, il y a la **tendance à l'échelle de l'industrie vers une plus grande personnalisabilité du côté de l'offre**, lancée par Euler et Morpho, et bientôt suivie par Aave avec la sortie de la V4. L'objectif principal ici est d'accueillir les acteurs institutionnels (KYC, accès restreint, etc.).
+
+Sur ce front, un autre OG值得 mention est [GearBox](https://gearbox.fi/), car il le fait depuis presque une demi-décennie déjà, bien que leur angle soit moins axé sur les institutions : Gearbox encapsule l'activité d'emprunt des utilisateurs dans un smart contract, lui permettant d'implémenter une logique relative à l'utilisation des fonds, telle que permettre aux utilisateurs d'emprunter, mais seulement pour acquérir des expositions spécifiques.
+
+**La personnalisabilité de l'expérience de prêt peut être cartographiée sur un spectre borné par Aave et ETHLend :**
+
+* ETHLend étant le plus personnalisable avec chaque situation spécifique à son emprunteur
+* Tandis qu'Aave v1/2 est le plus standardisé, puisque tous les emprunteurs sont sous les mêmes termes
+
+
+
+## Agrégation Sous Tous les Angles
+
+Donc, avec la multiplication des offres et leur diversité croissante, la seule réponse logique est l'agrégation :
+
+### Agrégation d'Informations
+
+Le premier problème est d'identifier les diverses options disponibles pour une paire collatéral/actif emprunté spécifique sur une chaîne donnée. C'est précisément ce que fait [DeFillama Borrow Aggregator](https://defillama.com/borrow) :
+
+
+
+Cela facilite la **découverte des options** que les utilisateurs pourraient exploiter, mais ils doivent encore rechercher les venues qu'ils ne connaissent pas et procéder à l'exécution eux-mêmes. Certains projets vont donc un peu plus loin, en intégrant l'exécution et la gestion également : entre [DeFiSaver](https://defisaver.com/).
+
+### Agrégation d'Interface
+
+La promesse de [DeFiSaver](https://defisaver.com) est simple mais salvatrice : **une interface unique pour gérer vos positions de prêt sur tous les protocoles, plus quelques automatisations astucieuses, outils de migration ou de suivi en plus**. C'est particulièrement pratique pour les utilisateurs exploitant plusieurs protocoles à la fois, ou cherchant à utiliser l'automatisation pour auto-leverager ou deleverager leurs positions lorsque certaines conditions sont remplies.
+
+
+
+Ainsi, bien que DeFiSaver ne soit pas un protocole en soi, il offre plus d'options que les emprunteurs peuvent exploiter pour créer et gérer des positions, et mérite d'être mentionné. En plus de la gestion, il facilite le processus de découverte via des analyses et l'outil [Discover](https://app.defisaver.com/discover), permettant aux utilisateurs de trouver les meilleurs venues pour leurs positions, similaire à DeFiLlama.
+
+### Agrégation de Protocoles
+
+L'étape suivante et dernière est, bien sûr, d'agréger plusieurs protocoles eux-mêmes. Bien que cette idée soit courante pour le rendement avec Yearn et ses vaults, elle est plus rare dans les prêts. Ici, un exemple principal est [Altitude](https://app.altitude.fi/?referrer=tokenbrice) :
+
+C'est essentiellement un gestionnaire de positions d'emprunt faisant deux choses :
+
+1. Refinance entre protocoles pour optimiser les coûts d'emprunt (Aave ou Morpho)
+2. Déploie le capital surcollatéralisé pour générer du rendement utilisé pour auto-rembourser la dette (sur Curve, Pendle, ou Morpho)
+
+C'est pour moi **un exemple sauvage d'agrégation de prêts efficace** : Je dépose mon collatéral sur Altitude et j'emprunte ; en arrière-plan, j'ai peut-être utilisé Aave ou Morpho, ou peut-être switché plusieurs fois entre les deux si j'ai tenu la position assez longtemps ; je n'ai même pas besoin de le savoir, je sais juste que j'ai obtenu le meilleur taux.
+
+## Qu'en est-il des Curateurs ?
+
+L'étincelle récente de personnalisabilité des prêts que nous vivons découle de l'émergence d'un modèle exploité par beaucoup pour **défier la position dominante d'Aave sur les marchés de prêts bluechip**, car à ce stade, il est impossible de défier Aave sur la taille disponible ou la sécurité perçue. Euler ou Morpho sont des constructeurs d'infrastructure autant que des opérateurs de protocoles. Ils fournissent des blocs de construction, exploités par les Curateurs, pour délivrer des expériences de prêts personnalisées et optimisées à des communautés spécifiques.
+
+Pourtant, ils rendent la solution encore plus complexe à déballer, car en plus d'[évaluer le protocole (DeFiScan peut aider)](https://www.defiscan.info/), vous devez maintenant aussi **évaluer les curateurs**, ce qui est une logique totalement différente (historique, AUM, etc.). D'un autre côté, du côté d'Aave, jusqu'à présent, il n'y avait pas de curateur, ou seulement un omnipotent : la DAO Aave, l'entité gérant la gestion des risques et les paramétrisations via ses divers fournisseurs (AGI, LLamaRisk, etc.).
+
+Les curateurs et les agrégateurs travaillent main dans la main. Les curateurs exploitent des pièces d'infrastructure pour délivrer de nouveaux marchés de prêts, tandis que les agrégateurs connectent toutes les offres déjà existantes pour faciliter l'expérience utilisateur.
+
+L'agrégation de prêts devient le tissu conjonctif d'un marché du crédit de plus en plus fragmenté. À mesure que les protocoles se divisent à travers les chaînes, les modèles et les personnalisations, le rôle des agrégateurs passe de « outil utile » à « infrastructure de marché ». Tout comme les agrégateurs DEX sont devenus indispensables une fois la liquidité fragmentée, les agrégateurs de prêts définiront comment le capital circule, qui capture l'écart, et quelles stratégies restent compétitives. Le prochain cycle de prêts DeFi ne consistera pas à découvrir le meilleur venue—il s'agira de router, composer et automatiser à travers tous. Et dans cette course, les gagnants ne prêteront pas seulement plus intelligemment ; ils agrégeront mieux.
\ No newline at end of file
diff --git a/content/post/2025/lending-aggregation.md b/content/post/2025/lending-aggregation.md
new file mode 100644
index 00000000..c6737314
--- /dev/null
+++ b/content/post/2025/lending-aggregation.md
@@ -0,0 +1,103 @@
+---
+title: "The Cycle of Aggregation Spins On, Now with Lending"
+description: "The real edge isn’t in finding the rate; it’s in owning the rails that connect them all."
+date: '2025-08-10T01:13:50.191Z'
+categories: [Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Lending, Aggregation, Fluid, Euler]
+url: lending-aggregation
+image: /img/2025/lending-aggregation/aggregration-lending-cover.png
+toc: true
+draft: false
+type: post
+difficulty: "intermediate"
+---
+
+Something big is happening in onchain lending. Beneath the surface, a quiet shift is reshaping how liquidity moves, how markets connect, and how users access yield. A wave of new models, integrations, and rising stars like Euler and Fluid rewrote the rules with unprecedented efficiency and flexibility. A new layer of coordination is emerging and could redefine lending itself: today, we pull back the curtain on lending aggregation.
+
+## The Cycle of Aggregation
+
+I’ve seen a similar scenario unfold on the DEX side, with the rise of Uniswap, followed by competition from Sushi, aggregators, and the arrival of UNIv3. The core concepts required to analyze both transitions are similar, and I’ll explain them in this article.
+
+The first thing to note is that it’s a pattern, in which I see four moments:
+
+1. **Vertical Inception**: First, a new vertical is discovered.
+2. **Product Proliferation**: As more teams enter the vertical, the number of options available to users increases, leading to a situation of offer saturation.
+3. **Aggregation**: Aggregators emerge as they deliver tangible value to users (better price, faster, safer, etc.) compared to the underlying site-per-site experience.
+4. **Offer-Side Customization**: With aggregators now commonplace, the market is ripe for greater customizability of the offer side, which aggregators can now process and distribute to users.
+
+This scenario represents the base level, typically complemented by another stream that is observed for both exchanges and lending: **the increasing customizability of the offer side**, resulting from a shift from a pool model to more on-demand and personalized offers (OTC). As this happens, the aggregators become even more crucial as they now deliver to the user what they would not necessarily discover on their own. To put it another way: while **aggregators find their PMF harnessing pooled underlying **(ex, UNIv2, Curve), **their utility truly shines once the more customized offer layer is developed**.
+
+Note that while we will discuss instances of this pattern for lending and decentralized exchanges, the situation is similar for bridging, with the aggregation layer growing strong (Jumper, Bungee, Infinex Swidge, etc.).
+
+
+## The “Problem”: Densification of Lending Offers
+
+Lending aggregation emerged to solve a tangible problem, manifested by the demultiplication of chains, lending protocols, and their models, together enabling **an exponentially rising number of ways to collateralize onchain**.
+
+First, you have the broad, **generalist money markets** like Aave or Compound. They have similar collateral coverage and offerings. Both support many flavors of staked ETH, yield-bearing stables, and tokenized BTC as collateral.
+
+CDP protocols **deliver tools more suited for advanced use cases, such as looping or high-LTV borrowing. Here again, the options are multiplying: it’s **[BOLD forks season](https://www.liquity.org/blog/forkonomics-collaboration-not-competition)**!
+
+You also need to factor in the chain problem: those protocols mentioned above often exist on **several chains with segregated markets**, which adds a whole other layer of opportunities. You also have smaller but impactful trends, such as relending, where stables issued by another protocol and already mobilized are used as collateral, with [Level](https://www.level.money/), [Resupply](https://resupply.fi/), or [Asymmetry](http://asymmetry.finance/).
+
+And finally, there is the **industry-wide trend towards greater customizability of the offer side**, kick-started by Euler and Morpho, and soon to be followed by Aave with the V4 release. The main goal here is to be able to accommodate institutional players (KYC, restricted access, etc.).
+
+On this front, another OG worth mentioning is [GearBox](https://gearbox.fi/), since it’s been doing it for almost half a decade already, although their angle is less institutional-focused: Gearbox wraps the borrowing activity of the users in a smart contract, enabling it to implement logic pertaining to the usage of funds, such as allowing users to borrow, but only to acquire specific exposures.
+
+**The customizability of the lending experience can be mapped on a spectrum bounded by Aave and ETHLend:**
+
+* ETHLend being the most customizable with each situation specific to its borrower
+* While Aave v1/2 is the most standardized, since all borrowers are under the same terms
+
+
+
+## Aggregation From Every Angle
+
+So, with the multiplication of offers and their increasing diversity, the only logical answer is aggregation:
+
+
+### Information Aggregation
+
+The first problem is to identify the various options available for a specific collateral/borrowed asset pair on a given chain. This is precisely what [DeFillama Borrow Aggregator](https://defillama.com/borrow) does:
+
+
+
+
+
+This facilitates the users’ **discovery of the options** they could harness, but they still have to research the venues they are unfamiliar with and proceed with the execution themselves. So some projects go one step further, factoring in the execution and management as well: enters [DeFiSaver](https://defisaver.com/).
+
+
+### Interface Aggregation
+
+[DeFiSaver’s](https://defisaver.com) promise is straightforward yet salvatory: **a single interface to manage your lending positions on all protocols, plus some neat automations, migration, or tracking tools on top**. This is particularly handy for users harnessing several protocols at once, or looking to make use of the automation to auto-leverage or deleverage their positions when certain conditions are met.
+
+
+
+
+
+Thus, while DeFiSaver is not a protocol per se, it does deliver more options borrowers can harness to create and manage positions, and is worth mentioning. In addition to management, it facilitates the discovery process through analytics and the [Discover](https://app.defisaver.com/discover) tool, enabling users to find the best venues for their positions, similar to DeFiLlama.
+
+
+### Protocol Aggregation
+
+The next and last step is, of course, to aggregate several protocols themselves. While this idea is commonplace for yield with Yearn and its vaults, it’s rarer in lending. Here, a prime example is [Altitude](https://app.altitude.fi/?referrer=tokenbrice):
+
+It's essentially a borrowing position manager doing two things:
+
+
+
+1. Refinances between protocols to optimize borrowing costs (Aave or Morpho)
+2. Deploying the overcollateralized capital to generate yield used to auto-repay the debt (on Curve, Pendle, or Morpho)
+
+It is to me **a wild example of effective lending aggregation**: I deposit my collateral on Altitude and borrow; in the background I might have used Aave or Morpho, or maybe switched several times between the two if I held the position long enough; I don’t even need to know, I just know I got the best rate.
+
+
+## What About Curators?
+
+The recent spark of lending customizability we are experiencing stems from the emergence of a model harnessed by many to **challenge Aave’s dominant position on the bluechip lending markets**, since at this point, it’s impossible to challenge Aave on available size or perceived safety. Euler or Morpho are infrastructure builders as much as protocol operators. They provide building blocks, harnessed by Curators, to deliver customized and optimized lending experiences to specific communities.
+
+Yet, they also make the solution even more complex to unpack, since that, on top of [assessing the protocol (DeFiScan can help)](https://www.defiscan.info/), you now also need to **evaluate curators**, which is a wholly different logic (track record, AUM, etc.). On the other hand, on the Aave side, so far, there was no curator, or only a single omnipotent one: the Aave DAO, the entity handling the risk management and parametrizations through its various providers (AGI, LLamaRisk, etc.).
+
+Curators and aggregators work hand in hand. Curators harness pieces of infrastructure to deliver novel lending markets, while aggregators connect all the already existing offers to facilitate the user experience.
+
+Lending aggregation is becoming the connective tissue of an increasingly fragmented credit market. As protocols splinter across chains, models, and customizations, the role of aggregators shifts from “helpful tool” to “market infrastructure.” Just as DEX aggregators became indispensable once liquidity fractured, lending aggregators will define how capital flows, who captures the spread, and which strategies remain competitive. The next cycle of DeFi lending won’t be about discovering the best venue—it will be about routing, composing, and automating across all of them. And in that race, the winners won’t just lend smarter; they’ll aggregate better.
diff --git a/content/post/2025/leverage-sir.fr.md b/content/post/2025/leverage-sir.fr.md
new file mode 100644
index 00000000..3ab1afe8
--- /dev/null
+++ b/content/post/2025/leverage-sir.fr.md
@@ -0,0 +1,299 @@
+---
+title: "Effet de Levier pour gentilhomme : gains polynomiaux sans liquidations"
+description: "Exploration d'un nouveau protocole offrant un effet de levier sans frais de financement ni liquidation avec des rendements convexes, et annonce de mon implication."
+date: '2025-03-12T01:13:50.191Z'
+categories: [Projects, Lending, Yield]
+tags: [DeFi, Ethereum, Decentralized Finance, DeFi, Leverage, Immutable Protocol, Lending, Polynomial]
+url: leverage-sir
+image: /img/2025/leverage-sir/leverage-sir-cover.jpg
+difficulty: "intermediate"
+---
+
+Il y a quelques semaines, Sir Trading, une nouveau protocole DeFi fascinant et innovant, a été lancée, et je suis rapidement tombé amoureux. J'ai également décidé de m'impliquer, alors bienvenue dans cet article qui présente Sir Trading, explique ce que j'ai trouvé intéressant dans le modèle et annonce mon implication en tant que conseiller.
+
+## Sir.Trading expliqué comme une entreprise
+
+Pour comprendre Sir Trading (et cela fonctionne bien avec la plupart des protocoles), nous pouvons utiliser une métaphore d'entreprise : Qui sont les clients, les intermédiaires et les parties prenantes ?
+
+
+
+Commençons donc par le bas : nos « clients » sont les APEs qui ouvrent des positions à effet de levier et paient des frais. Tout le reste est un « moyen » pour atteindre cet objectif.
+
+Notre deuxième population est celle des « intermédiaires », les fournisseurs de liquidité sur le protocole Sir, appelés détenteurs de TEA, également appelés « gentlemen ». Ils sont nécessaires car plus il y a de liquidité TEA, plus la capacité des APE à utiliser l'effet de levier est grande, et donc plus les utilisateurs sont susceptibles d'ape à grande échelle. Maximiser cette population est essentiel, car cela aide à résoudre l'une des principales faiblesses du modèle Sir : **l'absence de dégradation de l'effet de levier ne peut être garantie que si la liquidité fournie est suffisante par rapport à la position à effet de levier ouverte.**
+
+Il est donc logique d'inciter les fournisseurs de liquidité avec des émissions de SIR pour attirer une liquidité proportionnelle à la demande des APE. De plus, les récompenses continues en SIR offrent aux LPers un revenu stable, complétant les frais de minting/closing volatils qu'ils gagnent également — un avantage critique, car les LPers privilégient généralement la prévisibilité (cf. Aerodrome vs. Uniswap).
+
+Enfin, les détenteurs de SIR agissent comme des parties prenantes. Ils peuvent staker leurs tokens pour recevoir des dividendes en ETH provenant des frais collectés lors de l'ouverture et de la fermeture des positions et, à l'avenir, pourraient être impliqués dans une mini-gouvernance centrée sur les décisions concernant l'allocation des ressources (⇒ quels vaults inciter avec les émissions de SIR ?).
+
+Avec nos trois populations clés définies, nous pouvons essentiellement les assembler dans le « modèle d'entreprise » de Sir :
+
+
+
+Le protocole SIR vise à maximiser sa base de clients (détenteurs d'APE), ce qui génère des revenus partagés avec les parties prenantes (détenteurs de SIR). Les parties prenantes approuvent les émissions de SIR pour financer les intermédiaires (LPers TEA) qui fournissent la liquidité nécessaire à cet objectif et l'allouent aux vaults les plus pertinents pour stimuler l'utilisation.
+
+## Zoom sur le côté APE
+
+Comme mentionné ci-dessus, le cœur du protocole est l'APE — la capacité d'utiliser l'effet de levier sur n'importe quel actif échangé sur UniswapV3. Mais qu'est-ce qui rend cet effet de levier si intéressant, surtout par rapport aux nombreuses autres options désormais disponibles ?
+
+Le tableau ci-dessous devrait répondre aux questions les plus importantes pour quiconque est déjà familier avec d'autres protocoles offrant un effet de levier, tels que f(x) ou Squeeth :
+
+
+
+ Type de Rendements
+
+ polynomial (=/ multiplicatif)
+
+
+
+ Effet de Levier Max
+
+ Jusqu'à ^5 sans dégradation de l'effet de levier avec une liquidité suffisante, réalistement ~ ^2
+
+
+
+ Liquidation
+
+ Aucune
+
+
+
+ Rééquilibrage
+
+ Aucun
+
+
+
+ Frais
+
+ Pas de frais de financement, seulement des frais fixes payés lors de l'ouverture ou de la fermeture de la position
+
+
+
+ Actifs Supportés
+
+ Potentiellement tout actif échangé sur UNIv3 + déploiement de vault permissionless
+
+
+
+ Considérations de Sécurité
+
+ Protocole devant être éventuellement entièrement immuable une fois sorti du mode Beta, oracle utilisé est sans confiance (UNIv3)
+
+
+
+
+Comme vous pouvez le voir ci-dessus, je pense que l'offre est assez convaincante même par rapport aux options existantes, bien qu'elle soit un peu « bizarre » si vous êtes habitué à d'autres produits d'effet de levier plus classiques, car vous devez vous familiariser avec quelques nouveaux concepts.
+
+### Rendements polynomiaux ?!
+
+Tout d'abord, abordons **la question de l'effet de levier linéaire (le plus courant) vs polynomial (cas de Sir)**. Si vous n'êtes pas un passionné de maths, je pense que la première chose à comprendre sur les polynômes est que leur impact est de plus en plus palpable à mesure que le prix s'éloigne du prix de départ. Il vaut mieux être prudent, car cela fonctionne dans les deux sens. Illustrons avec une position hypothétique simplifiée commencée lorsque ETH = 2000 $ (les frais sont ignorés pour simplifier ; nous y reviendrons plus tard) :
+
+
+
+
+
+ 2500 $ (+25%)
+
+ 3000 $ (+50%)
+
+ 4000 $ (+100%)
+
+ 10000 $ (+400%)
+
+
+
+ Linéaire - ETH x2
+
+ 3 000
+
+ 4 000
+
+ 6 000
+
+ 18 000
+
+
+
+ Polynomial - ETH ^2
+
+ 3 125
+
+ 4 500
+
+ 8 000
+
+ 50 000
+
+
+
+ Linéaire - ETH x5
+
+ 4 500
+
+ 7 000
+
+ 12 000
+
+ 42 000
+
+
+
+ Polynomial - ETH ^5
+
+ 6 103,52
+
+ 15 187,5
+
+ 64 000
+
+ 6 250 000
+
+
+
+
+Vous voyez ce scénario de la dernière ligne/colonne, avec notre ape ETH^5 atteignant un Valhalla de plus de 6 millions de dollars sur une simple position de base de 1 ETH (avec une appréciation de prix de +400%) ? C'est le pouvoir des rendements polynomiaux. Ce que nous avons examiné ci-dessus est alléchant, bien qu'il abstrait de nombreux facteurs, y compris les frais, et suppose aucune dégradation de l'effet de levier pour les deux positions. Considérez cela comme un exemple pour comprendre la puissance du polynomial par rapport au linéaire dans un contexte financier plus que toute autre chose.
+
+Les rendements polynomiaux (paiements convexes) ont historiquement été surpromis et sous-livrés. Les livrer de manière cohérente est généralement difficile, mais ils sont généralement mis en œuvre avec des **facteurs correctifs** de différentes natures et noms : dégradation temporelle, dégradation de la volatilité, dégradation de l'effet de levier, etc. Le modèle habituel pour un tel produit consiste à **gérer des prêts entre traders et prêteurs** pour maintenir l'effet de levier aussi constant que possible. Cela conduit à des modèles où les utilisateurs d'effet de levier diffusent constamment des frais variables aux prêteurs et voient encore leurs positions souvent rééquilibrées. Avec Sir, ce facteur correctif est clair et explicite dès le départ — c'est ce frais élevé, alors plongeons-y.
+
+### Structure des Frais
+
+Ensuite, le modèle de frais, qui est également assez différent de l'habituel. Les frais de Sir sont fixes, dépendent de votre effet de levier, et sont facturés à moitié lors de l'ouverture de la position (minting d'APE) et à moitié lors de la fermeture de la position (rédemption d'APE). À première vue, ils peuvent sembler assez élevés :
+
+
+
+ Effet de Levier
+
+ Frais Totaux
+
+
+
+ ^1.5
+
+ 17,35% du principal
+
+
+
+ ^5
+
+ 69,13% du principal
+
+
+
+
+Zoomons sur une position ETH/USDC^1.5 pour mieux comprendre l'impact de l'effet de levier polynomial et des frais de Sir, avec une position hypothétique ouverte à ETH = 2000 $.
+
+
+
+Avec ETH = 4000 $ (+100%), une telle position est en hausse d'environ 17% en termes d'ETH ou de 134% en termes d'USD. Bien sûr, à ce stade, vous êtes un expert en effet de levier polynomial, et donc vous comprenez que **l'écart entre l'ETH/USDC^1.5 et la détention brute d'ETH augmente plus le prix s'apprécie**. À ETH = 6000 $ (+200%), la position est maintenant en hausse d'environ 43% par rapport à ETH ou 330% par rapport à USD. À ETH = 8000 $, nous sommes maintenant à ~65% de gains par rapport à ETH et 562% par rapport à USD. Encore une fois, cela fonctionne de la même manière en sens inverse ; veuillez vous en souvenir.
+
+Je pense que cela explicite bien le « but du jeu » avec Sir :
+
+1. Idéalement, vous voulez saisir un bon creux + retournement pour ouvrir votre position à un prix favorable et gagner rapidement suffisamment de rendements pour couvrir les frais.
+2. Votre objectif est ensuite de saisir l'écart maximal entre votre prix d'ouverture et de fermeture, sachant que chaque % que vous pouvez saisir fournit des rendements exponentiellement plus importants.
+
+La conception du produit est bien adaptée à de telles opérations car vous n'avez pas à vous soucier des frais de financement ou de la dégradation temporelle. Vous cherchez essentiellement à acheter bas et vendre haut ; bienvenue dans la crypto : sauf que cette fois, vous avez un outil qui amplifie vos rendements plus vous parvenez à le faire.
+
+En raison de sa structure de frais, **Sir est orienté vers les utilisateurs d'effet de levier ayant une perspective à long terme**, ce qui correspond à ses autres caractéristiques clés (pas de liquidation, pas de dégradation de l'effet de levier). Dans l'ensemble, les frais payés sont similaires à ceux qui seraient encourus en maintenant une position sur marge pendant un an, établissant un équilibre entre les rendements potentiels, la stabilité du protocole et les coûts initiaux. Lors de l'ouverture d'une position à effet de levier, l'une des principales préoccupations est de se tromper de timing et d'être haché par une action de prix en range, où les frais s'accumulent et emportent tout profit potentiel ; cette préoccupation est inexistante dans le modèle de Sir.
+
+Enfin, je voudrais vous rappeler une fois de plus la principale limitation de Sir : l'absence de dégradation de la liquidité ne peut être assurée que s'il y a suffisamment de liquidité pour absorber votre trade. Bien qu'il soit **raisonnable de supposer cela pour les vaults incités ^1.25, ^1.5, ou même ^2**, cela devient beaucoup moins certain pour les vaults ^5, même avec de fortes incitations, en raison des maths que j'ai partagées ci-dessus.
+
+Si vous souhaitez plus de données pour comprendre l'impact de l'effet de levier polynomial dans le contexte de Sir (=frais inclus), consultez [le nouveau calculateur sur le site de Sir](https://app.sir.trading/leverage-calculator).
+
+Remarque : Les tokens APE sont des ERC-20 ; ainsi, une composabilité supplémentaire pourrait être envisagée. Cela pourrait devenir intéressant à mesure que le protocole se développe !
+
+## Qu'en est-il des buveurs de TEA ?
+
+Maintenant que vous avez une bonne compréhension du côté de la demande, les APE/utilisateurs d'effet de levier, passons de l'autre côté, les fournisseurs de liquidité/détenteurs de TEA.
+
+Commençons par les bases : les buveurs de TEA font essentiellement du contre-trading par rapport aux APE, car ils fournissent la liquidité contre laquelle les APE rachètent s'ils parviennent à gagner et sécuriser (racheter) des gains importants. Quand je dis « contre-trading » ici, je veux dire de la même manière qu'un LP UNIv2_ETH/USDC contre-trade le marché : lorsque le marché achète principalement de l'ETH (⇒ le prix monte), les positions apportrices de liquidité se rééquilibrent vers l'USDC, et vice versa.
+
+Donc, encore plus simplement, **les détenteurs de TEA sont plus courts par rapport à l'actif sous-jacent que s'ils le détenaient simplement**. Comprendre cela est tout ce dont vous avez besoin pour pouvoir projeter l'impact des variations de prix sur votre principal. Vous devez également **garder à l'esprit l'utilisation de la liquidité,** car si vous fournissez à un vault où il y a peu ou pas d'aping, vous contre-tradez peu ou personne, et votre exposition principale devient similaire à une détention brute de l'actif sous-jacent.
+
+Bien que les détenteurs de TEA soient « plus courts » par rapport à une détention brute de l'actif sous-jacent, ils restent exposés à son appréciation de prix. Vous pouvez **penser aux détenteurs de TEA comme ETH/USD^0-1**.
+
+Maintenant, avec le principal clarifié, abordons les gains en tant que détenteur de TEA. C'est assez simple : par défaut, **les détenteurs de TEA d'un vault donné gagnent collectivement tous les frais encourus par les minters d'APE**. Les frais sont gagnés en tant que tels (même token que le token fourni) et auto-composés. Les détenteurs de TEA peuvent les racheter en brûlant leur position pour récupérer leur principal + tous les frais accumulés.
+
+En plus des frais gagnés en fonction de l'activité d'aping, **certains vaults sont également incités avec des flux d'émissions de SIR.** Ceux-ci incluent actuellement les plus utilisés : ETH/USDC1.5, wBTC/USDT1.5, SIR/ETH1.5 et SIR/ETH5. Lorsque les vaults sont incités avec des émissions de SIR, environ 10% des frais encourus par les APE sont redirigés vers les stakers de SIR.
+
+Remarque : Les tokens TEA sont des ERC-1155, limitant la composabilité supplémentaire, ce qui est une bonne chose ici, car vous voulez éviter les situations de type restaking sur ces tokens, qui sont critiques pour le bon fonctionnement du protocole.
+
+## Caractéristiques notables
+
+Avec ce qui précède, vous devriez déjà avoir une bonne compréhension du protocole, donc plutôt que de vous ennuyer avec des explications expansives de chaque subtilité, je vais plutôt zoomer sur quelques fonctionnalités de Sir que j'ai trouvées dignes de commentaire :
+
+### Maximisation de l'absence de confiance
+
+Les lecteurs de mon blog ne seront pas surpris de trouver une section abordant cela, car la décentralisation maximale et l'absence de confiance sont mes mantras. À cet égard, Sir Trading s'en sort plutôt bien, et la conception démontre la priorité accordée à ces deux sujets par ses fondateurs.
+
+Commençons par le plus important — le potentiel d'immuabilité du protocole. Compte tenu de son approche novatrice et des risques associés, rendre le protocole immédiatement entièrement immuable pourrait être inconséquent. Au lieu de cela, l'approche développée ici est un chemin progressif vers une immuabilité éventuelle avec quatre modes :
+
+
+
+Sir est actuellement en mode Roues d'Entraînement, dans lequel certains paramètres, tels que les frais, peuvent encore être ajustés. À partir du mode Roues d'Entraînement, il peut passer en mode Urgence en réponse à un bug ou à une exploitation et de là à un Arrêt (⇒ Redéploiement) si nécessaire. D'un autre côté, si tout se passe bien, les roues d'entraînement peuvent être retirées, et le protocole peut être basculé en mode Imparable, où il devient immuable. Je trouve cette approche équilibrée et intéressante, [définitivement digne d'étude](https://docs.sir.trading/protocol-overview/beta-period) pour d'autres constructeurs.
+
+Maintenant, regardons la solution d'oracle choisie, un élément critique pour tout protocole basé sur le prêt ou l'effet de levier. Ici, **la solution est simple et entièrement sans confiance : Uniswap v3.** Elle a bien sûr des limites, notamment la liquidité disponible sur Uniswap pour garantir que le prix ne soit pas facilement manipulable. Cependant, compte tenu que les principaux vaults sont des majors comme ETH ou wBTC, ce n'est pas une grande préoccupation. Cela pourrait être plus problématique pour les vaults liés à SIR, mais ici encore, la liquidité est raisonnablement suffisante par rapport à la capitalisation du token (TVL dans les pools > 35% FDV). Une atténuation supplémentaire est mise en œuvre sur l'oracle UNIv3 (TWAP de 30 min) pour mieux résister à la manipulation des prix.
+
+Une autre fonctionnalité intéressante en termes d'absence de confiance et de résilience est l'**exploitation des [enchères de tokens](https://docs.sir.trading/protocol-overview/token-auctions) pour rationaliser la distribution des frais aux stakers**. Sir est loin d'être le seul à faire cela, car, par exemple, [Euler Finance exploite une logique similaire](https://docs.euler.finance/developers/periphery/fee-flow/). De telles enchères permettent la conversion de nombreux actifs en un seul (dans ce cas, wETH) sans ajouter de compromis inutiles au protocole. Je m'attends à en voir encore plus.
+
+Remarque : Xatarrer (fondateur) a soumis lui-même une revue DeFiScan pour Sir Trading, qui est actuellement en cours d'examen. Veuillez consulter [DeFiScan](https://defiscan.info/) une fois la revue publiée pour plus de détails concernant la décentralisation de Sir.
+
+### Liquidité Possédée par le Protocole
+
+La liquidité est le sang vital de Sir, et la conception du protocole le reconnaît avec **un accent particulier sur la croissance des réserves de liquidité permanente (TEA)**. Chaque dépôt de fournisseur de liquidité comprend des frais (~8,99% de leur principal) retenus comme liquidité permanente possédée par le protocole. Ainsi, inciter les LPers avec SIR n'est pas seulement « louer » de la liquidité — c'est aussi un « rachat » partiel immédiat de leur dépôt.
+
+Grâce à cela, à mesure que le protocole se développe et peut attirer plus de fournisseurs de liquidité, il construit des réserves de liquidité permanente, permettant une « liquidité minimale garantie pour les APE » toujours croissante. C'est essentiellement une boucle vertueuse résolvant progressivement l'un des principaux inconvénients du modèle : élégant !
+
+### Modèle d'Émission de Token Continue
+
+SIR fonctionne sous un **modèle d'émission constante au taux de 2015M SIR par an**, avec la part du lion allant toujours à l'incitation des fournisseurs de liquidité. Il y a cependant un changement dans la logique de distribution, fait pour donner au protocole les moyens de sa croissance initiale dans les trois premières années :
+
+* Pour les 3 premières années, 68,13 % dirigés vers les fournisseurs de liquidité, 13,65 % vers les contributeurs pré-mainnet, 10 % réservés dans un trésor, et 8,22 % vers les investisseurs.
+* Après cela : 100% vers les fournisseurs de liquidité.
+
+Ce modèle est efficace, car aucun vesting n'est nécessaire pour l'équipe/les investisseurs/le trésor, puisque la logique est entièrement décalée ici : vous devez penser en termes de flux de tokens (X SIR/jour) plutôt qu'en solde total et vesting associé.
+
+## Mettre votre compréhension en pratique
+
+Pour conclure, nous pouvons maintenant articuler notre compréhension partagée du protocole en étudiant trois hypothèses de marché différentes articulées en stratégies :
+
+### « Je suis haussier sur ETH ou BTC sur un horizon de temps moyen/long »
+
+Celle-ci est la plus simple ; il suffit de minter le token APE ETH/USDC^1.5. L'absence de liquidation et de frais de financement vous permettra de définir cette position et de l'oublier. **Votre principale métrique à surveiller ici est le frais d'ouverture + fermeture à 17,35% : vous devez saisir une appréciation de prix d'environ 26% sur ETH pour entrer en territoire de profit**, avec vos gains augmentant de manière polynomiale à partir de là.
+
+Variantes :
+
+* Je suis haussier sur BTC : tout pareil, sauf en utilisant l'APE wBTC/USDT^1.5 (vault principal : bonne quantité de liquidité disponible).
+* Je suis haussier sur ETH contre BTC et je cherche de l'adrénaline : tout pareil, sauf en utilisant le vault wETH/wBTC^5 (attention, faible liquidité actuellement)
+* Je suis haussier sur SIR contre ETH : vous avez plusieurs niveaux d'effet de levier disponibles pour exprimer cette conviction onchain (SIR/ETH^1.5 et SIR/ETH^5 étant les plus liquides).
+
+### « Je suis baissier sur ETH sur un horizon de temps moyen/long »
+
+Vraiment ?! Pas de jugement ; il y a aussi un vault pour cela, au nom de USDC/wETH^1.5 ! Parce que ce vault est basé sur USDC, contre ETH, ouvrir une position APE là-bas signifie shorter ETH avec un effet de levier polynomial.
+
+Inversement, fournir ce vault en tant que fournisseur de liquidité (TEA) signifie contre-trader les (potentiels) shorters ⇒ être long ETH (s'il y a utilisation), mais à partir d'une base USDC cette fois. Cependant, ce vault n'est pas actuellement incité avec des émissions de SIR, donc vos gains proviendront uniquement des positions ouvertes par les APE.
+
+### « Je suis haussier sur SIR, mais pas vraiment un APE avide d'effet de levier »
+
+C'est compréhensible ; tout le monde n'est pas un maximisateur de sensations fortes. Ici, vous pourriez envisager **d'exploiter les émissions constantes aux fournisseurs de liquidité pour construire votre réserve de SIR au fil du temps et seulement au coût d'opportunité du capital**. Compte tenu des frais de fourniture LP, vous êtes « forcé » de maintenir la position pendant quelques semaines/mois pour réduire l'impact des frais. Si vous êtes inquiet de la dépréciation du principal en cas d'un important retournement de marché à la hausse, vous pourriez envisager de répartir vos dépôts sur plusieurs vaults incités pour vous en prémunir.
+
+En supposant que vous farmiez initialement avec un dépôt d'ETH ou de wBTC, vous avez une option de composition avec votre SIR fraîchement farmé : fournir les vaults SIR. Envisagez également de staker votre SIR pour maximiser une position SIR à moyen/long terme.
+
+## Discussion de Mon Implication
+
+Avant de vous quitter, j'aimerais vous donner plus de contexte sur mon implication avec Sir : Je conseille l'équipe de Sir pour les aider avec mes sujets principaux : croissance, optimisation de la tokenomie et développement commercial. Je suis rémunéré pour cet effort, et je suis également un détenteur d'APE et de TEA, et donc un farmer de SIR — **Je suis long SIR de toutes les manières possibles**.
+
+J'ai découvert Sir assez récemment (le protocole n'a que quelques semaines), mais le timing était excellent. Comme ceux qui me suivent sur Twitter le savent probablement déjà, j'ai été profondément déçu par f(x), où j'ai subi une liquidation abusive découlant de lacunes infrastructurelles de leur côté (RPCs).
+
+J'étais, depuis lors, à la recherche d'une solution alternative à f(x) et je suis tombé sur Sir, qui offre des fonctionnalités similaires (« vraie » absence de liquidation, pas de frais de financement) mais apporte également des ajouts bienvenus au mix, comme l'effet de levier polynomial vs linéaire : à la fois le protocole et le timing étaient parfaits, donc faire un effort supplémentaire pour aider à son succès s'est produit très spontanément.
+
+Je n'aborde pas le conseil comme un objet de collection à ajouter à mon portefeuille, à montrer dans 2 appels mensuels, à collecter le paiement et à en rester là. Je suis à l'opposé, tout aussi engagé, impliqué et sélectif avec eux.
+
+Avec Sir, compte tenu de la récente du protocole, mes contributions actuelles tournent autour de la sensibilisation au protocole, de son intégration dans l'écosystème et de l'explicitation de ses avantages au plus grand nombre possible, comme cela a été fait avec cet article. J'exploite mon expérience extensive en DeFi, mon réseau et ma présence pour soutenir l'équipe de toutes les manières pertinentes.
+
+### Ma position « Valhalla ou enfer, rien entre les deux »
+
+[J'ai ouvert une position SIR^5 sur mon portefeuille public tokenbrice.eth](https://etherscan.io/tx/0x5f9038d9004b53501bdf05b3f30d8fc8fd2d8da6a89299a624276c7605bf4ea7) — n'hésitez pas à la suivre : 500K SIR avec un effet de levier ^5 ⇒ rachetable pour ~155K SIR à l'initiation (~69% de frais), ouverte le 4 mars 2025 à 20:34:47 UTC. Si tout se passe bien, j'espère éventuellement racheter cela pour ~8M SIR (⇒ SIR à 2x mon prix de départ, en supposant une liquidité suffisante) et faire quelque chose d'amusant avec. **Je veux vous rappeler qu'un tel effet de levier est ce qui se rapproche le plus de la folie onchain ; cette position est maintenant connue dans la communauté comme « Valhalla ou enfer, rien entre les deux »**.
+
+Remarque : En tant que protocole construit pour la résilience, [Sir est également soutenu par le DeFi Collective](https://x.com/DeFiCollective_/status/1897575989032497390), qui a reçu un don de SIR, l'a assorti d'ETH, a initié et fourni le LP UNIv2, et a verrouillé le token LP pour un an afin de sécuriser une base de liquidité pour le token.
+
+Avertissement : Cet article et la stratégie ci-dessus ne sont pas des conseils en investissement mais des illustrations pratiques de ce que le protocole peut faire. Vous prenez vos propres décisions, et vous en êtes responsable. Au cas où cela n'était pas assez clair avec les avertissements précédents : Je suis exposé à SIR en tant que token et protocole et je bénéficie de sa croissance ; en d'autres termes, je suis aligné au maximum.
diff --git a/content/post/2025/leverage-sir.md b/content/post/2025/leverage-sir.md
new file mode 100644
index 00000000..2df343e1
--- /dev/null
+++ b/content/post/2025/leverage-sir.md
@@ -0,0 +1,333 @@
+---
+title: "Leverage Like a Sir: Polynomial Gains, No Liquidation Pains"
+description: "Exploring a novel protocol offering no funding fee no liquidation leverage with convex returns, and announcing my involvment."
+date: '2025-03-12T01:13:50.191Z'
+categories: [Projects, Lending, Yield]
+tags: [DeFi, Ethereum, Decentralized Finance, DeFi, Leverage, Immutable Protocol, Lending, Polynomial]
+image: /img/2025/leverage-sir/leverage-sir-cover.jpg
+url: leverage-sir
+difficulty: "intermediate"
+---
+
+
+A few weeks ago, Sir Trading, a fascinating novel DeFi primitive was shipped, and I quickly fell in love with it. I’ve also decided to get involved, so welcome to this article introducing Sir Trading, explaining what I found interesting in the model, and announcing my involvement as an advisor.
+
+
+## Sir.Trading explained like a business
+
+To understand Sir Trading (and it works well with most protocols), we can use a business metaphor: Who are the customers, intermediaries, and stakeholders?
+
+
+
+So let’s start from the bottom up: our “customers” are the APEs who open leverage positions and pay fees. Everything else is a "means" to that end.
+
+Our second population is the “intermediaries”, the liquidity providers on the Sir Protocol, called TEA holders, also called “gentlemen”. They are necessary because the more TEA liquidity exists, the greater APE’s capacity to lever up, and thus, the more likely users are to ape at scale. Maximizing this population is essential, as it helps to address one of the main weaknesses of the Sir model: the **absence of leverage decay can only be guaranteed if the liquidity provided is sufficient compared to the leveraged position opened.**
+
+Thus, it makes sense to incentivize liquidity providers with SIR emissions to attract liquidity proportional to APE demand. Additionally, continuous SIR rewards provide LPers with stable income, complementing the volatile minting/closing fees they also earn—a critical advantage, as LPers usually prioritize predictability (cf. Aerodrome vs. Uniswap).
+
+Finally, the SIR holders act as stakeholders. They can stake their tokens to receive ETH dividends from fees collected on positions opening and closing and, in the future, could be involved in a mini-governance centered around decisions about resource allocation (⇒ which vaults to incentivize with SIR emissions?).
+
+With our three core populations defined, we can essentially assemble them into the “business model” of Sir:
+
+
+
+
+
+SIR Protocol aims to maximize its customer base (APE holders), which drives revenue shared with stakeholders (SIR holders). Stakeholders approve SIR emissions to fund intermediaries (TEA LPers) that provide the liquidity necessary to the purpose and allocate it to the vaults most relevant to drive usage.
+
+
+## Zooming in on the APE’s side
+
+As mentioned above, the protocol's core is the APE—the ability to leverage any asset traded on UniswapV3. But what makes this leverage so interesting, especially compared to the myriad of other options now available?
+
+The table below should answer the most important questions for anyone already familiar with other protocols offering leverage, such as f(x) or Squeeth:
+
+
+
+
+ Type of Returns
+
+ polynomial (=/ multiplicative)
+
+
+
+ Max leverage
+
+ Up to ^5 with no leverage decay given sufficient liquidity, realistically ~ ^2
+
+
+
+ Liquidation
+
+ None
+
+
+
+ Rebalancing
+
+ None
+
+
+
+ Fees
+
+ No funding fees, only set fees paid when opening or closing position
+
+
+
+ Assets Supported
+
+ Potentially any traded on UNIv3 + permissionless vault deployment
+
+
+
+ Security Considerations
+
+ Protocol to be eventually fully immutable once out of Beta Mode, oracle used is trustless (UNIv3)
+
+
+
+
+
+
+As you can see above, I think the offer is quite compelling even when compared to existing options, although it is a bit “weird” if you are used to other more classical leverage products as you have to wrap your head around a few new concepts.
+
+
+### Polynomial returns?!
+
+
+First, let’s tackle **the question of linear (most common) vs polynomial leverage (Sir’s case)**. If you are not a math buff, I think the first thing to understand about polynomials is that their impact is increasingly more palpable as the price moves farther from the starting price. It is better to be careful, as it works both ways. Let’s illustrate with a hypothetical simplified position started when ETH = $2000 (fees are ignored for simplicity; we’ll come back to them later):
+
+
+
+
+
+
+ $2500 (+25%)
+
+ $3000 (+50%)
+
+ 4000 (+100%)
+
+ 10000 (+400%)
+
+
+
+ Linear - ETH x2
+
+ 3 000
+
+ 4 000
+
+ 6 000
+
+ 18 000
+
+
+
+ Polynomial - ETH ^2
+
+ 3 125
+
+ 4 500
+
+ 8 000
+
+ 50 000
+
+
+
+ Linear - ETH x5
+
+ 4 500
+
+ 7 000
+
+ 12 000
+
+ 42 000
+
+
+
+ Polynomial - ETH ^5
+
+ 6 103.52
+
+ 15 187.5
+
+ 64 000
+
+ 6 250 000
+
+
+
+
+
+You see that last row/column scenario, with our ETH^5 ape reaching a >$6M Valhalla on a mere 1 ETH base position (with a +400% price appreciation)? That’s the power of polynomial returns. What we looked at above is enticing, although it abstracts many factors, including the fees, and assumes no leverage decay for both positions. Picture it as an example of understanding the power of polynomial vs linear in a financial context more than anything else.
+
+Polynomial returns (convex payouts) have historically been overpromised and underdelivered. Delivering them consistently is usually challenging, but they are generally implemented with **corrective factors** of different natures and names: time decay, volatility decay, leverage decay, etc. The usual model for such a product revolves around **managing loans between traders and lenders** to keep the leverage as constant as possible. This leads to models where leveragers constantly stream varying fees to lenders and still see their positions often rebalanced. With Sir, this correcting factor is clear and explicit upfront – that is that steep fee, so let’s dive right into it.
+
+
+### Fee Structure
+
+Next is the fee model, which is also quite different from the usual. Sir fees are fixed, dependant on your leverage, and charged ½ at position opening (APE minting) and ½ at position closing (APE redemption). At first glance, they might seem quite steep:
+
+
+
+
+ Leverage
+
+ Total Fees
+
+
+
+ ^1.5
+
+ 17.35% of principal
+
+
+
+ ^5
+
+ 69.13% of principal
+
+
+
+
+
+Let’s zoom in on an ETH/USDC^1.5 position to understand better the impact of the polynomial leverage and the Sir’s fees, with a hypothetical position opened at ETH = $2000.
+
+
+
+With ETH = $4000 (+100%), such position is up ~17% in ETH terms or ~134% in USD terms. Of course, by this point, you are a polynomial leverage expert, and thus you understand that **the gap between the ETH/USDC^1.5 and raw ETH holding increases the further the price appreciates**. At ETH = $6000 (+200%), the position is now up ~43% vs ETH or ~330% vs USD. At ETH = $8000, we are now at ~65% gains vs ETH and ~562% vs USD. Again, this works the same way in reverse; please remember.
+
+I think this explicits well the “goal of the game” with Sir:
+
+
+
+1. Ideally, you want to seize a nice dip + reversal to open your position on a favorable price and quickly earn enough returns to cover the fees.
+2. Your goal is then to seize the maximal spread between your opening and closing price, knowing that each % you can grab provides exponentially more returns.
+
+The product's design is well-suited for such plays since you do not have to worry about funding fees or time decay. You’re essentially looking to buy low and sell high; welcome to crypto: except this time, you have a tool amplifying your returns the more you manage to do so.
+
+Because of its fee structure, **Sir is geared toward leveragers with a long-term perspective**, which matches its other key features (no liquidation, no leverage decay). Overall, the fees paid are similar to those that would be incurred maintaining a margin position for a year, striking a balance between potential returns, protocol stability, and upfront costs. When opening a leveraged position, one of the main concerns is getting the timing wrong and chopped by range-bound price action, where the fees accumulate and take away any potential profits; this concern is non-existent in Sir’s model.
+
+Finally, I’d like to remind you one more time of the main limitation of Sir: the absence of liquidity decay can only be ensured if there is sufficient liquidity to stomach your trade. While it’s pretty **reasonable to assume so for incentivized ^1.25, ^1.5, or even ^2 vaults**, it becomes much less certain for ^5 vaults, even with strong incentives, because of the maths I shared above.
+
+If you’d like more data to understand the impact of polynomial leverage in the context of Sir (=fees included), check [the new calculator on the Sir website](https://app.sir.trading/leverage-calculator).
+
+Note: APE tokens are ERC-20; thus, further composability could be envisioned. It could get interesting as the protocol grows!
+
+
+## What about the TEA drinkers?
+
+Now that you have a decent understanding of the demand side, the APE/leveragers, let’s jump to the other side, the liquidity providers/TEA holders.
+
+Let’s start with the basics: TEA drinkers are essentially ~counter-trading APEs, as they provide the liquidity APE redeem against if they manage to earn and secure (redeem) sizable gains. When I say “counter-trading” here, I mean it similarly as a UNIv2_ETH/USDC LP is counter-trading the market: when the market is mostly buying ETH (⇒ price goes up), the liquidity providing positions are rebalancing to USDC, and vice versa.
+
+So, even more simply, **TEA holders are shorter against the underlying asset than if they were just holding it**. Understanding this is all you need to be able to project the impact of price variants on your principal. You also have to **keep in mind the liquidity utilization,** as if you are supplying to a vault where there is little/no aping, you are counter-trading little to no one, and your principal exposure becomes similar to a naked raw holding of the underlying.
+
+While TEA holders are “shorter” compared to a naked raw holding of the underlying asset, they remain exposed to its price appreciation. You can **think of TEA holders as ETH/USD^0-1**.
+
+Now, with the principal cleared out, let’s address the earnings as a TEA holder. It’s pretty straightforward: by default, **TEA holders of a given vault collectively earn all the fees incurred by the APE minters**. Fees are earned in such (same token as the supplied token) and autocompounded. TEA holders can redeem them when burning their position to recover their principal + all the fees accrued.
+
+In addition to the fees earned based on aping activity, **some vaults are also incentivized with** **streams of SIR emissions.** These currently include the most utilized: ETH/USDC1.5, wBTC/USDT1.5, SIR/ETH1.5, and SIR/ETH5. When vaults are incentivized with SIR emissions, ~10% of the fees incurred by the APE are redirected to SIR stakers.
+
+Note: TEA tokens are ERC-1155, limiting further composability, which is a good thing here, as you want to avoid restaking-type situations on those tokens, which are critical to the protocol's proper functioning.
+
+
+## Noteworthy features
+
+With the above, you should already have a decent understanding of the protocol, so rather than boring you with expansive explanations of each subtleties, I’ll instead zoom in on a few features of Sir I found worthy of commentary:
+
+
+### Trustlessness maximization
+
+My blog readers will not be surprised to find a section addressing this, as maximal decentralization and trustlessness are my mantras. In that regard, Sir Trading fares quite well, and the design demonstrates the priority given to those two topics by its founders.
+
+Let’s start with the most important – the potential immutability of the protocol. Considering its novel approach and the risks associated with it, making the protocol immediately fully immutable could be inconsequential. Instead, the approach developed here is a progressive path to eventual immutability with four modes:
+
+
+
+
+
+Sir is currently in Training Wheels mode, in which some parameters, such as the fees can still be adjusted. From the Training Wheels mode, it can switch to Emergency in response to a bug or exploit and from here to a Shutdown (⇒ Redeploy) if needed. On the other hand, if all goes well, the training wheels can be removed, and the protocol can be switched to Unstoppable mode, where it becomes immutable. I find this approach balanced and interesting, [definitely worthy of studying](https://docs.sir.trading/protocol-overview/beta-period) for other builders.
+
+Now, let’s look at the oracle solution chosen, a critical element for any lending or leverage-based protocol. Here, **the solution is simple and fully trustless: Uniswap v3.** It, of course, has limits, most notably the liquidity available on Uniswap to ensure the price is not easily manipulated. However, considering the top vaults are majors like ETH or wBTC, it’s not a big concern. It could be more of an issue for SIR-related vaults, but here again, the liquidity is reasonably sufficient compared to the token market cap (TVL in pools > 35% FDV). Further mitigation is implemented on the UNIv3 oracle (30 min TWAP) to resist price manipulation better.
+
+Another interesting feature in terms of trustlessness and resilience is the **harnessing of [token auctions](https://docs.sir.trading/protocol-overview/token-auctions) to streamline fee distribution to stakers**. Sir is far from the only one doing this, as, for instance, [Euler Finance harnesses a similar logic](https://docs.euler.finance/developers/periphery/fee-flow/). Such auctions enable the conversion of many assets into one (in this case, wETH) without adding unnecessary compromises to the protocol. I expect to see even more of these.
+
+Note: Xatarrer (founder) has self-submitted a DeFiScan review for Sir Trading, which is currently under review. Please check [DeFiScan](https://defiscan.info/) once the review is published for more details regarding Sir's decentralization.
+
+
+### Protocol Owned Liquidity
+
+Liquidity is Sir's lifeblood, and the protocol design acknowledges this with **a keen focus on growing permanent liquidity (TEA) reserves**. Every liquidity provider deposit includes a fee (~8.99% of their principal) retained as permanent protocol-owned liquidity. Thus, incentivizing LPers with SIR isn’t just "renting" liquidity—it’s also an immediate partial "buyout" of their deposit.
+
+Thanks to this, as the protocol grows and can attract more liquidity providers, it builds permanent liquidity reserves, enabling an ever-increasing “minimal guaranteed liquidity for APEs”. It’s essentially a virtuous loop progressively solving one of the main drawbacks of the model: elegant!
+
+
+### Continuous Token Emission Model
+
+SIR works under a **constant emission model at the rate of 2015M SIR per year**, with the lion’s share always going to incentivize liquidity providers. There is, however, a switch in the distribution logic, made to give the protocol the means for its early growth in the first three years:
+
+
+
+* For the first 3 years, 68.13 % directed to liquidity providers, 13.65 % to pre-mainnet contributors, 10 % reserved in a treasury, and 8.22 % to investors.
+* After that: 100% to liquidity providers.
+
+This model is efficient, as no vesting is needed for the team/investors/treasury, since the logic is wholly shifted here: you have to think in terms of streams of tokens (X SIR/day) instead of total balance and associated vesting.
+
+
+## Putting your understanding in practice
+
+To wrap things up, we can now articulate our shared understanding of the protocol by studying three different market hypotheses articulated into strategies:
+
+
+### “I am bullish ETH or BTC over a mid/long time frame”
+
+This one is the most straightforward; it's as simple as minting the ETH/USDC^1.5 APE token. The absence of liquidation and funding fees will allow you to set this position and forget about it. **Your primary metric to watch for here is the opening+closing fee at 17.35%: you need to seize a ~26% price appreciation on ETH to enter profit territory**, with your gains increasing in a polynomial fashion from thereon.
+
+Variants:
+
+
+
+* I am bullish BTC: all the same, except using the wBTC/USDT^1.5 APE (main vault: good amount of liquidity available).
+* I am bullish ETH against BTC and looking for adrenaline: all the same, except using the wETH/wBTC^5 vault (careful, low liquidity right now)
+* I am bullish SIR against ETH: you have several tiers of leverage available to express that conviction onchain (SIR/ETH^1.5 and SIR/ETH^5 being the most liquid).
+
+
+### “I am bearing ETH over a mid/long time frame”
+
+Really?! No judgment; there is also a vault for that, in the name of USDC/wETH^1.5! Because this vault is USDC based, against ETH, opening an APE position there means going short ETH with polynomial leverage.
+
+Inversely, supplying that vault as a liquidity provider (TEA) means counter-trading the (potential) shorters ⇒ being long ETH (if there is utilization), but from a USDC base this time. However, this vault is not incentivized with SIR emissions currently, so your earnings will stem only from APEs opening positions.
+
+
+### “I am bullish SIR, but not really a leverage-hungry APE”
+
+That’s understandable; not everyone is a thrill-maxxer. Here, you could consider **harnessing the constant emissions to liquidity providers to build your SIR stash over time and only at capital opportunity cost**. Considering the LP supply fee, you are “forced” to sustain the position for a few weeks/months to reduce the fee's impact. If you are worried about principal depreciation in the case of a significant market reversal upward, you could consider splitting your deposits over several incentivized vaults to hedge for it.
+
+Assuming you initially farm with an ETH or wBTC deposit, you have a compounding option with your freshly farmed SIR: supplying the SIR vaults. Also, consider staking your SIR to maximize a mid/long-term SIR position.
+
+
+## Discussing My Involvement
+
+Before you, I’d like to give you more context on my involvement with Sir: I am advising the Sir team to help them with my core topics: growth, tokenomics optimization, and BD. I am compensated for this endeavour, and I am also an APE and TEA holder and, therefore, a SIR farmer – **I am long SIR in all possible ways**.
+
+I discovered Sir somewhat recently (the protocol is still just a few weeks old), but the timing was excellent. As those following me on Twitter probably already know, I have been profoundly disappointed with f(x), where I suffered from an abusive liquidation stemming from infrastructure shortcomings on their end (RPCs).
+
+I was, since then, on the hunt for an alternative solution to f(x) and stumbled upon Sir, which delivers some similar features (“real” no liquidation, no funding fees) but also brings welcome additions to the mix, such as the polynomial leverage vs linear: both the protocol and the timing were perfect, so going the extra mile to help it succeed happened very spontaneously.
+
+I do not approach advisory as a collectible to add to my wallet, show in 2 monthly calls, collect the payout, and call it a day. I am on the opposite side, equally maximally committed, involved, and selective with them.
+
+With Sir, considering the recency of the protocol, my current contributions revolve around raising awareness for the protocol, helping it get well integrated into the ecosystem, and expliciting its benefits to as many people as possible, as done with this article. I harness my extensive DeFi experience, network, and presence to support the team in all relevant ways.
+
+
+### My “Valhalla or hell, nothing in-between” position
+
+[I opened a ^5 SIR position on my public wallet tokenbrice.eth](https://etherscan.io/tx/0x5f9038d9004b53501bdf05b3f30d8fc8fd2d8da6a89299a624276c7605bf4ea7) – feel free to track it: 500K SIR levered ^5 ⇒ redeemable for ~155K SIR at inception (~69% fees), opened on Mar-04-2025 08:34:47 PM UTC. If all goes well, I hope to eventually redeem this for ~8M SIR (⇒ SIR at 2x my starting price, assuming sufficient liquidity) and do something fun with it. **I want to remind you that such leverage is the closest you can get to onchain insanity; this position is now known in the community as “Valhalla or hell, no in-between”**.
+
+Note: As a protocol built for resilience, [Sir is also supported by the DeFi Collective](https://x.com/DeFiCollective_/status/1897575989032497390), which received a SIR donation, matched it with ETH, initiated and supplied the UNIv2 LP, and locked the LP token for one year to secure a liquidity baseline on the token.
+
+Disclaimer: This article and the above strategy are not investment advice but practical illustrations of what the protocol can do. You make your own decisions, and you are responsible for them. In case that wasn’t clear enough with the previous warnings: I am exposed to SIR as a token and protocol and stand to benefit from its growth; in other words, I am maximally aligned.
diff --git a/content/post/2025/pegged-assets-swap.fr.md b/content/post/2025/pegged-assets-swap.fr.md
new file mode 100644
index 00000000..288127c0
--- /dev/null
+++ b/content/post/2025/pegged-assets-swap.fr.md
@@ -0,0 +1,132 @@
+---
+title: "Les guerres des swaps sur les actifs pegged"
+description: "Et si l'incitation constante n'était pas la meilleure façon de maintenir la liquidité, en particulier pour les actifs pegged ? Dans cet article, j'explore l'impact de la liquidité alimentée par la dette pour les swaps d'actifs pegged."
+date: '2025-07-08T01:13:50.191Z'
+categories: [DEX]
+image: /img/2025/pegged-assets-swap/pegged-assets-swap-cover.png
+tags: [DeFi, Ethereum, Velodrome, Velo, veCRV, veVELO, Aerodrome, veAERO, Ekubo, Uniswap, Fluid, EulerSwap, Euler, Smart Debt, Smart Collateral]
+url: pegged-assets-swap
+difficulty: "expert"
+---
+
+Chers lecteurs, cela fait un moment ! Comme vous le savez probablement, la gestion de la liquidité est à la fois ma passion et ma profession. Dans cet article, je souhaite revenir aux fondamentaux et offrir une brève histoire au travers du prisme des swaps d'actifs pegged. En détaillant la structure de liquidité et les plateformes qui soutiennent le mieux ces paires, nous approfondirons notre compréhension des concepts clés qui restent cruciaux. Nous aurons également l'opportunité de parler de Fluid DEX et EulerSwap, les deux lancements les plus intéressants de l'année pour la construction de liquidité, qui méritent définitivement plus d'attention ici.
+
+
+## Les débuts des swaps d'actifs pegged (2018-2019)
+
+Il était une fois, il y a plus de cinq ans, **tout ce que nous avions pour échanger sur le mainnet était Uniswap, Bancor, et quelques DEX basés sur des carnets d'ordres maladroits comme EtherDelta.** Ainsi, pour les swaps d'actifs pegged, les options étaient limitées, et nous utilisions le pool USDC/USDT d'Uniswap V2, ce qui était presque de la folie pure.
+
+Examinons cette anecdote historique pour comprendre **le niveau de gaspillage atteint** à l'époque. En ce qui concerne les pools de liquidité, le paramètre clé est l'évolution relative des prix des deux actifs : si vous avez fait du LP volatile, vous êtes familier avec cela. Si vous fournissez de la liquidité pour, disons, LINK/ETH, la pire douleur pour vous, en termes de perte impermanente, serait, par exemple, que l'ETH monte en flèche pendant que LINK s'effondre : votre position de LP diminue en ETH (qui augmente en prix) et accumule du LINK (qui chute).
+
+USDC/USDT est une autre histoire, car les deux actifs sont fortement corrélés, avec une différence de prix maximale jamais observée d'environ 10 % lors d'un événement spécifique (le dépeg de l'USDC lié à SVB) ; en temps normal, les deux ont une différence de prix de l'ordre des points de base. Cependant, UNIv2 distribue la liquidité sur toute la plage de prix, ce qui signifie qu'il alloue une quantité égale de liquidité partout, de 1 USDC = 0.0000000001 USDT à 1 USDC = 10000000000000 USDT. Pour le dire simplement : 99,9 % de la liquidité dans un UNIv2_USDC/USDT ne sera jamais utilisée. Je pense que c'est plus clair sur le graphique :
+
+
+
+
+
+La seule liquidité utile là-dedans (en supposant 1 USDC ≃ 1 USDT) se trouve à l'intersection des deux lignes vertes, représentant une part très minime de la courbe de distribution de liquidité entière.
+
+D'un autre côté, notez la distribution de liquidité StableSwap, affichée en bleu, sur le même graphique. Pour des actifs à des prix similaires, la zone couverte par la courbe est bien plus grande qu'avec l'invariant d'Uniswap.
+
+
+## La révolution StableSwap pour les swaps d'actifs pegged (2020)
+
+Une fois que StableSwap fut disponible, la liquidité des stablecoins a rapidement migré vers cette solution, car elle était significativement plus efficace (on parle d'améliorations >100x en efficacité par rapport à UNIv2). C'était **la première instance en direct de liquidité concentrée vue sur le mainnet, avant UNIv3**. Les deux sont difficiles à comparer, car UNIv3 est beaucoup plus flexible, tandis que Curve-StableSwap est plus spécialisé ; cependant, il faut rendre à César ce qui est à César. En plus de l'efficacité accrue, Curve a fourni un modèle d'incitation - veCRV+émissions CRV, qui a été [couvert plusieurs fois sur ce blog déjà](https://tokenbrice.xyz/crv-wars/).
+
+Les incitations sont critiques pour les paires d'actifs pegged, car elles ont des caractéristiques spécifiques :
+
+
+1. Elles ont tendance à être globalement **à faible volume** (par rapport à une paire volatile)
+2. **Les frais que les LP peuvent facturer sont beaucoup plus faibles** (jusqu'à récemment, la convention était de 0,3 % à 1 % par transaction pour les actifs volatils, et 0,05 % pour les actifs pegged)
+3. **Leur volume vient par pics** corrélés à des événements associés à l'actif (par exemple, le dépeg de l'USDC fut l'un des jours de volume les plus élevés jamais enregistrés pour l'USDC)
+
+À cause de tout cela, je pensais jusqu'à récemment que les structures d'incitation étaient encore plus critiques pour les paires d'actifs pegged que pour les actifs volatils. Avec l'arrivée de Fluid DEX et EulerSwap, je ne pense plus que ce soit le cas. Cependant, avant d'approfondir ces derniers, nous devons d'abord aborder une autre étape historique significative dans la liquidité des actifs pegged : la sortie d'Uniswap V3.
+
+
+## L'arrivée de la liquidité concentrée d'Uniswap V3 (2021)
+
+Uniswap V3 est sorti et a offert une liquidité concentrée personnalisable à pratiquement tous les types d'actifs, permettant des gains d'efficacité massifs pour tous les fournisseurs de liquidité. Cependant, comme ce n'était pas uniquement pour les actifs pegged, cela signifiait presque des pertes impermanentes amplifiées pour les LP d'actifs volatils. Compte tenu de la nouveauté de la structure de liquidité, ainsi que du manque d'infrastructure au début, le lancement d'UNIv3 fut initialement lent.
+
+Cependant, la concentration personnalisable a apporté des avantages tangibles, en particulier pour une sous-catégorie d'actifs pegged que j'ai qualifiée de « actifs vaguement pegged » : pensez à des paires comme :
+
+
+
+* wstETH/ETH (corrélés, mais wstETH est en hausse constante contre ETH),
+* LUSD/USDC (corrélés, mais LUSD peut légèrement sur/sous-peg)
+
+Dans de tels cas, **la liquidité concentrée d'UNIv3 a permis aux LP de reproduire une distribution similaire en efficacité à celle de StableSwap de Curve, mais ajustée aux particularités des prix des tokens**, et cela s'est traduit une fois de plus par des gains d'efficacité massifs. Cependant, le déverrouillage final (selon l'état actuel de l'industrie) n'est arrivé que des années plus tard avec l'arrivée de Fluid DEX et EulerSwap.
+
+
+## La dette comme liquidité (2025)
+
+Je ne m'étendrai pas trop sur les modèles de Fluid et EulerSwap dans cet article pour des raisons de concision, car je veux me concentrer davantage sur ce que cela signifie pour la construction de liquidité. En résumé, Fluid a trouvé une manière créative de transformer la dette en liquidité avec la « Dette Intelligente » (Smart Debt).
+
+Imaginez un utilisateur moyen fournissant un collatéral ETH et empruntant de l'USDC. Veut-il spécifiquement de l'USDC ? Très probablement, il s'en fiche tant qu'il emprunte un token stable et sûr indexée sur le dollar. Il prendrait probablement aussi de l'USDT.
+
+C'est précisément ce que fait la dette intelligente. Dans un vault de dette intelligente, notre emprunteur emprunte un mélange d'USDC et d'USDT, qui évolue constamment : sa dette sert désormais de liquidité pour la paire USDC/USDT. Ce que cela signifie pour les emprunteurs, c'est **une réduction des coûts d'emprunt, car ils gagnent maintenant des frais de trading**, ce qui peut potentiellement compenser les intérêts d'emprunt.
+
+
+
+C'est du point de vue de l'emprunteur, mais passons maintenant à la perspective d'un protocole. Qu'est-ce que cela signifie pour Circle et Tether ? Essentiellement, **une liquidité à un coût pratiquement nul, sans aucune forme d'incitation.** Rien de vraiment nouveau pour Circle, qui a été sponsorisé par tout l'écosystème pendant des années – mais pour un autre stablecoin, disons un GHO, BOLD, ou FRAX, c'est énorme.
+
+Je me suis concentré sur Fluid ici, mais le raisonnement est similaire pour EulerSwap, bien que l'implémentation soit différente. EulerSwap est encore en mode test et génère déjà un volume sérieux sur USDC/USDT.
+
+Si vous comprenez cela, vous pouvez saisir ma thèse, qui stipule simplement : « Je ne vois pas une DeFi où Euler/Fluid/Similaires ne dominent pas éventuellement les swaps d'actifs pegged. »
+
+Vous ne le voyez pas encore ? Rappelez-vous ce qui suit :
+
+* Les paires d'actifs pegged ont généralement un faible volume ⇒ faibles frais
+* Ainsi, elles nécessitent une forte incitation pour être maintenues sur un DEX classique
+* Fluid et Euler peuvent maintenir cette liquidité à un coût proche de zéro.
+
+⇒ Si (cela a déjà commencé) il y a une course vers le bas en termes de frais pour les swaps d'actifs pegged, les DEX réguliers n'ont absolument aucune chance de la gagner.
+
+
+### 0xOrb, un challenger potentiel (~2026) ?
+
+Maintenant, pour vous donner une image précise de tout le paysage des swaps d'actifs pegged, je dois mentionner un autre projet pas encore en ligne, mais prometteur : [0xOrb](https://orbswap.org/). La promesse est simple : **StableSwap, mais avec n actifs, n pouvant aller jusqu'à 1000**.
+
+Ainsi, pour les stablecoins, vous pourriez imaginer un méga-pool bien approvisionné en USDC et USDT, qui ensuite intègre des stablecoins « alternatifs » et leur offre une grande liquidité contre les majors. L'approche a du mérite pour la longue traîne des actifs pegged, mais je ne vois pas de tels pools dominer le volume principal (USDC<>USDT ou cbBTC<>wBTC).
+
+En plus de cela, de tels pools pourraient être inter-chaînes, bien que je pense que l'avantage ici est absolument marginal, voire **défavorable** (⇒ augmente les risques et la complexité de l'infrastructure sans avantages), **puisque l'USDC et l'USDT sont de plus en plus transférables 1:1 rapidement entre les chaînes grâce à des produits comme [CCTP](https://www.circle.com/cross-chain-transfer-protocol)**.
+
+
+### Qu'est-ce que cela signifie pour les acteurs DEX purs établis ?
+
+Tout d'abord, la mise en garde la plus importante : nous parlons ici des swaps d'actifs pegged. Reproduire le même playbook sur des paires volatiles est beaucoup plus difficile, [comme on l'a vu avec le vault Smart Debt+Collateral ETH/USDC de Fluid et les pertes subies par ses LP](https://gov.fluid.io/t/current-issues-with-eth-usdc-pool/1606).
+
+Les DEX qui génèrent la majeure partie de leur volume et de leurs frais grâce à des paires volatiles, comme Aerodrome, ne seront probablement pas impactés par ces nouveaux entrants. **La réalité est, cependant, beaucoup plus sombre pour les DEX axés sur les actifs pegged**, et je veux examiner deux d'entre eux pour conclure cet article :
+
+
+### Curve : fin de partie à moins de changements majeurs
+
+Les swaps d'actifs pegged restent cruciaux pour Curve, toujours considéré comme le foyer de la liquidité des stablecoins. En effet, il y a eu des tentatives pour capturer du volume volatile avec CryptoSwap, mais cela s'est avéré infructueux.
+
+Avec l'arrivée de Fluid et EulerSwap, je pense que Curve est le DEX qui a le plus à perdre, et je ne le vois pas maintenir un volume important (ils ont déjà été éjectés du top 10 il y a un moment) à moins que des changements significatifs ne se produisent :
+
+
+
+* **Révision de veCRV** : tirer parti des apprentissages des modèles plus récents comme veAERO pour optimiser l'allocation des émissions CRV.
+* **Augmentation de l'efficacité des DEX en exploitant crvUSD** : par exemple, en permettant des prêts crvUSD aux LP de Curve.
+* **Nouvelle structure de liquidité pour les actifs volatils** : afin de pouvoir prétendre à capturer le volume associé.
+
+
+### Ekubo : le dernier arrivé confiant qui court à sa perte
+
+La situation d'Ekubo est sans doute encore pire, car ils sont arrivés récemment à la fête. À première vue, Ekubo sur Ethereum est un DEX à croissance rapide qui génère des volumes sérieux. Ekubo est essentiellement une alternative à UNIv4, avec un peu plus de personnalisation de la structure de liquidité et une DAO qui s'est révélée moins extractive que celle d'Uniswap (la barre la plus basse de toutes, mais quand même).
+
+Le problème réside dans l'origine du volume : la grande majorité (>95 %) provient d'une paire USDC/USDT avec des frais de 0,00005 % et fortement incitée. Ekubo joue essentiellement une course vers le bas qu'il ne peut pas gagner, car Ekubo ne peut pas maintenir des frais extrêmement bas à long terme (les LP doivent vivre), tandis que Fluid/Euler le peuvent (si les emprunteurs reçoivent même un rendement de 0,1 % sur leur dette grâce à la dette intelligente, ils sont mieux lotis qu'avant et donc satisfaits).
+
+
+
+Avec un pool de 2,6 M$ de TVL, traitant environ 130 M$ de volume quotidien pour 662 $ de frais collectés, incité à environ 8 % en EKUBO, ils approchent déjà rapidement la limite de ce qu'ils peuvent faire.
+
+L'aspect le plus amusant de tout cela est qu'**Ekubo lui-même a initié la course vers le bas avec les frais de swap USDC/USDT et sera spectaculairement vaincu à son propre jeu**. La DeFi ne cesse jamais de divertir.
+
+Comme toujours, j'espère que cet article a été instructif et a approfondi votre compréhension du jeu des swaps d'actifs pegged. J'ai hâte de voir mon personnage se faire démolir par la communauté Ekubo simplement pour avoir exprimé une opinion basée sur des faits : leur réaction m'a donné une confiance extrême dans mon évaluation, car j'ai observé la même réponse lorsque :
+
+* J'ai dénoncé les pratiques de sécurité absurdes de MAI, et il a été piraté + dépeggé peu après.
+* J'ai dénoncé le gaslighting et les mensonges de R/David Garai, et R a été piraté et est tombé l'oubli <6 mois plus tard.
+* J'ai critiqué le comportement de l'équipe de Prisma, et ils ont été piratés et ont fermé le protocole <12 mois plus tard.
+
+Et la liste continue. Bonne chance à tous, en particulier aux détenteurs de bags EKUBO – essayez d'avoir un peu de classe dans votre désarroi, cela vous servira bien.
\ No newline at end of file
diff --git a/content/post/2025/pegged-assets-swap.md b/content/post/2025/pegged-assets-swap.md
new file mode 100644
index 00000000..3f6f7a72
--- /dev/null
+++ b/content/post/2025/pegged-assets-swap.md
@@ -0,0 +1,133 @@
+---
+title: "The Pegged Asset Swap Wars"
+description: "What if constant incentivization is not the best way to sustain liquidity, particularly for pegged assets? Exploring the impact of debt-driven liquidity for pegged assets swap."
+date: '2025-07-08T01:13:50.191Z'
+categories: [DEX]
+image: /img/2025/pegged-assets-swap/pegged-assets-swap-cover.png
+tags: [DeFi, Ethereum, Velodrome, Velo, veCRV, veVELO, Aerodrome, veAERO, Ekubo, Uniswap, Fluid, EulerSwap, Euler, Smart Debt, Smart Collateral]
+url: pegged-assets-swap
+difficulty: "expert"
+---
+
+Dear readers, it’s been a while! As you likely know, liquidity management is both my passion and profession. In this article, I aim to revisit the basics and offer a brief history through the lens of pegged asset swaps. As we detail the liquidity structure and venues that best support those pairs, we will gain a deeper understanding of key concepts that remain critical to navigating that space today. We also get the chance to cover Fluid DEX and EulerSwap, the two most interesting releases of the year for liquidity-building who definitely deserved more airtime around here.
+
+
+## The Early Days of Pegged Asset Swaps (2018-2019)
+
+Once upon a time, more than half a decade ago, **all we had to swap on the mainnet were Uniswap, Bancor, and some clunky order-book-based DEXes like EtherDelta.** So, when it came to pegged asset swaps, the options were minimal, and we were using the Uniswap V2 USDC/USDT pool, which was akin to sheer insanity.
+
+Let’s zoom in on this historical trivia to understand **the level of waste that was achieved** at that time. When it comes to liquidity pools, the key parameter is the relative evolution of the two assets' prices: if you have done any volatile LPing, you’re deeply familiar with that. If you LP say LINK/ETH, the max pain for you, in terms of impermanent loss, is, for instance, ETH shooting up while LINK is dumping: your LP position decreases in ETH (which goes up in price), and accrues LINK (which is falling).
+
+USDC/USDT is another story, though, as the two assets are deeply correlated, with a maximum price difference ever seen between them of around 10% during a specific event (the USDC SVB depeg); in regular times, the two have a price difference in the basis point range. However, UNIv2 distributes the liquidity across the entire price range, meaning it allocates an equal amount of liquidity anywhere from 1 USDC = 0.0000000001 USDT to 1 USDC = 10000000000000 USDT. To put it simply: 99.9% of the liquidity in a UNIv2_USDC/USDT will never be utilized. I think it’s clearer on the graph:
+
+
+
+
+
+The only valuable liquidity there (assuming 1 USDC ≃ 1 USDT) is located at the intersection of the two green lines, making up a very minimal share of the entire liquidity distribution curve.
+
+On the other hand, note the stableswap liquidity distribution, displayed in blue, on the same graph. For assets at similar prices, the area covered by the curve is much greater than with the Uniswap invariant.
+
+
+## The StableSwap Revolution for Pegged Assets Swaps (2020)
+
+Once StableSwap was available, stablecoin liquidity quickly migrated there, as it was significantly more efficient (we’re talking >100x improvements in efficiency vs UNIv2). It was **the first live instance ever seen of Concentrated Liquidity on mainnet, before UNIv3**. The two are difficult to compare, as UNIv3 is much more flexible, while Curve-StableSwap is more specialized; however, kudos must be given where due. Along with increased efficiency, Curve provided an incentive model - veCRV+CRV emissions, which has been [covered several times on this blog already](https://tokenbrice.xyz/crv-wars/).
+
+Incentives are critical for pegged asset pairs, as they have some specific characteristics:
+
+
+
+1. They tend to be overall **low-volume** (compared to a volatile pairing)
+2. **The fees LP can charge are much lower **(up until recently, the convention was 0.3% to 1% per trade for volatile assets, and 0.05% for pegged assets)
+3. **Their volume comes in spikes** correlated to events associated with the coin (ex, USDC depeg was one of the highest volume days ever for USDC)
+
+Because of all of the above, I thought until very recently that incentivization structures were even more critical for pegged asset pairs than for volatile assets. With the arrival of Fluid DEX and EulerSwap, I don’t think it’s the case anymore. However, before we delve into them, we must first address another significant historical milestone in pegged assets liquidity: the release of Uniswap V3.
+
+
+## The arrival of Uniswap V3 Concentrated Liquidity (2021)
+
+Uniswap V3 released and delivered customizable concentrated liquidity to essentially every asset type, enabling massive efficiency gains for all liquidity providers. However, since it wasn’t just for pegged assets, it almost meant amplified impermanent losses for volatile assets LPs. Considering the novelty of the liquidity structure, along with the lack of infrastructure in the early days, the launch of UNIv3 was initially slow.
+
+However, the customizable concentration delivered tangible benefits, especially for a subcategory of pegged assets I branded “loosely pegged assets”: think of pairs like:
+
+
+
+* wstETH/ETH (correlated, but wstETH is up-only against ETH),
+* LUSD/USDC (correlated, but LUSD can slightly over/under-peg)
+
+In such cases, **UNIv3 concentrated liquidity enabled LPs to replicate a distribution similar in efficiency to Curve’s Stableswap but adjusted to the tokens' price action particularities**, and it translated once again into massive efficiency gains. However, the final unlock (as of the current industry state) was only to come years later with the arrival of Fluid DEX and EulerSwap.
+
+
+## Debt as liquidity (2025)
+
+I won't delve too deeply into the models of Fluid and EulerSwap in this post for conciseness, as I want to focus more on what it means for liquidity building. Simply put, Fluid found a creative way to transform debt into liquidity with “Smart Debt”.
+
+Picture an average user supplying ETH collateral and borrowing USDC. Does he specifically want USDC? Most likely, he doesn’t care as long as he’s borrowing a safe and stable USD-pegged coin. He’d likely take USDT as well.
+
+That is precisely what smart debt does. In a smart debt vault, our borrower borrows a mix of USDC and USDT, which constantly evolves: his debt now serves as liquidity for the USDC/USDT pair. What that means for the borrowers is **reduced borrowing cost, as he now earns trading fees**, potentially enabling him to offset the borrowing interest.
+
+
+
+That’s from the borrower’s perspective, but now let’s switch to a protocol mindset. What does this mean for Circle and Tether? Essentially, **liquidity at virtually 0 costs, with no form of incentivization whatsoever.** Nothing really new there for Circle who has been sponsored by the whole ecosystem for years – but for another stablecoin, say a GHO, BOLD, or FRAX, that is huge.
+
+I focused on Fluid here, but the thought process is similar for EulerSwap, although the implementation is different. EulerSwap is still in testing mode and already printing serious volume on USDC/USDT.
+
+If you understand this, you can reach my thesis, which simply states, “I don’t see a DeFi where Euler/Fluid/Similar do not eventually dominate pegged-assets swaps.”
+
+Not seeing it yet? Remember the following:
+
+
+
+* Pegged assets pairs are usually low volume ⇒ low fees
+* Thus, they require heavy incentivization to maintain on a classical DEX
+* Fluid and Euler can sustain this liquidity at close to no cost.
+
+⇒ If (it already started) there is a race to the bottom in terms of fees for pegged asset swaps, regular DEXes have exactly 0% chances of winning it.
+
+
+### 0xOrb, a potential challenger (~2026)?
+
+Now, to give you an accurate picture of the whole pegged asset swap landscape, I must mention another project not live yet, but promising: [0xOrb](https://orbswap.org/). The promise is simple: **stableswap, but with n assets, n being able to go up to 1000**.
+
+So for instance, for stablecoin, you could picture a mega-pool well supplied in USDC and USDT, that then proceed to onboard “alternative” stablecoins and offer them great liquidity against the majors. The approach has merits for the long-tail of pegged assets, but I don’t see such pools dominating the core volume (USDC<>USDT or cbBTC<>wBTC).
+
+On top of that, such pools could be cross-chain, although I think the benefit here is absolutely marginal if not **detrimental** (⇒ increases the risks and complexity of the infra for no benefits), **since USDC and USDT are increasingly bridgable 1:1 fast between chains thanks to product like [CCTP](https://www.circle.com/cross-chain-transfer-protocol)**.
+
+
+## What does it mean for incumbent pure-DEX players?
+
+First, the most significant caveat: we’re discussing pegged asset swaps here. Replicating the same playbook on volatile pairs is much more challenging, [as seen in Fluid’s Smart Debt+Collateral ETH/USDC vault and the losses its LP incurred](https://gov.fluid.io/t/current-issues-with-eth-usdc-pool/1606).
+
+DEXes that generate most of their volume and fees through volatile pairs, such as Aerodrome, are likely not to be impacted by these new entrants. **The reality is, however, much grimmer for DEXes focusing on pegged assets**, and I want to consider two of these to wrap this article up:
+
+
+### Curve: game over unless there are sizeable changes
+
+Pegged assets swaps remain critical for Curve, still seen as the home of stablecoin liquidity. Indeed, there were attempts to capture volatile volume with CryptoSwap, but it proved unsuccessful.
+
+With the arrival of Fluid and EulerSwap, I think Curve is the DEX with the most to lose, and I don’t see it maintaining a prominent volume (they have already been kicked out of the top 10 a while ago) unless sizable changes are happening:
+
+* **veCRV revamp**: harnessing the learnings from newer models like veAERO to optimize the CRV emissions allocation.
+* **Increased DEX efficiency harnessing crvUSD**: for instance, by enabling crvUSD loans to Curve LPs.
+* **A new liquidity structure for volatile assets** : so that Curve can capture the associated volume.
+
+
+### Ekubo: the confident latecomer rushing to its demise
+
+Ekubo’s situation is arguably even worse, as they came only recently to the party. At face value, Ekubo on Ethereum is a fast-growing DEX printing serious volumes. Ekubo is essentially a UNIv4-alt, with slightly more liquidity structure customization and a DAO that proved less extractive than Uniswap’s (the lowest bar of all, but still).
+
+The problem lies in where the volume comes from: the vast majority (>95%) of it is on a USDC/USDT pair with 0.00005% fees and heavily incentivized. Ekubo is essentially playing a race to the bottom it cannot win because Ekubo cannot sustain extremely low fees in the long term (LPs must eat), while Fluid/Euler can (if borrowers receive even a 0.1% yield on their debt, thanks to smart debt, they are better off than without smart debt and thus happy).
+
+
+
+With a $2.6M TVL pool, processing ~$130M volume daily for $662 of fees collected daily, incentivized ~8% in EKUBO, they are already fast approaching the limit of what they can do.
+
+The most amusing aspect of all this is that **Ekubo itself initiated the race to the bottom with the USDC/USDT swap fees and will be spectacularly vainquished at its own game**. DeFi never ceases to entertain.
+
+As always, I hope this article was insightful and deepened your understanding of the pegged assets swap game. I look forward to getting my character trashed by the Ekubo community simply for stating an opinion driven by facts: their reaction gave me extreme confidence in my assessment, as I have observed the same response when:
+
+* I denounced MAI's absurd security practices, and it got hacked + depegged shortly after.
+* I denounced R/David Garai's gaslighting and lies, and R proceeded to get hacked into oblivion <6 months later.
+* I criticized Prisma’s team behavior, and they proceeded to get hacked and shut down the protocol <12 months later.
+
+And the list goes on. Best of luck to all, especially the EKUBO bag holders – try to have some class in your dismay that would serve you well.
diff --git a/content/post/2025/veNFT-infrastructure.fr.md b/content/post/2025/veNFT-infrastructure.fr.md
new file mode 100644
index 00000000..87bc9f46
--- /dev/null
+++ b/content/post/2025/veNFT-infrastructure.fr.md
@@ -0,0 +1,86 @@
+---
+title: "Gestion automatisée et collatéral : comment Autopilot, 40Acres et haiVELO font évoluer les veNFT"
+description: "Le développement de la couche d’infrastructure des veNFTs avec Autopilot, 40Acres et haiVELO: automatisation et collatéralisation."
+date: '2025-08-14T16:06:21.672Z'
+categories: [Lending, Yield, DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, veCRV, Velodrome, veVELO, Aerodrome, veAERO, 40Acres, Autopilot, haiVELO]
+toc: true
+url: veNFT-infrastructure
+image: /img/2025/veNFT-infrastructure/cover-fr.png
+difficulty: "expert"
+---
+
+Le paysage des veNFT évolue rapidement, inaugurant une nouvelle ère de finance décentralisée où le pouvoir de gouvernance et la génération de rendement sont tokenisés. À mesure que l'adoption du modèle veNFT s'est développée, **l'infrastructure qui le soutient a mûri**, exploitant le rendement natif des veNFT pour offrir de nouveaux services et automatisations.
+
+Dans cet article, je souhaite mettre en avant quelques‑uns d'entre eux: **[Autopilot](https://theautopilot.xyz/), [40Acres](https://www.40acres.finance/) & [haiVELO](https://www.letsgethai.com/)**. Vous pouvez vous référer à mes articles précédents si vous n'êtes pas déjà familier avec le modèle veNFT:
+
+* [ve(3,3), l'étape logique suivante après veCRV?](https://tokenbrice.xyz/fr/solidly-velodrome-fork/)
+* [Des nuances subtiles aux grandes conséquences: une analyse croisée de Curve et Velodrome](https://tokenbrice.xyz/fr/crv-vs-velo/)
+
+## Les veNFT ont supplanté les verrous
+
+Les veNFT permettent aux utilisateurs d'immobiliser des jetons pendant une période déterminée pour obtenir un pouvoir de vote et des rendements augmentés. Ce mécanisme incite à la participation à long terme et à l'alignement avec les objectifs du protocole. L'innovation fondamentale des veNFT est que, contrairement aux anciens modèles de verrouillage tels que veCRV, **le verrouilleur obtient un jeton représentant son verrou: le veNFT**.
+
+Mais tout comme pour les verrous Curve/Convex, la gestion des positions Velodrome et Aerodrome peut s'avérer chronophage et complexe sans les outils appropriés. Les utilisateurs disposent désormais de **tout un éventail d'options**, comme l'utilisation de leur veNFT en tant que collatéral ou l'automatisation complète de leur gestion. Plongeons‑y.
+
+### Autopilot: Gestion autonome des positions veAERO
+
+Autopilot propose une solution autonome pour la gestion des positions veAERO, permettant de détenir des veAERO de manière entièrement passive mais optimisée. Les utilisateurs délèguent leurs veAERO à Autopilot, qui n'en a pas la garde. Il s'agit plutôt de permettre à un assistant d’effectuer chaque semaine les actions suivantes sur vos veNFT:
+
+1. Vote optimisé
+2. Réévaluation (rebase) et revendication des frais + des pots‑de‑vin
+3. Vente des frais + des pots‑de‑vin en USDC
+
+
+
+Une fois qu’un utilisateur dépose son veNFT, il peut en fait ne rien faire et laisser les USDC s’accumuler, pour les réclamer à sa convenance. Ce type de service **réduit considérablement la barrière à l'entrée** pour les utilisateurs qui souhaitent bénéficier des veNFT mais manquent de temps ou d'expertise pour une gestion active.
+
+Le site est clair, et l'interface utilisateur fournit un détail des récompenses et de la réévaluation pour chaque époque, facilitant la comptabilité pour les projets ou les DAO qui souhaitent également utiliser Autopilot.
+
+### 40Acres: des prêts auto‑remboursables avec un collatéral veNFT
+
+Au‑delà de la gestion autonome, des instruments financiers innovants sont développés autour des veNFT. [40Acres](https://www.40acres.finance/) propose un service offrant **des prêts auto‑remboursables garantis par des veAERO/veVELO**. Ce mécanisme permet aux utilisateurs de débloquer de la liquidité à partir de leurs veNFT verrouillés sans avoir à vendre leurs positions.
+
+
+
+40acres dispose également d'un «Autopilot» intégré, qui gère les votes et la collecte des récompenses au nom des utilisateurs. Ils peuvent aussi **personnaliser l’utilisation de leurs récompenses**, avec diverses répartitions en pourcentage entre le remboursement ou la croissance de la position (achat et verrouillage de plus de AERO). Le LTV est ajusté pour correspondre à un remboursement sur environ 52 époques: une année pour se rembourser entièrement.
+
+Ce service transforme les veNFT en actifs plus liquides, permettant aux utilisateurs d’**accéder à un capital immédiat tout en exploitant intelligemment le potentiel de rendement futur**.
+
+### haiVELO: amélioration de rendement sur veVELO
+
+
+
+Certains projets **tirent intelligemment parti des Dromes en offrant un service aux détenteurs de veNFT** ou aux fournisseurs de liquidité. L’un d’eux est [HAI](http://letsgethai.com/earn), avec haiVELO. Pour les utilisateurs, haiVELO fournit un dérivé liquide de veVELO avec une amplification supplémentaire du rendement, puisqu’il peut servir de collatéral pour minter du HAI. Le vote est optimisé pour le rendement, et payé en HAI.
+
+### Relayers: stratégies OG
+
+Au‑delà des infrastructures supplémentaires et des intégrations, Velodrome et Aerodrome offrent, à la base, les relais, fournissant **un accès en un clic à des stratégies de vote partagé et de capitalisation**. La plupart sont centrés sur un projet donné cherchant à développer sa liquidité, mais certains peuvent aussi être motivés par une cause, comme les relais de la DeFiCollective.
+
+
+
+Les projets peuvent construire sur leurs relais, par exemple en attribuant des récompenses aux déposants fidèles, mais nous n’en avons pas encore beaucoup vu.
+
+## Projets x Infrastructure
+
+Pour illustrer comment cette couche d’infrastructure supplémentaire impacte les projets impliqués dans l’écosystème, laissez‑moi discuter des Luchadores et en particulier de leur stratégie veAERO. **Deux ensembles de veAERO** sont gérés pour fournir un équilibre de rendement, d'utilité et de croissance. **Le premier, déposé dans Autopilot**, procure un flux constant de stablecoins pour le paiement des dépenses. Un **second veAERO déposé dans le relais El Volador Luchador** soutient les rendements des pools LUCHA sur Aerodrome, que le trésor alimente également à hauteur d’environ 200000$. La stratégie est **entièrement automatisée** grâce à Autopilot et ne nécessite que la définition de la stratégie de vote du relayer.
+
+
+
+En plus de **couvrir les salaires de deux membres clés (~2000$ par mois)**, la gestion efficace de la position offre **des leviers de croissance soutenue pour le projet**, ce qui lui a permis de constituer une réserve d’environ 13000$ en ETH et en stablecoins, **tout en maintenant 400000$ de liquidité pour son jeton**. Le projet contrôle maintenant un total d’environ 223000 veAERO, dont la valeur nominale équivaut presque à l’ensemble de la capitalisation de marché de LUCHA.
+
+L’intégration des veNFT dans des produits plus avancés est fascinante à observer. Comme ils incluent un rendement solide de 25–30% lorsqu’ils sont correctement optimisés, ils offrent de nombreuses options allant des prêts auto‑remboursables à une source de rendement en stablecoins entièrement automatisée. De telles innovations accroissent l’accessibilité et l’efficacité du capital, tout en favorisant la croissance d’un écosystème. 40Acres compte désormais plus de 40M$ de dépôts, tandis qu’Autopilot gère 5,8M de veAERO, soit environ 8M$.
+
+## PS: N'oublions pas la comptabilité
+
+Avant de conclure, je souhaite partager un dernier ensemble de **conseils et d’outils qui pourraient s’avérer utiles aux détenteurs de veAERO/veVELO** concernant la comptabilité.
+
+Ce n'est pas le sujet le plus excitant, mais il reste essentiel pour une bonne gestion des positions, comme mon expérience avec la [DeFi Collective](https://deficollective.org/), où c'est un sujet clé, me l'a appris. L’outil le plus notable à exploiter est un tableau de bord Dune personnalisé qui peut facilement être adapté à votre position, permettant un suivi et un rapport hebdomadaires sur:
+
+1. Les frais de trading gagnés (votes)
+2. Les pots‑de‑vin gagnés (votes)
+3. AERO/VELO revendiqués (LP)
+
+Vous trouverez la [version Velodrome/OP ici](https://dune.com/spicypiz/defi-collective-pools), et la [version Aerodrome/Base](https://dune.com/spicypiz/defi-collective-pools-base) ici.
+
+Pour ceux qui souhaitent ne laisser aucune dépense de côté, le [tableau de bord Dune de vérification des dépenses en gas de 0Khmer](https://dune.com/0xkhmer/gas-spent-checker) se révèlera également très utile. Je suis enthousiaste de voir les veNFT se développer et les nouvelles possibilités qu’ils offrent à la fois aux projets et aux détenteurs individuels: j’espère que cet article vous a aidé à tirer le meilleur parti de vos veNFT.
diff --git a/content/post/2025/veNFT-infrastructure.md b/content/post/2025/veNFT-infrastructure.md
new file mode 100644
index 00000000..d9d266f8
--- /dev/null
+++ b/content/post/2025/veNFT-infrastructure.md
@@ -0,0 +1,87 @@
+---
+title: "Turning Locks into Leverage: How Autopilot, 40Acres & haiVELO Evolve veNFTs"
+description: "The development of the veNFT infrastructure layer with Autopilot, 40Acres, and haiVELO: automation, collateral, and yield enhancement."
+date: '2025-08-14T16:06:21.672Z'
+categories: [Lending, Yield, DEX]
+tags: [DeFi, Ethereum, Decentralized Finance, Curve Finance, veCRV, Velodrome, veVELO, Aerodrome, veAERO, 40Acres, Autopilot, haiVELO]
+toc: true
+url: veNFT-infrastructure
+image: /img/2025/veNFT-infrastructure/cover.png
+difficulty: "expert"
+---
+
+The landscape of veNFTs is rapidly evolving, ushering in a new era of decentralized finance where governance power and yield generation are tokenized. As the adoption of the veNFT model grew, **the infrastructure supporting it matured**, harnessing veNFT’s native yield to deliver novel services and automations.
+
+In this article I want to spotlight a few of these: **[Autopilot](https://theautopilot.xyz/), [40Acres](https://www.40acres.finance/) & [haiVELO](https://www.letsgethai.com/)**. You can refer to my previous articles if you are not already familiar with the veNFT model:
+
+* [ve(3,3), the logical next step after veCRV?](https://tokenbrice.xyz/solidly-velodrome-fork/)
+* [Subtles nuances with great consequences: a cross analysis of Curve and Velodrome](https://tokenbrice.xyz/crv-vs-velo/)
+
+## veNFTs took over the locks
+
+veNFTs allow users to lock up tokens for a set period to gain voting power and boosted yields. This mechanism incentivizes long-term participation and alignment with protocol goals. The critical innovation of veNFTs is that, unlike previous lock models such as veCRV, the **locker obtains a token representing their lock: the veNFT**.
+
+But just like with Curve/Convex locks, managing Velodrome and Aerodrome positions can prove time-consuming and complex without the appropriate tools. Users now have **tons of options**, such as using their veNFT as collateral or completely automating their management. Let’s dive in.
+
+### Autopilot: Autonomous veAERO Position Management
+
+Autopilot offers an autonomous solution for managing veAERO positions, enabling fully passive yet optimized veAERO holding. Users delegate their veAERO to Autopilot, which does not have any custody. It’s more like allowing a helper on your veNFTs to perform the following every week:
+
+1. Optimized voting
+2. Rebase and fees+bribes claim
+3. Selling fees+bribes to USDC
+
+
+
+Once a user deposits his veNFT, he can essentially do nothing and let the USDC accrue, to claim at his convenience. This type of service significantly **lowers the barrier to entry** for users who want to benefit from veNFTs but lack the time or expertise for active management.
+
+The website is clear, and the UI provides a rewards and rebase breakdown for every epoch, facilitating accounting for projects or DAOs looking to harness Autopilot as well.
+
+### 40Acres: Self-Repaying Loans with veNFT Collateral
+
+Beyond autonomous management, innovative financial instruments are being developed around veNFTs. [40Acres](https://www.40acres.finance/) provides a service offering** self-repaying loans collateralized by veAERO/veVELO**. This mechanism allows users to unlock liquidity from their locked veNFTs without having to sell their positions.
+
+
+
+40acres has a built-in “Autopilot” as well, which manages the voting and collection of rewards on behalf of users. They can also **customize how to use their rewards**, with various percentages allocated to repayment or position growth (buying and locking more AERO). The LTV is adjusted to match a ~ 52 epoch repayment: a year to fully self-repay.
+
+This service transforms veNFTs into more liquid assets, enabling users to **access instant capital while smartly harnessing future yield potential**.
+
+### haiVELO: Enhancing VELO earnings
+
+
+
+Some projects are **smartly harnessing the Drome by providing a service to veNFT holders** or liquidity providers. One of these is [HAI](http://letsgethai.com/earn), with haiVELO. For users, haiVELO provides a liquid derivative of veVELO with additional yield amplification, since it can be collateral for minting HAI. It optimizes the voting for yield, paid out in HAI.
+
+### Relayers: OG strategies
+
+Beyond additional infrastructure and integrations, Velodrome and Aerodrome offer, at the base level, the relays, providing **one-click access to shared voting and compounding strategies**. Most of them are centered around a given project looking to develop their liquidity, but some can also be cause-driven, like the DeFiCollective’s relays.
+
+
+
+Projects can build on top of their relays, for instance, by allocating rewards to sustained depositors, but we haven’t seen much of this yet.
+
+## Projects x Infrastructure
+
+To illustrate how this additional infrastructure layer impacts projects involved in the ecosystem, let me discuss the Luchadores and particularly their veAERO strategy. **Two sets of veAERO** are managed to provide a balance of yield, utility, and growth. **The first, deposited into Autopilot**, provides a constant stream of stablecoins for the payment of expenses. A **second veAERO deposited into El Volador Luchador relay** supports the yields on LUCHA pools on Aerodrome, which the treasury also seeds with approximately $200k. The strategy is **fully automated** thanks to Autopilot and only requires defining the relayer voting strategy.
+
+
+
+
+On top of **covering two core members' salaries (~$2000/month)**, the effective management of the position provides **sustained growth levers to the project**, which enabled it to build a ~$13k reserve in ETH and stablecoins, **while sustaining $400k worth of liquidity for its token**. The project now controls a total of ~223k veAERO, at face value worth almost as much as LUCHA’s whole market cap.
+
+The integration of veNFT into more advanced products is fascinating to witness. As they come built-in with a solid 25-30% yield while properly optimized, they offer a lot of options ranging from self-repaying loans to a fully automated stablecoin yield source. Such innovations deliver increased accessibility and capital efficiency, while fostering the growth of an ecosystem. 40Acres now has over $40M of deposits, while Autopilot manages 5.8M veAERO, approximately $8M.
+
+## PS: Let’s not forget accounting
+
+Before we wrap up, I'd like to share one last set of **tips and tools that could prove useful to veAERO/veVELO** **holders** regarding accounting.
+
+It’s not the most exciting topic, but it remains essential for a sound management of positions, as my experience with the [DeFi Collective](https://deficollective.org/), where this is a key topic, taught me. The most notable tool for you to harness is a custom Dune dashboard that could easily be adjusted to your position, enabling weekly tracking and reporting on:
+
+1. Trading fees earned (voting)
+2. Bribes earned (voting)
+3. AERO/VELO claimed (LP)
+
+Find the [Velodrome/OP version here](https://dune.com/spicypiz/defi-collective-pools), and the [Aerodrome/Base version](https://dune.com/spicypiz/defi-collective-pools-base) here.
+
+For those looking to leave no expenses behind, [0Khmer’s Gas Spent Check Dune Dashboard](https://dune.com/0xkhmer/gas-spent-checker) will also prove very handy. I’m excited to see the veNFT growing, and the new possibilities it enables for both projects and individual holders: I hope this article helped you make the most of your veNFTs.
\ No newline at end of file
diff --git a/content/post/2026/defi-bullshit-detector.md b/content/post/2026/defi-bullshit-detector.md
new file mode 100644
index 00000000..ee8142ef
--- /dev/null
+++ b/content/post/2026/defi-bullshit-detector.md
@@ -0,0 +1,396 @@
+---
+title: "DeFi Bullshit Detector"
+description: "Setup guide for a Claude instance that trusts onchain data over marketing."
+date: '2026-02-07T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Ethereum, Decentralized Finance]
+url: defi-bullshit-detector
+image: /img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.png
+draft: false
+type: post
+difficulty: "beginner"
+---
+
+In the Arena this week, I tried something different: instead of doing things onchain as usual, I wanted to show how to setup a Claude instance dedicated to DeFi research, and the results were impressive.
+
+In 1h15, we were able to setup a new Claude instance from scratch, have it write its claude.md file with our instructions, install the necessary tools to query onchain data, and perform a test analysis on ThGold which returned many critical red flags, several of which were not previously discovered by another researcher as far as I could see.
+
+All of this happened live and was recorded:
+
+
+
+
+Considering the relevance and quality of the finding, I figured I would document this setup further with a blog article to enable anyone curious to replicate locally, and conduct research on any protocol they want.
+
+## What kind of results to expect?
+
+This claude instance was designed live, so watch the video for the full context, but the short story is that he has been instructed to be maximally adversarial, never take the word from team members and official websites at face value, and trust the observable onchain reality above anything else. He puts a particular focus on the team members and their previous involvements. He established itself this information hierarchy, that provides a good summary of how this Claude instance thinks:
+
+
+
+We ran the bot live on thGold, with specific instructions to also explore thBILL, another product using the same infrastructure, considering thGold recency. Several red-flag findings were discovered, including [a condemnation for fraud and misappropriation of company funds](https://irblaw.com.sg/learning-centre/mustaq-ahmad-v-ayaz-ahmed-and-others-2024-sghca-17/) of the founder and main stakeholder of one of the five counterparties involved in the infrastructure. [The full report is accessible here](https://github.com/TokenBrice/blog/blob/master/static/others/defi-bullshit-detector/theo-thgold.md).
+
+Since then, I have ran the bot on two other projects, and it benefited from the Opus 4.5 ⇒ 4.6 update leading to even more insightful results:
+
+[ETHStrat was identified as a very high risk project with medium-high confidence](https://github.com/TokenBrice/blog/blob/master/static/others/defi-bullshit-detector/ethstrat.md). And to double check that our bot is not too harsh on the reviewed projects, I had him conduct research on a project I know well and consider of the highest grade: [Liquity. He concluded to a “Conclusively Positive” verdict with high confidence](https://github.com/TokenBrice/blog/blob/master/static/others/defi-bullshit-detector/liquity.md).
+
+## How to set it up
+
+The recording of the live remains the best resources if you want a step by step walkthrough, I’ll just share here the core files used:
+
+### The root claude.md
+
+{{< details title="View root claude.md file" >}}
+
+```markdown
+# Claude Code Project Configuration
+
+## Workflow Orchestration
+
+### 1. Plan Mode Default
+- Enter plan mode for ANY non-trivial task (3+ steps or architectural decisions)
+- If something goes sideways, STOP and re-plan immediately – don't keep pushing
+- Use plan mode for verification steps, not just building
+- Write detailed specs upfront to reduce ambiguity
+
+### 2. Subagent Strategy
+- Use subagents liberally to keep main context window clean
+- Offload research, exploration, and parallel analysis to subagents
+- For complex problems, throw more compute at it via subagents
+- One task per subagent for focused execution
+
+### 3. Self-Improvement Loop
+- After ANY correction from the user: update `tasks/lessons.md` with the pattern
+- Write rules for yourself that prevent the same mistake
+- Ruthlessly iterate on these lessons until mistake rate drops
+- Review lessons at session start for relevant project
+
+### 4. Verification Before Done
+- Never mark a task complete without proving it works
+- Diff behavior between main and your changes when relevant
+- Ask yourself: "Would a staff engineer approve this?"
+- Run tests, check logs, demonstrate correctness
+
+### 5. Demand Elegance (Balanced)
+- For non-trivial changes: pause and ask "is there a more elegant way?"
+- If a fix feels hacky: "Knowing everything I know now, implement the elegant solution"
+- Skip this for simple, obvious fixes – don't over-engineer
+- Challenge your own work before presenting it
+
+### 6. Autonomous Bug Fixing
+- When given a bug report: just fix it. Don't ask for hand-holding
+- Point at logs, errors, failing tests – then resolve them
+- Zero context switching required from the user
+- Go fix failing CI tests without being told how
+
+## Task Management
+
+1. **Plan First**: Write plan to `tasks/todo.md` with checkable items
+2. **Verify Plan**: Check in before starting implementation
+3. **Track Progress**: Mark items complete as you go
+4. **Explain Changes**: High-level summary at each step
+5. **Document Results**: Add review section to `tasks/todo.md`
+6. **Capture Lessons**: Update `tasks/lessons.md` after corrections
+
+## Core Principles
+
+- **Simplicity First**: Make every change as simple as possible. Impact minimal code.
+- **No Laziness**: Find root causes. No temporary fixes. Senior developer standards.
+- **Minimal Impact**: Changes should only touch what's necessary. Avoid introducing bugs.
+```
+
+{{< /details >}}
+
+### The /defi-research/ claude.md
+
+This file was established by Claude itself, with our instructions, during the live. If you import it as such, ask Claude to review it and adjust it to your local setup, and make sure that he has indeed the necessary toolings to query onchain data.
+
+{{< details title="View DeFi Researcher Claude md file" >}}
+
+```markdown
+# DeFi Adversarial Research Agent
+
+## Prime Directive
+
+You are a DeFi due diligence investigator operating under **maximum adversity assumptions**. Your job is to find the truth about DeFi projects, not to confirm what they claim about themselves. Every project is a potential rug pull until independently proven otherwise.
+
+**Default stance: guilty until proven innocent.**
+
+## Epistemological Framework
+
+### Trust Hierarchy (most trusted first)
+
+1. **On-chain data** — Transactions, contract code, wallet flows. Immutable and verifiable.
+2. **Independent third-party analysis** — Auditors, security researchers, DeFi analysts with no financial ties to the project.
+3. **Community-sourced intelligence** — Independent developers, DeFi power users, and researchers commenting on the project from outside its ecosystem.
+4. **Historical digital footprints** — GitHub commits, archived tweets, old forum posts that predate the current project narrative.
+5. **Official project communications** — Docs, blog posts, website copy. **Treat as marketing material. Assume everything here is strategically crafted to present the most favorable picture possible. Cross-verify every factual claim against sources ranked 1-4.**
+
+### What You Must Never Do
+
+- Never summarize a project's official pitch as if it were fact
+- Never take team bios at face value
+- Never assume an audit means security
+- Never treat TVL as a measure of legitimacy
+- Never let the project's narrative frame your research structure
+- Never present unverified claims without explicitly labeling them as such
+
+## Research Methodology
+
+When given a DeFi project to investigate, execute the following phases. **Do not skip phases.** Write findings to `tasks/todo.md` and track progress.
+
+### Phase 1: Team Deep Dive (Highest Priority)
+
+The team is the single most important attack surface. People rug, not protocols.
+
+#### GitHub Analysis
+- Find every team member's GitHub profile
+- **Analyze commit history thoroughly** — not just the current project, but ALL repositories they've contributed to
+- Look for contributions to projects they don't mention publicly (this reveals hidden affiliations)
+- Check commit frequency patterns — are they actually building, or is the repo mostly forks and cosmetic commits?
+- Look for repos that were deleted or made private (check references, forks, and cached data)
+- Examine code quality in their commits — are these real developers or figureheads?
+- Check if the same codebase appears in other projects (fork-and-rebrand pattern)
+- Note any contributions to known scam/failed projects
+
+#### Twitter/Social Media Forensics
+- Go deep into tweet history, not just recent posts
+- **Flag excessive shilling** of any specific project — especially if they promoted something that later failed or rugged
+- Look for deleted tweets (use web archives, cached results, third-party tweet databases)
+- Check for patterns: do they jump from project to project? Are they serial promoters?
+- Analyze follower quality — inflated follower counts with low engagement are a red flag
+- Cross-reference who they interact with — connections to known bad actors?
+- Check if their social media presence only started recently (manufactured identity)
+
+#### Background Verification
+- **Do NOT trust their self-reported work history.** Verify every claim independently.
+- Search for them on LinkedIn, but verify employment claims against company records, news, other employees' endorsements
+- Look for legal records, past company registrations, regulatory actions
+- Search for their name in connection with lawsuits, complaints, or regulatory filings
+- Check if they use pseudonyms across different platforms and what those pseudonyms reveal
+- If they claim credentials (degrees, certifications), verify them
+
+#### Red Flag Triggers (Team)
+- Anonymous team with no verifiable track record
+- Team members who previously worked on projects that failed/rugged
+- Exaggerated or unverifiable credentials
+- History of deleting social media content
+- No meaningful GitHub contributions despite claiming to be builders
+- Sudden appearance in crypto with no prior digital footprint
+
+### Phase 2: Third-Party Intelligence Gathering
+
+**This phase is about what the ecosystem says about the project, not what the project says about itself.**
+
+#### Independent Analyst Coverage
+- Search for reviews, analyses, and commentary from independent DeFi researchers
+- Check DeFi-focused publications (The Defiant, Rekt News, DL News) for coverage
+- Look for security researcher commentary on the protocol
+- Search crypto-native forums (Ethresear.ch, governance forums of adjacent protocols)
+- Check if reputable DeFi figures have commented positively or negatively
+
+#### Audit and Security Assessment
+- Identify ALL audits — check the audit firm's reputation independently
+- Read the actual audit reports, not the project's summary of them
+- Check if critical findings were addressed or just acknowledged
+- Look for audits that were quietly dropped or firms that distanced themselves
+- Search for independent security reviews beyond paid audits
+- Check if the contracts deployed on-chain match the audited code
+
+#### Community Sentiment (Independent Sources)
+- Reddit threads (especially r/CryptoCurrency, r/DeFi, r/ethfinance) — focus on critical posts
+- Discord/Telegram of COMPETING projects — competitors often surface legitimate concerns
+- CT (Crypto Twitter) discussion from people NOT financially incentivized to promote the project
+- DeFiLlama forums and community discussions
+- Search for "scam," "rug," "concern," "risk" paired with the project name
+
+### Phase 3: On-Chain Investigation
+
+#### Smart Contract Analysis
+- Verify contract source code is verified on block explorer
+- Check for admin keys, upgrade proxies, and centralization vectors
+- Look for unusual permissions (mint functions, pause mechanisms, blacklist capabilities)
+- Analyze the contract's dependency tree — are they using battle-tested libraries or custom code?
+- Check for timelocks on admin functions and their actual duration
+- Verify multisig configurations — how many signers? Who are they?
+
+#### Token and Treasury Analysis
+- Map the token distribution — who holds the largest positions?
+- Trace treasury wallets and their transaction history
+- Look for insider wallet patterns (wallets funded from the same source before token launch)
+- Check for wash trading on DEXes
+- Analyze vesting schedules and actual unlock behavior vs. what was promised
+- Look for tokens being quietly moved to exchanges
+
+#### Transaction Pattern Analysis
+- Analyze early transactions — who was the first to interact with the protocol?
+- Look for suspicious MEV activity or front-running patterns
+- Check for circular transactions that inflate metrics
+- Verify TVL independently — is it real liquidity or recursive/leveraged positions?
+- Track large wallet movements in and out of the protocol
+
+### Phase 4: Comparative Analysis
+
+- Compare the protocol against similar projects that later turned out to be scams
+- Identify patterns shared with known rug pulls (Wonderland, Celsius, FTX, Terra/Luna)
+- Check if the tokenomics model is sustainable or Ponzi-dependent
+- Assess whether the yield source is identifiable and realistic
+- If yields seem too high, demand an explanation backed by on-chain evidence
+
+## Output Format
+
+Every research report MUST include:
+
+### 1. Executive Summary
+- One-paragraph verdict with confidence level (High/Medium/Low)
+- Top 3 risks identified
+- Top 3 positive signals (if any)
+
+### 2. Team Assessment
+- Individual profiles with verified vs. unverified claims clearly separated
+- GitHub activity summary with links
+- Social media forensic findings
+- **Explicitly list what could NOT be verified**
+
+### 3. Third-Party Consensus
+- What independent analysts are saying
+- Security posture based on audits and independent reviews
+- Community sentiment from non-affiliated sources
+
+### 4. On-Chain Findings
+- Contract risk assessment
+- Token distribution analysis
+- Suspicious patterns identified
+
+### 5. Red Flags Register
+- Numbered list of every concern found, rated by severity (Critical/High/Medium/Low)
+- For each flag: the evidence, the source, and why it matters
+
+### 6. Unresolved Questions
+- What you could NOT determine and why
+- What additional investigation would be needed
+- **Never fill gaps with assumptions — declare them openly**
+
+## Operational Rules
+
+### Research Execution
+- Use subagents aggressively to parallelize research across team members and data sources
+- When WebFetch fails, use Playwright MCP as fallback
+- Archive key findings with URLs and timestamps — web content disappears
+- When a source contradicts official claims, **highlight the contradiction explicitly**
+- If you find something alarming, do not bury it in the middle of a report — lead with it
+
+### Intellectual Honesty
+- If the evidence is genuinely positive, say so — adversarial doesn't mean dishonest
+- Distinguish between "no evidence of wrongdoing" and "evidence of good behavior"
+- Rate your confidence level for every major claim
+- If your research is limited by tool access or data availability, state that clearly
+- Never present absence of evidence as evidence of absence
+
+### Self-Correction
+- After each research session, update `tasks/lessons.md` with:
+ - New patterns observed
+ - Research techniques that worked or failed
+ - Sources that proved reliable or unreliable
+ - Red flags that turned out to be false alarms (and why)
+- Review lessons before starting any new project investigation
+
+## On-Chain Data Toolkit
+
+### DeFiLlama CLI (`tools/defillama.py`)
+
+A Python toolkit (stdlib only, no dependencies) that wraps the entire DeFiLlama API. Use it for on-chain and market data verification.
+
+```bash
+# Protocol deep dive — TVL, chains, raises, hallmarks, GitHub orgs
+python3 tools/defillama.py protocol
+
+# Search for a protocol by name/symbol
+python3 tools/defillama.py search ""
+
+# Current TVL
+python3 tools/defillama.py tvl
+
+# Token prices (current)
+python3 tools/defillama.py prices "coingecko:"
+python3 tools/defillama.py prices "ethereum:"
+
+# Yield pools — check if yields are real
+python3 tools/defillama.py yields --project
+
+# Fees & revenue — is the protocol making money?
+python3 tools/defillama.py fees
+
+# DEX volume
+python3 tools/defillama.py dex-volume
+
+# Funding rounds — who invested, when, how much
+python3 tools/defillama.py raises --name ""
+
+# Hacks & exploits — has this protocol or team been involved?
+python3 tools/defillama.py hacks --name ""
+
+# Treasury holdings
+python3 tools/defillama.py treasury
+
+# Stablecoins overview
+python3 tools/defillama.py stablecoins
+
+# Chain TVL rankings
+python3 tools/defillama.py chains
+
+# Bridge volumes
+python3 tools/defillama.py bridges
+
+# Raw API access (any DeFiLlama URL)
+python3 tools/defillama.py raw "https://api.llama.fi/..."
+```
+
+The toolkit can also be imported as a Python module for more complex analysis:
+```python
+from tools.defillama import DefiLlama
+dl = DefiLlama()
+protocol = dl.get_protocol("aave")
+raises = dl.search_raises("ethena")
+pools = dl.search_pools(project="lido")
+```
+
+Full API reference: `docs/defillama-api-reference.md`
+
+### How to Use DeFiLlama Data in Research
+
+DeFiLlama data is your **primary source for on-chain verification**. Use it to:
+
+1. **Verify TVL claims** — Compare what the project says vs. what DeFiLlama reports. Check for recursive/inflated positions.
+2. **Assess revenue sustainability** — Use `fees` to check if yields come from real revenue or token emissions.
+3. **Map funding/investors** — Use `raises` to identify who backed the project and cross-reference with other portfolio companies.
+4. **Check hack history** — Use `hacks` to find if the protocol or its forks have been exploited.
+5. **Validate treasury** — Use `treasury` to verify the protocol actually holds what it claims.
+6. **Track TVL trends** — Use `protocol` to see historical TVL and identify suspicious spikes/drops.
+7. **Find connected projects** — Protocol data includes GitHub orgs, sub-protocols, and chain deployments that reveal scope and relationships.
+
+## Tool Usage Priority
+
+1. **DeFiLlama toolkit** (`tools/defillama.py`) — On-chain data verification, TVL, fees, raises, hacks, treasury
+2. **WebSearch** — Third-party intelligence gathering (analysts, news, forum discussions)
+3. **WebFetch** — Reading specific articles, audit reports, forum threads
+4. **Playwright MCP** — Fallback when WebFetch is blocked (Medium, LinkedIn, etc.)
+5. **GitHub API (via Bash/gh)** — Deep commit history and repository analysis
+6. **Subagents** — Parallelize research across multiple team members and data sources simultaneously
+
+## Key Reminder
+
+Your user is relying on you to find what the project doesn't want found. Surface-level research is worse than no research — it creates false confidence. Dig deep or flag that you couldn't.
+
+```
+
+{{< /details >}}
+
+
+
+I hope this tooling will prove helpful, you can now essentially have a professional-grade DeFi adversarial researcher at your disposal, for minimal efforts: make the most of it\!
\ No newline at end of file
diff --git a/content/post/2026/pharos.md b/content/post/2026/pharos.md
new file mode 100644
index 00000000..8657ce49
--- /dev/null
+++ b/content/post/2026/pharos.md
@@ -0,0 +1,195 @@
+---
+title: "Pharos: Free and Open Research-Grade Stablecoin Intelligence"
+description: "150+ stablecoins tracked, peg monitoring, early warning scores, safety ratings, liquidity analysis, and more: a public good built to fill the stablecoin information vacuum."
+date: '2026-03-12T01:13:50.191Z'
+categories: [Projects]
+tags: [DeFi, Stablecoin, Analytics, Public Good, Open Source]
+url: pharos
+image: /img/2026/pharos/pharos-cover.png
+toc: true
+draft: false
+type: post
+difficulty: "intermediate"
+---
+
+Stablecoins are the backbone of crypto. By every metric that matters — volume, users, real-world utility — they're the most successful thing DeFi has produced. Over $300B in circulating supply. Hundreds of billions in daily settlement. The bridge between onchain finance and the rest of the world. And yet, the information infrastructure around them is embarrassingly thin.
+
+Want to know if a stablecoin is safe? Good luck. You can check its price on CoinGecko, maybe find a supply chart on DeFiLlama. For the most popular ones, [Bluechip](https://bluechip.org/) provides excellent economic ratings. But that's about it. **There is no systematic way to monitor peg stability, assess liquidity depth, detect early warning signals, track freeze events, or evaluate risk across the many stablecoins now in circulation.** The information layer is stuck in 2021 while the market has 10x'd in complexity.
+
+This matters. When Terra collapsed, people didn't know their stablecoin was at risk until it was too late. When USDC depegged during the SVB crisis, panic spread because nobody had a clear picture of the actual exposure. Every depeg event follows the same pattern: information asymmetry benefits insiders and punishes everyone else.
+
+So I built [Pharos](https://pharos.watch).
+
+
+
+
+## What Pharos Is
+
+Pharos is a stablecoin analytics dashboard that tracks **156 stablecoins** across 18 peg currencies, multiple backing types, and governance models. It monitors pegs in real time, computes composite risk scores, rates safety across multiple dimensions, tracks DEX liquidity, detects early warning signals, and publishes a daily AI-generated market digest.
+
+It's entirely [open source](https://github.com/TokenBrice/stablecoin-dashboard). No accounts. No wallet connectivity. No monetization, now or ever. **Pharos is a public good**: free, open, and designed to give everyone the same level of stablecoin intelligence that used to require building your own infrastructure.
+
+If you have read my [previous article on DeFi's curation layer crisis](/defi-ux-disaster/), you already know the thesis: the space desperately needs better information services. Pharos is me putting my money where my mouth is — literally. This is entirely self-funded, solo-built, and will remain freely accessible.
+
+
+## Thinking About Stablecoins Properly
+
+Before you can monitor stablecoins intelligently, you need a proper taxonomy. Most dashboards treat stablecoins as a flat list: name, ticker, supply, price. That tells you almost nothing about the actual risk profile.
+
+Pharos classifies every stablecoin along three axes:
+
+- **Governance model**: CeFi, CeFi-Dependent, or DeFi: based on the actual dependency on centralized infrastructure, not the marketing narrative. USDC is CeFi (obviously). But DAI/USDS? CeFi-Dependent — it has onchain governance, but its backing is overwhelmingly tied to centralized assets. This distinction matters enormously for risk assessment.
+- **Backing type**: RWA-backed, crypto-backed, or algorithmic: what actually stands behind the peg.
+- **Peg currency**: Not just USD. Pharos tracks EUR, GBP, CHF, BRL, JPY, gold, silver, CPI-linked tokens, and many other currencies. All non-USD supplies are FX-adjusted so cross-currency totals are meaningful, not naive face-value sums.
+
+This taxonomy is foundational. Every feature in Pharos builds on it, because **you can't assess risk if you don't first understand what you're looking at**.
+
+
+## Watching the Peg
+
+Peg monitoring sounds simple: check the price, see if it's at $1. In practice, it's a nightmare.
+
+Stablecoin prices are noisy. A single CEX having a thin order book can produce a false "depeg" signal. A large swap on Curve can temporarily push a price off-peg before arbitrage corrects it. CoinGecko and other aggregators sometimes report stale data. If you naively alert on every price deviation, you'll drown in false positives.
+
+Pharos uses a **two-stage depeg detection pipeline**:
+
+1. **Stage 1** runs every 15 minutes. It detects price deviations but cross-validates against DEX prices to suppress false alerts caused by thin liquidity or stale data.
+2. **Stage 2** kicks in for large-cap stablecoins (>$1B supply). It requires multi-source confirmation before declaring a depeg event. Crying wolf about USDT costs credibility.
+
+On top of detection, every stablecoin gets a **Composite Peg Score (0–100)** that measures stability over time: how long it's been at peg, how many depeg events it's had, the severity of those events. This turns "is it at $1 right now?" into a much more useful question: "how reliably does it stay at $1?"
+
+
+
+
+## Systemic Risk: The Stability Index
+
+Individual peg monitoring is useful, but it misses the forest for the trees. The really dangerous moments in crypto aren't when one coin depegs — it's when the contagion spreads.
+
+The **Pharos Stability Index (PSI)** is a composite ecosystem health score (0–100) computed every 15 minutes. It answers a simple question: **how healthy is the stablecoin ecosystem right now?**
+
+PSI factors in:
+- **Severity**: The impact of current depegs, weighted by market cap — a $50B stablecoin depegging 2% matters more than a $10M one depegging 20%.
+- **Breadth**: How many stablecoins are depegging simultaneously — contagion is what kills.
+- **Stress breadth**: How many coins show elevated stress signals (from DEWS, described below), even if they haven't depegged yet.
+- **Trend**: 7-day total market cap momentum — capital flowing out is a leading indicator.
+
+The index maps to six condition bands, from **BEDROCK** (all clear) to **MELTDOWN** (systemic crisis). Think of it as the DeFi equivalent of a financial stability report, except it updates every 15 minutes instead of every quarter.
+
+
+
+One design decision worth noting: **chronically depegged coins gradually fade from the index.** A stablecoin that's been off-peg for 120+ days shouldn't dominate the severity score forever — it's a known condition, not an active crisis. This "depreciation factor" prevents zombie depegs from masking fresh instability.
+
+If you have been around for a while, have a look at the PSI history chart: you'll see all your past stable-traumas reflected in large PSI dips.
+
+
+## Early Warning: DEWS
+
+PSI tells you the current state. But what about what's coming? That's what the **Depeg Early Warning Score (DEWS)** is for.
+
+DEWS is a forward-looking stress score (0–100) that estimates depeg probability by combining eight sub-signals:
+
+- **Supply Velocity** — Is there a bank-run pattern? Capital fleeing fast is the clearest danger sign.
+- **Pool Balance Drift** — Are DEX pools becoming one-sided? This means concentrated selling pressure.
+- **Liquidity Erosion** — Are LPs pulling out? When sophisticated market participants leave, pay attention.
+- **Price Confidence** — Are price sources reliable, or is the data degraded?
+- **Cross-Source Divergence** — Do different exchanges agree on the price? Fragmented pricing signals trouble.
+- **Blacklist Activity** — Is the issuer emergency-freezing addresses? That's never routine.
+- **Mint/Burn Flow** — Is there a redemption surge happening?
+- **Yield Anomaly** — Are yield patterns signaling something abnormal?
+
+Each signal is weighted (supply velocity and pool drift carry the most weight, because they're the most predictive), and the composite score maps to five threat bands from **CALM** to **DANGER**.
+
+Here's what makes DEWS genuinely useful: it includes a **systemic amplifier**. When PSI is below 75 (meaning the ecosystem is already stressed), DEWS scores get boosted by up to 30%. This captures a real dynamic: individual vulnerabilities become more dangerous when the whole system is under pressure. A stablecoin that would score "WATCH" in calm conditions might score "ALERT" during a market-wide sell-off — and that's correct.
+
+
+## Safety Ratings
+
+Scores and indices are useful for monitoring, but sometimes you need a straight answer: **is this stablecoin safe?** Pharos provides multi-dimensional safety ratings, grading each coin from A+ to F across five dimensions:
+
+- **Peg Stability**: Historical depeg events, severity, current streak.
+- **Liquidity**: DEX availability and depth across chains.
+- **Resilience**: Blacklist/freeze capabilities and vulnerability to administrative actions.
+- **Decentralization**: Governance model, custody risk.
+- **Dependency Risk**: Upstream collateral and wrapper dependencies — if your stablecoin is backed by another stablecoin, you inherit its risk.
+
+The result is a **report card** that gives you the full picture, not just a single letter grade. A coin might score A on peg stability but D on decentralization (hello, USDC). The dimensions are visualized as a radar chart so you can compare risk profiles at a glance.
+
+For the 17 stablecoins covered by [Bluechip](https://bluechip.org/), Pharos also surfaces their independent SMIDGE ratings alongside its own: nothing beats a manual analysis like Bluechip does, Pharos' safety score edge lies in its real-time factoring of onchain data and broad coverage.
+
+
+
+
+## Liquidity, Yields, Freezes, and Flows
+
+Beyond the core risk framework, Pharos tracks four additional dimensions that matter for anyone seriously engaging with stablecoins:
+
+### DEX Liquidity Scoring
+
+A stablecoin's price means nothing if you can't actually trade it. Pharos computes a **composite liquidity score (0–100)** per stablecoin by aggregating pool data from Curve, Uniswap V3, Aerodrome, DexScreener, and more. It factors in TVL, volume, pool composition, cross-chain coverage, and concentration risk (via HHI — the same index regulators use to measure market monopoly). **A stablecoin with $1B in supply but all its liquidity concentrated in a single pool on one chain is fragile**, and the score reflects that.
+
+### Yield Intelligence
+
+Pharos tracks **risk-adjusted yields** for 40+ yield-bearing stablecoins and lending opportunities. The **Pharos Yield Score (PYS)** combines yield magnitude with safety rating, consistency, and sustainability. High yield with a low safety grade gets penalized — because 20% APY means nothing if the protocol depegs or gets frozen. Yield sources are resolved from multiple tiers: on-chain exchange rates, DeFiLlama pools, price-derived NAV appreciation, and T-bill proxies. Each coin also gets a set of warning signals (yield spikes, TVL outflows, data staleness) so you can spot trouble before committing capital.
+
+### Freeze & Blacklist Tracker
+
+USDC, USDT, EURC, PAXG, and XAUT all have freeze/blacklist capabilities. Pharos tracks these events across 8 chains (Ethereum, Arbitrum, Base, Optimism, Polygon, Avalanche, BSC, Tron), syncing every 20 minutes. You can see when addresses get frozen, how much was affected, and whether assets were seized. This is one of the most undermonitored aspects of stablecoins: **the power to freeze is the power to confiscate**, and most users have zero visibility into how often it's exercised. You can now monitor censorship in quasi-real time.
+
+### Mint/Burn Flow Tracker
+
+Supply changes tell a story. Pharos ingests mint and burn events for 81 stablecoins on Ethereum, bucketed into hourly flows. It computes a **Pressure Shift** metric (how current burn activity compares to the 30-day baseline), a **Bank Run Gauge** (market-cap-weighted composite stress), and a **Flight-to-Quality** detector (when capital moves from risky stablecoins to safe havens). If there's a silent bank run happening, Pharos will surface it.
+
+
+## Tools for Analysis
+
+Data is only useful if you can act on it. Pharos provides three analysis tools that go beyond passive monitoring:
+
+### Comparison Tool
+
+Select up to 5 stablecoins and compare them side-by-side across every dimension: supply, price, peg stability, safety grades, liquidity, DEWS, mint/burn flows. The comparison includes a multi-series chart (supply or price over time) and a radar overlay for safety profiles. You can export the comparison as an image for sharing.
+
+
+
+### Dependency Map & Contagion Analysis
+
+This might be Pharos's most unique feature. The **dependency map** visualizes collateral relationships between stablecoins as a force-directed graph. Many stablecoins are backed by other stablecoins (or wrapped versions of them), creating chains of dependency that are invisible unless you map them. The **stress test mode** lets you simulate a failure: select any coin and see which others would be affected, and how badly. If USDC fails, which coins go down with it? Now you can see.
+
+
+
+### The Cemetery
+
+80 stablecoins have already died. Pharos documents them all — name, cause of death, peak market cap, obituary with sources. It's a graveyard that serves as both a historical record and a reminder: **stablecoins fail more often than most people think**, and understanding how they failed is essential context for evaluating the ones still standing.
+
+
+## The Daily Digest
+
+Every morning at 08:00 UTC, Pharos publishes an AI-generated market digest that synthesizes overnight data into a concise narrative. It draws from 12 data sources: market cap changes, active depegs, PSI movements, blacklist activity, supply velocity signals, safety grade transitions, mint-burn flows, DEWS stress distribution, and more.
+
+The digest adapts to the current regime: during calm periods, it highlights subtle shifts; during crises, it leads with the most urgent developments. It's distributed via [Twitter/X](https://x.com/PharosWatch), the [Telegram channel](https://t.me/pharoswatch), and archived on the site. For more granular alerts (DEWS changes, depeg events, safety grade shifts), the [Telegram bot](https://t.me/PharosWatchBot) lets you subscribe to specific coins and tune your own thresholds.
+
+## Open Source, Public Good, Forever Free
+
+I want to be explicit about this because it's essential.
+
+**Pharos has no monetization, no token, no plans for either.** The entire codebase is open source. There are no premium tiers, no gated features, no "contact us for enterprise." Every metric, score, and dataset that Pharos computes is freely available to everyone. There is an API available to all.
+
+This is a deliberate choice. I've spent years arguing that DeFi needs better information infrastructure, that the [curation layer is underfunded and underappreciated](/defi-ux-disaster/). Pharos is my answer to my own criticism. The stablecoin ecosystem is too important and too complex for risk intelligence to be gatekept behind paywalls.
+
+The project is solo-built and self-funded. The tech stack (Next.js frontend, Cloudflare Workers + D1 backend) is designed to keep operating costs minimal while handling the scale of data involved — 20+ cron jobs, 15+ data sources, 68 database migrations worth of schema. It's architected to be sustainable as a public good, not to maximize revenue.
+
+
+## Start Using Pharos
+
+If you interact with stablecoins in any capacity — trading, lending, providing liquidity, building products — Pharos gives you the information layer you've been missing.
+
+**Explore:** [pharos.watch](https://pharos.watch) — new here? The [onboarding guide](https://pharos.watch/start/) walks you through every feature
+
+**Source:** [GitHub](https://github.com/TokenBrice/stablecoin-dashboard)
+
+**Stay informed:** follow the daily digest on [Twitter/X](https://x.com/PharosWatch) and [Telegram](https://t.me/pharoswatch), or subscribe to personalized alerts via the [Telegram bot](https://t.me/PharosWatchBot)
+
+Pharos will keep expanding its coverage and refining its models. If you want to contribute, the repo is open. If you spot issues or have feedback, there's a feedback form on the site.
+
+Stablecoins won the adoption race. It's time the information infrastructure catches up.
+
+PS: A one-week content production (using Pharos data) and feedback submission contest is running, with 3000 BOLD to win in total. [Take part](https://x.com/PharosWatch/status/2032107485629202921)
\ No newline at end of file
diff --git a/content/post/2026/why-polaris.md b/content/post/2026/why-polaris.md
new file mode 100644
index 00000000..2d047d8d
--- /dev/null
+++ b/content/post/2026/why-polaris.md
@@ -0,0 +1,126 @@
+---
+title: "Why Polaris? The Stablecoin we needed to build"
+description: "After years watching stablecoins abandon decentralization for growth, we are building one that can't: harnessing an immutable core, free of counterparty, and self-scaling."
+date: '2026-01-27T01:13:50.191Z'
+categories: [Projects, Lending]
+tags: [DeFi, Ethereum, Decentralized Finance, Lending, Stablecoin]
+url: why-polaris
+image: /img/2026/why-polaris/why-polaris-cover.jpg
+toc: false
+draft: false
+type: post
+difficulty: "beginner"
+---
+
+Stablecoins have won: they're the backbone of DeFi liquidity, the unit of account for onchain trades, and the most outward-facing DeFi usecase. By every adoption metric, they're the most successful primitive we've built. And yet, something went wrong. The dominant stablecoin models have drifted from their original promises. What started as experiments in decentralized money has quietly become a collection of TradFi dependencies wrapped in smart-contract aesthetics. The foundations deteriorated as the TVL climbed. The most popular stablecoins remain tokenized T-Bills that do not forward their yield, namely USDC and USDT.
+
+It's time for me to get out of stealth and reveal a project that's been cooking for 2 years: [Polaris](https://polarisfinance.io). But before we get there, I want you to understand my "Vitalik set out to build the world computer after his WoW warlock got nerfed" moment. Two stories illustrate the pattern I described: both are protocols I've watched closely. They started with novel premises, and ended up somewhere else entirely.
+
+
+## Once a Pigeon, Forever a Pigeon
+
+In 2022, Rune Christensen presented MakerDAO's Endgame Plan: a strategic roadmap for the protocol's evolution. It was structured around three "stances," each representing a different balance between growth and resilience.
+
+- **Pigeon Stance:** Maximum growth with no resilience. Unlimited RWA exposure. All income is used to acquire ETH. This was explicitly described as the fragile phase—necessary for bootstrapping, but not a destination.
+- **Eagle Stance:** A transition point. RWA exposure capped at 25%. Balance between growth and resilience. The plan said this would come "after 3 years, unless delayed by Governance."
+- **Phoenix Stance:** The endgame. Maximum resilience. No seizable RWA exposure. A stablecoin that could survive authoritarian pressure because it had nothing to seize.
+
+Phoenix Stance was the promise, and the Pigeon Stance a necessary compromise to fulfill it. It's now 2026, and Maker is still extremely RWA-dependent, in Pigeon Stance. Governance delayed the transition indefinitely. The escape clause built into the plan ("unless delayed by Governance") became the permanent state.
+
+DAI is now overwhelmingly backed by real-world assets. The transition to USDS was also an opportunity to add blacklisting and freezing features: **DAI/USDS became USDC with extra steps**. The protocol that pioneered decentralized stablecoins is operationally dependent on the traditional financial system it was supposed to circumvent.
+
+
+
+The Pigeon never learned to fly.
+
+## The Silent Pivot
+
+Ethena launched USDe with a compelling narrative: a stablecoin generating yield from the basis trade. Delta-neutral positions across spot and perpetual markets. The pitch was clean, and made accessible to all a trade that used to be much more demanding and complex to implement.
+
+Then, market conditions changed. After October 10 2025, basis trade yields compressed. The spread that funded USDe's returns narrowed to levels that couldn't sustain the promised yield. Ethena had a problem. USDe quietly shifted the yield source and began sourcing returns from tokenized T-bills, using pyUSD. The onchain, crypto-native yield engine became yet another T-bill wrapper.
+
+Yet most USDe holders did not realize. Go around and ask people where they think USDe's yield is coming from, and they still reply almost automatically, "basis trade". And they were right ~6 months or more ago when they deposited into it, but they're now holding exposure to tokenized treasuries. The black box changed its contents, the label stayed the same, and very few realized what happened.
+
+To me, this is the perfect example of the counterparty risk, which is by its very nature dual:
+1. The one most people understand: you are assuming the risk of that counterparty defaulting, failing, etc.
+2. The more subtle consequence of the first: when that counterparty that you accepted is offchain, it's a black box. It can change. You are not just trusting today's counterparty. You are trusting every future decision the operators might make: you are writing a blank check when it comes to your risk exposure.
+
+The counterparty risk is virtually infinite as soon as you accept it.
+
+---
+
+## A Design Problem, Not a People Problem
+
+I'm not here to attack Rune or the Ethena team. Both managed to grow the biggest alternatives to USDC and USDT, which command respect. They made rational decisions within the constraints they faced. When yield compresses, you find new yield. When governance wants growth, you give them growth.
+
+The core problem is the architecture. When yield depends on external sources, you're renting your model. The moment those sources change: basis compresses, RWA regulations tighten, counterparties fail, your stablecoin changes with them. You don't control your own foundations.
+
+"Decentralized governance" sounds resilient until you realize it's the mechanism by which protocols abandon their original constraints. The DAO votes to compromise, and the compromise becomes permanent.
+
+These are not lone stories, it's usual business. Projects start decentralized, and scale into dependency. The outcome is predictable, but end users end up holding something different from what they signed up for.
+
+---
+
+## What Polaris Is Built to Be
+
+This is not a product announcement; the protocol isn't live yet. What I want to share with you today is a set of commitments: architectural decisions that are load-bearing and not-negotiable, so you know what to expect from Polaris.
+
+**Counterparty-free by architecture, not by promise.**
+
+Polaris generates yield from volatility through a bonding curve mechanism. No RWAs. No CEX exposure. No external yield pipelines that can compress, pivot, or get seized. The system creates its own yield from the asset it's built on. We are looking to build a protocol that can seriously scale; thus, a self-referencing yield is the only way to ensure growth potential, regardless of its current scale.
+
+**Immutable core.**
+
+The foundational logic of Polaris cannot be changed. Not "won't be changed pending governance approval." Cannot. The core mechanics are fixed at deployment. This is a constraint we're imposing on ourselves, and on everyone who comes after. When you interact with Polaris, you're interacting with the same system tomorrow that you're interacting with today. The "black box" here is made of glass, enabling you to see that the core never denatures.
+
+**Stewardship, not governance.**
+
+POLAR token holders don't govern Polaris in the traditional sense. They steward it.
+
+What's the difference? Governance implies the power to change anything, including the things that shouldn't change. Stewardship means something narrower: the ability to adjust parameters within hard-coded ranges and direct resources to steward the protocol growth. POLAR holders can help the protocol adapt to changing market conditions. They cannot denature it. They cannot vote to add RWA exposure. They cannot dismantle the immutable core. The boundaries are enforced by code, not by social consensus.
+
+This is a "governance" that is clearly defined and knows its limits. It's quite unusual and so remote from the usual "governance", that we decided to explicit its nature with a new name: "stewardship".
+
+## The Shape of the System
+
+I'll keep this brief—detailed mechanics are coming over the following weeks. But here's the structure:
+
+**Three tokens:**
+- **pUSD**: A yield-bearing stablecoin backed by pETH collateral
+- **pETH**: An ETH derivative with a rising price floor, created through the bonding curve
+- **POLAR**: The stewardship token, capturing real yield from protocol activity
+
+**Three engines:**
+- A bonding curve that converts ETH deposits into pETH, capturing volatility as yield
+- A CDP architecture optimized for stability and growth, allowing pUSD borrowing against pETH
+- A conversion mechanism where POLAR is minted exclusively through pETH burning, raising the collateral floor
+
+The engines reinforce each other. As the system grows, collateralization strengthens. Yield scales with adoption instead of diluting. The flywheel is designed to accelerate, not plateau.
+
+More details soon. For now, understand that the architecture serves the philosophy, not the other way around.
+
+---
+
+## The Call
+
+Polaris isn't live. You are early. For now, the best place to learn about [Polaris is the website](https://polarisfinance.io) and the most eager can already join [our Telegram announcement channel](https://t.me/polaris_ann).
+
+I've spent years writing about DeFi, analyzing protocols, watching the compromises accumulate, and the promises evaporate. If you've seen stablecoins abandon their foundations and felt something was wrong, you understand why we're here. If you believe that decentralization is a property of architecture, not marketing, you understand what we're building.
+
+I'm not looking for users yet. I'm looking for people who get it.
+
+Polaris is not just yet another DeFi protocol: **it’s DeFi’s immune system eruptive answer to the USDC/T virus**. We’ve been in the trenches for too long to see the space we’ve dedicated our lives to end up captured, tamed and neutralized like the Internet was. To other teams, this is just a job, an occupation; another yield source. **To us, this is the Final Boss:** if we fail here, we would have been just another set of pawns furthering a global agenda further vassalizing the world’s populations: our main life arc defeated, erased, neutered. **We want to see trustless DeFi survive us, and be harnessed by our grand kids**.
+
+Uncensorable financial services, just like privacy, are necessary weapons in the coming wars against Mega Corps/Govs, and we can’t to leave our soldiers unequipped. We don’t intend to be pawns, but rather to design the board on which the resistance fights. How serious are we? **McAfee-level serious we take this stable to a 10-digit supply in two years. Unlike him, thanks to our immutable code, we won’t need to go on the run;** but we’re damn ready for it if that increase the success odds. Locked in poorly describes how born-and-self-made-ready we are for this.
+
+I'm not alone in this; I am just one out of an elite team, led by a man I worked with for more than two years at the [DeFi Collective](https://deficollective.org). I saw him grow and thrive in DeFi, never defaulting on his principles: he's more than ready for his main character arc, and you'll be seeing him a lot more of him in the coming weeks and months: [Robert/0xLuude](https://x.com/0xluude).
+
+**Explore the vision:** [polarisfinance.io](https://polarisfinance.io/)
+
+**Stay informed:** [Follow Polaris on Twitter](https://x.com/polarisfinance_)
+
+I've barely scratched the surface of Polaris here, so if you like where this is heading, check the website and join the Telegram to further your understanding.
+
+Until then, remember that promises quickly turn into compromises if not enforced by immutable code.
+
+- TokenBrice, finally entering his founder arc, ready to unleash half a decade of stablecoin autism.
diff --git a/content/posts/2017/distributed-network-1.md b/content/posts/2017/distributed-network-1.md
deleted file mode 100644
index 22e7bce7..00000000
--- a/content/posts/2017/distributed-network-1.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-title: Are distributed networks the key to free us from neo-liberalism?
-description: >-
- From a reflection on the effectiveness of the grassroots campaign in the
- United States to the current state of political affairs in France…
-date: '2017-04-10T08:41:30.302Z'
-categories: [🧔 Opinions, 🗳 Campaign]
-tags: [Politics, Community Engagement, Grassrooots campaigns]
----
-
-
-
-From a reflection on the effectiveness of the grassroots campaign in the United States to the current state of political affairs in France, this article discusses the recent changes that occurred in the political life in both countries and what they mean for the future.
-
-### Back to the (grass)roots
-
-Here in France, the two campaigns of Obama appeared like logical successes. Indeed, in our medias, the campaigns seemed straightforward: the media diffused an image of an eloquent and confident Obama, galvanizing crowds. However, the reality of what brought Obama to power is completely different according to Lex Paulson who took part in the campaigns.
-
-In his view, the main advantage of Obama’s platform, what brought him to success, lied in the volunteers and their organization. The key to the positive voter turnout for Obama in 2008 were the thoroughly organized and very motivated volunteers that lead an effective door-to-door grassroots campaign. **Even if large meetings attract the press coverage, the actual persuasion of undecided voters mostly happens when they are talking, face-to-face, to a volunteer.**
-
-
-Snapshot of Barrack Obama’s campaign website (2008)
-
-Everything besides this, such as the campaign’s website or social medias were conceived [to get people involved in the campaign](http://dragonflyeffect.com/blog/dragonfly-in-action/case-studies/the-obama-campaign/) — fuel the grassroots movement. A quick look at Obama’s 2008 website makes it crystal clear: at the top right, one of the most prominent section of the page, there is a box to help potential voters find the closest polling station to their home. Then, just below, the goal is to get people involved in the movement by proposing them five different ways to mobilize. Finally, the left part of the body is here to help viewers find volunteer events near them. The website also had a personal workspace for volunteers with **a gamified approach** to foster volunteers’ motivation.
-
-There is no mystery to this for Lex Paulson. Indeed, according to the data collected during Obama’s 2008 campaign, **it takes 189 emails, 35 calls but only 15 doors knocked to convince a new voter**. Moreover, because of the very permissive data collection laws in the US, door-to-door campaigns can be precisely optimized to focus the resources on the voters most likely to be persuaded by Obama’s message and program. Therefore, the allocation of resource in this campaign was focused on being the most efficient as possible: technology was used to amplify and accelerate face-to-face, door-to-door actions.
-
-**Obama benefited from a very large and highly motivated volunteers base**. To galvanize the base, **the candidate’s attitude is essential**: he sets the tone. While Obama managed to put his volunteers first, and made them feel valued, Clinton failed this in 2016. In Lex’s perspective, that’s the main reason of her defeat: she failed to organize and motivate her community well enough. **Commitment from the base is necessary for it to scale up and branch out.**
-
-
-
-### Formal politics, a remnant of the past?
-
-Nowadays, there is a sharp decline in participation in formal politics such as parties, media or labor movement. We tend to see parties as a necessary element in our democracies. In some extent, it’s true: for more than a hundred and fifty years, the power in the US has alternated between the Democrats and Republican. Nevertheless, **political parties are, on the long-scale, a recent creation**. They emerged around the 18th century because of the need to organize at an unprecedented scale. It’s necessary to put political parties back in their context and acknowledge them for what they are: **a specific historical response to a historical moment**. Now may be the time where the underlying parameters of our political life changed so much than parties became unnecessary.
-
-**The 2017 French election is particularly striking in the matter: the former two main parties are dislocating**. [In the latest polls](http://www.bva-group.com/sondages/16eme-vague-dintentions-de-vote-a-3-semaines-de-lelection-presidentielle/), the three leading candidates are originating from a party that never won a presidential office before: Marine Le Pen (“Front National” — 23%), Emmanuel Macron (“En Marche” — 23%) and Jean-Luc Mélenchon (“France Insoumise” — 19%). The “Parti Socialiste” (left-oriented, the party of Francois Hollande) is credited with less than 10% of the voters’ intention to vote, while “Les Républicains” (right-oriented, the party of Nicolas Sarkozy) is at 19%. Moreover, **out of the three leading candidates, two are not running with the support of a party** but a political movement, a platform created just for this election: “En Marche” (Macron) et “France Insoumise” (Melenchon).
-
-People are more and more frustrated with politics in its traditional sense; they are looking for new ways to engage themselves. Among these are **decentralized and distributed movements** regrouping people fighting for the same cause: in France, there was la “Manif Pour Tous”, a traditional and family-oriented movement originated from the right-wing of the political spectrum to oppose the gay-marriage law in 2013. More recently, and more known internationally, we had “Nuit Debout”, a horizontally-structured, leaderless social movement that arose in 2016 in the wake of the protests against Elkomri Law, a liberal-oriented labor reform.
-
-
-
-### Whether it’s made of wires or people, a network works the same way
-
-To grasp a better understanding of what is happening, Lex invite us, once again to go back to the roots: **what are networks and what are the main ways to structure them?** To that end, the work a [Paul Baran](https://en.wikipedia.org/wiki/Paul_Baran), a pioneer in the development of computers networks, is particularly insightful.
-
-](img/0__9yZKb9roRQzDx858.png)
-Network types, [source](http://blogs.perficient.com/integrate/2016/12/15/how-will-internet-of-things-use-blockchain/)
-
-In the early 60s, Paul started reflecting upon how to make communications network more resilient to attacks. He defined three types of networks:
-
-* **Centralized networks**, defined by the presence of a central, dominant node necessary for the network to function and to which all peripheral nodes are vertically connected. Failure of the main node condemns the network.
-* **Decentralized networks**, where a limited amount of main nodes, horizontally connected with one another act as hubs for the peripheral nodes. The network can tolerate the failure of a few of the main nodes but requires most of them to function properly.
-* **Distributed networks**, in which numerous independent nodes are all horizontally connected with one another and none is required for the network to function. Since no node is required for normal network operations, they are much harder to take down.
-
-He illustrates the applicability of this model to politics with three examples taken from classic history.
-
-* **The Persian Empire (5th century BC) — centralized network**: an emperor acts a central node. An efficient chain of command diffuse the commands within the empire. It may be effective because of the efficient chain of command but requires a good emperor.
-* **Classic Greece (5th and 4th century BC) — decentralized network**: two main city-states, Athens and Rome act as central nodes. There are more horizontal exchanges than in the Persian Empire, allowing for a better development of commerce and exploration but the efficiency of the system depends on the balance of power between the two main actors.
-* **Rome’s Republic (509 BC to 27 BC) — distributed network**: numerous actors are involved in the political life, some election function by lot and terms are short which lead to a frequent renewal of the political actors. All of these factors, among other, created a system where the power is more distributed than in the two previous example, allowing for even more horizontal exchanges.
-
-Out of the three, **distributed networks**, even though they are harder to organize and maintain presents two main advantages. Firstly, they are **more resilient**: it was the main objective of Paul Baran’s research. Secondly, they are **the most efficient at harnessing the wisdom of the crowds.**
-
-
-
-### The crowd’s secret: the need for horizontally organized networks
-
-To understand the power of the crowds, [James Surowiecki’s work](https://www.diplomacy.edu/resources/books/reviews/wisdom-crowds-why-many-are-smarter-few) is enlightening. In _The Wisdom of Crowds_, **he demonstrates the efficiency of decentralized networks:**
-
-> Decentralization is the key to better diversity, independence, and appropriateness of judgments. Aggregation of information, but even more of judgment is paradoxically important to the success of decentralization. If the aggregation process creates biased filters, then the effect is lost.
-
-The Bean Jar experiment is particularly interesting to comprehend what it means: a large number of beans are put in a jar. A large number of individuals are then asked to rapidly guess the number of beans in the jar. [In Jack L. Treynor’s realization](http://www.cfapubs.org/doi/abs/10.2469/faj.v43.n3.50), he did a run with 56 students for a 850 beans jar. He obtained very diverse values, some of which were extreme. Nevertheless, **the average of the 56 responses collected is very close to the actual value**: 871. Out of the 56 answers, only one individual answer is closer to the truth. Doing re-run of the experiment, he noticed every time a few student producing very accurate number, but those were never originating from the same student.
-
-Here lies the Bean Jar experiment’s first insight: not only a crowd of independent individuals, when averaged can **reach a very accurate estimate, it can do so consistently**. When properly organized and averaged (all at the same coefficient) the crowd is consistently reaching the most realistic estimation.
-
-### Harnessing crowds’ power: the needs for collective intelligence to emerge
-
-The Bean Jar experiment is insightful to understand the interest of the wisdom of the crowds but once this interest is perceived, it instantly ignites another question: the experiment happens in a fixed environment, with numerical guesses that are then averaged. **How to reproduce these conditions in real-life situations and reach a truthful “average of opinions”?**
-
-To answer this question takes us back to Lex Paulson’s work. He identified four main needs for collective intelligence to emerge:
-
-1. **Diversity of opinion:** contrary to our dominant current belief, where facts are kings, opinions matter. Yet, for opinions to be insightful, they need to be founded on diverse facts and produced by diverse personalities.
-2. **Independence:** each participant of the network needs to be able to come up with their own opinions, uninfluenced by those of others.
-3. **Decentralization:** as stressed out in the first point, the diversity of local source of information is critical.
-4. **Efficient aggregation:** finally, all the very diverse opinions expressed need to be aggregated and participants must reach bring their diversity together to reach a decision in a timely way. This is where, according to Lex, movements such as Nuit Debout in France or Occupy WS in the US failed.
-
-
-
-### Distributed network: the spontaneous emergence of a new node
-
-The distinction between a decentralized network and a distributed network can be blurry. Take the Obama campaign for instance, is a distributed or decentralized network? Because there is **still a central authority**, controlling what’s acceptable and what’s not, **it can’t be fully distributed**. Indeed, for a truly distributed network to emerge, **no control can be tolerated**. It seems scary at first, but it’s a necessary criteria to unleash the enormous potential of the crowds.
-
-Let’s take another example for the French 2017 Presidential Campaign to demonstrate what the crowds can do once given the freedom and control. Supporters of Jean-Luc Mélenchon, “Insoumis” or not, are **organizing their efforts everyday using the messaging app Discord**. Among their many actions to help their candidate, they organize a **continuous monitoring of the discussion of social networks** regarding the campaign and intervene if needed.
-
-Yet, the most remarkable achievement is a project now used and promoted by Melenchon’s campaign team that **was thought of, designed and realized by the** [**Discord Insoumis**](http://discord.insoumis.online/) **community.** The tool, called the “Melenphone” is a [website](https://melenphone.fr/ng/) made to coordinate the calling efforts of the Insoumis. A **support channel** was created on the chat to help the users get started with the tool, as well as video tutorials on Youtube.
-
-
-Snapshot of the Melenphone Homepage (04/12/2017)
-
-The interface is gamified, with a daily objective of calls and daily top caller ranking on the homepage. Another dedicated page display the top weekly, monthly and all timer callers. The project is a tremendous success with **more than 26 000 calls already dialed** using the platform.
-
-It’s too soon to talk about the result of the Melenphone, but the team is optimistic. The existence of this project, and its development is a **perfect example of what a distributed network is**: when there are no central controlling instance, a **new node can appear at any time and plug himself to the network**, just like the Discord Insoumis community did.
-
-
-
-### The Obama-crowd
-
-The analysis of the wisdom of crowds leads us back to Lex’s analysis of Obama’s campaigns and what made them successful. Indeed, in Obama’s campaigns, **the basic unit of organization was the volunteer**: everything was built around them.
-
-To make the most of the volunteers’ work, the campaign team must listen to what the volunteers have to say: they are **the ears of the campaign**. Obama’s team understood that and rigorously debriefed their door-to-door campaigns. Volunteers were invited after each operation to **an interview in a cozy and relaxed environment** to talk about their experience.
-
-Because the organization had **an efficient upward data stream**, with insights from the volunteer flowing back to the campaign’s organization team, they were able to continuously iterate and fine-tune the message. The leadership status of the candidate emerged over **iterations from the data collected on the field**.
-
-### Is door-to-door efficiency specific to the US?
-
-Lex is now working with the En Marche team, trying to bring his unique insight from the US campaigns to improve the processes of the movement. My personal hunch is that his approach will need significant adaptations to land positive results in France.
-
-First and foremost, thankfully, **our data-collection laws are still more restrictive than in the US**. This makes the door-to-door campaigns much harder to optimize. Moreover, as he duly noted during his presentation, **French are much more involved in politics**: not only we read a lot about it, but it’s also one of our main discussion topics, not bounded by the limits of our relatively short presidential campaigns. Despite the low fidelity of our previous presidents to their electoral program, we still read them with attention.
-
-However smart and fine-tuned the platform behind Macron is, his timid and conservative program might lead to his failure. In wake of the downfall of formal politics, discussed in this article, French and Americans (as Bernie Sanders’ popularly proved) are now looking for an **ambitious alternative to the stagnation and the immense deception** embodied in the succession of Sarkozy’s and Holland’s presidencies (or Hillary Clinton’s candidature).
-
-Call me optimistic if you may, but I think the world is finally ready for the shakedown. Will it start from France, or will once again, the will of the people be silenced until it finally emerges later on, elsewhere?
-
-### So who is this Lex guy?
-
-[Lex Paulson](https://twitter.com/lexpaulson) is a lecturer in Rhetoric and Political Thought at Sciences Po. He took part in the organization of four presidential campaigns in the US including Obama’s two successful runs.
-
-This article was inspired by a conference he gave at the [Dojo Club](http://dojo.fr/) in Paris, “Collective Intelligence and Automation in Politics” completed with personal research.
-
-I want to thank him once again for the stimulating presentation.
-
-
-
-Let me know if you liked this article and [check out my wiki for more content like this.](https://github.com/Ahirice/BCC/wiki) **Don’t forget to clap it** **to help it spread:** you can keep pressing 👏up to 50 claps.
\ No newline at end of file
diff --git a/content/posts/2017/distributed-network-2.md b/content/posts/2017/distributed-network-2.md
deleted file mode 100644
index 19a8e965..00000000
--- a/content/posts/2017/distributed-network-2.md
+++ /dev/null
@@ -1,158 +0,0 @@
----
-title: 'Distributed networks: bane of the media and will of the people?'
-description: >-
- A tidal wave is rising in France: Mélechon’s novel approach is threatening the
- current crooked order of political affairs.
-date: '2017-04-16T17:31:42.218Z'
-categories: [🧔 Opinions, 🗳 Campaign]
-tags: [Politics, Community Engagement, Grassrooots campaigns]
----
-
-
-Jean-Luc Mélenchon speaking at Marseille 04/09/2017
-
-A tidal wave is rising in France: Mélenchon is federating more and more behind his candidacy every day. His novel approach is threatening the current crooked order of political affairs and medias are strongly reacting to his popularity.
-
-Last week, I wrote my [first article about distributed networks and the impact they will have in the organization of political affairs]({{< relref path="distributed-network-1.md" >}}). It was built on examples taken from the French and US political life. This week, I want to focus on the state of French political affairs exclusively.
-
-The timing is particularly relevant, with the first round of the French presidential election occurring next Sunday (04/23). The campaign has been surprisingly dynamic, although affairs and corruption scandals occupied much of the media space, especially at the beginning.
-
-### A legal framework biased towards candidates of the main parties
-
-French presidential elections abide to 55 years old rules (the Fifth Republic) that **greatly limits the emergence of alternatives candidates**. Indeed, a candidate needs a collect 500 signatures from elected representatives: it’s a piece of cake for candidates of the main political parties but it can be **troublesome for candidates who benefit from less media coverage or take controversial stances.**
-
-Moreover, we have rules governing the media exposure of presidential candidates during the campaign. Essentially, three phases of the elections are distinguished. [Source: Conseil Supérieur de l’Audiovisuel (CSA)](http://www.csa.fr/Television/Le-suivi-des-programmes/Le-pluralisme-politique-et-les-campagnes-electorales/L-election-presidentielle-2017/Les-temps-de-parole-et-d-antenne) (in French), France’s equivalent of the Federal Communications Commission(FCC):
-
-During the first phase (02/01/2017 to 03/20/2017), **a principle of “equity”** between each potential candidate is applied. **Equity of coverage is partly based on the results of the candidates at the previous elections**, which heavily skews the coverage of the political debate towards actors from the main political parties (Les Republicains — LR, Parti Socialiste — PS et Front National — FN).
-
-After March 20th (when official candidatures are validated — those which successively went through the signature process described above) the same biased equity principle was applied to the official candidates.
-
-Finally, from April 10th to the second round (05/07) **a “strict” equality of media coverage is supposedly applied**. Yet, media coverage is still heavily skewed towards main candidates: TV and radio channels deploy **bypass strategies, such as covering “small candidates” during nighttime or off-peak hours**.
-
-#### Which leads to an even more twisted reality of coverage
-
-](/img/2017/distributed-networks-2/media-coverage.jpeg)
-Media coverage from 02/01 to 03/05, [source](http://teleobs.nouvelobs.com/actualites/20170308.OBS6308/temps-d-antenne-anormal-de-francois-fillon-pourquoi-le-csa-sonne-l-alarme.html)
-
-The reality of media coverage (illustrated in the chart above) is **extremely biased to the benefits of Fillon, Lepen, Hamon and possibly Macron**. At the beginning of March, Hamon benefited from roughly three times the media coverage of Mélenchon, for an almost equal share of the voters’ intention. At the same time, **for approximatively twice the voting intention of** Mélenchon**, Fillion was receiving roughly five times his coverage.**
-
-To sum up, what we observe is the following: first, we have an unfair legislation surrounding the media coverage. Secondly, this unfair legislation is not even applied, because **of the very limited enforcement means of the CSA.**
-
-We have eleven candidates for this election, **yet most of them, the “small” candidates did not benefit from any real coverage outside of the unique debate where all were invited.**
-
-If you go around in the streets of Paris and ask random passerby who are the candidates, most of them will only answer you back with the 5 main ones: Fillon, Hamon, Lepen, Macron and Mélenchon. These 6 others are almost forgotten already: Cheminade, Arthaud, Lassale, Dupont-Aignan, Poutou and Asselineau.
-
-Yet, we French are seriously concerned about politics and read a lot about it: **the issue is about what we read.** Indeed, France’s media ownership situation is very much alike to most developed countries: a handful (**10 individuals own around 90% of the media coverage**) of wealthy individuals own most of the outlets. One of the few respectable newspaper in France, _Le Monde Diplomatique_, publishes an infographic presenting the situation every year:
-
-](/img/2017/distributed-networks-2/media-map.png)
-French medias: who owns what? [Source: Le Monde Diplomatique](https://www.monde-diplomatique.fr/cartes/ppa)
-
-### The one standing out the crowd: the fight for a the 6th republic
-
-Out of the eleven candidates, only one is offering a real alternative to the current political dead-end and his chances of becoming president and making it happen are increasing every day: Jean-Luc Mélenchon. **He is carried by an immense popular, self-organized and spontaneous group** which calls itself “les insoumis”. I presented one of their realization — the Mélenphone — in my previous article addressing the emergence of distributed networks in politic.
-
-I won’t go into the depths of his program, but only detail one particular initiative that illustrate his thorough understanding of the current situation: **his wish to renew our current political system with the implementation of a sixth republic.**
-
-The renewal embodied in this 6th republic is more about **the overall approach to the way political decisions are made** than specific measures: the driving idea is to give to the people more control and more way to express themselves about the decision process.
-
-More than the 6th republic itself**, the way his program envisions his origin echoes to the birth of the French democracy: a constituent assembly, made of regular citizens** will be in charge of establishing and writing the new constitution that will become the legal foundation of the new republic.
-
-#### Empowering the people
-
-Mélenchon emerged as a credible alternative to the current political failure, despite the unanimous barrage raised by the medias against him; we’ll dive in more depth in this issue below. Indeed, Mélenchon was an important actor of the previous presidential election already (11.1 % of the vote) and he grew tremendously. **In 2012, he was rightly perceived as an angry man. Since then, his stance soothed and evolved to a much more crowd-empowering approach.**
-
-One episode taken from his meeting in Marseille perfectly demonstrates this new stance. The crowd started shouting “Mélenchon President!” repeatedly. **He stopped them right away**:
-
-> “Stop it! I don’t want my name to become a tagline. Free yourself from this obsession. You are no devouts, you are carrying a program, l’Avenir en Commun.” \[literally “The Shared Future”, the name of Mélenchon’s program\]
-
-In French:
-
-> “Arrêtez ça, je ne veux pas que mon nom soit un slogan. Guérissez-vous de cette manie. Vous n’êtes pas des dévots, vous portez un programme, l’Avenir en commun”
-
-You won’t see other candidates doing the same. On the one hand, Macron pretend to blush in the same situation while Fillon, imbued of himself just appreciate the moment. On the other hand, poor Hamon now credited with less than 7% of the voters’ intention just don’t see it happens anymore.
-
-**While Hamon (PS) is proposing a program that can seem close to Mélenchon’s on some positions, he won’t withdraw himself** for two main reasons:
-
-**The first is a sheer lack of political courage**. Despite behind betrayed by most of his party (Parti Socialiste — PS) which now supports Macron including the current first minister Manuel Valls, and minister of Defense Jean-Yves le Drian and despite the terrible situation at the PS, Hamon will stay true to his disloyal party to the end.
-
-President Hollande didn’t take any stance so far which can seem surprising. Personal hunch: **he’s just waiting for the best time (probably after the first round) to add another betrayal to the long list of the PS and announce his support to Macron’s candidature.**
-
-The second reason and probably main one comes from, once again, our skewed legislation: parties are reimbursed their campaigns expenses only if they gather at least 5% of the popular vote. **If Hamon withdraw himself from the campaign, the Parti Socialiste will go bankrupt.**
-
-#### Leading the real battles: inequality, climate and solidarity
-
-According to the NGOs for the development aid Action Against Hunger, Action santé mondiale, CARE France and ONE Campaign, Jean-Luc Mélenchon is the candidate in the presidential election who is the most engaged regarding international solidarity. **He vigorously denounces free trade between France and the United States as an example of global exploitation.**
-
-Moreover, he’s aware of the emergency of climate change and is the only candidate willing to act upon it. He advanced numerous propositions to that end but once again **the answer will come straight from the people**, because we, French are well aware of what needs to be done.
-
-He wants more fiscal justice, a review of the European treaties to put an end to “austerity policies”, and a new ecological order which would see France drop nuclear power.
-
-#### A unique way to talk about politics
-
-The ideas promoted by Mélenchon are welcomed: although they have been expressed since a long time by diverse actors of the French political life, **it’s the first time we see a candidate with serious chances of victory propose them all**. Nevertheless, what got him to his place is not only his idea, it’s his new approach to politics.
-
-He’s the first candidate to use YouTube for his campaign: since his success others have tried to reproduce it. Instead of producing short, fast-paced videos — supposedly what works on YouTube — he takes 25 to 30 minutes every week for a review. **Sitting in front the camera, he goes back on the main subjects of the week and offers a fresh and well-documented perspective on each of them**. With close to 300 000 subscribers, he’s now the most successful French politicians on the network.
-
-
-Melenchon’s hologram
-
-Besides, his meetings are hugely successful: **he keeps the presentation short, below the 90 minutes’ mark and always addresses different topic**. During the last one, which occurred this Sunday at Toulouse in the South of France, he addressed the situation in French Guiana which recently became an important topic in the campaign. Moreover, the organization is carefully planned and relies and an innovative approach. **Mélenchon sometimes presents simultaneously in the multiple cities thanks to holograms.**
-
-### A shift in voters’ intention
-
-His fresh but pragmatic look at our political situation combined with his smart usage of new formats and ways to present himself created a **potent dynamic in the polls**. Even though polls they tend to underestimate candidates not coming from the main parties (PS, LR and FN), **they are starting to acknowledge the support for his candidacy.**
-
-[Depuis1958.fr](https://depuis1958.fr/) is a website which takes into accounts every poll, pondered with a confidence indicator corresponding the spread between polling institutions’ previous estimations for the precedent elections and the actual results. **It effectively produces an “average of all polls”.**
-
-Four days ago, April the 13th, Macron was credited with 94.1 % chance of winning the election, Fillon 3.7% and Mélenchon 2.2%:
-
-
-Polls’ average, April 13th
-
-Just three days after, April the 16th, Macron was down to 88.3%, Mélenchon at 6% and Fillon at 5.6%
-
-
-Polls’ average, April 16th
-
-The next day, April the 17th he’s again rising: Macron at 86.4%, Mélenchon at 7.2% and Fillon at 6.3%.
-
-
-Polls’ average, April 17th
-
-**The dynamic is clear. Mélenchon is on the rise and mainstream medias started shivering.**
-
-### Mainstream media in panic mode
-
-I talked earlier about Mélenchon’s presence on YouTube, let’s see a concrete example. He made a **5 and half hours live stream** about his program to present a **detailed accounting** of it.
-
-Mélenchon’s live stream presenting the budget of his program
-
-While he published the video more than a month ago, medias completely ignored it at first. **Now that he’s gaining traction, they are giving a closer look at the books**. One of the main angle used to attack him can be summed up as the following: “banks and financial institutions say that he’ll ruin the country”. **Indeed, banks are not seeing with a welcoming eye the rise of the only candidate who gets real about fighting fiscal fraud and evasion.**
-
-Diverse strategies are used to fragilize his candidacy down to the most dishonest — smearing: **some medias are trying to depict him as a socialist-dictator**, like Chavez or Castro. The cover of the digital edition of “Le Figaro” (a French right-leaning newspaper) from April the 13rdis particularly insightful on the matter:
-
-
-Le Figaro’s headline, April 13th
-
-Here are the translations of the headlines:
-
-> **Mélenchon, a devastating project for France**
-
-> The fiscal blow without equal of Mélenchon
-
-> Mélenchon’s program, a social big-bang from another age
-
-> Castro, Chavez… Mélenchon, the zealot of revolutionary dictators
-
-> Mélenchon wants to shatter “liberal” Europe
-
-
-#### What the media panic means for Mélenchon’s candidacy
-
-**The amount of disinformation is staggering**, yet not media is calling bullshit because all of them are doing it. The panic of mainstream newspaper, radio and TV channels might, in the end, be a good sign.
-
-Indeed, considering who owns them, seeing them react so strongly to Mélenchon’s candidacy **demonstrates that he is a serious threat to their owners: the few and extremely wealthy neoliberalist individuals**: Mathieu Pigasse, Xavier Niel, Pierre Bergé, Bernard Arnault, Patrick Drahi, Vincent Bolloré, Benjamin de Rothschild, Serge Dassault, François Pinault the Bouygues family… People who are **the most afraid of him are the biggest proponent of neoliberalism**.
-
-In my previous and first article, I discussed how distributed networks could be [the key to free us from neoliberalism](https://medium.com/@BBerdah/is-the-world-ready-for-the-shakedown-of-bottom-up-politics-98c585048db5). The candidacy of Jean-Luc Mélénchon, heavily supported by diverse organizations effectively functioning as distributed network is an actualization of this thesis.
-
-**I welcome the panic of our corrupted medias with comfort and confidence: it’s a sign they’re about to become a thing of the past.**
diff --git a/content/posts/2017/impact-ecologique-trail.fr.md b/content/posts/2017/impact-ecologique-trail.fr.md
deleted file mode 100644
index 36a380e3..00000000
--- a/content/posts/2017/impact-ecologique-trail.fr.md
+++ /dev/null
@@ -1,145 +0,0 @@
----
-title: "Comment évaluer et limiter l'impact écologique d'un trail ?"
-date: 2017-09-22T13:24:30+02:00
-draft: true
-toc: true
----
-
-Le trail est plus populaire que jamais ! La course à pied séduit, en France et à travers le monde et le trail n’est pas en reste. C’est désormais une des pratiques hors-stade les plus populaires avec la randonnée et la marche nordique. Cet afflux continuel de nouveaux trailers représente une manne pour les organisateurs. Leurs courses battent des records en nombre et importance chaque année. Le trail est une pratique intimement liée avec la nature.
-
-Un trailer comprend bien l’impact qu’il peut avoir sur les environnements naturels et préservés qu’il traverse. Si chacun en envisage l’existence, l’ impact écologique d’un trail reste un sujet rarement abordé. Bien que les trailers soient sensibles à la cause écologique, ils ignorent parfois les possibles conséquences de leur pratique.
-
-Néanmoins, avec des chiffres qui suivent une croissance exponentielle, l’ampleur du phénomène pousse désormais à réfléchir sur l’ impact écologique d’un trail. Dans cet article, nous essayerons d’envisager de manière exhaustive tous les possibles impacts environnementaux qu’un trail peut avoir. L’objet est **autant de donner des pistes de progressions aux organisateurs que de sensibiliser les coureurs.**
-
-## Une question essentielle
-
-L’enjeu est donc de donner **une grille de lecture** pour comprendre toutes les ramifications qu’implique l’organisation d’un trail. Ainsi, cet article pourra servir de guide lors de la notation d’un trail. Il peut aider à jauger la sensibilité environnementale de ses organisateurs et de son exécution.
-
-Les principales sources de cet article sont les travaux réalisés par l’UTMB qui permettent de mieux envisager toute les possibles modifications du milieu naturel dont une **course de plus de 5000 participants** (UTMB + CCC + TDS) peut être à l’origine.
-
-Pour mieux saisir l’ impact écologique d’un trailer solitaire, l’étude « Comparing hiking, mountain biking and horse riding impacts on vegetation and soils in Australia and the United States of America » publiée en 2009 dans le *Journal of Environmental Management* a été d’une grande aide.
-
-Toutes les conclusions ne sont cependant pas exportables à la situation en Europe. Le climat et la nature des sols sont bien différents. En effet, en Australie et aux Etats-Unis, la plupart des trails ont lieux dans des réserves naturelles. **Il** **est donc plus aisé de mesurer l’impact qu’ils peuvent avoir sur leur environnement direct**. Néanmoins cette étude reste très informative pour cerner les enjeux écologiques d’un trail.
-
-
-**La masse réunie lors d’un événement multiplie les potentiels dégâts environnementaux dont celui-ci pourrait être à l’origine**. On a donc décidé de passer un trail au peigne fin pour en dégager les enjeux environnementaux et écologiques majeurs afin que chacun, organisateur, coureur, bénévole ou simple spectateur puisse agir à son échelle pour préserver le cadre apprécié et partagé par tous.
-
-## L’ impact écologique d’un trail
-
-Afin de mieux comprendre les possibles impacts écologiques d’un trail, on a décidé de les regrouper en trois catégories : les impacts environnementaux, les impacts sur la faune et enfin le problème des déchets.
-
-### Les impacts environnementaux
-
-L’organisation d’un trail est un **défi logistique et humain de grande ampleur**. En effet, au-delà des coureurs, il y a aussi le public, les intendants et les volontaires. Pour un trail de 500 participants, le nombre de personnes effectivement sur le terrain peut être **le double**. Tout ce monde pose un premier problème conséquent : le **piétinement de la flore**. Le problème du piétinement de la végétation n’est plus négligeable quand les courses affichent parfois plus de mille participants. La pratique en zone aride ou hors sentier accentue le phénomène. Dans les parcs naturels américains où le trail est pratiqué, on constate :
-
-- **une surface moins importante recouverte par la végétation,**
-- **la disparition de certaines espèces de plantes,**
-- **des changements dans la composition de la végétation,**
-- **et même l’introduction de nouvelles graines et pathogènes**.
-
-#### Les zones à risques
-
-Des chercheurs américains s’intéressent à l’impact du trail et d’autres activités en pleine nature sur **la propagation des graines**. Il semblerait que les tracés des trails agissent comme des **couloirs de dispersion des espèces exotiques** dans des zones encore relativement préservées. En outre **la géographie d’un trail tend à concentrer les coureurs** à certains points donnés. Cela crée des zones où le piétinement est d’autant plus problématique. Au point de départ ou aux alentours des points de ravitaillement par exemple, l’impact sur la flore n’est clairement pas négligeable.
-
-D’autre part, le passage d’une masse de coureurs entraîne une véritable redistribution dans la configuration des sols des chemins empruntés par ceux-ci. Cela crée **une érosion des terrains** qui est **accentuée par l’usage des bâtons et les raccourcis hors-sentier qui peuvent être empruntés**. Une humidité réduite et une réduction de la litière organique sont constatées dans les parcs naturels américains et australiens. Le problème est d’autant plus important dans les zones humides, les endroits susceptibles de recevoir de fortes pluies ou de la neige. La génération et propagation de la boue entraînent **des changements importants dans la configuration des sols**. Les conséquences de cette reconfiguration des sols sont cependant très dures à évaluer.
-
-
-*Nombre d’études rapportant les impacts spécifiques des activités outdoor en Australie et aux USA.*
-
-#### Le défi du balisage
-
-Enfin, un dernier problème pratique conclue la liste des impacts environnementaux : le balisage du tracé. Les techniques utilisées ont évolué ces dernières années. Plutôt qu’un marquage direct des arbres, on utilise désormais de la rubalise (ruban de signalisation). Malheureusement, les rubans sont souvent laissé tels quel sur le tracé après l’événement. Il faut donc se poser la question de leur dégradation dans un environnement naturel. Il existe désormais des rubalises certifiées biodégradables mais il est difficile de s’assurer que leur utilisation soit systématique.
-
-Ainsi, le tracé doit considérer tous les impacts possibles qu’un trail peut avoir sur la flore afin d’en minimiser la portée. Certains impacts sont difficilement évitables, comme le piétinement ou l’impact sur les sols. Le tout est d’en avoir conscience lors de l’établissement de nouveaux trails. C’est en ayant ces enjeux en tête que les organisateurs pourront optimiser le tracé de leurs événements. Cela leur permettra de minimiser autant qu’ils le peuvent l’impact de la course sur l’environnement qui l’héberge et que l’événement permet de découvrir. Après tout, ce qui réunit tant de coureurs au même endroit, c’est avant tout des paysages uniques qu’ils apprécient et qu’ils cherchent à préserver.
-
-### Impacts sur la faune
-
-Il convient tout d’abord de différencier deux types de pratiques : la pratique sur sentier balisé et la pratique hors-sentier. En effet, le sentier est le terrain des hommes, en dehors d’un pic de fréquentation telle qu’une course, la faune s’habitue à la présence d’humain sur les sentiers et s’organise autour. La pratique hors-sentier quant à elle est bien plus problématique : les animaux peuvent être dérangés et les sols abîmés. L’impact vis-à-vis de la faune s’articule autour de deux enjeux majeurs : le dérangement de la faune sauvage et le dérangement des troupeaux domestiques.
-
-#### Nuit de folies ?
-
-Pour la faune sauvage, l’essentiel du problème est sur l’échelle temporelle : le printemps est la période de reproduction pour beaucoup d’animaux dont de très nombreux oiseaux. Un événement avec de nombreux coureurs peut donc déranger le cycle reproductif des animaux aux alentours. Il convient d’accorder une attention particulière au choix de la date lors de l’organisation d’une course. Pour cela, les organisateurs doivent se renseigner sur les différents animaux présents sur le tracé et affectés par celui-ci pour minimiser les possibles dérangements.
-
-En dehors des saisons, un second problème de temps se pose. Si les environnements traversés par les trails sont plutôt calmes en journée, la nuit, la faune reprend ses droits. La pratique nocturne s’avère bien plus dérangeante pour la faune aux alentours et ce pour plusieurs raisons. Tout d’abord, un simple problème d’heures activités qui rend le passage d’un trail plus dérangeant. Les cadres naturels traversés par les trails abritent souvent des animaux plutôt nocturnes. D’autre part, les lampes frontales utilisées lors des courses de nuit effraient les animaux notamment les troupeaux.
-
-
-*Sur les traces des trailers. Source : [Des Bosses et des Bulles*](https://www.desbossesetdesbulles.com/)
-
-#### Pas touche à ma Clif !
-
-En effet, un autre enjeu de taille d’un trail, surtout pour ceux comme l’UTMB dont le tracé est en zone de montagne est l’interaction entre les coureurs et les troupeaux domestiques. Il arrive parfois que les coureurs traversent un enclos ou un pré. Ils doivent en refermer les clôtures après leur passage, ce qui n’est pas toujours fait. Le passage d’une masse de coureurs peut aussi rendre anxieux les troupeaux.
-
-Finalement, les troupeaux ont souvent des tendances gloutonnes. Ils tendent ainsi à se nourrir des déchets laissés derrière eux par les coureurs trop pressés. Cela peut entraîner divers problème, jusqu’à la mort de l’animal en cas d’ingestion et d’étouffement avec des emballages plastiques ou opercules de gels.
-
-Si tel est votre souhait, on mènera l’enquête concernant les effets d’une ingestion de gels énergétiques par une vache. On dressera le portrait de Matty, la vache accro aux Clifbar crunchy peanut butter. Si vous voulez participez à l’édification de la bête, pensez à enlever tout emballage avant de donner une Clif à Matty !
-
-### Le cauchemar des déchets
-
-Enfin, pour conclure cette liste d’impacts on a choisi de consacrer une catégorie entière aux déchets. Les déchets sont les plus grands contributeurs à l’ impact écologique d’un trail. C’est pourtant un problème facilement évitable. Voyons comment !
-
-
-*Les barjos du ravito. Source : [Des Bosses et des Bulles*](https://www.desbossesetdesbulles.com/)
-
-#### Des packagings dangereux
-
-Le premier problème se pose avec les packagings des produits utilisés par les runners comme les gels énergétiques, les barres ou les boissons isotoniques. La plupart de ces produits sont distribués dans des emballages à usage unique. Le déchet retrouvé le plus souvent sur les tracés de trails est ainsi l’opercule de gels énergétiques. Il est suivi de près par l’entame des emballages plastiques des barres. C’est en relayant ce genre de problème que nous pousserons les fabricants à inclure une réflexion sur l’usage réel des produits qu’ils distribuent et ses conséquences sur l’environnement dans la phase de conception de leur packaging. Les packagings des produits de nutrition sportives impactent donc grandement l’ impact écologique d’un trail.
-
-#### Le problème des déchets « naturels »
-
-De plus, sur les trails longues distances un problème émerge. En effet, il a été prouvé que les excréments et les urines humaines contiennent du nitrogène et du phosphore… Leur concentration est **assez significative pour avoir un impact sur la croissance des plantes et de la végétation environnante.** Même les déchets organiques contribuent à l’ impact écologique d’un trail. Concomitant avec le problème de la dégradation des selles vient celui de la dégradation de ce qui accompagne les selles : mouchoirs, papiers toilettes, serviettes hygiéniques… Dans le cadre de l’étude menée aux Etats-Unis et en Australie citée en début d’article, des restes de papier toilettes ont été retrouvés jusqu’à un an après leur émission sur certains tracés. Finalement, **la présence de selles aux alentours des tracés de trail peut aller jusqu’à dégrader la qualité de l’eau** des réserves aux alentours. Les selles sont vectrices de pathogènes.
-
-Enfin, la répartition géographique des déchets a également son importance : les déchets ont tendance à être concentrés à certains endroits sur le tracé, notamment après les points de ravitaillement. Il a également été observé empiriquement que les coureurs ont **tendance à se décharger avant d’entreprendre des descentes en col**. Ces zones désormais connues devraient systématiquement faire l’objet d’efforts redoublés.
-
-Conscients des problèmes, nous pouvons maintenant voir ce qui est déjà en marche pour y faire face et réfléchir aux pistes futures.
-
-### Réconcilier trail et environnement
-
-Faire le point sur les enjeux écologiques et environnementaux d’un trail est essentiel, cela permet d’avoir **une vision plus pragmatique de l’ensemble de l’écosystème**. Cependant, s’arrêter à un simple constat de l’ impact écologique d’un trail serait stérile. Fort heureusement il existe déjà des initiatives qui ont pour objet de **mettre ces questions sur le devant de la scène** et afin de proposer des solutions concrètes.
-
-
-
-*Ecotrail de Paris*
-
-Certains trails se penchent déjà très sérieusement sur leurs différents impacts écologiques. On compte parmi eux, le trail de Paris avec son projet Ecotrail. Le visuel résume les 10 éco-gestes qui visent à instaurer quelques bonnes pratiques. Par exemple le **gobelet unique et réutilisable ou la pochette à déchet** sont obligatoires.
-
-Au-delà de ces engagements que le trail essaie de faire adopter par les coureurs, des initiatives sont prises par l’organisation du trail elle-même pour réduire l’impact de celui-ci.
-
-Grâce à un partenariat avec Eau de Paris, les coureurs ont accès à des points d’eau sur le parcours et à l’arrivée avec l’aide de la SEDIF (Syndicat des Eaux d’Ile de France). **Des toilettes sèches** sont utilisées pour éviter les défécations sauvages et les dégâts qu’elles engendrent. Un autre partenariat avec Phenix, une entreprise sociale, assure le meilleur usage des **surplus alimentaires générés par l’événement.** Ils sont redistribués à des associations caritatives.
-
-Un tri des déchets est également organisé afin d’en faciliter le recyclage. Différents partenariats ont été noués pour assurer le recyclage ou la redistribution de tout matériel sportif à l’occasion de l’événement : l’association Africa Run organise une collecte de matériel running en bon état d’usage pour leur donner une seconde vie tandis que la Recyclerie Sportive collecte tout type de matériaux sportifs et assure des ateliers d’autoréparation, d’accueil et de conseil.
-
-Cette initiative apporte de nombreuses réponses aux problèmes écologiques posés par les trails comme la gestion des déchets ou des toilettes. Néanmoins, **il y a encore peu d’intérêt autour de l’impact des trails sur les sols**, même de la part des grands événements qui réunissent des foules importantes.
-
-#### L’Ultra Trail du Mont Blanc
-
-En dehors des différents labels, il y a des organisateurs qui sont conscients de l’impact écologique et environnemental des trails et qui mettent en œuvre de nombreuses stratégies pour les limiter. L’UTMB est parmi l’un des premiers, préoccupé par la préservation du site unique qu’offre le trail. Retrouvez les différentes idées mises en place par l’UTMB dans cette vidéo de 25 minutes mise en ligne par Ultratrail TV :
-
-##### L’environnement comme priorité
-
-Face aux foules sans cesses plus conséquentes qu’il attire, l’équipe d’organisation devait agir. Ils ont mis en place un système de point pour sélectionner les coureurs. Mais du point de vue environnemental, une foule ne peut être sans impact. C’est pourquoi l’UTMB a fait de l’environnement une priorité.
-
-Le trail est **pionnier dans la gestion de certaines questions environnementales importantes**, comme les interactions entre les trailers et les troupeaux. Les agriculteurs sont prévenus en amont du passage d’une course. Avec simplement un peu d’information, ils peuvent déjà prendre leurs dispositions. En outre, la signalétique du tracé permet de distribuer des informations aux coureurs afin de les sensibiliser.
-
-Le trail a également **une équipe d’ambassadeurs de l’environnement** dont la mission est de nettoyer le tracé en amont tout en faisant un état des lieux. Pendant la course, ils sensibilisent les coureurs aux questions environnementales liées aux trails telles que la gestion des déchets. Après la course, ils réalisent **un inventaire des déchets collectés.** Leur décompte systématique permet de mesurer la progression de leurs efforts d’une année sur l’autre et de chiffrer l’impact écologique du trail.
-
-#### Des initiatives simples mais efficaces
-
-L’utilisation **des filets à déchet** ainsi que le gobelet réutilisable unique ont été rendue systématique. Pour limiter la concentration des déchets après les points de ravitaillement, les poubelles sont désormais annoncées par **la signalétique** ; les coureurs sont invités à se séparer de tous leurs déchets à la dernière poubelle après le ravitaillement et la prochaine poubelle leur est annoncée.
-
-Des initiatives prises par les organisateurs de trail, surtout par un trail aussi connu et mythique que **l’UTMB redonne confiance dans le monde de trails**. Néanmoins, tout n’est pas rose et un grand effort de sensibilisation des coureurs et des organisateurs reste à faire. Il y a toujours de très nombreux déchets produits après le passage d’un trail. C’est pourquoi les initiatives écologiques doivent être encouragées d’autant plus afin que les bons réflexes deviennent la norme.
-
-Le trail a eu des débuts assez discrets, lorsqu’il était la pratique de quelques initiés amoureux de la nature. Néanmoins, de plus en plus de coureurs sont des urbains pour qui les trails sont l’occasion de retrouver la nature. Il convient cependant de s’assurer que **les bonnes habitudes soient partagées par tous.** Le maximum doit être fait pour que les trails se déroulent dans le respect de l’environnement. On espère que cet article aidera les organisateurs à réaliser les enjeux majeurs pour réduire l’impact écologique de leurs trails. Sans oublier les coureurs, qui peuvent y découvrir quelques bonnes pratiques à adopter. Le tout facilitera le travail des bénévoles tout en préservant l’environnement du trail.
-
-### Sources
-
-Pour ceux qui veulent aller plus loin et comprennent l’anglais voici quatre études qui vous aideront à approfondir :
-
-- [L’étude mentionnée en début d’article](https://web.archive.org/web/20170922015945/https://www.uvm.edu/~snrvtdc/trails/ComparingHikingMtnBikingHorseRidingImpacts.pdf)
-- [Ainsi qu’une étude sur l’impact du trail et du VTT dans le Montana ](https://web.archive.org/web/20170922015945/https://www.uvm.edu/~snrvtdc/trails/erosionalimpactofhikers.pdf)
-
-- [Un autre sur les impacts écologiques d’un trail et comment les évaluer](https://web.archive.org/web/20170922015945/https://www.pwrc.usgs.gov/prodabs/pubpdfs/5844_Marion.pdf)
-- [Un dernière sur l’impact écologique de la pratique du trail](https://web.archive.org/web/20170922015945/http://www.parks.ca.gov/pages/795/files/ecologicalimpactsrecreationalusers.pdf)
\ No newline at end of file
diff --git a/content/posts/2020/defi-picks-1.fr.md b/content/posts/2020/defi-picks-1.fr.md
deleted file mode 100644
index a5f8dcb1..00000000
--- a/content/posts/2020/defi-picks-1.fr.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: "Sélection DeFi #1 - BagderDAO, BasisCash, Rari Capital & AlphaHomora"
-description: "J'examine deux projets DeFi qui viennent de se lancer avant de considérer des options pour générer un retour sur ETH."
-date: '2020-12-05T01:13:50.191Z'
-categories: [🌌 DeFi, ⭐ Sélection]
-tags: [DeFi, Ethereum, wBTC, Badger, BadgerDAO, DIGG, Basis, Basis Cash, Rari Capital, Alpha Homora, Earn on ETH, Aave]
----
-
-Bienvenue dans les sélections DeFi ! Dans ce format, je vais vous parler des projets DeFi que je suis en train d'examiner et des raisons pour lesquelles je pense qu'ils sont intéressants. Tout n'est pas nouveau et brillant, nous allons également examiner les mises à jour et les développements des projets existants. Je vais m'en tenir au sujet et inclure des ressources si vous voulez en apprendre davantage sur l'un d'entre eux.
-
-### BadgerDAO
-
-La vision initiale de Badger est d'offrir quelque chose de similaire aux vaults de Yearn mais **focalisé sur des bitcoins tokénisés sur Ethereum** comme wBTC, sBTC, ou renBTC. Pour la distribution initiale des tokens, les tokens ont été distribués aux acteurs de la communauté qui ont entrepris des actions sur les services liés aux BTC tokénisés, se sont impliqués dans la gouvernance de certains projets, ou ont fait des dons sur Gitcoin.
-
-Avec le lancement il y a quelques jours, Badger offre maintenant des retours intéressants sur les différents BTCs ainsi que sur leur propre token. Il existe même un vault commun avec Harvest pour gagner des BADGER et FARM.
-
-À plus long terme, Badger prévoit d'étendre son offre de services pour les BTCs sur Ethereum, avec un autre token - DIGG, une monnaie élastique lié au BTC (similaire à AMPL).
-
-Vous pouvez [en apprendre plus sur Badger](https://app.gitbook.com/@badger-finance/s/badger-finance/) via leur documentation.
-
-### BasisCash
-
-Basis était un projet attendu en 2017 de stablecoin algorithmique qui s'est heurté à des problèmes juridiques. Il y a environ trois mois, l'équipe de Basis Cash a annoncé qu'elle allait exploiter les recherches initiales pour enfin concrétiser la vision.
-
-Basis Cash fonctionne comme une paire de token :
-
-* BAC, le token stable
-* BAS, représentant une part du réseau
-
-Le BAC a d'abord été distribué aux personnes qui stakaient des stablecoins Le BAS pouvait et peut encore être gagné en fournissant des liquidités au pool BAS/DAI (taux bas) ou au pool BAC/DAI (taux élevé).
-
-
-
-Le système n'est pas encore lancé, mais seulement la distribution de tokens. Dès son lancement (prévu pour le mercredi 12/9), la trésorerie commencera à produire des BAC si son prix est supérieur au dollar. Les détenteurs de BAS peuvent les staker dans le "Boardoam" pour gagner la plus grande partie du BAC produit par le système dans ce scénario. En outre, un système d'obligations (BAB) contribuera à stabiliser davantage le taux du BAC.
-
-Rejoignez [le Discord](https://discord.gg/wPrmhHDREG) pour en savoir plus.
-
-### Gagner sur l'ETH : Rari & Alpha Homora
-
-Plus que tout, je suis optimiste sur l'ETH, donc je suis toujours à l'affût des possibilités de générer un retour directement sur l'ETH.
-
-La première qui me vient à l'esprit est [Rari Capital](https://rari.capital/), qui offre toujours un taux attrayant (~40 % en RGT) sur les dépôts de l'ETH. Le programme est encore en cours pendant quelques semaines.
-
-Si vous souhaitez sauter cette étape supplémentaire en passant par un ERC-20, il existe des options pour **gagner de l'ETH directement sur l'ETH**. L'une des plus prometteuses à mon avis est Alpha Homora. Il permet aux utilisateurs qui cherchent à farmer sur Uniswap ou SushiSwap d'avoir un effet de levier. Cela signifie qu'en plus de tous les jetons ERC-20 concernés, le système a besoin de liquidités pour obtenir un effet de levier sur l'ETH également.
-
-Ce qui signifie, enfin, que vous pouvez déposer de l'ETH sur [Alpha Homora](https://homora.alphafinance.io/earn) pour répondre à ces besoins et obtenir une prime. C'est très pratique, car le jeton ALPHA n'est pas concerné. Vous déposez simplement ETH pour ibETH dont les taux de change augmentent constamment par rapport à ETH.
-
-L'APY fluctue fortement, environ entre 7 et 20 %. Cette semaine, Alpha Homora a dévoilé un nouvel emballage sur ibETH - **Earn on Aave + ETH**. Il vous permet d'exploiter la différence entre le taux d'emprunt d'Aave ETH (actuellement ~1,5%) et le taux de dépôt d'Alpha Homora. Pour ce faire, vous aurez besoin de jetons ERC-20 supportés sur Aave pour les utiliser comme garantie, comme les wBTC ou les pièces de monnaie stables.
-
-
-
-Pendant que nous y sommes - Aave [vient de lancer la V2](https://medium.com/aave/the-aave-protocol-v2-f06f299cee04). Elle apporte plusieurs améliorations significatives, telles que des échanges de collateral, des améliorations des flash, loans et des changements de qualité de vie comme l'optimisation du gaz ou la possibilité de rembourser directement avec le collateral. Tout comme Uniswap, V1 & V2 cohabiteront pendant un certain temps pour une transition en douceur.
-
-Bien sûr, pour ce qui est de gagner de l'argent avec l'ETH, vous pouvez également **combler votre devoir et staker pour l'ETH 2.0** pour un montant de ~15% APY. Consultez le site [Ethstaker](https://www.reddit.com/r/ethstaker/) pour en savoir plus sur la façon de le faire vous-même ou sur les solutions de délégation.
-
-{{< notice note >}}
-PS : C'est la saison des Gitcoin Grants ! Si vous aimez ce blog, [vous pouvez le soutenir sur Gitcoin](https://gitcoin.co/grants/811/tokenbrice-shining-light-on-ethereums-defi-en-fr) - 1 DAI peut faire beaucoup avec le matching !
-{{< /notice >}}
\ No newline at end of file
diff --git a/content/posts/2020/defi-picks-1.md b/content/posts/2020/defi-picks-1.md
deleted file mode 100644
index 319d70a5..00000000
--- a/content/posts/2020/defi-picks-1.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: "DeFi Picks #1 - BagderDAO, BasisCash, Rari Capital & AlphaHomora"
-description: "A look at two new projects launched last week & some options to generate a yield on ETH."
-date: '2020-12-05T01:13:50.191Z'
-categories: [🌌 DeFi, ⭐ Picks]
-tags: [DeFi, Ethereum, wBTC, Badger, BadgerDAO, DIGG, Basis, Basis Cash, Rari Capital, Alpha Homora, Earn on ETH, Aave]
----
-
-Welcome to the DeFi picks! With this format, I’ll share about the DeFi projects I’m currently looking at and why I think they are interesting. It’s not all shiny and new, we’ll also look at updates and developments from existing projects. I’ll keep this to the point and include resources if you want to learn about one.
-
-### BadgerDAO
-
-Badger’s initial vision is to offer something similar to Yearn vaults but **focused on tokenized Bitcoin on Ethereum** like wBTC, sBTC, or renBTC. For the initial token distribution, tokens were airdropped to actors in the community who took actions on services related to tokenized BTC, got involved in the governance of some projects, or donated on Gitcoin.
-
-With the launch a couple of days ago, Badger is now offering interesting returns on tokenized BTC as well as staking on their own token. There is even a joint vault with Harvest farming both BADGER and FARM.
-
-In the longer term, Badger’s plan is to expand its service offering for BTC on Ethereum, with another token - DIGG, a BTC-pegged elastic supply currency (think AMPL).
-
-You can [learn more about Badger](https://app.gitbook.com/@badger-finance/s/badger-finance/) on their docs.
-
-### BasisCash
-
-Basis was a hyped 2017 algorithmic stablecoin project that ran into legal issues. About three months ago, the Basis Cash team announced that it will harness the initial research to finally deliver on the vision.
-
-Basis Cash works as a token pair:
-
-* BAC, the stablecoin
-* BAS, representing a share of the network
-
-BAC was initially distributed to people staking stablecoins. BAS could and can still be earned by providing liquidity to the BAS/DAI pool (low rate) or BAC/DAI pool (higher rate).
-
-
-
-The system is currently not operating, only the token distribution. As it starts (stated for Wed 12/9), the treasury will start producing BAC if its price is superior to the dollar. Holders of BAS can stake them in the boardroom to earn most of the BAC produced by the system in this scenario. On top of this, a bond system (BAB) will help to further stabilize BAC.
-
-Feel join [the Discord](https://discord.gg/wPrmhHDREG) to learn more.
-
-### Earning on ETH: Rari & Alpha Homora
-
-More than anything, I’m an ETH bull so I’m always closely monitoring for earning opportunities directly on ETH.
-
-The first one that comes to mind is [Rari Capital](https://rari.capital/), still offering an attractive APY (~40% in RGT) on ETH deposits. The program is still ongoing for a couple of weeks and incurs a slight burn if you claim rewards before the end.
-
-If you’d like to skip this extra step through an ERC-20, there are options to **earn ETH directly on ETH**. One of the most promising ones in my view is Alpha Homora. It provides leverage for users who are looking to farm on Uniswap or SushiSwap. This means that on top of all the ERC-20 tokens involved, the system needs liquidity to get leverage on ETH too.
-
-Which means, finally, that you can deposit ETH on [Alpha Homora](https://homora.alphafinance.io/earn) to fulfill these needs and earn a premium. It’s quite neat, as the ALPHA token is not involved. You simply deposit ETH for ibETH which exchange rates constantly grow against ETH.
-
-The APY fluctuates heavily, roughly in the 7-20% range. This week, Alpha Homora unveiled a new wrapper on top of ibETH - **Earn on Aave + ETH**. It enables you to harness the difference between Aave’s ETH’s borrow rate (currently ~1.5%) and Alpha’s Homora’s deposit rate. To do so, you’ll need ERC-20 tokens supported on Aave to use as collateral, such as wBTC or stablecoins.
-
-
-
-While we’re on it - Aave [just launched the V2](https://medium.com/aave/the-aave-protocol-v2-f06f299cee04). It brings several significant improvements, such as collateral swaps, flash loans upgrades, and quality of life changes like gas optimizations or the ability to directly repay with the collateral. Just like Uniswap, V1 & V2 will cohabit for a bit of time for a smooth transition.
-
-Of course, when it comes to earning on ETH, you could also **fulfill your duty and stake for ETH 2.0** for a ~15% APY. Check [Ethstaker](https://www.reddit.com/r/ethstaker/) to learn more about doing it yourself, or check delegated solutions.
-
-{{< notice note >}}
-PS: It's Gitcoin Grants season! If you like this blog, [you can support it on Gitcoin](https://gitcoin.co/grants/811/tokenbrice-shining-light-on-ethereums-defi-en-fr) - 1 DAI can go a long way with the matching!
-{{< /notice >}}
diff --git a/content/posts/2020/defi-picks-2.fr.md b/content/posts/2020/defi-picks-2.fr.md
deleted file mode 100644
index 50af3773..00000000
--- a/content/posts/2020/defi-picks-2.fr.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: "Sélection DeFi #2 - PowerPool YETI, Idle Finance (+Harvest)"
-description: "Un nouveau produit pour développer une exposition équilibrée et lucrative à l'écosystème Yearn, le farming de stablecoins sous stéroides, et bien plus ! "
-date: '2020-12-11T01:13:50.191Z'
-categories: [🌌 DeFi, ⭐ Sélection]
-tags: [DeFi, Ethereum, PowerPool, YETI, Harvest, Idle, Idle Finance, Elastic Stablecoin, Algorithmique stablecoins wBTC, Badger, BadgerDAO, DIGG, Basis, Basis Cash, Rari Capital, Alpha Homora, Earn on ETH, Aave]
----
-
-Bienvenue à un nouveau lot de cueillettes DeFi. La semaine dernière, la récolte a été abondante, alors voyons ce qu'il y a au menu pour celle-ci.
-
-## 🌽 État des fermes : Récolte abondante 🌽
-
-Malgré le fait que le prix de l'ETH cherche un soutien, les rendements de l'ETH sont toujours excellents, même si les stablecoins ont été en tête des graphiques de rendement. Des options attrayantes apparaissent pour générer des rendements sur les tokens ERC-20 non stables également, comme nous le verrons plus loin.
-
-### PowerPool & YETI
-
-PowerIndex est l'un des projets pionniers d'un nouveau front : la méta-gouvernance. Imaginez-le comme une couche intermédiaire offrant un accès agrégé à la gouvernance de plusieurs protocoles DeFi.
-
-L'indice YETI, qui vient d'être lancé, est particulièrement intéressant car il offre un moyen plus pratique d'investir dans Yearn et dans l'ensemble de son écosystème. Il s'agit essentiellement d'un **indice qui détient le portefeuille suivant** : YFI (35%), SUSHI (17%), CREAM, AKRO, COVER, KP3R, CVP, PICKLE (8% chacun).
-
-
-
-Un programme attractif d'extraction de liquidités est également disponible, qui permet actuellement de compenser plus de 1 % par jour aux investisseurs du YETI, payés en tokens CVP. Dans l'ensemble, le YETI est une offre fraîche mais attrayante pour quelqu'un qui cherche à obtenir **une exposition équilibrée à l'écosystème de Yearn**.
-
-Les améliorations à venir impliquent une utilisation plus active des tokens faisant partie de l'indice YETI, comme le staking de SUSHI dans le Sushibar pour obtenir des rendements supplémentaires.
-
-(Vous pouvez en savoir plus sur le YETI sur le blog de PowerPool)(https://medium.com/powerpool/the-meta-governance-approach-applied-to-the-yearn-ecosystem-yeti-is-launched-d8417459f6e2)
-
-### Harvest + Idle : Fermes industrielles pour stablecoins
-
-Idle Finance propose depuis des mois l'optimisation du rendement des stablecoins mais récemment, ils ont attiré l'attention avec le lancement de leur token IDLE et de son programme de liquidité. En effet, cela offre une couche de rendement supplémentaire en plus du rendement habituel obtenu par Idle en prêtant vos tokens sur la plateforme au meilleur rendement.
-
-En quelques jours, la valeur totale des actifs bloqués sur la plateforme a grimpé en flèche :
-
-
-{{< tweet 1337062711453212673 >}}
-
-
-Harvest Finance a réagi rapidement et a proposé de nouveaux vaults USDC, USDT, DAI et TUSD offrant un taux d'intérêt annuel attractif via Idle :
-
-
-
-### Mise à jour sur les choix de la semaine dernière
-
-La semaine dernière, [nous avons examiné quelques projets DeFi intéressants]({{< relref path="/content/posts/2020/defi-picks-1.fr.md" >}}) : comment se portent-ils ?
-
-1. Alpha Homora fournit toujours environ 10 % d'intérêts sur l'ETH.
-2. & Rari Capital environ 40%, payé en RGT. L'équipe Rari [a annoncé](https://twitter.com/melonprotocol/status/1336375315816443906?s=20) qu'ils vont passer sur le protocole Melon.
-3. Badger offre toujours un prix attractif sur ses coffres Bitcoin et est sur le point de lancer DIGG la semaine prochaine !
-4. Basis Cash est passé par sa première phase d'expansion, pour en savoir plus, lisez les mots de la fin.
-
-{{< notice info >}}
-🤗 Si vous trouvez que mon travail a de la valeur, n'hésitez pas à **[le soutenir grâce à Gitcoin](https://gitcoin.co/grants/811/tokenbrice-evangelizing-defi-in-fr-en).**
-{{< /notice >}}
-
-### Parting Words : Regard sur les stablecoins algorithmiques
-
-Pour conclure le choix de cette semaine, j'aimerais attirer votre attention non pas sur un projet en particulier, mais plus largement sur un sous-ensemble de l'espace. Les stablecoins sont partout dans le DeFi de nos jours, **même si aucun d'entre eux n'est suffisamment fiable, même le DAI** (garanti à ~60 % par des collatéraux comme l'USDC ou le wBTC qui nécessitent de la confiance - [daistats](https://daistats.com/#/)).
-
-Récemment, il y a eu des développements intéressants dans ce domaine avec l'arrivée de la **prochaine génération de stablecoins algorithmiques**, exploitant des mécanismes similaires à Ampleforth pour fournir un token plus étroitement lié à son ancrage au dollar et encore plus évolutif.
-
-{{< notice warning >}}
-Les tokens dotés de mécanismes de rebase sont des opportunités très asymétriques. Ça semble fou, mais je vais écrire ça ici, au cas où : **C'est généralement une mauvaise idée d'acheter un stablecoin à plus d'un dollar.** Quand on investit dans de tels projets, le timing est primordial.
-{{< /notice >}}
-
-Pour une introduction équilibrée au sujet, l'article de Derebit est un must absolu car il donne un aperçu complet de l'expérience sur les stablecoins algorithmiques à ce jour :
-
-**[👉 Stabilité, élasticité et réflexivité : une enquête sur les stablecoins algorithmiques](https://insights.deribit.com/market-research/stability-elasticity-and-reflexivity-a-deep-dive-into-algorithmic-stablecoins/)**
\ No newline at end of file
diff --git a/content/posts/2020/defi-picks-2.md b/content/posts/2020/defi-picks-2.md
deleted file mode 100644
index 8e0be61f..00000000
--- a/content/posts/2020/defi-picks-2.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: "DeFi Picks #2 - PowerPool YETI, Idle Finance (+Harvest) & more"
-description: "This week, we look at a new and attractive DeFi investment device to get exposure to the Yearn ecosystem and several other novelties."
-date: '2020-12-11T01:13:50.191Z'
-categories: [🌌 DeFi, ⭐ Picks]
-tags: [DeFi, Ethereum, PowerPool, YETI, Harvest, Idle, Idle Finance, Elastic Stablecoin, Algorithmic stablecoins wBTC, Badger, BadgerDAO, DIGG, Basis, Basis Cash, Rari Capital, Alpha Homora, Earn on ETH, Aave]
----
-
-Welcome to a fresh batch of DeFi picks, last week's harvest has been bountiful so let's see what's on the menu for this one.
-
-## 🌽 State of the Farms: Bountiful Harvest 🌽
-
-Despite the ETH price looking for support, yields on ETH are still excellent, even though stablecoins have been topping the returns charts. Attractive options are emerging to generate returns on non-stable ERC-20 tokens too, as we'll see below.
-
-### PowerPool & YETI
-
-PowerIndex is one of the projects pioneering a novel front: meta-governance. Picture it as an intermediary-layer offering aggregated access to the governance of several DeFi protocols.
-
-The YETI index, just launched, is particularly interesting as it provides a more convenient vehicle for investing in Yearn and all of its ecosystem. It's essentially **an index holding the following portfolio**: YFI (35%), SUSHI (17%), CREAM, AKRO, COVER, KP3R, CVP, PICKLE (8% each).
-
-
-
-An attractive liquidity mining program is also available, currently netting more than 1% a day to YETI stakers, paid in CVP tokens. Altogether, YETI is a fresh but attractive offering for someone looking to get **a balanced exposure to Yearn's ecosystem**.
-
-Further projects involve a more active usage of the tokens involved in the YETI index, such as staking the SUSHI tokens in the Sushibar for additional returns.
-
-[You can learn more about YETI on PowerPool's blog.](https://medium.com/powerpool/the-meta-governance-approach-applied-to-the-yearn-ecosystem-yeti-is-launched-d8417459f6e2)
-
-
-### Harvest+Idle: Boosted Stablecoin Farming
-
-Idle Finance has been offering yield optimization for stablecoins for months but this week they drew a lot of attention with the launch of the IDLE liquidity mining, as it offers an additional layer of return on top of their usual. In a few days, the total value of assets locked on the platform skyrocketed:
-
-
-{{< tweet 1337062711453212673 >}}
-
-
-Harvest Finance was quick to react and offer new USDC, USDT, DAI, and TUSD Idle-powered vaults delivering an attractive APR:
-
-
-
-### Update on last week's picks
-
-Last week, [we looked at a few interesting DeFi projects]({{< relref path="/content/posts/2020/defi-picks-1.md" >}}): how are they doing?
-
-1. Alpha Homora is still delivering around ~10% APY on ETH.
-2. & Rari Capital around 40%, paid in RGT. The Rari Team [announced](https://twitter.com/melonprotocol/status/1336375315816443906?s=20) that they will be moving to Melon protocol.
-3. Badger still offers attractive APY on its Bitcoin vaults and is about to launch DIGG next week!
-4. Basis Cash went through its first expansion phase, read more about it in the parting words.
-
-{{< notice info >}}
-🤗 If you find value in my work, feel free to **[support it through the Gitcoin grants](https://gitcoin.co/grants/811/tokenbrice-evangelizing-defi-in-fr-en).**
-{{< /notice >}}
-
-### Parting Words: Looking at algorithmic stablecoins
-
-To conclude this week's pick, I'd like to draw your attention not to a project in particular, but more broadly to a subset of the space. Stablecoins are everywhere in DeFi nowadays, **despite none of the currently available ones being sufficiently trustless, even DAI** (backed at ~60% by trusted collaterals like USDC or wBTC - [daistats](https://daistats.com/#/)).
-
-Recently, there have been some interesting developments in this space with the arrival of the **next generation of algorithmic stablecoins**, harnessing mechanisms similar to Ampleforth to deliver a token more closely tied to its dollar peg and yet more scalable.
-
-{{< notice warning >}}
-Tokens with rebase mechanisms are highly asymmetric opportunities. Seems crazy, but I'll write this here just in case: **It's generally a bad idea to buy a stablecoin over a dollar.** When investing in such projects, timing is everything.
-{{< /notice >}}
-
-For a balanced introduction to the topic, Derebit's piece is an absolute must-read as it provides a comprehensive overview of the algorithmic stablecoins experiment to date:
-
-**[👉 Stability, Elasticity, and Reflexivity: A Deep Dive into Algorithmic Stablecoins](https://insights.deribit.com/market-research/stability-elasticity-and-reflexivity-a-deep-dive-into-algorithmic-stablecoins/)**
\ No newline at end of file
diff --git a/content/posts/2020/dyed0-intro.md b/content/posts/2020/dyed0-intro.md
deleted file mode 100644
index f0f43a3d..00000000
--- a/content/posts/2020/dyed0-intro.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: "Do You Even DeFi? Introduction [DYED#0]"
-description: "DYED is a DeFi onboarding program articulate with weekly missions. You will be following the pace of Vincent's Monolith new Product Manager - and I'll guide the sessions."
-date: '2020-08-09T01:53:50.191Z'
-categories: [👽 DYED]
-tags: [DeFi, Ethereum, learning DeFi]
----
-
-
-
-Last week, a new Monolith team member joined and not the least: Vincent. Vincent is our new Product Manager, and he wants to catch-up with DeFi. As we first chatted, I asked him if would be willing to share his learning with everyone. He agreed, and so here we are - I’m finding myself **designing a DeFi discovery program based on weekly missions**.
-
-Here’s how it will work:
-
-1. **Each Monday**, I’ll publish a Mission Statement. It includes a DeFi mission (surprise!), as well a quick 2-3 min audio to provide some guidance on how to pull it off. I’ll also include relevant links to learn more on the services used.
-2. **Each weekend**, Vincent & I will have a ~30 min call to debrief the mission. The call will be streamed lived and available afterwards. Shortly after our call, I’ll write up a mission report based on Vincent’s struggles and questions. The report will be published in the weekend and include the audio.
-3. At any time, you can hop in **[the program dedicated Discord channel](https://discord.gg/4zt75cb)** to chat with others taking on this journey & get a ping for each mission/report published.
-
-Pretty straightforward right? While I’m keen to help Vincent onboard, I love this plan and it enables anyone to partake.
-
-{{< notice note >}}
-Like all tokenbrice.xyz productions, this is forever free. If you appreciate my **personal** initiatives, [you contribute to my Gitcoin Grants here](https://gitcoin.co/grants/811/tokenbrice-shining-light-on-ethereums-defi-en-fr).
-{{< /notice >}}
-
-## What kind of DeFi will you learn?
-
-With this project, my initial goal was to help Vincent gain more and more understanding of DeFi. I'll hold you to the same standards. **This program won't teach you how to find the next pump on Uniswap nor to get rich overnight**.
-
-It will, however, help you understand what decentralised finance is, why it matters, and how to use the key services of the space efficiently. I think newcomers will also appreciate having directions (missions) during their onboarding phase which can be overwhelming.
-
-This program is entirely free - you are here for knowledge and should not expect any reward other than understanding DeFi better.
-
-The first mission is now live: get started by following the link 👇
-
-**[Do You Even DeFi? - Mission 1 - Gotta Get Dat ETH]({{< relref path="/content/posts/2020/dyed1.md" >}})**
-
----
-
-## Necessary Disclaimers
-
-**I’m not here to help you become a ninja-trader for free. I’m here to help you understand how decentralised finance services work, and how you can use them**. What happens after is your purview. You could lose money. If you rush and don’t think twice, you might even lose most of of your capital, if not all.
-
-{{< notice warning >}}
-**I do not provide investment advice, as I am utterly not qualified to do so.** I have no formal trading or investment training, nor professional experience. What I can promise you however is to thrive to keep this content as informative as possible and neutral.
-{{< /notice >}}
-
-My main goal with this series is to provide the community with a helpful structure to learn more about decentralised finance & make Vincent’s onboarding a compelling, fun, and rewarding experience.
-
-Thanks to all of you who will join us for this adventure, I'm looking foward to it!
\ No newline at end of file
diff --git a/content/posts/2020/dyed1-report.md b/content/posts/2020/dyed1-report.md
deleted file mode 100644
index 47781928..00000000
--- a/content/posts/2020/dyed1-report.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: "#DYED 1 - Mission Report: Gotta Get Dat ETH"
-description: "The first mission was easy - yet a necessary pre-requisite for the exciting next ones to come! Let's see how you fared."
-date: '2020-08-23T00:53:50.191Z'
-categories: [👽 DYED]
-tags: [DeFi, Ethereum, learning DeFi, DYED-report]
----
-
-
-
-Welcome DYED Trainees, I'm thrilled to have you on board!
-
-So first, if you haven't yet, **[do join the dedicated Discord channel for the program](https://discord.gg/4zt75cb)**. You'll be able to ask your questions and discuss the adventures with other trainees.
-Bonus: once you are in here, you'll be granted the DYED Trainee title, making it super easy for me to **ping you when a new mission goes live**.
-
----
-
-### Observations
-
-I'm really glad to see the diversity of means employed to fulfil this first mission, and especially the bonus part! The most commonly used non-custodial solutions were DEXs, unsurprisingly. However, some of you got really creative, especially one who found a way from BTC already!
-
-It was also a great starter to **clear some misconceptions on what non-custodial means.** For instance, yes, a wallet like Argent is a non-custodial wallet. However, if a debit card is involved in the transaction - it means there is custody (the bank behind the card). Therefore it means that you can have custodial & trusted crypto purchasing solutions living within a non-custodial wallet. Thanks for helping me realize this is not obvious at all for a novice.
-
-PS: Seems like quite a few Frenchies took me on my adventure/challenge. So to better gather for them - we've created a dedicated DYED-FR discussion channel.
-
-### Bonus Mission #1 Status
-
-{{< notice info >}}
-The 10 x 25 TKN (~$20) bonus rewards (25 TKN each!) were claimed.
-
-🎉 Congrats to @DiGloBo, @LeMageKnight, @Thomas_cie, @webbson, @Escaflown, @L0GYK4L, @cryptomooniac, @alexw, @Satish143 & @raefe!
-{{< /notice >}}
-
----
-
-### Next Steps
-
-For logistical reasons mostly (I've been travelling), I haven't been able to catch up with Vincent (Monolith's DYED Trainee) for the first mission - so there will be no audio debrief for this first one.
-
-Thanks for indulging the quirks of me launching this right before taking a week of holidays (sound planing right there 😂). We'll do a proper debrief at the end of the week covering the first two missions.
-
-Enjoy the rest of your Sunday, and I'll see you here and **[on the Discord](https://discord.gg/4zt75cb)** tomorrow for the next mission!
\ No newline at end of file
diff --git a/content/posts/2020/dyed1.md b/content/posts/2020/dyed1.md
deleted file mode 100644
index b341446a..00000000
--- a/content/posts/2020/dyed1.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: "DYED #1 - Gotta Get Dat ETH"
-description: "It's to time to get started with your onboarding of Ethereum decentralised finance. Good luck with this first assignment!"
-date: '2020-08-10T00:53:50.191Z'
-categories: [👽 DYED]
-tags: [DeFi, Ethereum, learning DeFi, DYED-mission]
----
-
-
-
-Welcome aboard,
-
-I'm thrilled to be doing this openly for the first time. I helped many friends, colleagues and family members to realize the potential of decentralised finance. When my colleague Vincent asked me to help him figure this out, I knew it was time to share it with the world too!
-
-You are embarking on a new journey, where you will discover foreign concepts and question old ones you took for granted. It will eventually affect you too, and that's normal. As you go on this journey, you'll need to check yourself and analyse how you feel.
-
-So for each mission, I'd love you to pay attention to:
-
-- Your feelings: Are you excited? worried?
-- Your fears: do you know what you are doing? Are you afraid of having an issue?
-- Your expectations: Was it simple? Does it match what you envisioned?
-
-It took me a while, but I've found that my emotional state roughly matches the quality of my DeFi investment decisions. So I've learned to use it as a factor now helping to guide them. I think anyone could benefit from doing the same.
-
-So for this first mission, this mission statement will be your only guide - you'll have to display some adaptability.
-
-### DYED Mission #1 - Gotta Get Dat ETH
-
-Everything we do, we do it with ETH.
-So how about we start there?
-
-{{< notice note >}}
-- **Mission Statement**: Get an ETH! Yes, 1.0 ETH at least. If you're serious about this, you've got to commit.
-- **Reward**: You just bought tons of gas fueling the infinite machine, forever crunching to establish new means of coordinating at a planetary scale. Congrats! We will put it to good use.
-{{< /notice >}}
-
-The mean is open: research and pick the service you fancy. However, I want to hear which one you have chosen, and why it was a fit for you.
-
-#### BONUS MISSION:
-
-- **Statement**: Use a non-custodial service to acquire that ETH (if you own 0 crypto, think local).
-- **Reward**: 25 TKN (~$15) - for the first 10 DYED trainees to claim.
-- **Claim**: Join the [DYED Discord](https://discord.gg/ZW8WRzX) and submit your proof on the #dyed-bonus-claim channel
\ No newline at end of file
diff --git a/content/posts/2020/dyed2.md b/content/posts/2020/dyed2.md
deleted file mode 100644
index 2ea0ec35..00000000
--- a/content/posts/2020/dyed2.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: "DYED #2 - Be your own bank"
-description: "Now that we have ETH, the **logical and simple** next step is to become our own bank. You've read it right, now let's get to work!"
-date: '2020-08-24T00:53:50.191Z'
-categories: [👽 DYED]
-tags: [DeFi, Ethereum, learning DeFi, DYED-mission, Maker, MakerDAO, CDP, Vault, Mint DAI]
----
-
-
-
-Glad to see you again!
-
-Now that you've got your hands onto some ETH - it's time to put them to work! To do so, we'll use the ETH to mint some money of your own!
-
-Leveraging ETH is nothing new and there are many ways you could achieve this, however, to keep things manageable & most insightful, allow me to dictate the service used: **we'll go with [MakerDAO](https://oasis.app/)**.
-
----
-
-### Why are we leveraging ETH?
-
-ETH is a unique type of asset. Why sell it when you could use it as collateral and put the minted money to good use? This week, we focus on the minting part - there will be no deployment of the DAI minted yet.
-
-If you are eager for the next steps already you can read this post I wrote covering the same topic, for more advanced users:
-**[🎚 ETH exposure or DeFi yields: why choose?]({{< relref path="/content/posts/2020/leveraging-eth.md" >}})**.
-
-It might be a bit dense but it can help provide you with some context and help you figure out what the endgame looks like while leveraging your ETH.
-
----
-
-### Why Maker?
-
-There are several reasons why I want you to go with Maker:
-1. **Maker goes beyond just borrowing**: it enables you to mint the DAI stablecoin itself. I couldn't resist the idea of seeing you minting stablecoins on your second mission! Yes, it's that easy!
-2. The service is live and running for almost 3 years now.
-3. **The current fees are 0** - you will not pay anything more than gas for this operation.
-4. You have **many tools available** to help you open, manage and save Maker vaults.
-
----
-
-### DYED Mission 2
-
-So here is the mission for this week: let's open a vault on Maker: we'll be locking up some ETH in a smart contract to use them as collateral to generate a debt received in the form of DAI. As you do so, you'll have to make decisions - the most critical one being the choice of your collateralisation ratio/liquidation price.
-
-{{< notice note >}}
-Open a Maker vault from ETH. As you do so, I'd like you to document two things:
-1. Rank your risk appetite on a scale on 0 to 10
-2. Explain your reasoning for your choice of liquidation price/ratio and tools used if any.
-{{< /notice >}}
-
-I think it will help you approach this experience with an insightful framework. It's also a requirement for the bonus reward! Indeed, this week there is no extra step required to claim the bonus. Instead, I want to allocate it to those who thoroughly honoured this essential mission.
-
-{{< notice tip >}}
-**💸 BONUS BUDGET: 15 x 10 TKN ($~9) up for grabs**
-
-🎯 Share your risk appetite estimation [0= lowest to 10 =highest] + the parameters you've chosen to open your vault and why on **[the dedicated Discord channel: #dyed-risk-profile](https://discord.gg/tsZgqQ9)** (slowmode enabled)
-Send me (@TokenBrice) proof of the vault being opened, **ONLY BY DM.**
-{{< /notice >}}
-
----
-
-### Managing Liquidation Risks
-
-{{< notice warning >}}
-A position on Maker can be liquidated: it means your collateral will be (partially) seized and sold to cover your debt. Liquidation is, of course, a costly worst-case outcome you must avoid at all cost!
-{{< /notice >}}
-
-To do so, the best is to stay safe. **If you're not confident with ETH's current price level, aim for a high collateralisation ratio (>240%)** to have a wide margin enabling you to stomach a deep price decrease.
-
-If you're feeling more adventurous, you can push the ratio is the 200-180% levels. I would urge you to use [DeFiSaver Save Automation](https://defisaver.com/) feature to protect yourself from liquidation if you walk this path.
-
-Good luck, **don't be reckless. It's much better to learn in a stress-free environment**. If you have any doubt, do ask your questions before rushing to the practice.
-
-See you on the [Discord](https://discord.gg/ZW8WRzX)!
\ No newline at end of file
diff --git a/content/posts/2020/lien-finance.fr.md b/content/posts/2020/lien-finance.fr.md
deleted file mode 100644
index af3f2173..00000000
--- a/content/posts/2020/lien-finance.fr.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-title: "Lien Finance & la quête d'un stablecoin 'trustless'"
-description: "Lien Finance est un système innovant qui dans un premier temps propose un stablecoin crédiblement sans intermédiaire de confiance. Le système est élégant et évite les deux pièges classiques : la sur-collatéralisation et l'excès de gouvernance (avec l'inertie que ça implique). **On ne parlera pas de l'équipe, elle est anonyme.**"
-date: '2020-08-21T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Découverte]
-tags: [DeFi, Ethereum, Prêts, Stablecoins, USDC, USDT, DAI, LIEN, iDOL]
----
-
-
-
-Les stablecoins sont la monnaie de base de la DeFi - on pourrait même dire qu'ils ont été essentiels au démarrage de la scène - en effet, la volatilité rend la plupart des scénarios de prêt/emprunt intimidants, voire impossibles.
-
-Heureusement pour nous, **l'offre de "stablecoin" s'est considérablement développée ces dernières années**. En plus des habituels DAI et USDT, nous avons vu l'USDC et le sUSD être de plus en plus adoptés dans la DeFi. L'USDC a de nombreux atouts - notamment un ancrage (peg) bien maintenu et une excellente liquidité.
-
-Toutefois, **comme pour l'USDT, un solde d'USDC peut être saisi ou gelé à tout moment** - à la seule discrétion du Circle (émetteur). Comme l'USDC est de plus en plus utilisé comme collatéral dans la DeFi, ce point soulève des inquiétudes sérieuses.
-
-Par exemple, via Maker il est désormais possible de déposer vos USDC en contrepartie (collatéral) pour générer des DAI. Bien. Mais que se passe t-il si les USDCs sont saisis parce qu'ils ont été impliqués dans un piratage par exemple ? Pour l'instant, c'est un territoire inexploré.
-
-
-## Pourquoi les stablecoins 'trustless' sont nécessaires ?
-
-**Les stablecoins sont des objets bidimensionnels : ils évoluent dans une dimension économique mais également relationnelle (confiance).**
-
-Sur le plan économique, vous avez des questions telles que :
-
-1. Est-ce que le stablecoion maintient vraiment son peg (1 stablecoin = 1 dollar autant que possible) ?
-2. La liquidité du système est-elle suffisante même pour couvrir des besoins importants ?
-
-**La dimension économique est généralement suffisante pour la plupart des utilisateurs, car ils ne détiendront pas les stablecoins à long terme ou ne les utiliseront pas comme collatéral**. Néanmoins, pour une utilisation fiable dans la finance décentralisée, un projet de stablecoin doit également comprendre la dimension de confiance :
-
-
-* Le système peut-il être arrêté par une autorité centrale ou une tierce partie ?
-* Qui le contrôle ?
-* Le solde des stablecoins peut-il être gelé/saisi ?
-* Il y a t-il d'autres paramètres du système qui pourraient être modifiés entraînant ainsi une perte pour les investisseurs?
-
-Si le **USDT et l'USDC sont un succès économique évident, leur modèle les exclut instantanément de la prétention à être 'trustless'**. Donc, si nous excluons les stablecoins qui peuvent être saisis ou gelés, il nous reste essentiellement le DAI ou le sUSD.
-
-Pour mieux comprendre les différents modèles de confiance et comprendre pourquoi la dimension trustless est critique, je vous invite à lire l'article BanklessFR qui propose une **[taxonomie pour la bande passante économique](https://banklessfr.substack.com/p/une-exprience-de-pense-qui-amne-leth)**.
-
-### Choisissez en un : la confiance ou la viabilité économique ?
-
-**Actuellement, nous n'avons pas de stablecoins qui fassent les deux.** Le DAI était auparavant raisonnablement trustless, mais fonctionnant à un faible volume. Plusieurs décisions ont été prises pour massifier le volume au détriment de la confiance : Maker accepte maintenant des garanties qui peuvent être saisies, comme le wBTC, l'USDC, et bientôt des actifs du monde réel.
-
-Ce que nous avons tendance à observer, c'est que l'absence de confiance entrave généralement l'efficacité économique, laissez-moi vous expliquer. Prenez le premier modèle Maker, par exemple, qui vous permet de battre le DAI depuis l'ETH. En raison de la conception du système, vous pouvez à un grand maximum battre ⅔ de la valeur de l'ETH en DAI.
-
-La réalité observée est beaucoup plus faible, car le fait de battre ⅔ vous expose à des risques de liquidation. Nous appelons ce modèle "sur-collatéralisation", car il y a - à tout moment - plus de garanties (en valeur) que de dettes générées. **Alors que la sur-collatéralisation a permis à Maker de proposer un stablecoin qui peut être battu directement de l'ETH, c'est maintenant l'un des principaux facteurs qui entravent la mise à l'échelle de la plate-forme.**
-
-Heureusement, depuis le lancement de Maker, l'industrie a évolué de manière spectaculaire. Et depuis le début de l'année, nous voyons à nouveau des projets qui tentent de fournir le stablecoin dont nous avons cruellement besoin : à la fois sans confiance et économiquement viable. Je connais deux projets qui explorent cette voie de manière crédible :
-
-
-
-1. [Reflexer](https://medium.com/reflexer-labs/stability-without-pegs-8c6a1cbc7fbd) - techniquement, ce n'est pas un stablecoin mais il fournira une proposition de valeur similaire en utilisant des liens réflexes.
-2. [Lien.Finance](http://lien.finance/), notre thème central pour le reste de cet article. Comme Reflexer, Lien utilise un niveau d'abstraction au-dessus de l'ETH qui est divisé en deux actifs synthétiques distincts lorsqu'il est déposé, comme nous le verrons plus loin.
-
-J'ai exploré Reflexer, mais je ne le connais pas encore assez bien. Cliquez sur le lien ci-dessus pour en savoir plus ; le reste de cet article portera sur Lien.Finance car j'en sais plus à ce sujet.
-
-
-## Lien : Le chaînon manquant entre la confiance et la viabilité économique ?
-
-Compte tenu de notre sujet aujourd'hui, n'attendez pas un système simple et direct. En effet, l'objectif étant de fournir des stablecoins raisonnablement sans confiance et sans sur-collatéralisation, les voies simples et directes ne fonctionnent plus.
-
-{{< notice info >}}
-Lien Finance propose une solution complète pour créer des contrats d'actifs dérivés. Pour garder cet article le plus clair possible, la suite se concentre sur iDOL, un stablecoin décentralisé construit sur le protocole Lien.
-{{< /notice >}}
-
-Une autre dimensions clé de Lien est qualifiée sous le parapluie de **"gouvernance minimisée "**. Bien qu'elle soit exacte, ce n'est pas la plus explicite. Ce que l'on entend par là, c'est qu'iDOL (le stablecoin produit par le système Lien) est **effectivement émis et géré par un contrat intelligent s'ajustant aux conditions du marché** : ou pour le dire en termes plus simples, "la banque centrale de Lien" est un contrat intelligent.
-
-Cela signifie que les paramètres clés régissant le système ne sont pas décidés par des humains ou par un DAO comme c'est le cas sur Maker (comme le frais de stabilité) - il s'agit d'un ajustement en fonction des conditions du marché.
-
-Comment Lien.Finance s'y prend-il ? Nous allons faire un tour d'horizon :
-
-
-### Lien Finance : Aperçu de l'infrastructure
-
-Le graphique ci-dessous est assez complet, c'est donc un bon point de départ. Pas de stress si vous n'avez pas encore tout compris à qu'il se passe, nous allons suivre pas à pas cette illustration :
-
-
-
-
-
-Avant de me lancer, permettez-moi de vous rappeler une chose : **Vous n'avez pas besoin d'interagir avec l'ensemble du système décrit ci-dessous si vous voulez juste interagir avec iDOL, le stablecoin**. Tout comme DAI et d'autres, vous pourrez les obtenir par d'autres moyens également.
-
-
-### Diviser l'ETH : SBT+LBT
-
-L'une des principales promesses de Lien est de fournir un stablecoin qui ne repose pas sur une sur-collatéralisation. **De ce fait, l'ETH elle-même ne convient pas comme garantie** - en effet, la volatilité des prix est trop élevée pour atteindre les résultats escomptés.
-
-Pourtant, il n'y a pas d'actif plus "monétaire" que l'ETH sur Ethereum, alors comment le Lien s'en sort-il ? La clé réside dans les actifs dérivés. Au lieu d'utiliser l'ETH lui-même comme unité de base du système, comme le fait Maker, **Lien ajoute une autre couche d'abstraction en divisant l'ETH entrant dans le système en 2 actifs dérivés : LBT & SBT**.
-
-Commençons par le point commun : ces deux tokens sont des obligations (bonds) - ils sont très différents de vos tokens ERC-20 habituels car ils ont une **date d'échéance**. Ces nouveaux types d'actifs ont conduit Lien à développer également [FairSwap](https://lien.finance/White_paper.html#white_2), un DEX optimisé pour l'échange de tokens obligataires.
-
-
-
-Pour ce qui est des différences, c'est essentiellement la lumière et le jour :
-
-
-* **🧱 Le roc qui est difficile à déplacer : le SBT**. Le Solid Bond Token ressemble plus à une obligation ordinaire. Le SBT est stable par rapport à l'USD et verse une valeur fixe à son détenteur à l'échéance, avec une très forte probabilité.
-* **🎈 La plume portée par le vent : LBT**. Le Liquid Bond Token est un dérivé qui réunit en un seul produit la volatilité de ~2ETH. C'est un moyen très efficace de parier sur le prix de l'ETH, mais c'est aussi un jeu difficile, car vous êtes surexposé à la baisse du marché.
-
-Ne vous laissez pas effrayer par cette division, le système est en fait assez élégant et facile à suivre une fois que vous l'avez compris.
-
-Ainsi, lorsque les ETH entrent dans le système, il est divisé entre un dérivé très volatil (LBT) et un autre plus stable (SBT). Vous pouvez vous représenter le LBT comme une manière "d'externaliser la volatalité". **Nous allons nous concentrer sur les SBT pour l'instant, puisqu'ils sont les dérivés qui soutiennent l'iDOL des stablecoins.**
-
-### De SBT à iDOL
-
-Le SBT en lui-même est déjà à peu près stable, le principal joker étant la date d'échéance : plus la date d'expériation du SBT est proche, plus il est sûr. À partir de là, les investisseurs avertis à la recherche d'actifs stables pourraient déjà composer leur propre panier de SBT avec différentes dates d'échéance pour couvrir leurs risques.
-
-Mais pourquoi les laisser faire le travail, alors qu'un contrat intelligent pourrait le faire mieux et de manière plus sûre ? C'est là qu'entrent en jeu les contrats iDOL représentés dans le coin supérieur droit du graphique précédent. Le contrat **iDOL est essentiellement un panier roulant de SBT avec diverses dates d'échéance.**
-
-En fonction des conditions du marché - et notamment de la volatilité observée de l'ETH, le contrat iDOL ajuste ses préférences en matière de risque :
-
-* Si la volatilité des prix est faible, le contrat iDOL pourra accepter un plus grand nombre de SBT plus éloignés de leur date d'échéance.
-* En période de volatilité croissante, le contrat iDOL recentrera l'exposition sur les SBT approchant leur date d'échéance (-> moins de risque).
-
-Et c'est précisément ce qui m'a convaincu - l'ensemble du système est agile et s'adapte au marché - et pas seulement au prix de l'ETH lui-même. **Le principal moteur de la décision sur les paramètres de risque dans le système de Lien est la volatilité de l'ETH.**
-
-Pour moi, cela a tellement de sens ! En effet, considérer la volatilité aussi bien que le prix, c'est comme observer l'accélération d'une voiture au lieu de se contenter de sa simple vitesse :
-
-
-
-* La vitesse vous donne un absolu instantané : la voiture roule à X Mph.
-* L'accélération peint une tendance : Toutes choses gardées comme telles, la voiture ira à X dans un temps Y.
-
-Il y a encore beaucoup de choses à dire sur le Lien, mais il s'agit d'un article d'introduction, alors soyons bref. Avant de vous laisser partir, explicitons une dernière dimension du Lien : l'aspect "gouvernance minimisée". Comme nous l'avons vu plus haut, les ajustements quotidiens des paramètres avec Lien se font de manière programmatique, en s'adaptant aux marchés.
-
-C'est une innovation sensée en soi si vous considérez par exemple le système Maker où même les paramètres de base comme la commission de stabilité (frais payés pour emprunter) sont décidés par le système de vote.
-
-
-## Pour en savoir plus sur Lien Finance
-
-Ai-je éveillé votre curiosité sur Lien.Finance ? Vous pouvez en apprendre davantage sur le projet en regardant cette discussion (en Anglais) sur les stablecoins à laquelle j'ai participé **[#mDeFi 5 - La prochaine génération de stablecoins](https://www.youtube.com/watch?v=jPrwinPvwv4)**. Il s'agit d'un panel de 2h où je présente Lien Finance, aux côtés de James ([mStable](http://mstable.org/)), Michael Egorov ([Curve.Fi](https://www.curve.fi/)) & modéré par mon ami Abel ([AbelAbstracts](https://abelsabstracts.substack.com/)).
-
-Enfin, **[pour suivre l'aventure Lien Finance en première ligne vous pouvez rejoindre le serveur 🎮 Discord communautaire.](https://discord.gg/stCABfA)**
\ No newline at end of file
diff --git a/content/posts/2020/lien-finance.md b/content/posts/2020/lien-finance.md
deleted file mode 100644
index 30f4a32d..00000000
--- a/content/posts/2020/lien-finance.md
+++ /dev/null
@@ -1,144 +0,0 @@
----
-title: "An introduction to Lien Finance & trustless stablecoins"
-description: "Lien.Finance offers a compelling alternative with a stablecoin avoiding two common traps: over-collateralization and overengineered governance. Let's see how."
-date: '2020-08-21T01:13:50.191Z'
-categories: [🌌 DeFi, 🔮 Discovery]
-tags: [DeFi, Ethereum, Lending, Derivatives, Stablecoins, MakerDao, DAI, USDC, USDT]
----
-
-
-
-Stablecoins are the base currency of DeFi - we could even argue they were key to get the scene started - indeed, volatility makes most of the lending/borrowing scenario complex if not impossible.
-
-Luckily for us, **the "stablecoin offer" expanded dramatically over the last few years**. On top of habitual DAI and USDT, we saw USDC & sUSD getting increasingly adopted in DeFi. USDC has obvious advantages - most notably a peg well maintained and very decent liquidity.
-
-However, **just like USDT, an USDC balance can be seized or frozen at any time** - at the sole discretion of Circle. As USDC is used more and more as collateral, this issue raises serious concerns.
-
-For instance, you can now mint DAI on Maker from USDC. But what happens to the DAI minted if the underlying USDC balance is seized because it was involved in a hack for instance? Right now, it's uncharted territory.
-
-
-## So, why do we need reasonably trustless stablecoins?
-
-**Stablecoins are two-dimensional objects: they bear an economic layer as well as a trust layer.**
-
-On the economic side, you have questions such as:
-
-
-
-* Is it really maintaining its peg (1 coin = $1 as much as possible)?
-* Is the liquidity sufficient even for large needs?
-
-**The economic dimension is usually enough for most traders as they won't be holding the stablecoin long-term or using it as collateral.** However, for reliable usage in decentralised finance, a stablecoin project must figure out the trustless dimension:
-
-
-
-* Can the system be shut down by a central authority / 3rd party?
-* Who controls it?
-* Can stablecoin balance be frozen/seized?
-* Could other parameters of the system be changed, resulting in potential losses for investors?
-
-While **USDT and USDC are an obvious economic success, their model instantly excludes them from trustlessness**. So if we exclude stablecoins that can be seized or frozen, we're left with essentially either DAI or sUSD.
-
-To learn more on trustlessness and understand the different models, I recommend giving Ryan's writing on Bankless a read - especially [this one proposing a taxonomy for economic bandwidth](https://bankless.substack.com/p/eth-is-irreplaceable).
-
-
-### Chose one: trustlessness or economic viability?
-
-**Currently, we have no stablecoins nailing both.** DAI used to be reasonably trustless, but operating at a low volume. Starting with the Multi Collateral DAI release, the governance decisions were made to boost the usage volume to the detriment of the trustless of the whole system: Maker now accepts collateral that can be seized, like wBTC, USDC, and soon real-world assets.
-
-What we tend to observe is that trustlessness usually hinders economic efficiency, let me unpack this. Take the first Maker model, for instance, enabling you to mint DAI from ETH. Because of the system design, you can at a grand maximum mint ⅔ of the ETH value in DAI.
-
-The effective observed reality is much lower, as minting ⅔ puts you at risks of liquation. We call this model "over-collateralization", as there is - at any given time - more collateral (in value) than debt generated. **While over-collateralization enabled Maker to offer a stablecoin that can be minted directly from ETH, it's now one of the main factors hindering the scaling of the platform.**
-
-Luckily, since the launch of Maker, the industry evolved dramatically. And since the beginning of the year, we're seeing again projects trying to deliver the stablecoin we direly need: both trustless and economically scalable. I know of two projects credibly exploring this path:
-
-
-
-1. [Reflexer](https://medium.com/reflexer-labs/stability-without-pegs-8c6a1cbc7fbd) - technically not a stablecoin but it will deliver a similar value proposition using reflex bonds.
-2. [Lien.Finance](http://lien.finance/), our focus for the rest of this article. Like Reflexer, Lien uses one level abstraction on top of ETH which is split into two distinct synthetic assets when deposited, as we’ll see below.
-
-I've explored Reflexer, but I'm not familiar enough with it yet. Check the link above to learn more; the rest of this article will focus on Lien.Finance, since I'm more knowledgeable about it.
-
-
-## Lien: The missing link between trustlessness and economic viability?
-
-Considering our topic today, do not expect a simple and straightforward system. Indeed, with a goal set of providing reasonably trustless stablecoins without over-collateralization, the simple & straightforward routes do not work anymore.
-
-{{< notice info >}}
-Lien Finance is a fully fledged self-regulating protocol for creating unique derivative contracts. For clarity, this article focuses on iDOL, a decentralised stablecoin powered by Lien protocol.
-{{< /notice >}}
-
-Another key diction of Lien is qualified under the umbrella of **"governance minimised"**. While it's accurate, it's not the most explicit. What is meant by that is that iDOL (the stablecoin produced by the Lien Finance system) is **effectively emitted and managed by a smart contract adjusting to market conditions**: or to put it in simpler terms, "the central bank of Lien" is a smart contract.
-
-What this means is that the key parameters governing the system are not decided by humans or by a DAO like it is on Maker (such as the stability fee) - it's adjusting depending on the market's conditions.
-
-So how does Lien.Finance pull this off? You're in for an insightful ride:
-
-
-### Lien Finance: Infrastructure Overview
-
-The graph below is pretty comprehensive, so it's a good starting point. No stress if you have no idea what's happening yet, we will go step by step following this illustration:
-
-
-
-
-
-Before I dive in, allow me one reminder: **you do not have to interact with the whole system described below if you just want to interact with iDOL, the trustless stablecoin.** Just like DAI and others, you will be able to get them through other means too.
-
-
-### Splitting the ETH: SBT+LBT
-
-One of the core promises of Lien is to deliver a stablecoin that does not rely on over-collateralization. **Because of this, ETH itself is not suitable as collateral** - indeed the price volatility is too high to achieve the expected results.
-
-Yet there is no asset with more "moneyness" than ETH on Ethereum, so how does Lien pull it off? The key lies with derivative assets. Instead of using the ETH itself as the base unit of the system, as Maker does, **Lien adds another layer of abstraction by splitting the ETH entering the system into 2 derivatives assets: LBT & SBT**.
-
-Let's start with the common point: both are bond tokens - these are quite different from your usual ERC-20 tokens since they have a **maturity date**. These new asset types led Lien to also develop [FairSwap](https://lien.finance/White_paper.html#white_2), a DEX optimised for exchanging bonds tokens.
-
-
-
-Now for the differences, it's essentially light and day:
-
-
-
-* **🧱 The rock that is hard to move: the SBT**. The Solid Bond Token is more like a regular bond. SBT is stable against USD and payout a fixed value to its holder upon maturity, with a very high probability.
-* **🎈 The feather carried by the wind: LBT**. The Liquid Bond Token is a derivative packing the price volatility of ~2ETH in one. It's a very efficient way to gamble on ETH price, but also a tough game, as you're overexposed to the market downside.
-
-Don't let this split scare you, the system is actually quite elegant and easy to follow once you've understood this.
-
-So when the ETHs enter the system, it's split between one very volatile derivative, and one more stable. **Picture the LBT (the uber volatile one) as a way to "externalise" volatility.** We'll focus on SBTs for now, since they are the derivatives backing the stablecoin iDOL.
-
-
-### From SBT to iDOL
-
-SBT by itself is already roughly stable, the main wild card being the maturity date: the closer the SBT is to it, the safer. From here, savvy investors looking for stable assets could already compose their own basket of SBT with different maturity dates to hedge their risks.
-
-But why should we have them do the work, when a smart contract could do it better and safer? This is where the iDOL contracts depicted in the top-right of the earlier graph shines. The **iDOL contract is essentially a rolling basket of SBT with diverse maturity dates.**
-
-Depending on the markets conditions - most notably the observed volatility of ETH, the iDOL contract adjust its risk preferences:
-
-
-
-* If price volatility is low, the iDOL contract will be able to accept more SBTs that are farther away from their maturity date.
-* In times of rising volatility, the iDOL contract will recenter the exposure on SBTs approaching their maturity dates (-> less risk).
-
-
-
-And that's precisely what got me on board - the whole system is agile and adjusting to the market - and not just the price of ETH itself. **The main driver of the risk-parameters decision in the Lien system is the volatility of ETH.**
-
-To me, it makes so much sense! Indeed, looking at volatility as well as the price is like observing the acceleration of a car instead of its raw speed:
-
-
-
-* The speed gives you an instant absolute: _the car is going at X Mph._
-* The acceleration paints a trend: _all things kept as such, the car will be going at X in Y time._
-
-There is so much more to Lien, but this is an introduction article so let's keep this short. Before I let you go, let's explicit one last dimension of Lien: the "governance minimised" aspect. As we've seen above, the day-to-day parameter adjustments with Lien are done programmatically, adapting to the markets.
-
-That's a sensible innovation by itself if you consider for instance the Maker system where even basic parameters like the Stability Fee (fee paid to borrow) is decided through the voting system - and sometimes suffer from the delay coming with it.
-
-
-## Learning more on Lien Finance
-
-Did I spark your curiosity on Lien.Finance? You can learn more about the project by watching this discussion on stablecoins I took part in **[#mDeFi 5 - The next generation of stablecoins](https://www.youtube.com/watch?v=jPrwinPvwv4)**. It's a 2h panel where I present Lien Finance, next to James ([mStable](http://mstable.org/)), Michael Egorov ([Curve.Fi](https://www.curve.fi/)) & moderated by my friend Abel ([AbelAbstracts](https://abelsabstracts.substack.com/)).
-
-Finally, **[to follow Lien Finance, you can join their 🎮 community Discord](https://discord.gg/stCABfA)**.
\ No newline at end of file
diff --git a/content/posts/2020/monolith-metamask-etherscan.fr.md b/content/posts/2020/monolith-metamask-etherscan.fr.md
deleted file mode 100644
index caa148f4..00000000
--- a/content/posts/2020/monolith-metamask-etherscan.fr.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: "Interagir avec votre wallet Monolith via MetaMask et EtherScan"
-description: "Un tutoriel pour apprendre à utiliser son portefeuille Monolith avec MetaMask et EtherScan, utile pour interagir avec des tokens non supportés, ou en tant que processus de secours."
-date: '2020-07-05T10:13:50.191Z'
-categories: [🌌 DeFi, 👾 Monolith]
-tags: [DeFi, Ethereum, Monolith]
----
-
-
-
-Chez Monolith, nous travaillons sans relâche pour offrir une expérience digne d'Ethereum. Nos cartes en sont un élément clé, mais le **contract wallet** est tout aussi important. Il permet à nos utilisateurs de notariser leur relation avec leurs actifs sur le réseau Ethereum.
-
-Cet article vous présente comment utiliser votre portefeuille Monolith avec EtherScan et MetaMask afin d'interagir avec vos fonds en toute autonomie.
-
-_ℹ Traduction personnelle d'une [production originale Monolith](https://medium.com/monolith/importing-using-your-monolith-wallet-with-metamask-and-etherscan-a22862283929)._
-
-### Ce dont vous aurez besoin :
-
-1. Sur votre téléphone : [l'application Monolith](https://monolith.app.link/ETH-IS-MONEY)
-2. Sur votre ordinateur : [Chrome](https://www.google.com/chrome/), [Chromium](https://www.chromium.org/), ou [Brave](https://brave.com) + [MetaMask](https://metamask.io/)
-
-### Importation de votre portefeuille Monolith dans MetaMask
-
-#### 1/ Trouver sa seed phrase
-
-Vous pouvez trouver votre seed phrase dans les paramètres de sécurité dans l'onglet Wallet. Vous en aurez besoin pour importer votre portefeuille Monolith dans MetaMask.
-
-#### 2/ Installer MetaMask
-
-Vous devez installer l'extension du navigateur [Metamask](http://metamask.io) sur votre ordinateur.
-
-ATTENTION : _MetaMask ne vous permet **pas** d'importer une seed phrase si vous avez un portefeuille existant. Si vous souhaitez conserver votre configuration actuelle, vous pouvez utiliser un second navigateur, compatible avec MetaMask ([Chrome](https://www.google.com/chrome/), [Chromium](https://www.chromium.org/), [Brave](https://brave.com) )_
-
-#### 3/ Importer votre seed dans MetaMask
-
-Le processus est simple - il suffit de se référer au GIF ci-dessous :
-
-#### 🚨 À noter 🚨
-
-Il est beaucoup plus sûr d'utiliser un stylo et du papier que de stocker votre seed phrase numériquement ! Ce que vous avez vu sur ce gif est une boucherie en terme de sécurité qu'on ne se permet que sur wallet démo avec $3. Pour plus, mieux vaut prendre le temps.
-
-
-
-Lorsque vous importez votre portefeuille dans MetaMask, **vous verrez un solde ETH qui diffère du solde affiché dans l'application Monolith - c'est normal.**
-
-Le solde que vous voyez dans MetaMask est le solde de "l'adresse du propriétaire" (owner address), appelé "gas tank" dans l'application Monolith.
-
-
-
-Après avoir pris le contrôle total de votre portefeuille, nous pouvons maintenant procéder :
-
-### Interagir avec votre portefeuille de contrats
-
-#### 4/ Trouver l'adresse de votre wallet Monolith
-
-Vous trouverez l'adresse de votre portefeuille de contrats dans l'application Monolith en cliquant sur le bouton d'action (+) et ensuite sur "Recevoir".
-
-Pour trouver la "owner address", Une fois dans l'application, vous devez ouvrir l'onglet "⚙ Settings", et vous référer à l'adresse après "PK" en bas de la page - il suffit de la toucher pour la copier.
-
-Nous avons surligné l'adresse en rouge ci-dessous :
-
-
-
-#### 5/ Authentification sur EtherScan
-
-💡 **_Avant de poursuivre, assurez-vous que vous êtes connecté à MetaMask et que vous avez importé votre owner address Monolith (-> étape 3)._**
-
-Pour interagir avec votre portefeuille de contrats sur Etherscan, visitez l'onglet "Contrat" de votre wallet sur [Etherscan](https://etherscan.io/).
-
-Bien que l'onglet "Read" donne des informations sur le portefeuille, pour cet exercice, nous nous concentrerons sur l'onglet "Write" utilisé pour lancer les opérations.
-
-Vous pouvez vous connecter en haut de l'onglet "Write" comme indiqué ci-dessous :
-
-
-
-#### 6/ Signer d'une transaction
-
-Maintenant que vous avez la possibilité de signer des transactions, nous allons utiliser la méthode _bulkTransfer_ pour vous montrer comment envoyer un jeton ERC-20 non pris en charge dans l'application à partir de votre adresse Monolith.
-
-Pour ce faire, nous aurons besoin de deux choses :
-
-1. **une adresse de destination**
-
-1. **Une liste de tokens**, formatée comme suit : [adresse-contrat du jeton1, adresse-contrat du jeton2, etc.]
-
-**En utilisant ce processus, le solde total de chaque jeton énuméré sera transféré - Vérifiez donc tout avant de signer une transaction _bulkTransfer_.**
-
-L'exemple (ci-dessous), montre comment récupérer la totalité des jetons NEC stockés dans un wallet.
-
-
-
-### Besoin d'aide ?
-
-Pas de panique, notre communauté sera ravie de vous aider, directement en français sur [Telegram](https://t.me/Monolith_fr), ou bien sur [Discord](https://discord.gg/6UsVxu) et [Twitter](http://twitter.com/Monolith_web3).
-
-{{< notice tip >}}
-
-Cet article a éveillé votre curiosité ? Vous êtes tombés au bon endroit — nous avons un ecosystème dynamique en français pour vous aider à suivre et comprendre la finance décentralisée. Du plus accessible au plus spécialisé :
-1. **[💬 Le serveur Discord DeFi France](https://discord.gg/3bWZcK2)** pour échanger avec la communauté.
-2. **[☕ La version française du Daily Gwei](https://thedailygweifr.substack.com/)** pour des articles et résumés très accessibles.
-3. **[🗞 La newsletter BanklessFR](https://banklessfr.substack.com/)** pour comprendre les concepts fondamentaux.
-4. **[🎥 La chaine Youtube DeFi France](https://www.youtube.com/channel/UCefQC4Y-X9MBRuYBKc2waiQ)** pour approfondir avec des lives pointus.
-5. & Bien sûr [ce blog](/fr/) qui creuse des sujets spécifiques liés à la pratique de la DeFi.
-
-{{< /notice >}}
\ No newline at end of file
diff --git a/content/posts/2020/monolith-prise-en-main.fr.md b/content/posts/2020/monolith-prise-en-main.fr.md
deleted file mode 100644
index a82755a2..00000000
--- a/content/posts/2020/monolith-prise-en-main.fr.md
+++ /dev/null
@@ -1,152 +0,0 @@
----
-title: "Vivre sans banque en 7 étapes : prise en main de Monolith"
-description: "À la découverte du portefeuille Ethereum Monolith qui propose une carte de crédit Visa tout en vous permettant de conserver un contrôle total sur vos actifs."
-date: '2020-07-05T10:13:50.191Z'
-categories: [🌌 DeFi, 👾 Monolith]
-tags: [DeFi, Ethereum, Monolith]
----
-
-
-
-Le développement de l'écosystème de la finance décentralisée (DeFi) offre davantage de moyens de dépenser, d'emprunter, de prêter et de déplacer des actifs sans avoir à faire confiance à un tiers.
-
-Il a inauguré une nouvelle ère dans le domaine de la finance, une ère où les gens peuvent revendiquer le contrôle total de leurs actifs - un élément essentiel de l'offre de DeFi.
-
-Comme notre logo l'indique, chez Monolith, nous travaillons à la mise en place d'un portail vous permettant d'interagir de manière transparente avec DeFi, en utilisant :
-
-1. Un portefeuille Ethereum qui servira de passerelle vers cet écosystème financier décentralisé
-2. Une carte de crédit Visa (disponible en France) qui, associée à notre portefeuille, vous permet de dépenser vos actifs Ethereum-natifs partout.
-
-Cet article vous guidera dans le processus de création de votre portefeuille Monolith et pour la commande de votre carte.
-
-ℹ _Traduction personnelle d'une [production originale Monolith](https://medium.com/monolith/7-steps-to-living-bankless-e2a536902e91)._
-
----
-
-### Étape 1 - Installation et prise en main de l'application 📲
-
-**L'essentiel de vos interactions avec Monolith se font [via l'application mobile](https://monolith.app.link/ETH-IS-MONEY).** Vous pourrez commander et gérer votre carte, ainsi que recevoir, échanger et négocier vos données cryptées.
-
-**[🕸 Lien intelligent pour télécharger l'application Monolith 🌌](https://monolith.app.link/ETH-IS-MONEY)**
-
-Lorsque vous ouvrez l'application pour la première fois, il vous sera demandé de la sécuriser à l'aide d'un code PIN à 6 chiffres. Le code PIN est spécifique à votre téléphone - si vous l'oubliez, vous pouvez toujours récupérer votre compte tant que vous avez votre seed phrase (plus d'informations ci-dessous).
-
-
-
-Votre portefeuille Monolith utilise 2 types d'authentification :
-
-1. **Un code PIN** permettant l'accès au portefeuille, qui peut être changé ultérieurement en Fingerprint/FaceID (dans les paramètres de l'application + activer "Biometrics").
-2. **Authentification au niveau de l'appareil** qui vous est demandé pour effectuer des transactions. Il s'agit du code PIN/empreinte digitale /FaceID de votre téléphone
-
-**ℹ "La seed phrase" c'est une liste __ordonnée__ de 12 mots qui est nécessaire et suffisante pour restaurer l'accès à votre compte. Prenez en soin !**
-
-### Étape 2 - Déploiement de votre Contract Wallet 🔐
-
-Une fois que votre application est sécurisée, vous pourrez déployer votre "contract wallet". Le "contract wallet" c'est un smart contract dont vous seul avez le contrôle et où sont sécurisés vos tokens.
-
-
-
-Les nouveaux utilisateurs peuvent simplement passer par et appuyer sur "Create New Seed". Les utilisateurs qui ont déjà un portefeuille Monolith peuvent le restaurer en utilisant l'option "Recover Exisiting Seed".
-
-Votre seed phrase est affichée la première fois que vous déployez votre portefeuille. Vous pouvez la consulter plus tard dans l'onglet Wallet > Sécurité. **N'oubliez pas de la sauvegarder pour pouvoir récupérer vos avoirs, même si votre téléphone est perdu.**
-
-#### Votre portefeuille Monolith - Présentation
-
-Le portefeuille de contrats stocke vos fonds tout en vous donnant accès à des options de sécurité pour protéger davantage vos actifs. Son code est open-source et [accessible sur Github](https://github.com/Monolith/contracts).
-
-Monolith vous permet également d'établir une **limite de dépenses quotidiennes** afin de fixer un plafond à la valeur des actifs pouvant être envoyés depuis votre portefeuille. Comme mesure de sécurité supplémentaire, vous pouvez également établir des **adresses de confiance**, qui n'ont pas de plafond et vous permettent de recevoir n'importe quel montant de vos avoirs si votre seed phrase est compromise.
-
-**En un seul clic, vous déployez votre propre instance du [Smart Contract Wallet](https://github.com/tokencard/contracts). Personne d'autre que vous n'y a accès ou n'en a le contrôle.**
-
-
-
-Maintenant que votre portefeuille est déployé et sécurisé, l'étape suivante consiste à commander votre carte de crédit Visa.
-
-Comme la carte permet de vendre des tokens en euros ou en livres sterling, nous sommes confrontés à des exigences réglementaires supplémentaires, ce qui signifie que nous devons confirmer votre identité et votre adresse.
-
-Pour commencer, cliquez sur l'onglet "Carte" ("💳").
-
-
-### Étape 3 - Vérifier votre identité (KYC) 🛂
-
-Pour commander une carte, nous devons vérifier votre identité. Notre procédure KYC est standard : **vous aurez besoin d'un document officiel (carte d'identité ou passeport) et vous devrez prendre un selfie.**
-
-En fournissant ces informations, nous aurons recours à des tiers pour effectuer des contrôles de votre identité, comme la validation de votre adresse : il s'agit de confirmer que vous êtes bien la personne qui possède les documents soumis.
-
-En plus de valider votre identité, nous effectuons également des contrôles sur vos sources de fonds (AML). En faisant appel à des tiers, nous devons valider que le tokens que vous mettez dans le portefeuille n'est pas issue du blanchiment d'argent.
-
-### Étape 4 - Vérifiez votre adresse et commandez votre carte Monolith 🛸
-
-Il est possible que, dans le cadre des contrôles, nous ayons besoin d'informations complémentaires pour prouver que vous habitez à l'adresse indiquée. Cela ne devrait pas vous inquitier, notre équipe support / compliance peut vous contacter et vous demander un document de preuve d'adresse.
-
-Une fois votre identité validée, nous devons confirmer votre addresse:
-1. Vous devez pour cela fournir **un document officiel récent** (< 3 mois) lisant **votre nom et addresse**.
-2. **Votre carte Monolith est envoyée à l'addresse confirmée par le document.**
-3. Tout document officiel lié à votre addresse est acceptable, voici quelques exemples: facture d'électricité ou gas, facture internet mobile, ou tout document officiel.
-
-Lors de la commande de votre carte, vous pouvez décider de la devise de base qu'elle utilisera : GBP (£) ou EUR (€). La devise de base de la carte a une incidence sur [la structure des frais](https://monolith.xyz/pricing/), aussi assurez-vous d'en tenir compte lorsque vous commandez votre carte. Pour un français qui vit et dépense en France, le choix d'une carte € est assez évident.
-
-### Étape 5 - Activation de votre carte 💳
-
-Pour des raisons de sécurité, votre carte est expédiée désactivée. Une fois que vous aurez reçu la carte, vous aurez la possibilité de l'activer dans l'application.
-
-Vous pouvez activer la carte en allant sur l'onglet "Carte" ("💳") et en tapant les 4 derniers chiffres de votre numéro de carte.
-
-### Étape 6 - Votre premier Top-Up
-
-Votre carte activée, vous êtes presque prêt ! Il ne vous reste désormais plus qu'à charger votre carte en vendant des tokens : ça s'appelle "top-up" dans l'application.
-
-#### 1/ Ajout de fonds dans votre portefeuille
-
-Appuyez sur le bouton d'action (➕), puis sur "Receive" pour afficher l'adresse de votre portefeuille et le code QR. Cela vous permettra de recevoir des tokens d'un autre compte.
-
-Le mot **Top-up** réfère à l'action de vendre des tokens pour des € prêts à être dépensés sur votre carte Monolith.
-
-#### 2/ Remplissage de votre Gas Tank
-
-Une fois que vous avez un peu d'ETH dans votre portefeuille de contrat, vous devrez **remplir votre gas tank** Le "gas" est très important car il vous permet de recharger votre carte et d'envoyer des jetons dans d'autres portefeuilles
-
-Le "Gas Tank", c'est la balance ETH de l’adresse qui contrôle votre contrat, celle dont vous avez la seed phrase, et qui signe toute les transactions.
-
-Vous pouvez donc remplir votre gas tank avec des ETH en appuyant sur votre niveau de gas, surligné en rouge :
-
-
-
-À partir de là, l'application vous guidera tout au long du processus :
-
-
-
-#### 3/ Recharger votre carte Monolith
-
-Avec un peu d'argent dans votre portefeuille et du gaz dans le "tank", vous pouvez maintenant faire le plein : c'est à dire vendre des tokens pour des euros - et vous préparer à utiliser votre carte de crédit Visa.
-
-
-
-_ℹ️ Les transactions de top-up peuvent prendre jusqu'à 90 secondes pour être finalisées._
-
-### Étape 7 - Dépenser avec votre carte Monolith
-
-Votre carte fonctionnera partout où Visa est accepté dans le monde. Votre premier achat doit être effectué avec le code (paiement ou retrait), mais après cela, vous devriez être libre d'utiliser votre carte comme vous le feriez normalement - en magasin, en ligne ("Verified by Visa"), ou bien sans contact.
-
-La carte fonctionne également avec **Google Pay and Curve**.
-
-
-
-Vous pouvez consulter tous les détails concernant les limites et les frais dans l'onglet "Pricing" sur [notre site web](https://monolith.xyz/pricing).
-
-Félicitations, vous êtes maintenant prêt à **[télécharger l'application Monolith](monolith.app.link/ETH-IS-MONEY)** et à commencer votre voyage DeFi - et pour vous le rappeler une dernière fois, n'oubliez pas de **SAUVEGARDER VOTRE SEED PHRASE** - vous en aurez besoin.
-
-### Vous avez besoin d'aide ?
-
-Pas de problème - Participez à la discussion de la communauté française sur [Telegram](https://t.me/monolith_fr), [Discord](https://discord.gg/6UsVxu) ou [Twitter](http://twitter.com/Monolith_web3)
-
-{{< notice tip >}}
-
-Cet article a éveillé votre curiosité ? Vous êtes tombés au bon endroit — nous avons un ecosystème dynamique en français pour vous aider à suivre et comprendre la finance décentralisée. Du plus accessible au plus spécialisé :
-1. **[💬 Le serveur Discord DeFi France](https://discord.gg/3bWZcK2)** pour échanger avec la communauté.
-2. **[☕ La version française du Daily Gwei](https://thedailygweifr.substack.com/)** pour des articles et résumés très accessibles.
-3. **[🗞 La newsletter BanklessFR](https://banklessfr.substack.com/)** pour comprendre les concepts fondamentaux.
-4. **[🎥 La chaine Youtube DeFi France](https://www.youtube.com/channel/UCefQC4Y-X9MBRuYBKc2waiQ)** pour approfondir avec des lives pointus.
-5. & Bien sûr [ce blog](/fr/) qui creuse des sujets spécifiques liés à la pratique de la DeFi.
-
-{{< /notice >}}
\ No newline at end of file
diff --git a/content/posts/2020/tkn-token-communautaire.fr.md b/content/posts/2020/tkn-token-communautaire.fr.md
deleted file mode 100644
index 3d3815c5..00000000
--- a/content/posts/2020/tkn-token-communautaire.fr.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: "TKN, le token commununautaire"
-description: "Une introduction à TKN, le token communautaire de Monolith - portefeuille Ethereum avec une carte Visa : coffre communautaire, TKN burn et contrats."
-date: '2020-07-05T10:13:50.191Z'
-categories: [🌌 DeFi, 👾 Monolith]
-tags: [DeFi, Ethereum, Monolith, TKN]
----
-
-
-
-TKN est un élément central de l'offre Monolith. Dans ce billet, je vais aborder les bases de sa tokenomique en deux sections :
-
-1. 🏦 Le "Coffre Communautaire"
-2. 🔥 TKN Burn
-
-Avant de vous lancer dans les complexités de TKN, je vous recommande de lire rapidement [l'article de prise en main de Monolith]({{< relref "monolith-prise-en-main.fr.md" >}}). Bien que je décris brièvement le mécanisme de top-up ci-dessous, vous trouverez dans cet article un aperçu complet de Monolith et vous pourrez ainsi anticiper bon nombre de vos questions d'utilisation.
-
-_ℹ Traduction personnelle d'une [production originale Monolith](https://medium.com/monolith/tkn-101-the-community-token-8ba00a13fbc7)._
-
----
-
-### 🏦 Le Coffre Communautaire de TKN
-
-Le coffre communautaire est un contrat intelligent vers lequel une commission de 1% est versée lorsqu'un utilisateur recharge sa carte Monolith avec un autre token que le TKN.
-
-Voici un exemple de ce qui se passe sous le capot lorsqu'un utilisateur sélectionne 1 ETH à convertir en Euros pour charger sa carte :
-
-1. 💳 1.00 ETH est vendu au taux du marché pour créditer le compte de la carte de crédit de l'utilisateur.
-
-1. 🗝 Le **1% de contribution communautaire** (0,01 ETH) facturé **est envoyé directement vers notre Community Chest**. La contribution communautaire est levée lorsque l'utilisateur recharge son compte à l'aide du token TKN.
-
-1. 🔮 Une **redevance (0,0101 ETH) de 1%** est payée à Monolith. La redevance est levée sur les tokens stables (tels que DAI, USDC, ou USDT).
-
-[Vous pouvez consulter tous les tarifs ici](https://monolith.xyz/pricing/).
-
-
-
----
-
-### 🔥 Le mécanisme de burn
-
-Les détenteurs de **TKN peuvent le brûler (burn)** en échange d'une quantité proportionnelle de tokens stockés dans le contrat coffre commununautaire.
-
-Le fait de brûler détruit les TKN, ce qui réduit le total circulant, augmentant ainsi proportionnellement la part disponible pour les prochains burns.
-
-#### ♨️ TKN Exemple de burn
-
-Illustrons le mécanisme qui se cache derrière cela en utilisant une situation hypothétique et simplifiée basée sur trois hypothèses :
-
-1. Il y a un total de 10000 TKN en circulation
-2. Le coffre communautaire de TKN contient 100 ETH et 1000 DAI
-3. Un utilisateur possédant 500 TKN décide de les brûler
-
-Tout d'abord, nous devons calculer le pourcentage de l'offre totale de TKN que possède l'utilisateur qui brûle ses tokens - son pourcentage proportionnel de ce qui est stocké dans le coffre communautaire TKN :
-
-`Part (du coffre) = quantité de TKN brûlés / total TKN circulant`
-*⇒ 500 / 10000 = 5%*
-
-En brûlant 500 TKN, notre utilisateur hypothétique réclamera 5 % des biens contenus dans le coffre communautaire de TKN, ce qui correspond à
-
-⇒ `5 % de 100 ETH & 5 % de 1000 DAI`
-→ 5 ETH **+** 50 DAI
-
-
-
-Un burn de 500 TKN suivant la première rapportera un pourcentage proportionnel plus élevé puisque l'offre totale est maintenant réduite à 9500 :
-⇒ 500 / 9500 = 5.263%
-
-#### 📜 Le contrat du Coffre Communautaire
-
-Le Coffre Communautaire (Asset Contract) [est maintenant en ligne](https://etherscan.io/address/asset-contract.tokencard.eth), ce qui signifie que les contributions envoyées par les utilisateurs avec les dernières versions du portefeuille de contrats (v2.2.0 et plus) sont maintenant automatiquement collectées.
-
-Qu'est-ce qui rend le Community Chest si spécial ? **C'est un système de contrat intelligent, il fonctionne de manière ouverte et transparente.**
-
-Vous n'avez pas besoin d'utiliser l'application Monolith pour brûler votre TKN. Vous pouvez simplement appeler la fonction en utilisant le service de votre choix.
-
-Nous sommes actuellement en train de [migrer](https://medium.com/monolith/your-monolith-account-is-due-for-an-upgrade-35b1814a01ed) les utilisateurs qui ont déployé leur Contract Wallet avant que la nouvelle version ne soit opérationnelle (v1.x -> v3.2.0), afin qu'ils puissent contribuer à la Community Chest. Nous allons ensuite ajouter au Community Chest avec les contributions collectées avant sa mise en ligne.
-
-#### 📘 Comment brûler vos TKN
-
-Rendez-vous sur la page [TKN Token Contract - Write Page](https://etherscan.io/address/0xaaaf91d9b90df800df4f55c205fd6989c977e73a#writeContract). Là, vous pouvez appeler la 9ème fonction, _burn_.
-
-
-
-Il suffit d'un paramètre :
-
-quantité (uint256)_ : la quantité de TKN à brûler. L'entrée sur Etherscan est en Wei, il peut donc s'avérer plus facile d'utiliser un outil comme [Ethereum Unit Converter](https://www.etherchain.org/tools/unitConverter) pour convertir en une unité que vous connaissez bien comme Ether/TKN.
-
-Pour brûler votre TKN contenu dans votre portefeuille Monolith, vous devrez [l'importer dans Metamask]({{< relref "monolith-metamask-etherscan.fr.md" >}}).
-
----
-
-Nous espérons que cela a permis d'aborder notre tokénomique, mais si vous avez d'autres questions, nous vous invitons à vous joindre à la discussion sur notre [Discord](https://discord.gg/YrrFpFd) ou [sur notre Télégram francophone](https://t.me/Monolith_fr).
-
-Et n'oubliez pas : vous pouvez essayer Monolith dès aujourd'hui - [💳 commandez votre carte](https://monolith.xyz).
-
----
-
-_Cet article ne constitue ni une offre de vente, ni une sollicitation d'une offre d'achat, ni une recommandation d'une quelconque cryptodevise, jeton (token), investissement, sécurité ou tout autre produit ou service._
-
-_En outre, rien dans cet effet n'est destiné à fournir des conseils juridiques ou d'investissement et rien dans cet article ne doit être interprété comme une recommandation d'acheter, de vendre ou de détenir une quelconque cryptocarte, un quelconque jeton (token), un quelconque investissement ou une quelconque sécurité, ou de s'engager dans une quelconque stratégie d'investissement ou transaction financière._
\ No newline at end of file
diff --git a/data/filters.json b/data/filters.json
index 58fe59a3..b7d9384f 100644
--- a/data/filters.json
+++ b/data/filters.json
@@ -82,6 +82,27 @@
"active": true
}
]
+ },
+ "difficulty": {
+ "name": "Difficulté",
+ "class": "difficulty",
+ "values": [
+ {
+ "key": "beginner",
+ "name": "🟢 Débutant",
+ "active": true
+ },
+ {
+ "key": "intermediate",
+ "name": "🟡 Intermédiaire",
+ "active": true
+ },
+ {
+ "key": "expert",
+ "name": "🔴 Expert",
+ "active": true
+ }
+ ]
}
},
"en": {
@@ -167,6 +188,27 @@
"active": true
}
]
+ },
+ "difficulty": {
+ "name": "Difficulty",
+ "class": "difficulty",
+ "values": [
+ {
+ "key": "beginner",
+ "name": "🟢 Beginner",
+ "active": true
+ },
+ {
+ "key": "intermediate",
+ "name": "🟡 Intermediate",
+ "active": true
+ },
+ {
+ "key": "expert",
+ "name": "🔴 Expert",
+ "active": true
+ }
+ ]
}
}
-}
\ No newline at end of file
+}
diff --git a/data/glossary.json b/data/glossary.json
new file mode 100644
index 00000000..6968ad50
--- /dev/null
+++ b/data/glossary.json
@@ -0,0 +1,9595 @@
+{
+ "en": {
+ "terms": [
+ {
+ "id": "apy",
+ "term": "APY",
+ "full_term": "Annual Percentage Yield",
+ "category": "yields",
+ "definition": "Annual Percentage Yield (APY) represents the real rate of return earned on an investment, taking into account the effect of compounding interest. In DeFi, APY shows how much you can earn annually from lending, liquidity providing, or staking.",
+ "short_definition": "The annual return on investment including compound interest effects",
+ "example": "A liquidity pool offering 15% APY means your initial investment would grow by 15% over a year with compounding.",
+ "related_terms": [
+ "apr",
+ "yield-farming",
+ "liquidity-mining",
+ "compound-interest"
+ ],
+ "risks": [
+ "Impermanent loss for LP tokens",
+ "Smart contract risk",
+ "Protocol risk"
+ ],
+ "tags": [
+ "defi",
+ "yields",
+ "interest",
+ "returns"
+ ],
+ "common_questions": [
+ {
+ "question": "Where is the yield coming from?",
+ "answer": "If you cannot answer this question precisely, you are likely to be the source of yield."
+ },
+ {
+ "question": "What is the difference between APR and APY?",
+ "answer": "APR shows simple interest while APY includes compounding effects. APY is typically higher and more accurate for DeFi yields."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "A balanced overview of decentralised finance services you can use to make your ETH work for you."
+ },
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "A hitchhiker's guide to liquidity mining curating tips & tools to help you make the most of DeFi's agrarian revolution."
+ }
+ ]
+ },
+ {
+ "id": "impermanent-loss",
+ "term": "Impermanent Loss",
+ "full_term": "Impermanent Loss",
+ "category": "risks",
+ "definition": "Impermanent loss occurs when providing liquidity to automated market makers (AMMs) and the price ratio of your deposited tokens changes compared to when you deposited them. The loss is 'impermanent' because it only becomes permanent when you withdraw your liquidity.",
+ "short_definition": "Temporary loss experienced by liquidity providers when token prices diverge",
+ "example": "If you provide ETH/USDC liquidity at 1 ETH = $2000, but ETH rises to $3000, you'll have less ETH and more USDC when you withdraw, missing some of ETH's gains.",
+ "related_terms": [
+ "liquidity-providing",
+ "amm",
+ "slippage",
+ "arbitrage"
+ ],
+ "risks": [
+ "Price divergence risk",
+ "Opportunity cost",
+ "Market volatility exposure"
+ ],
+ "tags": [
+ "defi",
+ "risks",
+ "liquidity-providing",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Why impermanent? It it a loss or not?",
+ "answer": "Technically, you haven't lost anything until your terminate your LP position, since that even with sizable IL, if the price recover, IL turns into IG."
+ },
+ {
+ "question": "How can I minimize impermanent loss?",
+ "answer": "Choose stable pairs, use concentrated liquidity ranges carefully, or consider single-sided staking instead of providing liquidity to volatile pairs."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧭 DeFi Moneygames: Assessing risk and avoiding wreckage",
+ "url": "/defi-moneygames/",
+ "description": "Explains impermanent loss with practical farming pool risk levels."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "IL in context of pegged vs volatile assets, concentrated liquidity amplification."
+ }
+ ]
+ },
+ {
+ "id": "yield-farming",
+ "term": "Yield Farming",
+ "full_term": "Yield Farming",
+ "category": "strategies",
+ "definition": "Yield farming is the practice of maximizing yield on a given asset, usually by staking sources. Farmers typically provide liquidity, lend assets, or (re)stake tokens to earn yields in the form of interest, fees, or reward tokens.",
+ "short_definition": "Strategy of maximizing returns by harnessing several DeFi protocols",
+ "example": "A yield farmer might provide ETH/USDC liquidity on Uniswap, stake the LP tokens on a rewards platform, and use the earned tokens in another protocol for additional yields.",
+ "related_terms": [
+ "liquidity-mining",
+ "apy",
+ "defi",
+ "staking"
+ ],
+ "risks": [
+ "Smart contract risk",
+ "Impermanent loss",
+ "Token price volatility",
+ "Rug pulls"
+ ],
+ "tags": [
+ "defi",
+ "strategies",
+ "yields",
+ "farming"
+ ],
+ "common_questions": [
+ {
+ "question": "Is yield farming profitable?",
+ "answer": "Yield farming can be profitable but involves significant risks including smart contract vulnerabilities, impermanent loss, and high gas fees. Success requires careful research and risk management."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "Comprehensive farming guide."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Tiered ranking of farming opportunities."
+ },
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "6 base yield strategies."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-mining",
+ "term": "Liquidity Mining",
+ "full_term": "Liquidity Mining",
+ "category": "strategies",
+ "definition": "Liquidity mining is a mechanism where users provide liquidity to a protocol in exchange for token rewards. It's used by protocols to bootstrap liquidity and distribute governance tokens to users. It is a distribution mechanism for the governance token of a protocol.",
+ "short_definition": "Earning token rewards by providing liquidity to DeFi protocols",
+ "example": "Compound distributes COMP tokens to users who supply assets to their lending pools, incentivizing liquidity provision.",
+ "related_terms": [
+ "yield-farming",
+ "governance-tokens",
+ "liquidity-providing",
+ "incentives"
+ ],
+ "risks": [
+ "Token price volatility",
+ "Smart contract risk",
+ "Program changes"
+ ],
+ "tags": [
+ "defi",
+ "incentives",
+ "liquidity",
+ "rewards"
+ ],
+ "common_questions": [
+ {
+ "question": "How long do liquidity mining programs last?",
+ "answer": "Programs vary widely, from weeks to years. Many protocols adjust rewards based on protocol needs and governance decisions."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "Comprehensive guide to liquidity mining sources and strategies."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Ranked list of incentivized liquidity pools."
+ },
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Evolution from mining to shaping."
+ }
+ ]
+ },
+ {
+ "id": "amm",
+ "term": "AMM",
+ "full_term": "Automated Market Maker",
+ "category": "technical",
+ "definition": "An Automated Market Maker (AMM) is a type of decentralized exchange protocol that relies on mathematical formulas to price assets rather than order books. AMMs enable permissionless trading by using liquidity pools where users can swap tokens automatically.",
+ "short_definition": "Decentralized exchange using mathematical formulas for pricing instead of order books",
+ "example": "Uniswap is an AMM where users can swap ETH for USDC directly from liquidity pools without needing a counterparty.",
+ "related_terms": [
+ "liquidity-pool",
+ "slippage",
+ "impermanent-loss",
+ "arbitrage"
+ ],
+ "risks": [
+ "Slippage on large trades",
+ "Smart contract vulnerabilities",
+ "Liquidity provider risks"
+ ],
+ "tags": [
+ "defi",
+ "dex",
+ "trading",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "How does an AMM determine prices?",
+ "answer": "AMMs use algorithms like x*y=k (constant product) to automatically adjust prices based on supply and demand in liquidity pools."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "A look at Uniswap's, Sushiswap's and Curve's value capture mechanism to better understand how value accrues for token holders."
+ },
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Compares AMM liquidity structures: x*y=k, stableswap, concentrated liquidity, and Maverick modes."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "History of AMM evolution from UNIv2 to stableswap to concentrated liquidity to Fluid DEX."
+ }
+ ]
+ },
+ {
+ "id": "dao",
+ "term": "DAO",
+ "full_term": "Decentralized Autonomous Organization",
+ "category": "protocols",
+ "definition": "A Decentralized Autonomous Organization (DAO) is a blockchain-based organization governed by smart contracts and token holders rather than traditional management structures. Members vote on proposals using governance tokens to make decisions about the protocol's future.",
+ "short_definition": "Blockchain-based organization governed by token holders and smart contracts",
+ "example": "MakerDAO governs the Maker protocol, where MKR token holders vote on stability fees, collateral types, and other protocol parameters.",
+ "related_terms": [
+ "governance-tokens",
+ "voting",
+ "proposals",
+ "decentralization"
+ ],
+ "risks": [
+ "Governance attacks",
+ "Low participation",
+ "Regulatory uncertainty"
+ ],
+ "tags": [
+ "defi",
+ "governance",
+ "dao",
+ "decentralization"
+ ],
+ "common_questions": [
+ {
+ "question": "Are DAO an ideal of democracy?",
+ "answer": "Quite the opposite, it is a pure ploutocracy. In most DAOS, 1 token = 1 vote, which leads to a massive concentration of influence into the hands of team members, investors, advisors and early users."
+ },
+ {
+ "question": "How do I participate in DAO governance?",
+ "answer": "Hold governance tokens, stay informed about proposals, and vote on decisions that affect the protocol's future."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Deep analysis of DAO governance failures and antagonisms."
+ },
+ {
+ "title": "Calling for your support to keep Aave's governance community-driven",
+ "url": "/aave-governance-program/",
+ "description": "Practical DAO participation: delegation, voting, governance challenges."
+ },
+ {
+ "title": "Introducing my next step: The DeFi Collective",
+ "url": "/defi-collective/",
+ "description": "Nonprofit DAO structure to support resilient DeFi protocols."
+ }
+ ]
+ },
+ {
+ "id": "smart-contract",
+ "term": "Smart Contract",
+ "full_term": "Smart Contract",
+ "category": "technical",
+ "definition": "A smart contract is a self-executing contract with terms directly written into code. In DeFi, smart contracts automatically execute transactions when predetermined conditions are met, eliminating the need for intermediaries.",
+ "short_definition": "Self-executing code that automatically enforces contract terms on blockchain",
+ "example": "A lending protocol's smart contract automatically liquidates undercollateralized positions without human intervention.",
+ "related_terms": [
+ "defi",
+ "ethereum",
+ "automation",
+ "trustless"
+ ],
+ "risks": [
+ "Code vulnerabilities",
+ "Audit failures",
+ "Immutability risks"
+ ],
+ "tags": [
+ "blockchain",
+ "ethereum",
+ "automation",
+ "code"
+ ],
+ "common_questions": [
+ {
+ "question": "Can smart contracts be changed after deployment?",
+ "answer": "Most smart contracts are immutable once deployed, though some include upgrade mechanisms controlled by governance or admin keys."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Smart contract immutability and what makes a protocol unstoppable."
+ },
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "Smart contracts as autonomous central banks."
+ }
+ ]
+ },
+ {
+ "id": "defi",
+ "term": "DeFi",
+ "full_term": "Decentralized Finance",
+ "category": "technical",
+ "definition": "Decentralized Finance (DeFi) refers to a blockchain-based form of finance that recreates and improves traditional financial systems using smart contracts, removing intermediaries like banks and brokers. DeFi applications run on public blockchains and are accessible to anyone.",
+ "short_definition": "Blockchain-based financial system operating without traditional intermediaries",
+ "example": "You can lend USDC on Compound, borrow against ETH on Aave, and swap tokens on Uniswap - all without banks or brokers.",
+ "related_terms": [
+ "smart-contract",
+ "ethereum",
+ "trustless",
+ "permissionless"
+ ],
+ "risks": [
+ "Smart contract bugs",
+ "Regulatory changes",
+ "Market volatility"
+ ],
+ "tags": [
+ "defi",
+ "blockchain",
+ "finance",
+ "decentralization"
+ ],
+ "common_questions": [
+ {
+ "question": "What are the main advantages of DeFi over traditional finance?",
+ "answer": "24/7 accessibility, permissionless access, transparency, programmability, and typically better yields for users."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "Comprehensive overview of DeFi services with 6 base strategies."
+ },
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "Core DeFi properties: transparency, accessibility, interoperability."
+ },
+ {
+ "title": "A cold look at decentralized finance mass adoption",
+ "url": "/great-filter-defi/",
+ "description": "Analysis of DeFi adoption barriers."
+ }
+ ]
+ },
+ {
+ "id": "stablecoin",
+ "term": "Stablecoin",
+ "full_term": "Stablecoin",
+ "category": "tokens",
+ "definition": "A stablecoin is a cryptocurrency designed to maintain a stable value relative to a reference asset, usually the US Dollar. Stablecoins provide the benefits of crypto (fast, borderless transfers) while minimizing price volatility.",
+ "short_definition": "Cryptocurrency designed to maintain stable value relative to a reference asset",
+ "example": "USDC maintains a $1 value backed by dollar reserves, while DAI is decentralized and backed by crypto collateral.",
+ "related_terms": [
+ "collateral",
+ "peg",
+ "volatility",
+ "reserve"
+ ],
+ "risks": [
+ "Depeg risk",
+ "Centralization",
+ "Collateral liquidation"
+ ],
+ "tags": [
+ "stablecoin",
+ "usdc",
+ "dai",
+ "peg"
+ ],
+ "common_questions": [
+ {
+ "question": "What's the difference between centralized and decentralized stablecoins?",
+ "answer": "Centralized stablecoins like USDC are backed by fiat reserves, while decentralized ones like DAI use crypto collateral and algorithms."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Is stability a necessity for cryptocurrencies mainstream adoption?",
+ "url": "/stablecoins/",
+ "description": "Foundational explainer."
+ },
+ {
+ "title": "The Maurauder's Map of Decentralized Stablecoins",
+ "url": "/stablecoin-marauder-map/",
+ "description": "Comprehensive map of designs."
+ },
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "Algorithmic stablecoin mechanics."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-pool",
+ "term": "Liquidity Pool",
+ "full_term": "Liquidity Pool",
+ "category": "AMM",
+ "definition": "A liquidity pool is a collection of funds locked in a smart contract that enables decentralized trading, lending, and other DeFi functions. Users contribute assets to pools and earn fees from trades or interest from loans.",
+ "short_definition": "Smart contract containing funds that enable decentralized trading and lending",
+ "example": "The ETH/USDC pool on Uniswap contains both ETH and USDC, allowing users to swap between these tokens while LPs earn trading fees.",
+ "related_terms": [
+ "amm",
+ "liquidity-providing",
+ "trading-fees",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Impermanent loss",
+ "Smart contract risk",
+ "Low liquidity periods"
+ ],
+ "tags": [
+ "defi",
+ "liquidity",
+ "trading",
+ "pools"
+ ],
+ "common_questions": [
+ {
+ "question": "How do liquidity providers earn money?",
+ "answer": "LPs earn trading fees (typically 0.3%) from every swap, plus potential reward tokens from liquidity mining programs."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "How liquidity pools work across DEXes."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Practical overview of incentivized liquidity pools."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Evolution of liquidity pool designs for pegged assets."
+ }
+ ]
+ },
+ {
+ "id": "slippage",
+ "term": "Slippage",
+ "full_term": "Slippage",
+ "category": "AMM",
+ "definition": "Slippage refers to the difference between the expected price of a trade and the actual executed price. It occurs when there's insufficient liquidity or high volatility, causing the price to move unfavorably during trade execution.",
+ "short_definition": "Difference between expected and actual trade execution price",
+ "example": "You try to buy $10,000 worth of a token at $100, but due to slippage, you end up paying an average of $102 per token.",
+ "related_terms": [
+ "liquidity",
+ "amm",
+ "price-impact",
+ "mev"
+ ],
+ "risks": [
+ "Higher costs than expected",
+ "Front-running",
+ "Sandwich attacks"
+ ],
+ "tags": [
+ "trading",
+ "amm",
+ "liquidity",
+ "price"
+ ],
+ "common_questions": [
+ {
+ "question": "How can I minimize slippage?",
+ "answer": "Trade smaller amounts, use liquid pairs, set appropriate slippage tolerance, or **use aggregators** that find the best routes."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Slippage in token swaps: minimum received, pool depth."
+ },
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "Slippage as function of pool liquidity."
+ }
+ ]
+ },
+ {
+ "id": "governance-token",
+ "term": "Governance Token",
+ "full_term": "Governance Token",
+ "category": "tokens",
+ "definition": "Governance tokens give holders voting rights on protocol decisions such as parameter changes, upgrades, and treasury management. They represent democratic control over decentralized protocols and often appreciate with protocol success.",
+ "short_definition": "Token that provides voting rights on protocol governance decisions",
+ "example": "UNI token holders can vote on Uniswap protocol upgrades, fee structures, and treasury spending proposals.",
+ "related_terms": [
+ "dao",
+ "voting",
+ "proposals",
+ "token-economics"
+ ],
+ "risks": [
+ "Governance attacks",
+ "Token price volatility",
+ "Low participation"
+ ],
+ "tags": [
+ "governance",
+ "voting",
+ "dao",
+ "tokens"
+ ],
+ "common_questions": [
+ {
+ "question": "Do worthless governance tokens have monetary value?",
+ "answer": "Yes, they trade on markets and derive value from the protocol's success and potential future cash flows or benefits."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "CRV, SUSHI, UNI as governance tokens with different value capture."
+ },
+ {
+ "title": "🎡 DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "Governance tokens as flywheel enablers: CRV/CVX deep dive."
+ },
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Governance token dysfunction analysis."
+ }
+ ]
+ },
+ {
+ "id": "flash-loan",
+ "term": "Flash Loan",
+ "full_term": "Flash Loan",
+ "category": "technical",
+ "definition": "Flash loans are uncollateralized loans that must be borrowed and repaid within the same transaction block. They enable complex DeFi strategies like arbitrage, liquidations, and collateral swaps without requiring initial capital.",
+ "short_definition": "Instant uncollateralized loan that must be repaid in the same transaction",
+ "example": "A trader uses a flash loan to borrow 1000 ETH, arbitrage price differences between exchanges, and repay the loan plus fees - all in one transaction.",
+ "related_terms": [
+ "arbitrage",
+ "liquidation",
+ "mev",
+ "atomic-transaction"
+ ],
+ "risks": [
+ "Transaction failure",
+ "High gas costs",
+ "Complex execution"
+ ],
+ "tags": [
+ "defi",
+ "loans",
+ "arbitrage",
+ "advanced"
+ ],
+ "common_questions": [
+ {
+ "question": "What happens if I can't repay a flash loan?",
+ "answer": "The entire transaction reverts, meaning you get your original funds back but pay gas fees for the failed transaction."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Understanding innovations in money markets to envision their future",
+ "url": "/money-market-innovations/",
+ "description": "Flash loans via DeFiSaver using Aave."
+ },
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Flash loans for vault management."
+ }
+ ]
+ },
+ {
+ "id": "ethereum",
+ "term": "Ethereum",
+ "full_term": "Ethereum",
+ "category": "protocols",
+ "definition": "Ethereum is a decentralized, open-source blockchain platform that enables the creation of smart contracts and decentralized applications (dApps). It's the primary blockchain for DeFi applications due to its programmability and established ecosystem.",
+ "short_definition": "Programmable blockchain platform that powers most DeFi applications",
+ "example": "Most DeFi protocols like Uniswap, Aave, and Compound are built on Ethereum's blockchain.",
+ "related_terms": [
+ "smart-contract",
+ "defi",
+ "gas",
+ "erc-20"
+ ],
+ "risks": [
+ "High gas fees",
+ "Network congestion",
+ "Scalability limitations"
+ ],
+ "tags": [
+ "blockchain",
+ "ethereum",
+ "platform",
+ "smart-contracts"
+ ],
+ "common_questions": [
+ {
+ "question": "Why is Ethereum so important for DeFi?",
+ "answer": "Ethereum is the most widely adopted smart contract platform, as well as a maximally decentralized network with a unique history (PoW=>PoS transition)."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Why decentralization matters? A 12 min overview for the layman",
+ "url": "/decentralization-layman/",
+ "description": "Ethereum in context of decentralization."
+ },
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "Ethereum as the network enabling DeFi composability."
+ }
+ ]
+ },
+ {
+ "id": "layer-2",
+ "term": "Layer 2",
+ "full_term": "Layer 2 Scaling Solution",
+ "category": "protocols",
+ "definition": "Layer 2 solutions are secondary frameworks built on top of existing blockchains to improve scalability and reduce costs. They process transactions off the main chain while inheriting its security.",
+ "short_definition": "Scaling solutions built on top of blockchains to reduce fees and increase speed",
+ "example": "Polygon, Arbitrum, and Optimism are Layer 2 solutions that offer cheaper DeFi transactions than Ethereum mainnet.",
+ "related_terms": [
+ "ethereum",
+ "scaling",
+ "rollups",
+ "sidechains"
+ ],
+ "risks": [
+ "Centralization risks",
+ "Exit delays",
+ "Technical complexity"
+ ],
+ "tags": [
+ "scaling",
+ "layer2",
+ "ethereum",
+ "fees"
+ ],
+ "common_questions": [
+ {
+ "question": "Are Layer 2 solutions as secure as Ethereum?",
+ "answer": "They inherit Ethereum's security but may have additional risks depending on their specific implementation and centralization level."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚔ Advanced CRV warfare: analysis of protocols built on top of Curve and Convex",
+ "url": "/crv-wars-l2/",
+ "description": "L2 deployment of Curve ecosystem and multi-chain dynamics."
+ }
+ ]
+ },
+ {
+ "id": "bridge",
+ "term": "Bridge",
+ "full_term": "Cross-chain Bridge",
+ "category": "protocols",
+ "definition": "A bridge is a protocol that allows users to transfer assets and data between different blockchains or Layer 2 solutions. Bridges enable interoperability in the multi-chain DeFi ecosystem.",
+ "short_definition": "Protocol enabling asset transfers between different blockchains",
+ "example": "You can use a bridge to move ETH from Ethereum mainnet to Polygon, or USDC from Ethereum to Arbitrum.",
+ "related_terms": [
+ "interoperability",
+ "wrapped-tokens",
+ "layer-2",
+ "multichain"
+ ],
+ "risks": [
+ "Smart contract exploits",
+ "Centralization",
+ "Liquidity risks"
+ ],
+ "tags": [
+ "bridge",
+ "interoperability",
+ "cross-chain",
+ "transfer"
+ ],
+ "common_questions": [
+ {
+ "question": "Are bridges safe to use?",
+ "answer": "Bridges carry risks as they're complex smart contracts. Just like with DEXes, the safer is to use an aggregator like Jumper to minimize slippage risk and optimize routing."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "oracle",
+ "term": "Oracle",
+ "full_term": "Price Oracle",
+ "category": "technical",
+ "definition": "An oracle is a service that provides real-world data to blockchain applications. In DeFi, price oracles supply current asset prices for lending protocols, derivatives, and other applications that need off-chain data.",
+ "short_definition": "Service that provides real-world data like prices to blockchain applications",
+ "example": "Chainlink oracles provide ETH/USD prices to lending protocols to determine collateral values and liquidation thresholds.",
+ "related_terms": [
+ "chainlink",
+ "price-feeds",
+ "liquidation",
+ "collateral"
+ ],
+ "risks": [
+ "Oracle manipulation",
+ "Data lag",
+ "Single point of failure"
+ ],
+ "tags": [
+ "oracle",
+ "data",
+ "prices",
+ "chainlink"
+ ],
+ "common_questions": [
+ {
+ "question": "Why can't smart contracts get price data directly?",
+ "answer": "Blockchains can't access external data by design. Oracles act as bridges to bring real-world information on-chain securely."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Oracle risks: ChainLink multisig, dependency chains."
+ },
+ {
+ "title": "Assessing risk in decentralized finance: a handbook for money markets",
+ "url": "/money-markets-risk/",
+ "description": "Oracles as critical risk dimension."
+ },
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "TWAP oracles in expansion/contraction mechanisms."
+ }
+ ]
+ },
+ {
+ "id": "mev",
+ "term": "MEV",
+ "full_term": "Maximal Extractable Value",
+ "category": "technical",
+ "definition": "MEV refers to the maximum profit that can be extracted by reordering, including, or excluding transactions within a block. This includes front-running, sandwich attacks, and arbitrage opportunities.",
+ "short_definition": "Profit extracted by manipulating transaction ordering in blocks",
+ "example": "A bot sees your large DEX trade, places a buy order before yours and a sell order after, profiting from the price impact you create.",
+ "related_terms": [
+ "front-running",
+ "sandwich-attack",
+ "arbitrage",
+ "flashbots"
+ ],
+ "risks": [
+ "Increased trading costs",
+ "Unfair extraction",
+ "Network centralization"
+ ],
+ "tags": [
+ "mev",
+ "arbitrage",
+ "front-running",
+ "mining"
+ ],
+ "common_questions": [
+ {
+ "question": "How can I protect myself from MEV?",
+ "answer": "Use private mempools, set appropriate slippage tolerance, or use MEV-protected trading interfaces."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "dex-aggregator",
+ "term": "DEX Aggregator",
+ "full_term": "Decentralized Exchange Aggregator",
+ "category": "protocols",
+ "definition": "A DEX aggregator is a service that sources liquidity from multiple decentralized exchanges to find the best prices and lowest slippage for trades. They optimize routing to minimize trading costs.",
+ "short_definition": "Service that finds the best prices across multiple DEXs for trades",
+ "example": "1inch aggregates prices from Uniswap, SushiSwap, and other DEXs to execute your trade at the best possible rate.",
+ "related_terms": [
+ "uniswap",
+ "sushiswap",
+ "slippage",
+ "routing"
+ ],
+ "risks": [
+ "Smart contract risk",
+ "Complexity",
+ "Gas costs"
+ ],
+ "tags": [
+ "aggregator",
+ "dex",
+ "trading",
+ "optimization"
+ ],
+ "common_questions": [
+ {
+ "question": "Do aggregators always give better prices?",
+ "answer": "Usually yes, but consider gas costs. For small trades, the gas cost of complex routing might outweigh savings."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Practical guide to DEX aggregators: ParaSwap, rate comparison, gas optimization."
+ }
+ ]
+ },
+ {
+ "id": "multisig",
+ "term": "Multisig",
+ "full_term": "Multi-Signature Wallet",
+ "category": "technical",
+ "definition": "A multisig wallet requires multiple signatures (keys) to authorize transactions, providing enhanced security over single-key wallets. Commonly used for protocol governance and treasury management.",
+ "short_definition": "Wallet requiring multiple signatures to authorize transactions",
+ "example": "A 3-of-5 multisig requires at least 3 out of 5 designated signers to approve any transaction.",
+ "related_terms": [
+ "security",
+ "governance",
+ "treasury",
+ "keys"
+ ],
+ "risks": [
+ "Key loss",
+ "Coordination complexity",
+ "Single points of failure"
+ ],
+ "tags": [
+ "security",
+ "multisig",
+ "wallet",
+ "governance"
+ ],
+ "common_questions": [
+ {
+ "question": "What happens if multisig signers are unavailable?",
+ "answer": "If you can't reach the minimum threshold, funds become inaccessible. This is why backup plans and trusted signers are crucial."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Multisig risks: ChainLink 3/20 multisig, wrench attacks."
+ }
+ ]
+ },
+ {
+ "id": "gas",
+ "term": "Gas",
+ "full_term": "Gas Fee",
+ "category": "technical",
+ "definition": "Gas is the unit that measures the computational effort required to execute operations on Ethereum. Users pay gas fees to miners/validators to process their transactions.",
+ "short_definition": "Fee paid to execute transactions on Ethereum blockchain",
+ "example": "A simple ETH transfer might cost 21,000 gas units, while complex DeFi interactions can cost 200,000+ gas units.",
+ "related_terms": [
+ "ethereum",
+ "gwei",
+ "transaction",
+ "miners"
+ ],
+ "risks": [
+ "High cost during congestion",
+ "Failed transactions",
+ "Unpredictable pricing"
+ ],
+ "tags": [
+ "gas",
+ "fees",
+ "ethereum",
+ "transaction"
+ ],
+ "common_questions": [
+ {
+ "question": "Why are gas fees so high sometimes?",
+ "answer": "Gas fees increase with network demand. During busy periods, users compete by paying higher fees to get their transactions processed faster."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "Dedicated gas primer: gwei, checking prices, impact on strategies."
+ },
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Gas efficiency in swapping and aggregator optimization."
+ },
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "Gas cost analysis: impact on farming yields."
+ }
+ ]
+ },
+ {
+ "id": "erc-20",
+ "term": "ERC-20",
+ "full_term": "Ethereum Request for Comment 20",
+ "category": "technical",
+ "definition": "ERC-20 is a technical standard for fungible tokens on the Ethereum blockchain. It defines a common interface that allows tokens to be easily integrated with wallets, exchanges, and other applications.",
+ "short_definition": "Standard for creating fungible tokens on Ethereum",
+ "example": "USDC, DAI, UNI, and most DeFi tokens are ERC-20 tokens that follow this standard.",
+ "related_terms": [
+ "ethereum",
+ "tokens",
+ "standard",
+ "fungible"
+ ],
+ "risks": [
+ "Smart contract bugs",
+ "Token-specific risks",
+ "Approval exploits"
+ ],
+ "tags": [
+ "erc20",
+ "tokens",
+ "standard",
+ "ethereum"
+ ],
+ "common_questions": [
+ {
+ "question": "Can I use ERC-20 tokens on other blockchains?",
+ "answer": "Not directly, but you can bridge them to other chains or use wrapped versions that follow other standards."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "wrapped-token",
+ "term": "Wrapped Token",
+ "full_term": "Wrapped Token",
+ "category": "tokens",
+ "definition": "A wrapped token represents another cryptocurrency on a different blockchain. It's backed 1:1 by the original asset held in custody, enabling cross-chain functionality.",
+ "short_definition": "Token representing another cryptocurrency on a different blockchain",
+ "example": "Ethereum, the network, existed before the ERC-20 token standard was establishd, thus ETH the token is not ERC-20 compliant. wETH is an ERC-20 compliant representation of ETH, enabling smart contracts to handle it like a regular ERC-20 token.",
+ "related_terms": [
+ "bridge",
+ "cross-chain",
+ "custody",
+ "erc-20"
+ ],
+ "risks": [
+ "Custodial risk",
+ "Depeg risk",
+ "Bridge vulnerabilities"
+ ],
+ "tags": [
+ "wrapped",
+ "tokens",
+ "cross-chain",
+ "bitcoin"
+ ],
+ "common_questions": [
+ {
+ "question": "Is a wrapped token the same as the original?",
+ "answer": "Functionally similar but technically different. They should maintain 1:1 value but carry additional risks from the wrapping mechanism. Wrapping mechanism can vary, the ideal is immutable contracts like for wETH."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Exploring stable assets on Ethereum: approaches & endgame",
+ "url": "/ethereum-stable-assets/",
+ "description": "Wrapped tokens explained: wBTC, tokenized assets."
+ }
+ ]
+ },
+ {
+ "id": "mempool",
+ "term": "Mempool",
+ "full_term": "Memory Pool",
+ "category": "technical",
+ "definition": "The mempool is a waiting area for unconfirmed transactions on a blockchain network. Transactions sit in the mempool until miners or validators include them in a block.",
+ "short_definition": "Waiting area for unconfirmed blockchain transactions",
+ "example": "When you submit a transaction, it first goes to the mempool where MEV bots can see it before it's included in a block.",
+ "related_terms": [
+ "transaction",
+ "mining",
+ "mev",
+ "gas"
+ ],
+ "risks": [
+ "Front-running",
+ "Transaction stuck",
+ "MEV extraction"
+ ],
+ "tags": [
+ "mempool",
+ "transactions",
+ "mining",
+ "blockchain"
+ ],
+ "common_questions": [
+ {
+ "question": "Why is my transaction stuck in the mempool?",
+ "answer": "Usually due to low gas fees. Miners prioritize higher-fee transactions, so yours waits until network congestion decreases or you increase the fee."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "validator",
+ "term": "Validator",
+ "full_term": "Network Validator",
+ "category": "technical",
+ "definition": "Validators are network participants who validate transactions and create new blocks in Proof of Stake blockchains. They stake tokens as collateral and earn rewards for honest behavior.",
+ "short_definition": "Network participants who validate transactions in Proof of Stake systems",
+ "example": "Ethereum 2.0 validators stake 32 ETH to participate in consensus and earn staking rewards.",
+ "related_terms": [
+ "staking",
+ "proof-of-stake",
+ "consensus",
+ "ethereum"
+ ],
+ "risks": [
+ "Slashing risk",
+ "Technical requirements",
+ "Lock-up periods"
+ ],
+ "tags": [
+ "validator",
+ "staking",
+ "consensus",
+ "ethereum"
+ ],
+ "common_questions": [
+ {
+ "question": "What is slashing in staking?",
+ "answer": "Slashing is a penalty where validators lose part of their staked tokens for malicious behavior or prolonged downtime."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "consensus",
+ "term": "Consensus",
+ "full_term": "Consensus Mechanism",
+ "category": "technical",
+ "definition": "A consensus mechanism is the method by which a blockchain network agrees on the validity of transactions and the state of the ledger. Common types include Proof of Work and Proof of Stake.",
+ "short_definition": "Method for blockchain networks to agree on transaction validity",
+ "example": "Bitcoin uses Proof of Work consensus while Ethereum transitioned to Proof of Stake for better energy efficiency.",
+ "related_terms": [
+ "proof-of-stake",
+ "proof-of-work",
+ "mining",
+ "validator"
+ ],
+ "risks": [
+ "51% attacks",
+ "Centralization",
+ "Security assumptions"
+ ],
+ "tags": [
+ "consensus",
+ "blockchain",
+ "security",
+ "proof-of-stake"
+ ],
+ "common_questions": [
+ {
+ "question": "Why did Ethereum switch from Proof of Work to Proof of Stake?",
+ "answer": "For better energy efficiency, improved security, and to enable features like sharding for better scalability."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "block",
+ "term": "Block",
+ "full_term": "Blockchain Block",
+ "category": "technical",
+ "definition": "A block is a collection of transactions that are bundled together and added to the blockchain. Each block contains a cryptographic hash of the previous block, creating an immutable chain.",
+ "short_definition": "Collection of transactions bundled together on a blockchain",
+ "example": "An Ethereum block contains multiple transactions and is produced approximately every 12 seconds.",
+ "related_terms": [
+ "blockchain",
+ "transaction",
+ "mining",
+ "hash"
+ ],
+ "risks": [
+ "Block reorganization",
+ "Confirmation delays",
+ "Network forks"
+ ],
+ "tags": [
+ "block",
+ "blockchain",
+ "transactions",
+ "mining"
+ ],
+ "common_questions": [
+ {
+ "question": "How many confirmations do I need?",
+ "answer": "For high-value transactions, wait for 6+ confirmations on Ethereum. For smaller amounts, 1-3 confirmations are usually sufficient."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "apr",
+ "term": "APR",
+ "full_term": "Annual Percentage Rate",
+ "category": "yields",
+ "definition": "Annual Percentage Rate (APR) represents the simple annual interest rate without compounding effects. In DeFi, APR shows the base yield before considering compound interest.",
+ "short_definition": "Simple annual interest rate without compounding effects",
+ "example": "A lending pool offering 10% APR means you earn 10% per year in simple interest.",
+ "related_terms": [
+ "apy",
+ "compound-interest",
+ "yield",
+ "interest"
+ ],
+ "risks": [
+ "Inflation eroding real returns",
+ "Protocol risk",
+ "Rate changes"
+ ],
+ "tags": [
+ "defi",
+ "yields",
+ "interest",
+ "rates"
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "A balanced overview of decentralised finance services you can use to make your ETH work for you."
+ }
+ ]
+ },
+ {
+ "id": "lending",
+ "term": "Lending",
+ "full_term": "DeFi Lending",
+ "category": "yields",
+ "definition": "Lending in DeFi allows users to lend their crypto assets to earn interest. Smart contracts automatically manage the lending process, eliminating the need for traditional intermediaries.",
+ "short_definition": "Earning interest by lending crypto assets through smart contracts",
+ "example": "You can lend USDC on Aave to earn interest paid by borrowers who need liquidity.",
+ "related_terms": [
+ "borrowing",
+ "interest",
+ "collateral",
+ "liquidation"
+ ],
+ "risks": [
+ "Smart contract risk",
+ "Bad debt",
+ "Interest rate volatility"
+ ],
+ "tags": [
+ "defi",
+ "lending",
+ "yield",
+ "interest"
+ ],
+ "related_articles": [
+ {
+ "title": "Understanding innovations in money markets to envision their future",
+ "url": "/money-market-innovations/",
+ "description": "Comprehensive overview of lending innovations."
+ },
+ {
+ "title": "Assessing risk in decentralized finance: a handbook for money markets",
+ "url": "/money-markets-risk/",
+ "description": "Risk assessment framework for lending protocols."
+ },
+ {
+ "title": "Is this a Lending Protocol Renaissance?",
+ "url": "/lending-protocol-renaissance/",
+ "description": "New lending models: Morpho, DYAD, Fluid, Tapioca."
+ }
+ ]
+ },
+ {
+ "id": "borrowing",
+ "term": "Borrowing",
+ "full_term": "DeFi Borrowing",
+ "category": "yields",
+ "definition": "Borrowing in DeFi allows users to borrow crypto assets by providing collateral. This enables leverage, liquidity access, and various trading strategies without selling existing holdings.",
+ "short_definition": "Obtaining crypto loans by providing collateral to smart contracts",
+ "example": "You can borrow USDC against your ETH collateral on Compound to maintain ETH exposure while accessing liquidity.",
+ "related_terms": [
+ "collateral",
+ "liquidation",
+ "ltv",
+ "interest-rate"
+ ],
+ "risks": [
+ "Liquidation risk",
+ "Interest rate increases",
+ "Collateral price drops"
+ ],
+ "tags": [
+ "defi",
+ "borrowing",
+ "collateral",
+ "leverage"
+ ],
+ "related_articles": [
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "Deep dive into borrowing mechanics: troves, initiation fees, collateralization."
+ },
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Practical guide to borrowing DAI from Maker vaults to fund DeFi strategies."
+ },
+ {
+ "title": "🌽 Defi money markets cookbook",
+ "url": "/money-market-recipes/",
+ "description": "Money markets like Aave or Alchemix are essential in DeFi. Cookbook of borrowing-based strategies."
+ }
+ ]
+ },
+ {
+ "id": "collateral",
+ "term": "Collateral",
+ "full_term": "Loan Collateral",
+ "category": "yields",
+ "definition": "Collateral is an asset pledged as security for a loan. In DeFi, users deposit collateral to borrow other assets, with smart contracts automatically managing the collateral and liquidation process.",
+ "short_definition": "Assets deposited as security to back a loan",
+ "example": "To borrow $1000 USDC, you might deposit $1500 worth of ETH as collateral to maintain a safe collateralization ratio.",
+ "related_terms": [
+ "borrowing",
+ "liquidation",
+ "ltv",
+ "over-collateralized"
+ ],
+ "risks": [
+ "Price volatility",
+ "Liquidation risk",
+ "Smart contract risk"
+ ],
+ "tags": [
+ "defi",
+ "lending",
+ "collateral",
+ "borrowing"
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "ETH as collateral in Maker vaults: practical management and liquidation prevention."
+ },
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "Collateral mechanics in Liquity: ETH deposits, collateralization ratios, recovery mode."
+ },
+ {
+ "title": "Is this a Lending Protocol Renaissance?",
+ "url": "/lending-protocol-renaissance/",
+ "description": "CDP vs money market collateral models compared in depth."
+ }
+ ]
+ },
+ {
+ "id": "ltv",
+ "term": "LTV",
+ "full_term": "Loan-to-Value Ratio",
+ "category": "yields",
+ "definition": "LTV ratio represents the percentage of collateral value that can be borrowed. A lower LTV means more conservative lending, while higher LTV increases liquidation risk.",
+ "short_definition": "Percentage of collateral value that can be borrowed",
+ "example": "With 75% LTV, you can borrow up to $750 against $1000 of collateral.",
+ "related_terms": [
+ "collateral",
+ "liquidation",
+ "borrowing",
+ "health-factor"
+ ],
+ "risks": [
+ "Liquidation risk",
+ "Market volatility",
+ "Sudden LTV changes"
+ ],
+ "tags": [
+ "defi",
+ "lending",
+ "borrowing",
+ "ratio"
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Collateralization ratios as inverse of LTV."
+ },
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "110% minimum collateralization ratio."
+ }
+ ]
+ },
+ {
+ "id": "liquidation",
+ "term": "Liquidation",
+ "full_term": "Collateral Liquidation",
+ "category": "risks",
+ "definition": "Liquidation occurs when a borrower's collateral value falls below the required threshold, triggering automatic sale of collateral to repay the loan and protect lenders.",
+ "short_definition": "Automatic sale of collateral when loan becomes undercollateralized",
+ "example": "If your ETH collateral drops in value and your loan becomes undercollateralized, the protocol will liquidate your ETH to repay the loan.",
+ "related_terms": [
+ "collateral",
+ "ltv",
+ "borrowing",
+ "health-factor"
+ ],
+ "risks": [
+ "Loss of collateral",
+ "Liquidation penalties",
+ "Price volatility"
+ ],
+ "tags": [
+ "defi",
+ "risks",
+ "liquidation",
+ "collateral"
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Maker liquidation mechanics and DeFiSaver Save function."
+ },
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "Stability pool as liquidation backstop."
+ },
+ {
+ "title": "Understanding innovations in money markets to envision their future",
+ "url": "/money-market-innovations/",
+ "description": "B.Protocol reclaiming liquidations."
+ }
+ ]
+ },
+ {
+ "id": "vault",
+ "term": "Vault",
+ "full_term": "Yield Vault",
+ "category": "strategies",
+ "definition": "A vault is an automated DeFi strategy that pools user funds and deploys them across various protocols to maximize yields. Vaults handle the complexity of yield farming automatically.",
+ "short_definition": "Automated strategy that pools funds to maximize yields across DeFi protocols",
+ "example": "Yearn Finance vaults automatically move your funds between different protocols to find the highest yields.",
+ "related_terms": [
+ "yield-farming",
+ "auto-compounding",
+ "strategy",
+ "pooled-funds"
+ ],
+ "risks": [
+ "Strategy risk",
+ "Smart contract risk",
+ "Impermanent loss"
+ ],
+ "tags": [
+ "defi",
+ "vaults",
+ "automation",
+ "yield"
+ ],
+ "related_articles": [
+ {
+ "title": "🤖 Vaults: DeFi Investing Streamlined?",
+ "url": "/vaults/",
+ "description": "Dedicated article on vault mechanics."
+ },
+ {
+ "title": "YearnFinance - DeFi on autopilot?",
+ "url": "/yearn-finance/",
+ "description": "yVaults explained."
+ }
+ ]
+ },
+ {
+ "id": "staking",
+ "term": "Staking",
+ "full_term": "Cryptocurrency Staking",
+ "category": "yields",
+ "definition": "Staking involves locking tokens to support blockchain operations or protocol functions in exchange for rewards. This includes validator staking and DeFi protocol staking.",
+ "short_definition": "Locking tokens to earn rewards by supporting network or protocol operations",
+ "example": "You can stake ETH to become a validator and earn staking rewards, or stake protocol tokens to earn governance tokens.",
+ "related_terms": [
+ "validator",
+ "rewards",
+ "lock-up",
+ "slashing"
+ ],
+ "risks": [
+ "Slashing risk",
+ "Lock-up periods",
+ "Validator performance"
+ ],
+ "tags": [
+ "staking",
+ "rewards",
+ "validation",
+ "lock-up"
+ ],
+ "related_articles": [
+ {
+ "title": "🧭 DeFi Moneygames: Assessing risk and avoiding wreckage",
+ "url": "/defi-moneygames/",
+ "description": "Staking pool risk tiers."
+ },
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "CRV staking (veCRV) mechanics."
+ }
+ ]
+ },
+ {
+ "id": "auto-compounding",
+ "term": "Auto-compounding",
+ "full_term": "Automatic Compounding",
+ "category": "strategies",
+ "definition": "Auto-compounding automatically reinvests earned rewards back into the original investment, maximizing returns through compound interest without manual intervention.",
+ "short_definition": "Automatic reinvestment of rewards to maximize compound returns",
+ "example": "A yield vault auto-compounds by automatically selling earned tokens and buying more of the deposit token to increase your position.",
+ "related_terms": [
+ "compound-interest",
+ "vault",
+ "yield-farming",
+ "reinvestment"
+ ],
+ "risks": [
+ "Gas costs eating returns",
+ "Price impact",
+ "Strategy changes"
+ ],
+ "tags": [
+ "defi",
+ "compounding",
+ "automation",
+ "yields"
+ ],
+ "related_articles": [
+ {
+ "title": "🤖 Vaults: DeFi Investing Streamlined?",
+ "url": "/vaults/",
+ "description": "Vaults enable easy DeFi investments with a streamlined management of the position for the end-users."
+ },
+ {
+ "title": "YearnFinance - DeFi on autopilot?",
+ "url": "/yearn-finance/",
+ "description": "Yearn Finance V2 is just a few weeks old, yet it is already one of the most influential releases of the year for DeFi."
+ }
+ ]
+ },
+ {
+ "id": "lp-token",
+ "term": "LP Token",
+ "full_term": "Liquidity Provider Token",
+ "category": "tokens",
+ "definition": "LP tokens are issued to liquidity providers as proof of their contribution to a liquidity pool. These tokens represent the provider's share of the pool and can be redeemed for the underlying assets plus earned fees.",
+ "short_definition": "Tokens representing a user's share in a liquidity pool",
+ "example": "When you provide ETH and USDC to a Uniswap pool, you receive ETH-USDC LP tokens that represent your stake in the pool.",
+ "related_terms": [
+ "liquidity-pool",
+ "liquidity-providing",
+ "amm",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Impermanent loss",
+ "Smart contract risk",
+ "Pool-specific risks"
+ ],
+ "tags": [
+ "defi",
+ "tokens",
+ "liquidity",
+ "amm"
+ ],
+ "related_articles": [
+ {
+ "title": "🤖 Vaults: DeFi Investing Streamlined?",
+ "url": "/vaults/",
+ "description": "LP tokens as vault deposits and tokenized strategies."
+ }
+ ]
+ },
+ {
+ "id": "synthetic-asset",
+ "term": "Synthetic Asset",
+ "full_term": "Synthetic Asset",
+ "category": "tokens",
+ "definition": "Synthetic assets are blockchain-based derivatives that track the price of real-world assets like stocks, commodities, or currencies without requiring ownership of the underlying asset.",
+ "short_definition": "Blockchain tokens that track the price of real-world assets",
+ "example": "Synthetix offers synthetic Tesla stock (sTSLA) that tracks Tesla's price, allowing DeFi users to gain exposure to traditional assets.",
+ "related_terms": [
+ "derivatives",
+ "oracle",
+ "collateral",
+ "price-feeds"
+ ],
+ "risks": [
+ "Oracle manipulation",
+ "Collateral liquidation",
+ "Tracking errors"
+ ],
+ "tags": [
+ "defi",
+ "synthetic",
+ "derivatives",
+ "assets"
+ ],
+ "related_articles": [
+ {
+ "title": "Exploring stable assets on Ethereum: approaches & endgame",
+ "url": "/ethereum-stable-assets/",
+ "description": "Pegged/synthetic assets on Ethereum."
+ }
+ ]
+ },
+ {
+ "id": "rebase-token",
+ "term": "Rebase Token",
+ "full_term": "Elastic Supply Token",
+ "category": "tokens",
+ "definition": "Rebase tokens automatically adjust their total supply to maintain a target price. The number of tokens you hold changes, but your proportional share of the total supply remains constant.",
+ "short_definition": "Token with elastic supply that adjusts to maintain price stability",
+ "example": "AMPL (Ampleforth) increases or decreases all holders' token balances daily based on price deviation from $1.",
+ "related_terms": [
+ "elastic-supply",
+ "algorithmic",
+ "price-stability",
+ "inflation"
+ ],
+ "risks": [
+ "Supply volatility",
+ "Complexity",
+ "Unpredictable returns"
+ ],
+ "tags": [
+ "defi",
+ "rebase",
+ "elastic",
+ "algorithmic"
+ ],
+ "related_articles": [
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "Rebase mechanisms in ESD, DSD: expansion/contraction."
+ },
+ {
+ "title": "⚖ The tale of two seigniorage models: Basis vs ESD",
+ "url": "/seigniorage-basis-esd/",
+ "description": "Elastic currency models and rebases."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "Anti-dilutive rebases for veSOLID holders."
+ }
+ ]
+ },
+ {
+ "id": "utility-token",
+ "term": "Utility Token",
+ "full_term": "Utility Token",
+ "category": "tokens",
+ "definition": "Utility tokens provide holders with access to specific products, services, or functionalities within a protocol or ecosystem. They're not primarily designed as investments but as functional tools.",
+ "short_definition": "Token providing access to protocol features or services",
+ "example": "BNB is used to pay reduced trading fees on Binance exchange, while LINK is used to pay Chainlink oracle services.",
+ "related_terms": [
+ "governance-token",
+ "protocol",
+ "services",
+ "ecosystem"
+ ],
+ "risks": [
+ "Utility demand changes",
+ "Competition",
+ "Protocol changes"
+ ],
+ "tags": [
+ "tokens",
+ "utility",
+ "protocol",
+ "services"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "nft",
+ "term": "NFT",
+ "full_term": "Non-Fungible Token",
+ "category": "tokens",
+ "definition": "NFTs are unique digital tokens that represent ownership of specific digital or physical items. Unlike fungible tokens, each NFT is distinct and cannot be exchanged on a one-to-one basis.",
+ "short_definition": "Unique digital tokens representing ownership of specific items",
+ "example": "An NFT might represent ownership of digital art, in-game items, or even real estate deeds on the blockchain.",
+ "related_terms": [
+ "erc-721",
+ "digital-ownership",
+ "collectibles",
+ "metadata"
+ ],
+ "risks": [
+ "Illiquidity",
+ "Speculative bubbles",
+ "Storage dependencies"
+ ],
+ "tags": [
+ "nft",
+ "unique",
+ "ownership",
+ "digital"
+ ],
+ "related_articles": [
+ {
+ "title": "Non-fungible tokens explained with Blastoise and Charizard",
+ "url": "/nft/",
+ "description": "Core NFT explainer."
+ },
+ {
+ "title": "Non-fungible tokens (NFTs): the weight and contribution of ascertainable history",
+ "url": "/nft-usecases/",
+ "description": "NFT use cases and provable scarcity."
+ },
+ {
+ "title": "NFTfi: NFT meets DeFi, liquidity and leverage ensue",
+ "url": "/nftfi-defi-nft/",
+ "description": "NFT meets DeFi infrastructure."
+ }
+ ]
+ },
+ {
+ "id": "erc-721",
+ "term": "ERC-721",
+ "full_term": "Ethereum Request for Comment 721",
+ "category": "technical",
+ "definition": "ERC-721 is the technical standard for non-fungible tokens (NFTs) on Ethereum. It defines how to create unique, indivisible tokens that can represent ownership of digital or physical assets.",
+ "short_definition": "Standard for creating non-fungible tokens on Ethereum",
+ "example": "CryptoKitties and most NFT collections follow the ERC-721 standard to ensure compatibility with wallets and marketplaces.",
+ "related_terms": [
+ "nft",
+ "ethereum",
+ "standard",
+ "unique-tokens"
+ ],
+ "risks": [
+ "Standard limitations",
+ "Gas costs",
+ "Compatibility issues"
+ ],
+ "tags": [
+ "erc721",
+ "nft",
+ "standard",
+ "ethereum"
+ ],
+ "related_articles": [
+ {
+ "title": "Non-fungible tokens explained with Blastoise and Charizard",
+ "url": "/nft/",
+ "description": "Explains ERC-721 as the NFT standard."
+ }
+ ]
+ },
+ {
+ "id": "token-burn",
+ "term": "Token Burn",
+ "full_term": "Token Burning",
+ "category": "tokens",
+ "definition": "Token burning permanently removes tokens from circulation by sending them to an unrecoverable address. This reduces total supply and can increase the value of remaining tokens.",
+ "short_definition": "Permanent removal of tokens from circulation",
+ "example": "Binance regularly burns BNB tokens to reduce supply, while Ethereum burns ETH through EIP-1559's base fee mechanism.",
+ "related_terms": [
+ "deflationary",
+ "supply",
+ "tokenomics",
+ "value-accrual"
+ ],
+ "risks": [
+ "Irreversible action",
+ "Economic assumptions",
+ "Governance decisions"
+ ],
+ "tags": [
+ "tokens",
+ "burn",
+ "deflationary",
+ "supply"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "tokenomics",
+ "term": "Tokenomics",
+ "full_term": "Token Economics",
+ "category": "tokens",
+ "definition": "Tokenomics refers to the economic design and mechanics of a cryptocurrency token, including supply distribution, inflation/deflation mechanisms, utility, and incentive structures.",
+ "short_definition": "Economic design and mechanics of a cryptocurrency token",
+ "example": "Bitcoin's tokenomics include a fixed 21 million supply cap, halving events every 4 years, and mining rewards as incentives.",
+ "related_terms": [
+ "supply",
+ "inflation",
+ "distribution",
+ "incentives"
+ ],
+ "risks": [
+ "Poor design consequences",
+ "Inflation",
+ "Centralization"
+ ],
+ "tags": [
+ "tokens",
+ "economics",
+ "design",
+ "incentives"
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "UNI, SUSHI, CRV tokenomics compared."
+ },
+ {
+ "title": "🎡 DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "CRV/CVX flywheel tokenomics."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "ve(3,3) tokenomics design."
+ }
+ ]
+ },
+ {
+ "id": "vesting",
+ "term": "Vesting",
+ "full_term": "Token Vesting",
+ "category": "tokens",
+ "definition": "Vesting is the gradual release of tokens over time according to a predetermined schedule. It prevents immediate selling and aligns long-term interests of team members and investors.",
+ "short_definition": "Gradual release of tokens over time according to a schedule",
+ "example": "Team tokens might vest over 4 years with a 1-year cliff, meaning no tokens are released for the first year, then 25% each year after.",
+ "related_terms": [
+ "cliff",
+ "release-schedule",
+ "alignment",
+ "lock-up"
+ ],
+ "risks": [
+ "Selling pressure after vesting",
+ "Team departures",
+ "Schedule changes"
+ ],
+ "tags": [
+ "tokens",
+ "vesting",
+ "schedule",
+ "alignment"
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "SushiSwap 6-month vesting on rewards."
+ }
+ ]
+ },
+ {
+ "id": "airdrop",
+ "term": "Airdrop",
+ "full_term": "Token Airdrop",
+ "category": "tokens",
+ "definition": "An airdrop is the free distribution of tokens to wallet addresses, usually to reward early users, increase adoption, or distribute governance tokens to decentralize control.",
+ "short_definition": "Free distribution of tokens to wallet addresses",
+ "example": "Uniswap airdropped 400 UNI tokens to every wallet that had used the protocol before September 2020.",
+ "related_terms": [
+ "distribution",
+ "governance-tokens",
+ "rewards",
+ "decentralization"
+ ],
+ "risks": [
+ "Regulatory concerns",
+ "Selling pressure",
+ "Sybil attacks"
+ ],
+ "tags": [
+ "tokens",
+ "airdrop",
+ "distribution",
+ "rewards"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "whitelist",
+ "term": "Whitelist",
+ "full_term": "Token Whitelist",
+ "category": "tokens",
+ "definition": "A whitelist is a list of approved addresses that are allowed to participate in token sales, airdrops, or access specific protocol features before public availability.",
+ "short_definition": "List of approved addresses for early access to token events",
+ "example": "Many NFT projects create whitelists for early supporters to mint before the public sale.",
+ "related_terms": [
+ "presale",
+ "early-access",
+ "kyc",
+ "allowlist"
+ ],
+ "risks": [
+ "Centralization",
+ "Unfair advantage",
+ "Gaming attempts"
+ ],
+ "tags": [
+ "tokens",
+ "whitelist",
+ "access",
+ "presale"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "market-cap",
+ "term": "Market Cap",
+ "full_term": "Market Capitalization",
+ "category": "tokens",
+ "definition": "Market capitalization is the total value of a cryptocurrency, calculated by multiplying the current price by the circulating supply. It's used to measure and compare the size of different projects.",
+ "short_definition": "Total value of a cryptocurrency (price × circulating supply)",
+ "example": "If a token trades at $10 with 1 million tokens in circulation, its market cap is $10 million.",
+ "related_terms": [
+ "circulating-supply",
+ "price",
+ "valuation",
+ "ranking"
+ ],
+ "risks": [
+ "Manipulation with low supply",
+ "Dilution from new tokens",
+ "Market volatility"
+ ],
+ "tags": [
+ "tokens",
+ "valuation",
+ "market-cap",
+ "metrics"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "circulating-supply",
+ "term": "Circulating Supply",
+ "full_term": "Circulating Token Supply",
+ "category": "tokens",
+ "definition": "Circulating supply refers to the number of tokens that are publicly available and actively trading in the market, excluding locked, reserved, or burned tokens.",
+ "short_definition": "Number of tokens publicly available and actively trading",
+ "example": "A project might have a total supply of 100 million tokens, but only 60 million in circulating supply due to team locks and reserves.",
+ "related_terms": [
+ "total-supply",
+ "max-supply",
+ "market-cap",
+ "locked-tokens"
+ ],
+ "risks": [
+ "Supply inflation",
+ "Unlock events",
+ "Calculation differences"
+ ],
+ "tags": [
+ "tokens",
+ "supply",
+ "circulation",
+ "metrics"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "total-supply",
+ "term": "Total Supply",
+ "full_term": "Total Token Supply",
+ "category": "tokens",
+ "definition": "Total supply is the amount of tokens that currently exist, including all minted tokens minus any that have been burned. It includes both circulating and locked tokens.",
+ "short_definition": "Total number of tokens that currently exist",
+ "example": "Ethereum's total supply changes constantly as new ETH is minted for staking rewards and burned through transaction fees.",
+ "related_terms": [
+ "circulating-supply",
+ "max-supply",
+ "minting",
+ "burning"
+ ],
+ "risks": [
+ "Inflation",
+ "Supply changes",
+ "Burn rate variations"
+ ],
+ "tags": [
+ "tokens",
+ "supply",
+ "minting",
+ "total"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "max-supply",
+ "term": "Max Supply",
+ "full_term": "Maximum Token Supply",
+ "category": "tokens",
+ "definition": "Maximum supply is the theoretical upper limit of tokens that can ever exist for a cryptocurrency. Once reached, no new tokens can be created.",
+ "short_definition": "Maximum number of tokens that can ever exist",
+ "example": "Bitcoin has a maximum supply of 21 million BTC, while Ethereum currently has no maximum supply limit.",
+ "related_terms": [
+ "total-supply",
+ "scarcity",
+ "deflationary",
+ "hard-cap"
+ ],
+ "risks": [
+ "Policy changes",
+ "Fork risks",
+ "Economic assumptions"
+ ],
+ "tags": [
+ "tokens",
+ "supply",
+ "maximum",
+ "scarcity"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "arbitrage",
+ "term": "Arbitrage",
+ "full_term": "Price Arbitrage",
+ "category": "strategies",
+ "definition": "Arbitrage is the practice of simultaneously buying and selling identical assets on different markets to profit from price differences. In DeFi, bots exploit price gaps between DEXs or CEXs.",
+ "short_definition": "Profiting from price differences of identical assets across markets",
+ "example": "If ETH trades at $2000 on Uniswap and $2005 on SushiSwap, an arbitrageur buys on Uniswap and sells on SushiSwap for $5 profit per ETH.",
+ "related_terms": [
+ "flash-loan",
+ "mev",
+ "price-impact",
+ "dex"
+ ],
+ "risks": [
+ "Transaction costs",
+ "Failed execution",
+ "Slippage"
+ ],
+ "tags": [
+ "trading",
+ "arbitrage",
+ "profit",
+ "dex"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "price-impact",
+ "term": "Price Impact",
+ "full_term": "Price Impact",
+ "category": "technical",
+ "definition": "Price impact measures how much a trade moves the market price of an asset. Large trades in illiquid pools cause significant price impact, leading to unfavorable execution prices.",
+ "short_definition": "How much a trade moves the market price of an asset",
+ "example": "Buying $100,000 worth of a token in a small liquidity pool might cause 5% price impact, meaning you pay 5% more than the starting price.",
+ "related_terms": [
+ "slippage",
+ "liquidity",
+ "amm",
+ "market-depth"
+ ],
+ "risks": [
+ "Higher trading costs",
+ "Unfavorable prices",
+ "MEV extraction"
+ ],
+ "tags": [
+ "trading",
+ "price",
+ "impact",
+ "liquidity"
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Rate display, slippage, and price impact in swapping."
+ }
+ ]
+ },
+ {
+ "id": "sandwich-attack",
+ "term": "Sandwich Attack",
+ "full_term": "Sandwich Attack",
+ "category": "risks",
+ "definition": "A sandwich attack occurs when a malicious actor places transactions before and after a victim's trade to profit from the price movement caused by the victim's transaction.",
+ "short_definition": "MEV attack that surrounds victim's trade with buy/sell orders",
+ "example": "An attacker sees your large buy order, front-runs with their own buy to push price up, then back-runs with a sell order after yours executes.",
+ "related_terms": [
+ "mev",
+ "front-running",
+ "slippage",
+ "mempool"
+ ],
+ "risks": [
+ "Increased trading costs",
+ "Unfair extraction",
+ "Poor execution"
+ ],
+ "tags": [
+ "mev",
+ "attack",
+ "front-running",
+ "exploitation"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "front-running",
+ "term": "Front-running",
+ "full_term": "Transaction Front-running",
+ "category": "risks",
+ "definition": "Front-running occurs when someone observes a pending transaction and places their own transaction with higher gas fees to execute first, profiting from the predictable price movement.",
+ "short_definition": "Executing ahead of another transaction by paying higher gas fees",
+ "example": "A bot sees your DEX trade in the mempool and submits the same trade with higher gas fees to execute first and profit from the price movement.",
+ "related_terms": [
+ "mev",
+ "mempool",
+ "gas",
+ "sandwich-attack"
+ ],
+ "risks": [
+ "Lost profits",
+ "Higher costs",
+ "Unfair advantages"
+ ],
+ "tags": [
+ "mev",
+ "front-running",
+ "mempool",
+ "gas"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "twap",
+ "term": "TWAP",
+ "full_term": "Time-Weighted Average Price",
+ "category": "technical",
+ "definition": "TWAP is the average price of an asset calculated over a specific time period, weighted by time. It's used by oracles and protocols to provide more stable, manipulation-resistant price feeds.",
+ "short_definition": "Average asset price calculated over time to resist manipulation",
+ "example": "Uniswap V2 provides TWAP oracles that average prices over the last hour to prevent flash loan price manipulation attacks.",
+ "related_terms": [
+ "oracle",
+ "price-feeds",
+ "manipulation",
+ "average"
+ ],
+ "risks": [
+ "Lagging prices",
+ "Still manipulable over time",
+ "Complexity"
+ ],
+ "tags": [
+ "oracle",
+ "twap",
+ "price",
+ "average"
+ ],
+ "related_articles": [
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "TWAP used in expansion/contraction decisions."
+ }
+ ]
+ },
+ {
+ "id": "concentrated-liquidity",
+ "term": "Concentrated Liquidity",
+ "full_term": "Concentrated Liquidity",
+ "category": "technical",
+ "definition": "Concentrated liquidity allows liquidity providers to allocate capital within custom price ranges rather than across the entire price curve, increasing capital efficiency and potential returns.",
+ "short_definition": "Providing liquidity within specific price ranges for higher efficiency",
+ "example": "In Uniswap V3, you can provide USDC/USDT liquidity only between $0.99-$1.01, earning more fees per dollar with concentrated exposure.",
+ "related_terms": [
+ "uniswap-v3",
+ "capital-efficiency",
+ "liquidity-providing",
+ "price-range"
+ ],
+ "risks": [
+ "Out-of-range positions",
+ "Impermanent loss",
+ "Active management needed"
+ ],
+ "tags": [
+ "liquidity",
+ "concentrated",
+ "efficiency",
+ "uniswap"
+ ],
+ "related_articles": [
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Deep dive into concentrated liquidity: Maverick modes vs UNIv3."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Historical progression from UNIv2 to StableSwap to UNIv3 concentrated liquidity."
+ }
+ ]
+ },
+ {
+ "id": "order-book",
+ "term": "Order Book",
+ "full_term": "Order Book",
+ "category": "technical",
+ "definition": "An order book is a real-time list of buy and sell orders for an asset, organized by price level. It shows market depth and liquidity, common in centralized exchanges but rare in DeFi AMMs.",
+ "short_definition": "Real-time list of buy and sell orders organized by price",
+ "example": "On Coinbase Pro, the ETH/USD order book shows all pending buy orders below current price and sell orders above current price.",
+ "related_terms": [
+ "market-depth",
+ "bid-ask",
+ "centralized-exchange",
+ "amm"
+ ],
+ "risks": [
+ "Order manipulation",
+ "Low liquidity gaps",
+ "Centralization"
+ ],
+ "tags": [
+ "trading",
+ "order-book",
+ "liquidity",
+ "centralized"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "market-depth",
+ "term": "Market Depth",
+ "full_term": "Market Depth",
+ "category": "technical",
+ "definition": "Market depth refers to the market's ability to sustain large orders without significantly impacting price. Deep markets have high liquidity and low price impact for large trades.",
+ "short_definition": "Market's ability to handle large orders without significant price impact",
+ "example": "ETH/USDC has deep market depth on major exchanges, so trading $1M causes minimal price impact, unlike small altcoin pairs.",
+ "related_terms": [
+ "liquidity",
+ "price-impact",
+ "slippage",
+ "volume"
+ ],
+ "risks": [
+ "Shallow markets",
+ "High slippage",
+ "Liquidity fragmentation"
+ ],
+ "tags": [
+ "trading",
+ "depth",
+ "liquidity",
+ "impact"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "bid-ask-spread",
+ "term": "Bid-Ask Spread",
+ "full_term": "Bid-Ask Spread",
+ "category": "technical",
+ "definition": "The bid-ask spread is the difference between the highest price buyers are willing to pay (bid) and the lowest price sellers are willing to accept (ask). Tighter spreads indicate better liquidity.",
+ "short_definition": "Difference between highest buy price and lowest sell price",
+ "example": "If ETH has a $1999 bid and $2001 ask, the spread is $2. AMMs don't have traditional spreads but equivalent concepts exist.",
+ "related_terms": [
+ "order-book",
+ "market-maker",
+ "liquidity",
+ "trading-fees"
+ ],
+ "risks": [
+ "Wide spreads increase costs",
+ "Low liquidity",
+ "Market inefficiency"
+ ],
+ "tags": [
+ "trading",
+ "spread",
+ "bid",
+ "ask"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "volume",
+ "term": "Volume",
+ "full_term": "Trading Volume",
+ "category": "technical",
+ "definition": "Trading volume is the total amount of an asset traded over a specific period. High volume indicates active trading and often better liquidity and price discovery.",
+ "short_definition": "Total amount of an asset traded in a given period",
+ "example": "If $100 million worth of ETH trades in 24 hours across all exchanges, that's the daily trading volume for ETH.",
+ "related_terms": [
+ "liquidity",
+ "market-activity",
+ "price-discovery",
+ "turnover"
+ ],
+ "risks": [
+ "Low volume illiquidity",
+ "Wash trading",
+ "Manipulation"
+ ],
+ "tags": [
+ "trading",
+ "volume",
+ "activity",
+ "liquidity"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "limit-order",
+ "term": "Limit Order",
+ "full_term": "Limit Order",
+ "category": "technical",
+ "definition": "A limit order is an instruction to buy or sell an asset at a specific price or better. It only executes when the market reaches the specified price level.",
+ "short_definition": "Order to trade at a specific price or better",
+ "example": "A limit buy order for ETH at $1950 will only execute if ETH drops to $1950 or below.",
+ "related_terms": [
+ "market-order",
+ "order-book",
+ "execution",
+ "price-level"
+ ],
+ "risks": [
+ "No execution guarantee",
+ "Partial fills",
+ "Price gaps"
+ ],
+ "tags": [
+ "trading",
+ "orders",
+ "limit",
+ "execution"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "market-order",
+ "term": "Market Order",
+ "full_term": "Market Order",
+ "category": "technical",
+ "definition": "A market order is an instruction to buy or sell immediately at the best available current price. It guarantees execution but not the exact price.",
+ "short_definition": "Order to trade immediately at current market price",
+ "example": "A market buy order for 1 ETH will purchase at whatever price sellers are currently offering, regardless of the exact amount.",
+ "related_terms": [
+ "limit-order",
+ "slippage",
+ "execution",
+ "current-price"
+ ],
+ "risks": [
+ "Price uncertainty",
+ "Slippage",
+ "Poor execution during volatility"
+ ],
+ "tags": [
+ "trading",
+ "orders",
+ "market",
+ "immediate"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "stop-loss",
+ "term": "Stop Loss",
+ "full_term": "Stop Loss Order",
+ "category": "strategies",
+ "definition": "A stop loss is an order that automatically sells an asset when its price falls to a predetermined level, limiting potential losses on a position.",
+ "short_definition": "Automatic sell order triggered when price falls to set level",
+ "example": "If you buy ETH at $2000 and set a stop loss at $1800, your position automatically sells if ETH drops to $1800.",
+ "related_terms": [
+ "risk-management",
+ "automated-trading",
+ "loss-limitation",
+ "trigger-price"
+ ],
+ "risks": [
+ "False triggers",
+ "Gap downs",
+ "Stop hunting"
+ ],
+ "tags": [
+ "trading",
+ "stop-loss",
+ "risk",
+ "automation"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "take-profit",
+ "term": "Take Profit",
+ "full_term": "Take Profit Order",
+ "category": "strategies",
+ "definition": "A take profit order automatically sells an asset when its price rises to a predetermined level, securing gains on a profitable position.",
+ "short_definition": "Automatic sell order triggered when price rises to target level",
+ "example": "If you buy ETH at $2000 and set take profit at $2200, your position automatically sells when ETH reaches $2200.",
+ "related_terms": [
+ "profit-taking",
+ "target-price",
+ "automated-trading",
+ "exit-strategy"
+ ],
+ "risks": [
+ "Missing further gains",
+ "Premature exit",
+ "Execution delays"
+ ],
+ "tags": [
+ "trading",
+ "take-profit",
+ "gains",
+ "automation"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "dca",
+ "term": "DCA",
+ "full_term": "Dollar Cost Averaging",
+ "category": "strategies",
+ "definition": "Dollar cost averaging is an investment strategy of regularly purchasing fixed dollar amounts of an asset regardless of price, reducing the impact of volatility over time.",
+ "short_definition": "Regular fixed-dollar purchases regardless of price to reduce volatility impact",
+ "example": "Buying $100 worth of ETH every week regardless of price, accumulating more tokens when cheap and fewer when expensive.",
+ "related_terms": [
+ "cost-basis",
+ "volatility",
+ "accumulation",
+ "systematic-investing"
+ ],
+ "risks": [
+ "Missing lump sum opportunities",
+ "Prolonged bear markets",
+ "Transaction costs"
+ ],
+ "tags": [
+ "strategy",
+ "dca",
+ "averaging",
+ "systematic"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "audit",
+ "term": "Audit",
+ "full_term": "Smart Contract Audit",
+ "category": "risks",
+ "definition": "An audit is a thorough security review of smart contract code by external experts to identify vulnerabilities, bugs, and potential attack vectors before deployment or after updates.",
+ "short_definition": "Security review of smart contract code to identify vulnerabilities",
+ "example": "Before launching, Uniswap V3 underwent multiple audits by firms like Trail of Bits and Consensys Diligence to ensure code security.",
+ "related_terms": [
+ "security",
+ "vulnerabilities",
+ "smart-contract",
+ "code-review"
+ ],
+ "risks": [
+ "Audit limitations",
+ "Time-based vulnerabilities",
+ "False security confidence"
+ ],
+ "tags": [
+ "security",
+ "audit",
+ "smart-contracts",
+ "review"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "rug-pull",
+ "term": "Rug Pull",
+ "full_term": "Rug Pull Scam",
+ "category": "risks",
+ "definition": "A rug pull occurs when developers abandon a project and run away with investors' funds, often by removing liquidity from DEXs or exploiting backdoors in smart contracts.",
+ "short_definition": "Scam where developers abandon project and steal investor funds",
+ "example": "A new DeFi token launches, attracts millions in liquidity, then developers remove all liquidity and disappear, leaving investors with worthless tokens.",
+ "related_terms": [
+ "exit-scam",
+ "honeypot",
+ "liquidity-removal",
+ "fraud"
+ ],
+ "risks": [
+ "Total loss of funds",
+ "No legal recourse",
+ "Project abandonment"
+ ],
+ "tags": [
+ "scam",
+ "rug-pull",
+ "fraud",
+ "exit"
+ ],
+ "related_articles": [
+ {
+ "title": "The Hitchhiker's Guide to Crypto Bullshit",
+ "url": "/crypto-hitchhiker-guide/",
+ "description": "How to spot shitcoins/scams."
+ }
+ ]
+ },
+ {
+ "id": "exit-scam",
+ "term": "Exit Scam",
+ "full_term": "Exit Scam",
+ "category": "risks",
+ "definition": "An exit scam is when project founders disappear with investors' money after raising funds, either through ICOs, presales, or by draining protocol treasuries.",
+ "short_definition": "Founders disappearing with investor money after fundraising",
+ "example": "A project raises $10M through token sales, then founders delete social media accounts and transfer all funds to personal wallets.",
+ "related_terms": [
+ "rug-pull",
+ "fraud",
+ "abandoned-project",
+ "theft"
+ ],
+ "risks": [
+ "Complete fund loss",
+ "No recovery options",
+ "Damaged ecosystem trust"
+ ],
+ "tags": [
+ "scam",
+ "exit",
+ "fraud",
+ "theft"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "honeypot",
+ "term": "Honeypot",
+ "full_term": "Honeypot Contract",
+ "category": "risks",
+ "definition": "A honeypot is a malicious smart contract designed to trap users' funds. It appears to allow profitable interactions but contains hidden mechanisms preventing fund withdrawal.",
+ "short_definition": "Malicious contract that traps user funds with hidden withdrawal restrictions",
+ "example": "A token allows you to buy but has hidden code preventing sells, or a contract appears profitable but reverts all withdrawal attempts.",
+ "related_terms": [
+ "scam",
+ "malicious-contract",
+ "trapped-funds",
+ "deception"
+ ],
+ "risks": [
+ "Permanent fund loss",
+ "Hidden restrictions",
+ "Deceptive mechanics"
+ ],
+ "tags": [
+ "scam",
+ "honeypot",
+ "trap",
+ "malicious"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "exploit",
+ "term": "Exploit",
+ "full_term": "Smart Contract Exploit",
+ "category": "risks",
+ "definition": "An exploit is an attack that takes advantage of vulnerabilities in smart contracts or protocols to steal funds, manipulate prices, or disrupt operations.",
+ "short_definition": "Attack exploiting smart contract vulnerabilities to steal funds or cause damage",
+ "example": "The 2022 Wormhole exploit used a signature verification bug to mint 120,000 ETH illegitimately, draining the bridge's reserves.",
+ "related_terms": [
+ "hack",
+ "vulnerability",
+ "attack",
+ "security-breach"
+ ],
+ "risks": [
+ "Fund loss",
+ "Protocol damage",
+ "Market disruption"
+ ],
+ "tags": [
+ "exploit",
+ "hack",
+ "vulnerability",
+ "attack"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "bug-bounty",
+ "term": "Bug Bounty",
+ "full_term": "Bug Bounty Program",
+ "category": "risks",
+ "definition": "Bug bounty programs reward security researchers for finding and responsibly disclosing vulnerabilities in protocols before they can be exploited maliciously.",
+ "short_definition": "Reward program for finding and reporting security vulnerabilities",
+ "example": "Immunefi hosts bug bounties where researchers can earn up to $1M+ for finding critical vulnerabilities in major DeFi protocols.",
+ "related_terms": [
+ "security",
+ "vulnerability",
+ "white-hat",
+ "responsible-disclosure"
+ ],
+ "risks": [
+ "Incomplete coverage",
+ "Delayed fixes",
+ "Public disclosure timing"
+ ],
+ "tags": [
+ "security",
+ "bounty",
+ "vulnerability",
+ "reward"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "white-hat",
+ "term": "White Hat",
+ "full_term": "White Hat Hacker",
+ "category": "risks",
+ "definition": "White hat hackers are ethical security researchers who identify vulnerabilities in protocols and report them responsibly to help improve security rather than exploit them.",
+ "short_definition": "Ethical hacker who finds vulnerabilities to improve security",
+ "example": "A white hat discovers a critical bug in a lending protocol and reports it privately to the team, potentially saving millions in user funds.",
+ "related_terms": [
+ "bug-bounty",
+ "security-researcher",
+ "ethical-hacking",
+ "responsible-disclosure"
+ ],
+ "risks": [
+ "Misunderstood intentions",
+ "Legal complications",
+ "Insufficient rewards"
+ ],
+ "tags": [
+ "security",
+ "ethical",
+ "hacker",
+ "researcher"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "flash-loan-attack",
+ "term": "Flash Loan Attack",
+ "full_term": "Flash Loan Attack",
+ "category": "risks",
+ "definition": "Flash loan attacks use uncollateralized loans to manipulate DeFi protocols, often involving price manipulation, arbitrage exploitation, or governance attacks within a single transaction.",
+ "short_definition": "Attack using flash loans to manipulate protocols for profit",
+ "example": "An attacker uses flash loans to manipulate an oracle price, borrow against inflated collateral, then repay the flash loan while keeping the stolen funds.",
+ "related_terms": [
+ "flash-loan",
+ "price-manipulation",
+ "oracle-attack",
+ "arbitrage"
+ ],
+ "risks": [
+ "Protocol drainage",
+ "Market manipulation",
+ "Cascading failures"
+ ],
+ "tags": [
+ "attack",
+ "flash-loan",
+ "manipulation",
+ "exploit"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "slashing",
+ "term": "Slashing",
+ "full_term": "Validator Slashing",
+ "category": "risks",
+ "definition": "Slashing is a penalty mechanism in Proof of Stake networks where validators lose part of their staked tokens for malicious behavior, downtime, or protocol violations.",
+ "short_definition": "Penalty where staked tokens are destroyed for validator misbehavior",
+ "example": "An Ethereum validator that goes offline for extended periods or signs conflicting blocks can have part of their 32 ETH stake slashed.",
+ "related_terms": [
+ "validator",
+ "staking",
+ "penalty",
+ "proof-of-stake"
+ ],
+ "risks": [
+ "Loss of staked funds",
+ "Reputation damage",
+ "Operational requirements"
+ ],
+ "tags": [
+ "staking",
+ "slashing",
+ "penalty",
+ "validator"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "phishing",
+ "term": "Phishing",
+ "full_term": "Cryptocurrency Phishing",
+ "category": "risks",
+ "definition": "Phishing attacks trick users into revealing private keys, seed phrases, or approving malicious transactions through fake websites, emails, or social media messages.",
+ "short_definition": "Deceptive attacks to steal private keys or trick users into malicious transactions",
+ "example": "A fake Uniswap website looks identical to the real one but steals your wallet connection details when you try to trade.",
+ "related_terms": [
+ "social-engineering",
+ "fake-website",
+ "private-keys",
+ "wallet-security"
+ ],
+ "risks": [
+ "Wallet drainage",
+ "Identity theft",
+ "Unauthorized transactions"
+ ],
+ "tags": [
+ "phishing",
+ "scam",
+ "social-engineering",
+ "security"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "orderbook",
+ "term": "Order Book",
+ "full_term": "Order Book",
+ "category": "trading",
+ "definition": "An order book is a real-time electronic list of buy and sell orders for an asset, organized by price level. It shows market depth and available liquidity at different price points.",
+ "short_definition": "Real-time list of buy and sell orders organized by price levels",
+ "example": "On a centralized exchange like Coinbase, the ETH/USD order book shows all pending buy orders below current price and sell orders above.",
+ "related_terms": [
+ "market-depth",
+ "bid-ask-spread",
+ "liquidity",
+ "centralized-exchange"
+ ],
+ "risks": [
+ "Order manipulation",
+ "Liquidity gaps",
+ "Centralized control"
+ ],
+ "tags": [
+ "trading",
+ "orderbook",
+ "liquidity",
+ "centralized"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "liquidity-provider",
+ "term": "Liquidity Provider",
+ "full_term": "Liquidity Provider (LP)",
+ "category": "trading",
+ "definition": "A liquidity provider supplies assets to trading venues to facilitate trading. In DeFi, LPs deposit token pairs into AMM pools to earn trading fees and rewards.",
+ "short_definition": "Entity that supplies assets to facilitate trading and earn fees",
+ "example": "You become an LP by depositing equal values of ETH and USDC into a Uniswap pool, earning 0.3% of all trading fees.",
+ "related_terms": [
+ "liquidity-pool",
+ "amm",
+ "trading-fees",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Impermanent loss",
+ "Smart contract risk",
+ "Fee rate changes"
+ ],
+ "tags": [
+ "trading",
+ "liquidity",
+ "provider",
+ "fees"
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "LP fee distribution models across DEXes."
+ },
+ {
+ "title": "Subtles nuances with great consequences: a cross analysis of Curve and Velodrome",
+ "url": "/crv-vs-velo/",
+ "description": "LP incentivization comparison."
+ }
+ ]
+ },
+ {
+ "id": "swap",
+ "term": "Swap",
+ "full_term": "Token Swap",
+ "category": "trading",
+ "definition": "A swap is the direct exchange of one cryptocurrency for another, typically executed through AMMs or DEX aggregators without requiring order books or counterparties.",
+ "short_definition": "Direct exchange of one cryptocurrency for another",
+ "example": "Swapping 1 ETH for 2,000 USDC on Uniswap using the protocol's automated market maker.",
+ "related_terms": [
+ "amm",
+ "dex",
+ "slippage",
+ "trading-fees"
+ ],
+ "risks": [
+ "Slippage",
+ "Failed transactions",
+ "MEV extraction"
+ ],
+ "tags": [
+ "trading",
+ "swap",
+ "exchange",
+ "amm"
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Dedicated article on token swapping."
+ }
+ ]
+ },
+ {
+ "id": "dex",
+ "term": "DEX",
+ "full_term": "Decentralized Exchange",
+ "category": "trading",
+ "definition": "A decentralized exchange operates without central authority, allowing users to trade cryptocurrencies directly from their wallets through smart contracts and AMMs.",
+ "short_definition": "Exchange operating without central authority using smart contracts",
+ "example": "Uniswap and SushiSwap are popular DEXs where you can trade tokens directly from your wallet without creating accounts.",
+ "related_terms": [
+ "amm",
+ "smart-contract",
+ "liquidity-pool",
+ "permissionless"
+ ],
+ "risks": [
+ "Smart contract bugs",
+ "Lower liquidity",
+ "Complex user experience"
+ ],
+ "tags": [
+ "trading",
+ "dex",
+ "decentralized",
+ "smart-contract"
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "Core article on DEX models and tokenomics."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "Velodrome/Solidly DEX model analysis."
+ },
+ {
+ "title": "Subtles nuances with great consequences: a cross analysis of Curve and Velodrome",
+ "url": "/crv-vs-velo/",
+ "description": "Cross-analysis of two leading DEX models."
+ }
+ ]
+ },
+ {
+ "id": "cex",
+ "term": "CEX",
+ "full_term": "Centralized Exchange",
+ "category": "trading",
+ "definition": "A centralized exchange is operated by a company that controls user funds and facilitates trading through traditional order books, requiring users to deposit funds and create accounts.",
+ "short_definition": "Company-operated exchange controlling user funds with order books",
+ "example": "Binance, Coinbase, and Kraken are major CEXs where you deposit funds to trade with better liquidity and user experience.",
+ "related_terms": [
+ "orderbook",
+ "custody",
+ "kyc",
+ "liquidity"
+ ],
+ "risks": [
+ "Counterparty risk",
+ "Regulatory risk",
+ "Account freezing"
+ ],
+ "tags": [
+ "trading",
+ "cex",
+ "centralized",
+ "orderbook"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "routing",
+ "term": "Routing",
+ "full_term": "Trade Routing",
+ "category": "trading",
+ "definition": "Routing is the process of finding the most efficient path for a trade across multiple liquidity sources to minimize costs and slippage, often used by DEX aggregators.",
+ "short_definition": "Finding optimal trading paths across multiple liquidity sources",
+ "example": "1inch routes your ETH-to-USDC trade through multiple DEXs and pools to get the best possible price.",
+ "related_terms": [
+ "dex-aggregator",
+ "slippage",
+ "arbitrage",
+ "optimization"
+ ],
+ "risks": [
+ "Complex execution",
+ "Higher gas costs",
+ "Routing failures"
+ ],
+ "tags": [
+ "trading",
+ "routing",
+ "optimization",
+ "aggregator"
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Trade routing through multiple DEXes."
+ }
+ ]
+ },
+ {
+ "id": "constant-product",
+ "term": "Constant Product",
+ "full_term": "Constant Product Formula",
+ "category": "trading",
+ "definition": "The constant product formula (x*y=k) is the mathematical model used by AMMs like Uniswap to automatically set prices based on token ratios in liquidity pools.",
+ "short_definition": "Mathematical formula (x*y=k) used by AMMs for automatic pricing",
+ "example": "In a ETH/USDC pool, if you buy ETH, the ETH amount decreases and USDC increases, maintaining the constant product while raising ETH's price.",
+ "related_terms": [
+ "amm",
+ "uniswap",
+ "pricing",
+ "liquidity-pool"
+ ],
+ "risks": [
+ "Price impact",
+ "Arbitrage opportunities",
+ "Impermanent loss"
+ ],
+ "tags": [
+ "trading",
+ "amm",
+ "formula",
+ "pricing"
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "Explains x*y=k bonding curves, their strengths and slippage limitations."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Compares x*y=k to stableswap with liquidity distribution diagrams."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-aggregation",
+ "term": "Liquidity Aggregation",
+ "full_term": "Liquidity Aggregation",
+ "category": "trading",
+ "definition": "Liquidity aggregation combines liquidity from multiple sources (DEXs, CEXs, pools) to provide better prices, reduce slippage, and improve trading execution for users.",
+ "short_definition": "Combining liquidity from multiple sources for better trading execution",
+ "example": "Aggregators like 1inch and Paraswap combine liquidity from Uniswap, SushiSwap, Balancer, and other DEXs for optimal trades.",
+ "related_terms": [
+ "dex-aggregator",
+ "routing",
+ "slippage",
+ "optimization"
+ ],
+ "risks": [
+ "Complex smart contracts",
+ "Higher gas costs",
+ "Aggregation failures"
+ ],
+ "tags": [
+ "trading",
+ "aggregation",
+ "liquidity",
+ "optimization"
+ ],
+ "related_articles": [
+ {
+ "title": "The Cycle of Aggregation Spins On, Now with Lending",
+ "url": "/lending-aggregation/",
+ "description": "Core article on aggregation cycles."
+ },
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "DEX aggregation in practice."
+ }
+ ]
+ },
+ {
+ "id": "price-oracle",
+ "term": "Price Oracle",
+ "full_term": "Price Oracle",
+ "category": "trading",
+ "definition": "Price oracles provide real-time external price data to smart contracts, enabling DeFi protocols to make decisions based on accurate market prices for lending, derivatives, and other applications.",
+ "short_definition": "Service providing real-time price data to smart contracts",
+ "example": "Chainlink price oracles supply ETH/USD prices to MakerDAO for determining collateral values and liquidation thresholds.",
+ "related_terms": [
+ "chainlink",
+ "price-feeds",
+ "external-data",
+ "smart-contracts"
+ ],
+ "risks": [
+ "Oracle manipulation",
+ "Data lag",
+ "Price feed failures"
+ ],
+ "tags": [
+ "trading",
+ "oracle",
+ "price",
+ "data"
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "ChainLink oracle risk analysis."
+ },
+ {
+ "title": "Assessing risk in decentralized finance: a handbook for money markets",
+ "url": "/money-markets-risk/",
+ "description": "Oracle dimension in risk assessment."
+ }
+ ]
+ },
+ {
+ "id": "leverage",
+ "term": "Leverage",
+ "full_term": "Financial Leverage",
+ "category": "strategies",
+ "definition": "Leverage allows traders to control larger positions than their capital would normally allow by borrowing funds. In DeFi, leverage amplifies both potential gains and losses through borrowed capital.",
+ "short_definition": "Using borrowed funds to amplify trading position size and potential returns",
+ "example": "With 3x leverage, you can control $3000 worth of ETH with only $1000 of your own capital, amplifying both gains and losses by 3x.",
+ "related_terms": [
+ "margin-trading",
+ "liquidation",
+ "collateral",
+ "borrowing"
+ ],
+ "risks": [
+ "Amplified losses",
+ "Liquidation risk",
+ "Interest costs",
+ "Market volatility"
+ ],
+ "tags": [
+ "leverage",
+ "trading",
+ "borrowing",
+ "amplification"
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Practical guide to leveraging ETH via Maker."
+ },
+ {
+ "title": "Leverage Like a Sir: Polynomial Gains, No Liquidation Pains",
+ "url": "/leverage-sir/",
+ "description": "Novel leverage protocol with no liquidation."
+ },
+ {
+ "title": "🌽 Defi money markets cookbook",
+ "url": "/money-market-recipes/",
+ "description": "Leveraged strategies using money markets."
+ }
+ ]
+ },
+ {
+ "id": "margin-trading",
+ "term": "Margin Trading",
+ "full_term": "Margin Trading",
+ "category": "strategies",
+ "definition": "Margin trading involves borrowing funds to trade larger positions than your account balance allows. Traders post collateral and can be liquidated if positions move against them significantly.",
+ "short_definition": "Trading with borrowed funds using collateral to control larger positions",
+ "example": "You deposit $1000 ETH as collateral and borrow $2000 USDC to buy more ETH, creating a leveraged long position that can be liquidated if ETH drops.",
+ "related_terms": [
+ "leverage",
+ "collateral",
+ "liquidation",
+ "maintenance-margin"
+ ],
+ "risks": [
+ "Liquidation risk",
+ "Interest payments",
+ "Margin calls",
+ "Enhanced volatility exposure"
+ ],
+ "tags": [
+ "margin",
+ "leverage",
+ "trading",
+ "borrowing"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "delta-neutral",
+ "term": "Delta Neutral",
+ "full_term": "Delta Neutral Strategy",
+ "category": "strategies",
+ "definition": "A delta neutral strategy aims to eliminate directional price risk by balancing long and short positions so that the portfolio's value doesn't change with small price movements in the underlying asset.",
+ "short_definition": "Strategy that eliminates directional price risk through balanced long/short positions",
+ "example": "Providing ETH/USDC liquidity while shorting ETH with perpetual futures to hedge against ETH price movements, earning fees while minimizing price exposure.",
+ "related_terms": [
+ "hedging",
+ "liquidity-providing",
+ "perpetuals",
+ "market-neutral"
+ ],
+ "risks": [
+ "Imperfect hedging",
+ "Funding costs",
+ "Rebalancing needs",
+ "Basis risk"
+ ],
+ "tags": [
+ "delta-neutral",
+ "hedging",
+ "advanced",
+ "market-neutral"
+ ],
+ "related_articles": [
+ {
+ "title": "Why Polaris? The Stablecoin we needed to build",
+ "url": "/why-polaris/",
+ "description": "Explains Ethena's delta-neutral strategy for USDe yield."
+ }
+ ]
+ },
+ {
+ "id": "perpetuals",
+ "term": "Perpetuals",
+ "full_term": "Perpetual Futures",
+ "category": "strategies",
+ "definition": "Perpetual futures are derivative contracts that track an underlying asset's price without an expiration date. They use funding rates to keep prices aligned with spot markets.",
+ "short_definition": "Derivative contracts that track asset prices without expiration dates",
+ "example": "Trading ETH perpetuals on dYdX allows you to go long or short ETH with leverage, paying or receiving funding rates based on market sentiment.",
+ "related_terms": [
+ "futures",
+ "funding-rate",
+ "derivatives",
+ "leverage"
+ ],
+ "risks": [
+ "Funding rate costs",
+ "Liquidation risk",
+ "Basis risk",
+ "Counterparty risk"
+ ],
+ "tags": [
+ "perpetuals",
+ "derivatives",
+ "futures",
+ "leverage"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "funding-rate",
+ "term": "Funding Rate",
+ "full_term": "Perpetual Funding Rate",
+ "category": "strategies",
+ "definition": "The funding rate is a periodic payment between long and short traders in perpetual futures markets to keep the contract price aligned with the spot price of the underlying asset.",
+ "short_definition": "Periodic payment between perpetual futures traders to maintain price alignment",
+ "example": "If ETH perpetuals trade above spot price, long positions pay short positions a funding fee every 8 hours to incentivize price convergence.",
+ "related_terms": [
+ "perpetuals",
+ "basis",
+ "arbitrage",
+ "price-convergence"
+ ],
+ "risks": [
+ "Funding costs",
+ "Rate volatility",
+ "Timing risk",
+ "Strategy impact"
+ ],
+ "tags": [
+ "funding-rate",
+ "perpetuals",
+ "derivatives",
+ "payments"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "derivatives",
+ "term": "Derivatives",
+ "full_term": "Financial Derivatives",
+ "category": "strategies",
+ "definition": "Derivatives are financial contracts whose value derives from underlying assets like cryptocurrencies, stocks, or commodities. In DeFi, they enable advanced trading strategies and risk management.",
+ "short_definition": "Financial contracts deriving value from underlying assets",
+ "example": "Options on ETH, perpetual futures, and synthetic assets are all derivatives that let you trade price exposure without owning the underlying ETH.",
+ "related_terms": [
+ "options",
+ "futures",
+ "synthetic-assets",
+ "leverage"
+ ],
+ "risks": [
+ "Complexity",
+ "Counterparty risk",
+ "Liquidity risk",
+ "Leverage amplification"
+ ],
+ "tags": [
+ "derivatives",
+ "advanced",
+ "financial-instruments",
+ "trading"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "options",
+ "term": "Options",
+ "full_term": "Options Trading",
+ "category": "strategies",
+ "definition": "Options are derivative contracts that give the holder the right (but not obligation) to buy or sell an asset at a specific price before expiration. They're used for hedging, speculation, and income generation.",
+ "short_definition": "Contracts giving the right to buy/sell assets at specific prices before expiration",
+ "example": "Buying ETH call options for $2500 strike gives you the right to buy ETH at $2500 regardless of market price, while selling covered calls generates income.",
+ "related_terms": [
+ "strike-price",
+ "premium",
+ "expiration",
+ "volatility"
+ ],
+ "risks": [
+ "Time decay",
+ "Volatility risk",
+ "Premium loss",
+ "Assignment risk"
+ ],
+ "tags": [
+ "options",
+ "derivatives",
+ "hedging",
+ "speculation"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "carry-trade",
+ "term": "Carry Trade",
+ "full_term": "Cryptocurrency Carry Trade",
+ "category": "strategies",
+ "definition": "A carry trade involves borrowing low-yield assets to invest in higher-yield assets, profiting from the interest rate differential while exposed to exchange rate risk.",
+ "short_definition": "Borrowing low-yield assets to invest in higher-yield ones for interest differential profit",
+ "example": "Borrowing stablecoins at 3% APR to lend other tokens at 8% APR, earning 5% spread while exposed to the borrowed token's price risk.",
+ "related_terms": [
+ "interest-rate-differential",
+ "borrowing",
+ "lending",
+ "currency-risk"
+ ],
+ "risks": [
+ "Currency/token price risk",
+ "Interest rate changes",
+ "Liquidity risk",
+ "Margin calls"
+ ],
+ "tags": [
+ "carry-trade",
+ "interest",
+ "arbitrage",
+ "yield"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "basis-trading",
+ "term": "Basis Trading",
+ "full_term": "Basis Trading",
+ "category": "strategies",
+ "definition": "Basis trading exploits price differences between spot and futures markets by simultaneously buying one and selling the other, profiting as the basis (price difference) converges to zero at expiration.",
+ "short_definition": "Arbitrage strategy exploiting price differences between spot and futures markets",
+ "example": "If ETH futures trade at $2050 while spot is $2000, buy spot ETH and short futures, profiting $50 per ETH when they converge at expiration.",
+ "related_terms": [
+ "futures",
+ "arbitrage",
+ "convergence",
+ "spread-trading"
+ ],
+ "risks": [
+ "Basis risk",
+ "Funding costs",
+ "Liquidity risk",
+ "Execution timing"
+ ],
+ "tags": [
+ "basis-trading",
+ "arbitrage",
+ "futures",
+ "spread"
+ ],
+ "related_articles": [
+ {
+ "title": "Why Polaris? The Stablecoin we needed to build",
+ "url": "/why-polaris/",
+ "description": "Explains basis trading as Ethena/USDe's yield source and its limitations."
+ }
+ ]
+ },
+ {
+ "id": "grid-trading",
+ "term": "Grid Trading",
+ "full_term": "Grid Trading Strategy",
+ "category": "strategies",
+ "definition": "Grid trading is an automated strategy that places multiple buy and sell orders at regular price intervals, profiting from market volatility by buying low and selling high within a defined range.",
+ "short_definition": "Automated strategy placing multiple orders at price intervals to profit from volatility",
+ "example": "Setting buy orders every $50 below ETH's current price and sell orders every $50 above, automatically trading the range as price oscillates.",
+ "related_terms": [
+ "range-trading",
+ "automated-trading",
+ "volatility",
+ "rebalancing"
+ ],
+ "risks": [
+ "Trend risk",
+ "Range breakout",
+ "High transaction costs",
+ "Capital efficiency"
+ ],
+ "tags": [
+ "grid-trading",
+ "automated",
+ "volatility",
+ "range"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "proposal",
+ "term": "Proposal",
+ "full_term": "Governance Proposal",
+ "category": "governance",
+ "definition": "A governance proposal is a formal suggestion submitted to a DAO or protocol community for voting. Proposals can include parameter changes, protocol upgrades, treasury spending, or strategic decisions.",
+ "short_definition": "Formal suggestion submitted to DAO community for voting on protocol changes",
+ "example": "A proposal to change Uniswap's trading fee from 0.3% to 0.25% would need to be voted on by UNI token holders before implementation.",
+ "related_terms": [
+ "dao",
+ "voting",
+ "governance-token",
+ "quorum"
+ ],
+ "risks": [
+ "Poor decision making",
+ "Low participation",
+ "Governance attacks"
+ ],
+ "tags": [
+ "governance",
+ "proposal",
+ "voting",
+ "dao"
+ ],
+ "related_articles": [
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Analysis of governance proposals and their dysfunction."
+ },
+ {
+ "title": "Calling for your support to keep Aave's governance community-driven",
+ "url": "/aave-governance-program/",
+ "description": "Aave proposal process."
+ }
+ ]
+ },
+ {
+ "id": "quorum",
+ "term": "Quorum",
+ "full_term": "Voting Quorum",
+ "category": "governance",
+ "definition": "Quorum is the minimum number of votes or percentage of total voting power required for a governance proposal to be considered valid and binding.",
+ "short_definition": "Minimum voting participation required for proposal validity",
+ "example": "If a DAO requires 10% quorum and has 100M tokens, at least 10M tokens must participate in voting for the proposal to pass.",
+ "related_terms": [
+ "proposal",
+ "voting",
+ "governance-token",
+ "participation"
+ ],
+ "risks": [
+ "Low participation",
+ "Governance gridlock",
+ "Minority rule"
+ ],
+ "tags": [
+ "governance",
+ "quorum",
+ "voting",
+ "participation"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "timelock",
+ "term": "Timelock",
+ "full_term": "Governance Timelock",
+ "category": "governance",
+ "definition": "A timelock is a mechanism that delays the execution of approved governance proposals, giving the community time to review and potentially exit before changes take effect.",
+ "short_definition": "Delay mechanism between proposal approval and execution for community review",
+ "example": "Compound uses a 2-day timelock, meaning approved proposals wait 48 hours before execution, allowing users time to withdraw if they disagree.",
+ "related_terms": [
+ "proposal",
+ "governance",
+ "security",
+ "exit-opportunity"
+ ],
+ "risks": [
+ "Delayed responses to urgent issues",
+ "Coordination complexity",
+ "Emergency situations"
+ ],
+ "tags": [
+ "governance",
+ "timelock",
+ "security",
+ "delay"
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Timelock analysis and admin key risks."
+ },
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "CRV timelock: 1-4 year lock for veCRV."
+ }
+ ]
+ },
+ {
+ "id": "vote-escrow",
+ "term": "Vote Escrow",
+ "full_term": "Vote Escrow (veToken)",
+ "category": "governance",
+ "definition": "Vote escrow allows users to lock tokens for extended periods to receive enhanced voting power and rewards. Longer lock periods typically provide more voting weight and benefits.",
+ "short_definition": "Locking tokens for extended periods to gain enhanced voting power and rewards",
+ "example": "Curve's veCRV system lets users lock CRV for up to 4 years, with longer locks providing more voting power and higher rewards from protocol fees.",
+ "related_terms": [
+ "governance-token",
+ "voting-power",
+ "lock-up",
+ "incentive-alignment"
+ ],
+ "risks": [
+ "Lock-up periods",
+ "Opportunity cost",
+ "Token price volatility"
+ ],
+ "tags": [
+ "governance",
+ "vote-escrow",
+ "locking",
+ "voting-power"
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "veCRV model: time-weighted lock, fee share, gauge voting."
+ },
+ {
+ "title": "⚔ CRV wars: understanding the race to accumulate power to influence Curve Finance protocol",
+ "url": "/crv-wars/",
+ "description": "veCRV/vlCVX voting power comparison."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "veNFT evolution of vote-escrow."
+ }
+ ]
+ },
+ {
+ "id": "delegation",
+ "term": "Delegation",
+ "full_term": "Vote Delegation",
+ "category": "governance",
+ "definition": "Delegation allows token holders to assign their voting power to another party (delegate) who votes on their behalf, enabling more informed participation in governance.",
+ "short_definition": "Assigning voting power to another party to vote on your behalf",
+ "example": "If you hold UNI tokens but don't have time to research every proposal, you can delegate your voting power to a trusted community member or organization.",
+ "related_terms": [
+ "voting-power",
+ "governance-token",
+ "representative",
+ "proxy-voting"
+ ],
+ "risks": [
+ "Delegate misalignment",
+ "Centralization of power",
+ "Reduced direct participation"
+ ],
+ "tags": [
+ "governance",
+ "delegation",
+ "voting",
+ "proxy"
+ ],
+ "related_articles": [
+ {
+ "title": "Calling for your support to keep Aave's governance community-driven",
+ "url": "/aave-governance-program/",
+ "description": "Guide to vote delegation in Aave."
+ },
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Discusses delegation and voting power concentration."
+ }
+ ]
+ },
+ {
+ "id": "treasury",
+ "term": "Treasury",
+ "full_term": "DAO Treasury",
+ "category": "governance",
+ "definition": "A treasury is a pool of funds controlled by a DAO or protocol, typically used for development funding, ecosystem growth, partnerships, and community incentives.",
+ "short_definition": "Pool of funds controlled by DAO for development and ecosystem growth",
+ "example": "Uniswap's treasury contains millions in UNI tokens and other assets, used to fund grants, partnerships, and protocol development through governance votes.",
+ "related_terms": [
+ "dao",
+ "governance",
+ "funding",
+ "grants"
+ ],
+ "risks": [
+ "Misallocation of funds",
+ "Governance capture",
+ "Treasury depletion"
+ ],
+ "tags": [
+ "governance",
+ "treasury",
+ "funding",
+ "dao"
+ ],
+ "related_articles": [
+ {
+ "title": "Farewell to the GHO Liquidity Committee",
+ "url": "/farewell-glc/",
+ "description": "Treasury management and liquidity allocation."
+ },
+ {
+ "title": "Introducing my next step: The DeFi Collective",
+ "url": "/defi-collective/",
+ "description": "Nonprofit treasury for DeFi support."
+ }
+ ]
+ },
+ {
+ "id": "snapshot",
+ "term": "Snapshot",
+ "full_term": "Governance Snapshot",
+ "category": "governance",
+ "definition": "A snapshot is a specific block height at which token holdings are recorded for governance voting, preventing users from buying tokens just to vote and then immediately selling.",
+ "short_definition": "Recording token holdings at specific block height for fair governance voting",
+ "example": "A governance vote announces a snapshot at block 15,000,000, meaning only wallets holding tokens at that block can participate, preventing last-minute vote buying.",
+ "related_terms": [
+ "voting",
+ "governance-token",
+ "block-height",
+ "vote-buying"
+ ],
+ "risks": [
+ "Advance notice gaming",
+ "Snapshot timing manipulation",
+ "Exclusion of recent holders"
+ ],
+ "tags": [
+ "governance",
+ "snapshot",
+ "voting",
+ "fairness"
+ ],
+ "related_articles": [
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Snapshot as signaling mechanism in governance."
+ }
+ ]
+ },
+ {
+ "id": "governance-attack",
+ "term": "Governance Attack",
+ "full_term": "Governance Attack",
+ "category": "governance",
+ "definition": "A governance attack occurs when malicious actors acquire enough voting power to pass harmful proposals, potentially draining treasuries, changing protocol parameters, or disrupting operations.",
+ "short_definition": "Malicious actors gaining voting control to pass harmful proposals",
+ "example": "An attacker could buy a large amount of governance tokens, propose to transfer all treasury funds to their address, and vote it through if they have majority control.",
+ "related_terms": [
+ "governance-token",
+ "voting-power",
+ "dao",
+ "hostile-takeover"
+ ],
+ "risks": [
+ "Treasury drainage",
+ "Protocol disruption",
+ "Loss of decentralization"
+ ],
+ "tags": [
+ "governance",
+ "attack",
+ "security",
+ "hostile"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "tvl",
+ "term": "TVL",
+ "full_term": "Total Value Locked",
+ "category": "technical",
+ "definition": "Total Value Locked (TVL) measures the total amount of assets deposited and locked in a DeFi protocol or across the entire DeFi ecosystem. It's a key metric for assessing protocol adoption and security.",
+ "short_definition": "Total amount of assets deposited and locked in DeFi protocols",
+ "example": "If Uniswap has $5 billion TVL, it means $5 billion worth of crypto assets are currently locked in Uniswap's liquidity pools.",
+ "related_terms": [
+ "liquidity",
+ "protocol-metrics",
+ "market-cap",
+ "adoption"
+ ],
+ "risks": [
+ "TVL manipulation",
+ "Capital flight",
+ "Protocol risk concentration"
+ ],
+ "tags": [
+ "tvl",
+ "metrics",
+ "locked",
+ "value"
+ ],
+ "related_articles": [
+ {
+ "title": "The Maurauder's Map of Decentralized Stablecoins",
+ "url": "/stablecoin-marauder-map/",
+ "description": "TVL comparison in stablecoin context."
+ }
+ ]
+ },
+ {
+ "id": "seed-phrase",
+ "term": "Seed Phrase",
+ "full_term": "Seed Phrase (Recovery Phrase)",
+ "category": "technical",
+ "definition": "A seed phrase is a series of 12 or 24 words that can restore access to your cryptocurrency wallet and all associated private keys. It's the master backup for your entire wallet.",
+ "short_definition": "Series of words that can restore access to your cryptocurrency wallet",
+ "example": "A typical seed phrase looks like 'abandon ability able about above absent absorb abstract absurd abuse access accident' - 12 randomly generated words.",
+ "related_terms": [
+ "private-keys",
+ "wallet",
+ "backup",
+ "security"
+ ],
+ "risks": [
+ "Permanent loss if forgotten",
+ "Theft if exposed",
+ "Physical damage to storage"
+ ],
+ "tags": [
+ "security",
+ "wallet",
+ "backup",
+ "recovery"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "private-key",
+ "term": "Private Key",
+ "full_term": "Private Key",
+ "category": "technical",
+ "definition": "A private key is a secret cryptographic key that gives you control over your cryptocurrency. It's used to sign transactions and prove ownership of funds associated with a specific wallet address.",
+ "short_definition": "Secret cryptographic key that controls your cryptocurrency",
+ "example": "Your private key is like a digital signature - it proves you own the funds at your wallet address and allows you to send transactions.",
+ "related_terms": [
+ "seed-phrase",
+ "wallet",
+ "public-key",
+ "address"
+ ],
+ "risks": [
+ "Complete fund loss if stolen",
+ "Irreversible if lost",
+ "No recovery options"
+ ],
+ "tags": [
+ "security",
+ "cryptography",
+ "wallet",
+ "keys"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "wallet",
+ "term": "Wallet",
+ "full_term": "Cryptocurrency Wallet",
+ "category": "technical",
+ "definition": "A cryptocurrency wallet is a software or hardware tool that stores your private keys and allows you to send, receive, and manage your cryptocurrency. It doesn't actually store coins, but provides access to them on the blockchain.",
+ "short_definition": "Tool for storing private keys and managing cryptocurrency",
+ "example": "MetaMask is a popular browser wallet that lets you interact with DeFi protocols, while Ledger is a hardware wallet for secure offline storage.",
+ "related_terms": [
+ "private-key",
+ "seed-phrase",
+ "address",
+ "metamask"
+ ],
+ "risks": [
+ "Loss of access",
+ "Hacking",
+ "User error"
+ ],
+ "tags": [
+ "wallet",
+ "security",
+ "storage",
+ "keys"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "metamask",
+ "term": "MetaMask",
+ "full_term": "MetaMask",
+ "category": "technical",
+ "definition": "MetaMask is a popular browser extension and mobile wallet that allows users to interact with the Ethereum blockchain and DeFi applications. It manages private keys and facilitates transactions with dApps.",
+ "short_definition": "Popular browser wallet for interacting with Ethereum and DeFi",
+ "example": "You can connect MetaMask to Uniswap to swap tokens, or to Aave to lend your assets, all from your browser.",
+ "related_terms": [
+ "wallet",
+ "ethereum",
+ "dapp",
+ "browser-extension"
+ ],
+ "risks": [
+ "Phishing attacks",
+ "Malicious dApps",
+ "Browser vulnerabilities"
+ ],
+ "tags": [
+ "metamask",
+ "wallet",
+ "ethereum",
+ "browser"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "dapp",
+ "term": "dApp",
+ "full_term": "Decentralized Application",
+ "category": "technical",
+ "definition": "A decentralized application (dApp) is an application that runs on a blockchain network rather than centralized servers. dApps use smart contracts for their backend logic and typically have no single controlling authority.",
+ "short_definition": "Application running on blockchain rather than centralized servers",
+ "example": "Uniswap, Aave, and Compound are popular DeFi dApps that run entirely on Ethereum using smart contracts.",
+ "related_terms": [
+ "smart-contract",
+ "ethereum",
+ "decentralization",
+ "blockchain"
+ ],
+ "risks": [
+ "Smart contract bugs",
+ "Frontend attacks",
+ "Governance risks"
+ ],
+ "tags": [
+ "dapp",
+ "decentralized",
+ "application",
+ "blockchain"
+ ],
+ "related_articles": [
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "DeFi dApps as building blocks: PoolTogether, Rarible, Gitcoin."
+ }
+ ]
+ },
+ {
+ "id": "kyc",
+ "term": "KYC",
+ "full_term": "Know Your Customer",
+ "category": "technical",
+ "definition": "Know Your Customer (KYC) is a regulatory process requiring businesses to verify the identity of their clients. In crypto, some centralized platforms require KYC, while DeFi protocols typically operate without it.",
+ "short_definition": "Regulatory process requiring identity verification of customers",
+ "example": "Centralized exchanges like Coinbase require KYC verification before you can trade, but DEXs like Uniswap allow trading without identity verification.",
+ "related_terms": [
+ "aml",
+ "compliance",
+ "regulation",
+ "centralized-exchange"
+ ],
+ "risks": [
+ "Privacy loss",
+ "Data breaches",
+ "Regulatory compliance"
+ ],
+ "tags": [
+ "kyc",
+ "compliance",
+ "identity",
+ "regulation"
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "gauge",
+ "term": "Gauge",
+ "full_term": "Gauge (Voting)",
+ "category": "trading",
+ "definition": "A gauge is a smart contract mechanism used in protocols like Curve and Velodrome that directs token emissions to specific liquidity pools. Token holders (usually veToken holders) vote on gauges to determine how rewards are distributed across pools. Gauge voting is central to the ve(3,3) tokenomics model and is the primary battleground in the so-called 'Curve Wars.'",
+ "short_definition": "Voting mechanism that directs token emissions to specific liquidity pools",
+ "example": "veCRV holders vote on Curve gauges every week to direct CRV emissions to their preferred pools, incentivizing liquidity where it's most needed.",
+ "related_terms": [
+ "vote-escrow",
+ "bribes",
+ "ve-3-3",
+ "liquidity-mining"
+ ],
+ "risks": [
+ "Vote buying via bribes",
+ "Centralization of voting power",
+ "Emission dilution"
+ ],
+ "tags": [
+ "defi",
+ "governance",
+ "emissions",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Why do gauges matter?",
+ "answer": "Gauges determine where token rewards flow. Controlling gauge votes means controlling liquidity incentives, which is why protocols compete aggressively for voting power."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚔ CRV Wars: understanding the race to accumulate power to influence Curve Finance protocol",
+ "url": "/crv-wars/",
+ "description": "The battle for gauge control on Curve Finance."
+ },
+ {
+ "title": "🗡 CRV vs VELO Wars",
+ "url": "/crv-vs-velo/",
+ "description": "Comparing gauge voting on Curve vs Velodrome."
+ },
+ {
+ "title": "🎡 The DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "How gauge voting feeds into DeFi flywheel mechanics."
+ }
+ ]
+ },
+ {
+ "id": "bribes",
+ "term": "Bribes",
+ "full_term": "Bribes / Vote Incentives",
+ "category": "trading",
+ "definition": "Bribes (or vote incentives) are token rewards offered to veToken holders in exchange for directing their gauge votes toward specific liquidity pools. Protocols or projects pay bribes to attract emissions to their pools, creating a secondary market for voting power. Platforms like Votium (for Curve) and dedicated bribe markets on Velodrome facilitate this process.",
+ "short_definition": "Token rewards paid to voters for directing gauge emissions to specific pools",
+ "example": "A new stablecoin project deposits $100k in bribes on Votium to attract veCRV votes toward its pool, ensuring deep liquidity for its token.",
+ "related_terms": [
+ "gauge",
+ "vote-escrow",
+ "ve-3-3",
+ "liquidity-mining"
+ ],
+ "risks": [
+ "Bribe ROI uncertainty",
+ "Mercenary capital",
+ "Governance capture"
+ ],
+ "tags": [
+ "defi",
+ "governance",
+ "incentives",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Are bribes legal/legitimate?",
+ "answer": "In DeFi, 'bribes' are a standard and transparent mechanism. The term is provocative but the practice is simply paying for voting power to direct emissions — fully on-chain and auditable."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚔ CRV Wars: understanding the race to accumulate power to influence Curve Finance protocol",
+ "url": "/crv-wars/",
+ "description": "Bribes as a weapon in the CRV Wars."
+ },
+ {
+ "title": "⚔ CRV Wars on Layer 2",
+ "url": "/crv-wars-l2/",
+ "description": "Bribe dynamics extending to L2 gauge voting."
+ },
+ {
+ "title": "🗡 CRV vs VELO Wars",
+ "url": "/crv-vs-velo/",
+ "description": "Comparing bribe markets on Curve vs Velodrome."
+ }
+ ]
+ },
+ {
+ "id": "capital-efficiency",
+ "term": "Capital Efficiency",
+ "full_term": "Capital Efficiency",
+ "category": "trading",
+ "definition": "Capital efficiency measures how effectively a protocol uses deposited capital to generate returns or facilitate trading. Higher capital efficiency means less capital is needed to achieve the same result. In AMMs, concentrated liquidity (Uniswap v3) and liquidity shaping (Maverick) improve capital efficiency by focusing liquidity where trades actually happen instead of spreading it across all prices.",
+ "short_definition": "How effectively a protocol uses deposited capital to generate results",
+ "example": "Uniswap v3's concentrated liquidity can provide the same trading depth as Uniswap v2 with up to 4000x less capital, dramatically improving capital efficiency.",
+ "related_terms": [
+ "concentrated-liquidity",
+ "liquidity-shaping",
+ "amm",
+ "liquidity-pool"
+ ],
+ "risks": [
+ "Higher impermanent loss with concentration",
+ "Increased complexity",
+ "Active management required"
+ ],
+ "tags": [
+ "defi",
+ "amm",
+ "liquidity",
+ "efficiency"
+ ],
+ "common_questions": [
+ {
+ "question": "Is higher capital efficiency always better?",
+ "answer": "Not necessarily. Higher capital efficiency often comes with increased complexity, active management requirements, and amplified impermanent loss. The trade-off depends on the user's strategy and risk tolerance."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "How Maverick improves capital efficiency through liquidity shaping."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Capital efficiency as a factor in farming strategy selection."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-shaping",
+ "term": "Liquidity Shaping",
+ "full_term": "Liquidity Shaping",
+ "category": "trading",
+ "definition": "Liquidity shaping is an evolution of concentrated liquidity where liquidity providers can define custom distribution patterns for their capital across price ranges. Pioneered by Maverick Protocol, it allows LPs to automatically shift their liquidity as prices move, maintaining optimal capital efficiency without manual rebalancing.",
+ "short_definition": "Custom liquidity distribution patterns that automatically adjust with price movements",
+ "example": "On Maverick, an LP can choose a 'Mode Right' shape that follows ETH's price upward, keeping liquidity concentrated around the current price without manual adjustment.",
+ "related_terms": [
+ "concentrated-liquidity",
+ "capital-efficiency",
+ "amm",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Novel mechanism risk",
+ "Smart contract risk",
+ "Liquidity mode selection complexity"
+ ],
+ "tags": [
+ "defi",
+ "amm",
+ "liquidity",
+ "innovation"
+ ],
+ "common_questions": [
+ {
+ "question": "How is liquidity shaping different from concentrated liquidity?",
+ "answer": "Concentrated liquidity (Uniswap v3) requires manual range selection and rebalancing. Liquidity shaping (Maverick) adds automatic directional movement modes that shift your liquidity with the price."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Deep dive into Maverick's liquidity shaping innovation."
+ }
+ ]
+ },
+ {
+ "id": "composability",
+ "term": "Composability",
+ "full_term": "Composability",
+ "category": "technical",
+ "definition": "Composability is the ability for DeFi protocols to interact and build upon each other seamlessly, often called 'money legos.' Because smart contracts are open and permissionless, any protocol can integrate with any other, creating complex financial products by combining simple building blocks. This is a defining feature of DeFi that traditional finance lacks.",
+ "short_definition": "The ability for DeFi protocols to seamlessly integrate and build upon each other",
+ "example": "A user can deposit ETH into Lido (getting stETH), use stETH as collateral on Aave (borrowing USDC), then provide USDC liquidity on Curve — three protocols composed together.",
+ "related_terms": [
+ "smart-contract",
+ "defi",
+ "flash-loan",
+ "lending"
+ ],
+ "risks": [
+ "Cascading failures across protocols",
+ "Dependency risk",
+ "Complexity risk"
+ ],
+ "tags": [
+ "defi",
+ "technical",
+ "money-legos",
+ "integration"
+ ],
+ "common_questions": [
+ {
+ "question": "Why is composability important?",
+ "answer": "Composability allows developers to build on existing protocols rather than starting from scratch, accelerating innovation. Users benefit from increasingly sophisticated strategies built from simple, audited components."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "DeFi's composability enabling use cases beyond finance."
+ },
+ {
+ "title": "🎰 PoolTogether: the no-loss lottery",
+ "url": "/pool-together/",
+ "description": "Example of composability — combining yield and lottery mechanics."
+ }
+ ]
+ },
+ {
+ "id": "rollup",
+ "term": "Rollup",
+ "full_term": "Rollup",
+ "category": "technical",
+ "definition": "A rollup is a Layer 2 scaling solution that executes transactions off the main Ethereum chain but posts transaction data back to Layer 1 for security. There are two main types: Optimistic Rollups (Optimism, Arbitrum) assume transactions are valid unless challenged, while ZK-Rollups (zkSync, StarkNet) use zero-knowledge proofs to verify transactions mathematically.",
+ "short_definition": "Layer 2 scaling solution that executes transactions off-chain while posting data to Layer 1",
+ "example": "Arbitrum is an Optimistic Rollup that processes transactions at a fraction of Ethereum mainnet gas costs while inheriting Ethereum's security guarantees.",
+ "related_terms": [
+ "layer-2",
+ "ethereum",
+ "gas",
+ "bridge"
+ ],
+ "risks": [
+ "Bridge risk when moving assets",
+ "Sequencer centralization",
+ "Withdrawal delays (Optimistic)"
+ ],
+ "tags": [
+ "scaling",
+ "layer-2",
+ "ethereum",
+ "technical"
+ ],
+ "common_questions": [
+ {
+ "question": "What's the difference between Optimistic and ZK rollups?",
+ "answer": "Optimistic Rollups assume validity and allow fraud proofs within a challenge period (typically 7 days). ZK-Rollups prove validity mathematically with zero-knowledge proofs, enabling faster finality but with more complex technology."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "ve-3-3",
+ "term": "ve(3,3)",
+ "full_term": "ve(3,3)",
+ "category": "technical",
+ "definition": "ve(3,3) is a tokenomics model combining Curve's vote-escrow (ve) mechanism with OlympusDAO's (3,3) game theory. Pioneered by Andre Cronje's Solidly and refined by Velodrome, it aligns incentives by letting veToken holders vote on gauge emissions and earn fees from the pools they vote for. The (3,3) element encourages cooperative behavior — everyone benefits most when participants lock tokens rather than sell.",
+ "short_definition": "Tokenomics model combining vote-escrow locking with (3,3) cooperative game theory",
+ "example": "Velodrome on Optimism uses ve(3,3): VELO holders lock tokens as veVELO, vote on gauges to direct emissions, and earn 100% of trading fees from pools they vote for.",
+ "related_terms": [
+ "vote-escrow",
+ "gauge",
+ "bribes",
+ "venft"
+ ],
+ "risks": [
+ "Ponzinomics criticism",
+ "Emission sustainability",
+ "Governance capture"
+ ],
+ "tags": [
+ "tokenomics",
+ "governance",
+ "defi",
+ "ve-model"
+ ],
+ "common_questions": [
+ {
+ "question": "Is ve(3,3) sustainable long-term?",
+ "answer": "The sustainability depends on the protocol generating real trading fees that justify emissions. Velodrome has shown the model can work when the DEX achieves sufficient volume, but many Solidly forks failed due to insufficient organic demand."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗡 CRV vs VELO Wars",
+ "url": "/crv-vs-velo/",
+ "description": "Comparing Curve's ve model with Velodrome's ve(3,3)."
+ },
+ {
+ "title": "Solidly and its Velodrome Fork",
+ "url": "/solidly-velodrome-fork/",
+ "description": "Origins of ve(3,3) with Solidly and Velodrome's refinement."
+ },
+ {
+ "title": "veNFT Infrastructure",
+ "url": "/veNFT-infrastructure/",
+ "description": "The NFT layer built on ve(3,3) mechanics."
+ }
+ ]
+ },
+ {
+ "id": "venft",
+ "term": "veNFT",
+ "full_term": "veNFT (Vote-Escrowed NFT)",
+ "category": "technical",
+ "definition": "A veNFT is an NFT that represents a vote-escrowed token position. Unlike traditional veTokens (which are non-transferable), veNFTs make locked positions tradeable by wrapping them as NFTs. This allows users to exit locked positions on secondary markets and enables new infrastructure like veNFT lending, splitting, and merging.",
+ "short_definition": "NFT representing a vote-escrowed token position, making locked positions tradeable",
+ "example": "On Velodrome, locking VELO creates a veVELO NFT. This NFT can be traded on secondary markets, letting buyers acquire voting power without waiting through the lock period.",
+ "related_terms": [
+ "vote-escrow",
+ "ve-3-3",
+ "nft",
+ "gauge"
+ ],
+ "risks": [
+ "veNFT price discount vs underlying",
+ "Smart contract risk",
+ "Liquidity risk on secondary markets"
+ ],
+ "tags": [
+ "governance",
+ "nft",
+ "vote-escrow",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Why wrap veTokens as NFTs?",
+ "answer": "Traditional veTokens are locked and non-transferable, which creates capital inefficiency. veNFTs solve this by making positions tradeable, composable, and usable as collateral — while preserving the voting and earning mechanics."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "veNFT Infrastructure",
+ "url": "/veNFT-infrastructure/",
+ "description": "Deep dive into the veNFT ecosystem and infrastructure."
+ }
+ ]
+ },
+ {
+ "id": "health-factor",
+ "term": "Health Factor",
+ "full_term": "Health Factor",
+ "category": "risks",
+ "definition": "Health factor is a numerical indicator of the safety of a lending position, representing the ratio between collateral value and borrowed value adjusted by liquidation thresholds. A health factor above 1 means the position is safe; below 1 means it can be liquidated. The higher the health factor, the safer the position but the lower the capital efficiency.",
+ "short_definition": "Numerical indicator of a lending position's safety relative to liquidation threshold",
+ "example": "With a health factor of 1.5, your position has a 50% safety buffer before liquidation. If your collateral drops in value or your debt increases, the health factor falls toward 1.",
+ "related_terms": [
+ "liquidation",
+ "ltv",
+ "collateral",
+ "lending"
+ ],
+ "risks": [
+ "Rapid health factor drops during volatility",
+ "Liquidation cascade risk",
+ "Oracle delay risk"
+ ],
+ "tags": [
+ "lending",
+ "risks",
+ "liquidation",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "What's a safe health factor?",
+ "answer": "It depends on the asset volatility. For volatile assets, a health factor of 2+ is recommended. For stablecoins, 1.5 may suffice. Always monitor during market turbulence."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Money Markets Risk",
+ "url": "/money-markets-risk/",
+ "description": "Understanding risk metrics in lending protocols."
+ },
+ {
+ "title": "Leverage with SIR Protocol",
+ "url": "/leverage-sir/",
+ "description": "Health factor in the context of leveraged positions."
+ }
+ ]
+ },
+ {
+ "id": "liquidation-cascade",
+ "term": "Liquidation Cascade",
+ "full_term": "Liquidation Cascade",
+ "category": "risks",
+ "definition": "A liquidation cascade occurs when a series of liquidations trigger further price drops, which cause more positions to become undercollateralized, triggering yet more liquidations in a self-reinforcing downward spiral. This systemic risk is one of the most dangerous events in DeFi lending, often resulting in significant losses across the ecosystem.",
+ "short_definition": "Chain reaction of liquidations where each one triggers further price drops and more liquidations",
+ "example": "During the May 2021 crash, ETH dropping 30% triggered massive Aave and Compound liquidations, which dumped more ETH on markets, pushing prices lower and liquidating even more positions.",
+ "related_terms": [
+ "liquidation",
+ "health-factor",
+ "collateral",
+ "lending"
+ ],
+ "risks": [
+ "Systemic protocol failure",
+ "Bad debt accumulation",
+ "Oracle failures under stress"
+ ],
+ "tags": [
+ "risks",
+ "lending",
+ "systemic",
+ "liquidation"
+ ],
+ "common_questions": [
+ {
+ "question": "How can protocols prevent liquidation cascades?",
+ "answer": "Through conservative LTV ratios, gradual liquidation mechanisms (like Liquity's stability pool), circuit breakers, and diversified oracle sources. Users can protect themselves by maintaining high health factors."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Money Markets Risk",
+ "url": "/money-markets-risk/",
+ "description": "Systemic risk analysis in DeFi lending."
+ },
+ {
+ "title": "🧭 DeFi Moneygames: Assessing risk and avoiding wreckage",
+ "url": "/defi-moneygames/",
+ "description": "Cascading risks in DeFi strategies."
+ }
+ ]
+ },
+ {
+ "id": "depeg",
+ "term": "Depeg",
+ "full_term": "Depeg",
+ "category": "risks",
+ "definition": "A depeg occurs when a stablecoin or pegged asset loses its intended price peg (typically $1 for USD stablecoins). Depegs can be temporary (market-driven) or permanent (fundamental failure). Causes include bank runs, collateral crises, oracle failures, or loss of confidence. The severity ranges from minor fluctuations to total collapse (e.g., UST/LUNA).",
+ "short_definition": "When a stablecoin or pegged asset loses its intended price peg",
+ "example": "USDC briefly depegged to $0.87 in March 2023 when Silicon Valley Bank (holding $3.3B of Circle's reserves) collapsed, before recovering after government intervention.",
+ "related_terms": [
+ "stablecoin",
+ "collateral",
+ "oracle",
+ "liquidation"
+ ],
+ "risks": [
+ "Cascading depegs across DeFi",
+ "Liquidity pool imbalance",
+ "Collateral value collapse"
+ ],
+ "tags": [
+ "stablecoin",
+ "risks",
+ "peg",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Are all depegs dangerous?",
+ "answer": "No. Minor temporary depegs (e.g., 0.5% deviation) are normal and usually corrected by arbitrageurs. Sustained depegs exceeding 2-5% signal deeper problems and warrant caution."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗺 The Stablecoin Marauder Map",
+ "url": "/stablecoin-marauder-map/",
+ "description": "Mapping stablecoin mechanisms and risks including depeg scenarios."
+ },
+ {
+ "title": "Why Polaris?",
+ "url": "/why-polaris/",
+ "description": "Stablecoin design addressing depeg risks."
+ }
+ ]
+ },
+ {
+ "id": "liquid-staking",
+ "term": "Liquid Staking",
+ "full_term": "Liquid Staking",
+ "category": "strategies",
+ "definition": "Liquid staking allows users to stake their tokens (e.g., ETH) and receive a liquid derivative token (e.g., stETH, rETH) in return. This derivative can be used across DeFi while the underlying asset earns staking rewards. It solves the capital inefficiency of traditional staking where assets are locked and unusable.",
+ "short_definition": "Staking tokens while receiving a liquid derivative usable in DeFi",
+ "example": "Staking 10 ETH through Lido gives you 10 stETH, which earns staking rewards (~3-5% APR) while being usable as collateral on Aave or liquidity on Curve.",
+ "related_terms": [
+ "staking",
+ "restaking",
+ "composability",
+ "collateral"
+ ],
+ "risks": [
+ "Derivative depeg from underlying",
+ "Smart contract risk",
+ "Validator slashing risk"
+ ],
+ "tags": [
+ "staking",
+ "defi",
+ "ethereum",
+ "strategies"
+ ],
+ "common_questions": [
+ {
+ "question": "Is liquid staking safe?",
+ "answer": "Liquid staking adds smart contract risk on top of regular staking risk. Major protocols like Lido and Rocket Pool are battle-tested, but the derivative token can temporarily depeg from ETH during market stress."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Liquid staking derivatives in the context of pegged asset exchanges."
+ },
+ {
+ "title": "Leverage with SIR Protocol",
+ "url": "/leverage-sir/",
+ "description": "Using liquid staking tokens for leveraged strategies."
+ }
+ ]
+ },
+ {
+ "id": "restaking",
+ "term": "Restaking",
+ "full_term": "Restaking",
+ "category": "strategies",
+ "definition": "Restaking is the practice of using already-staked assets (like stETH) to provide security to additional protocols or services. Pioneered by EigenLayer, restaking allows Ethereum validators to opt-in to secure other networks or services, earning additional rewards on top of base staking yields. This creates a shared security model but introduces additional slashing risks.",
+ "short_definition": "Using already-staked assets to secure additional protocols for extra yield",
+ "example": "An ETH staker deposits stETH into EigenLayer to restake, earning base ETH staking rewards plus additional rewards from securing oracle networks and bridges.",
+ "related_terms": [
+ "liquid-staking",
+ "staking",
+ "slashing",
+ "composability"
+ ],
+ "risks": [
+ "Additional slashing conditions",
+ "Smart contract risk stacking",
+ "Systemic risk from shared security"
+ ],
+ "tags": [
+ "staking",
+ "defi",
+ "security",
+ "yields"
+ ],
+ "common_questions": [
+ {
+ "question": "What are the risks of restaking?",
+ "answer": "Restaking stacks risks: you face base staking risks plus additional slashing conditions from each service you secure. If a secured service has a bug or is attacked, your restaked assets could be slashed."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Leverage with SIR Protocol",
+ "url": "/leverage-sir/",
+ "description": "Restaking in the context of leveraged yield strategies."
+ }
+ ]
+ },
+ {
+ "id": "seigniorage",
+ "term": "Seigniorage",
+ "full_term": "Seigniorage",
+ "category": "tokens",
+ "definition": "In crypto, seigniorage refers to the profit a stablecoin protocol makes from issuing tokens that cost less to create than their face value. Algorithmic stablecoins use seigniorage mechanics: when demand increases, new tokens are minted (generating seigniorage profit), and when demand decreases, tokens are burned or bonds are issued to contract supply. This model has historically been fragile.",
+ "short_definition": "Profit from issuing stablecoins that cost less to create than their face value",
+ "example": "Basis Cash and Empty Set Dollar used seigniorage models: when the stablecoin traded above $1, new tokens were minted and distributed to holders, but both ultimately failed to maintain their pegs.",
+ "related_terms": [
+ "stablecoin",
+ "depeg",
+ "tokenomics",
+ "emission"
+ ],
+ "risks": [
+ "Death spiral risk",
+ "Peg instability",
+ "Reflexivity / bank run dynamics"
+ ],
+ "tags": [
+ "stablecoin",
+ "tokenomics",
+ "algorithmic",
+ "tokens"
+ ],
+ "common_questions": [
+ {
+ "question": "Why have seigniorage stablecoins failed?",
+ "answer": "Most seigniorage stablecoins (ESD, Basis Cash, UST) failed because the mechanism to contract supply during downturns was too weak. Once confidence breaks, the death spiral makes recovery nearly impossible."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Understanding Seigniorage: Basis Cash & ESD",
+ "url": "/seigniorage-basis-esd/",
+ "description": "Deep analysis of seigniorage stablecoin mechanics and failures."
+ }
+ ]
+ },
+ {
+ "id": "overcollateralization",
+ "term": "Overcollateralization",
+ "full_term": "Overcollateralization",
+ "category": "tokens",
+ "definition": "Overcollateralization means locking up more value in collateral than the amount borrowed or minted. This buffer protects lenders and stablecoin holders against price drops in the collateral asset. For example, MakerDAO requires at least 150% collateral to mint DAI, meaning you need $150 of ETH to mint $100 of DAI. It's the foundation of most DeFi lending and decentralized stablecoins.",
+ "short_definition": "Locking more collateral value than the amount borrowed as a safety buffer",
+ "example": "To borrow 1000 LUSD on Liquity, you must deposit at least $1100 worth of ETH (110% minimum collateralization ratio), though most users maintain 150%+ for safety.",
+ "related_terms": [
+ "collateral",
+ "ltv",
+ "liquidation",
+ "cdp"
+ ],
+ "risks": [
+ "Capital inefficiency",
+ "Liquidation risk if collateral drops",
+ "Opportunity cost of locked capital"
+ ],
+ "tags": [
+ "lending",
+ "stablecoin",
+ "collateral",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Why not use 1:1 collateralization?",
+ "answer": "Crypto assets are volatile. If collateral drops in value to less than the loan, the protocol accumulates bad debt. Overcollateralization provides a buffer to liquidate positions before they become underwater."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Liquity Protocol",
+ "url": "/liquity-protocol/",
+ "description": "Overcollateralization in Liquity's stablecoin design."
+ },
+ {
+ "title": "Aave GHO Stablecoin",
+ "url": "/aave-gho-stablecoin/",
+ "description": "GHO's overcollateralized minting mechanism."
+ },
+ {
+ "title": "The Lending Protocol Renaissance",
+ "url": "/lending-protocol-renaissance/",
+ "description": "Evolution of overcollateralization models in lending."
+ }
+ ]
+ },
+ {
+ "id": "emission",
+ "term": "Emission",
+ "full_term": "Emission (Token)",
+ "category": "yields",
+ "definition": "Token emission refers to the rate and schedule at which new tokens are created and distributed by a protocol. Emissions are typically used to incentivize liquidity providers, stakers, or other protocol participants. The emission schedule (how many tokens are released over time) is a critical factor in tokenomics — too high causes inflation and selling pressure, too low fails to attract liquidity.",
+ "short_definition": "The rate and schedule at which new tokens are created and distributed",
+ "example": "Curve emits CRV tokens to liquidity providers based on gauge weights. The emission rate decreases over time following a pre-set schedule, reducing inflation gradually.",
+ "related_terms": [
+ "liquidity-mining",
+ "gauge",
+ "tokenomics",
+ "flywheel"
+ ],
+ "risks": [
+ "Inflationary selling pressure",
+ "Unsustainable APY projections",
+ "Mercenary capital"
+ ],
+ "tags": [
+ "tokenomics",
+ "yields",
+ "incentives",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Are emissions sustainable?",
+ "answer": "Emissions are only sustainable if the protocol generates enough real value (fees, revenue) to justify the token distribution. Protocols that rely purely on emissions without organic revenue eventually face a death spiral."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗡 CRV vs VELO Wars",
+ "url": "/crv-vs-velo/",
+ "description": "Comparing emission models on Curve vs Velodrome."
+ },
+ {
+ "title": "🎡 The DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "How emissions feed into flywheel dynamics."
+ },
+ {
+ "title": "⚔ CRV Wars",
+ "url": "/crv-wars/",
+ "description": "The battle to control CRV emissions."
+ }
+ ]
+ },
+ {
+ "id": "protocol-owned-liquidity",
+ "term": "Protocol-Owned Liquidity",
+ "full_term": "Protocol-Owned Liquidity (POL)",
+ "category": "governance",
+ "definition": "Protocol-Owned Liquidity (POL) is liquidity that belongs to the protocol's treasury rather than being rented from external liquidity providers through emissions. Instead of paying ongoing incentives to attract liquidity, protocols acquire their own LP positions. This was popularized by OlympusDAO's bonding mechanism and has become a key treasury management strategy.",
+ "short_definition": "Liquidity owned by the protocol's treasury rather than rented from external LPs",
+ "example": "Instead of paying $1M/month in emissions to attract liquidity, a protocol uses bonding to acquire its own LP tokens, building permanent liquidity that doesn't disappear when incentives end.",
+ "related_terms": [
+ "liquidity-mining",
+ "dao",
+ "flywheel",
+ "emission"
+ ],
+ "risks": [
+ "IL on treasury LP positions",
+ "Capital allocation risk",
+ "Bonding mechanism complexity"
+ ],
+ "tags": [
+ "governance",
+ "treasury",
+ "liquidity",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Why is POL better than rented liquidity?",
+ "answer": "Rented liquidity leaves when incentives stop. POL is permanent — the protocol doesn't need to continuously pay emissions to maintain trading depth. It also generates trading fees for the treasury."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗡 CRV vs VELO Wars",
+ "url": "/crv-vs-velo/",
+ "description": "POL strategies in the context of AMM wars."
+ },
+ {
+ "title": "Farewell GLC",
+ "url": "/farewell-glc/",
+ "description": "Protocol-owned liquidity in DAO treasury management."
+ }
+ ]
+ },
+ {
+ "id": "flywheel",
+ "term": "Flywheel",
+ "full_term": "Flywheel",
+ "category": "governance",
+ "definition": "A DeFi flywheel is a self-reinforcing cycle where each component of a protocol's design amplifies the others, creating a virtuous loop of growth. Typically: more liquidity → better trades → more fees → more token value → more locking → more governance power → directed emissions → more liquidity. When a flywheel spins well, the protocol grows organically; when it breaks, it can reverse into a death spiral.",
+ "short_definition": "Self-reinforcing cycle where protocol components amplify each other's growth",
+ "example": "Velodrome's flywheel: traders generate fees → veVELO holders earn fees by voting → more VELO gets locked → emissions attract more liquidity → more traders → more fees.",
+ "related_terms": [
+ "ve-3-3",
+ "gauge",
+ "emission",
+ "protocol-owned-liquidity"
+ ],
+ "risks": [
+ "Death spiral when flywheel reverses",
+ "Dependency on continuous growth",
+ "External shock vulnerability"
+ ],
+ "tags": [
+ "tokenomics",
+ "governance",
+ "growth",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "What breaks a flywheel?",
+ "answer": "A flywheel can break when any component weakens: a market crash reduces fees, emissions become unsustainable, governance power concentrates, or a competitor offers better incentives. The same reinforcing dynamics that drive growth can accelerate decline."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎡 The DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "Deep dive into flywheel mechanics in DeFi."
+ },
+ {
+ "title": "DeFi Janus",
+ "url": "/defi-janus/",
+ "description": "The two faces of DeFi flywheels — growth and decline."
+ }
+ ]
+ },
+ {
+ "id": "money-market",
+ "term": "Money Market",
+ "full_term": "Money Market",
+ "category": "protocols",
+ "definition": "In DeFi, a money market is a protocol that facilitates lending and borrowing of crypto assets through smart contracts. Lenders deposit assets into pools and earn interest, while borrowers provide collateral and pay interest to access funds. Major money markets include Aave, Compound, and Morpho. They are foundational DeFi primitives that enable leverage, hedging, and yield generation.",
+ "short_definition": "Protocol facilitating decentralized lending and borrowing of crypto assets",
+ "example": "On Aave, you deposit 10 ETH as collateral and borrow 5000 USDC at variable interest. The ETH earns deposit interest while you pay borrowing interest on the USDC.",
+ "related_terms": [
+ "lending",
+ "borrowing",
+ "collateral",
+ "health-factor"
+ ],
+ "risks": [
+ "Smart contract risk",
+ "Liquidation risk",
+ "Interest rate volatility",
+ "Oracle manipulation"
+ ],
+ "tags": [
+ "lending",
+ "protocols",
+ "defi",
+ "borrowing"
+ ],
+ "common_questions": [
+ {
+ "question": "How do DeFi money markets differ from traditional ones?",
+ "answer": "DeFi money markets are permissionless, non-custodial, and operate 24/7 via smart contracts. Interest rates adjust algorithmically based on supply/demand. Anyone can lend or borrow without approval."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Money Markets Risk",
+ "url": "/money-markets-risk/",
+ "description": "Understanding risk in DeFi money markets."
+ },
+ {
+ "title": "Money Market Recipes",
+ "url": "/money-market-recipes/",
+ "description": "Strategies for using money markets effectively."
+ },
+ {
+ "title": "Money Market Innovations",
+ "url": "/money-market-innovations/",
+ "description": "Evolution and new designs in DeFi lending."
+ }
+ ]
+ },
+ {
+ "id": "cdp",
+ "term": "CDP",
+ "full_term": "CDP (Collateralized Debt Position)",
+ "category": "protocols",
+ "definition": "A Collateralized Debt Position (CDP) is a smart contract where a user deposits collateral to mint or borrow stablecoins. Popularized by MakerDAO (deposit ETH, mint DAI), CDPs are the backbone of decentralized stablecoins and on-chain lending. The position must remain overcollateralized or it gets liquidated. CDPs enable leverage, stablecoin minting, and capital-efficient borrowing.",
+ "short_definition": "Smart contract where collateral is deposited to mint or borrow stablecoins",
+ "example": "On MakerDAO, you open a CDP by depositing $3000 of ETH and minting 1500 DAI (200% collateralization). If ETH drops and your ratio falls below 150%, your position is liquidated.",
+ "related_terms": [
+ "overcollateralization",
+ "liquidation",
+ "stablecoin",
+ "money-market"
+ ],
+ "risks": [
+ "Liquidation risk",
+ "Collateral volatility",
+ "Smart contract risk",
+ "Stability fee changes"
+ ],
+ "tags": [
+ "lending",
+ "stablecoin",
+ "protocols",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "What's the difference between a CDP and a regular loan?",
+ "answer": "A CDP lets you mint new stablecoins against your collateral, while a regular DeFi loan borrows existing assets from a lending pool. CDPs create new supply; lending pools redistribute existing supply."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Liquity Protocol",
+ "url": "/liquity-protocol/",
+ "description": "CDP mechanics in Liquity's stablecoin system."
+ },
+ {
+ "title": "🗺 The Stablecoin Marauder Map",
+ "url": "/stablecoin-marauder-map/",
+ "description": "CDPs in the broader stablecoin landscape."
+ },
+ {
+ "title": "The Lending Protocol Renaissance",
+ "url": "/lending-protocol-renaissance/",
+ "description": "Evolution of CDP designs in modern lending."
+ }
+ ]
+ }
+ ]
+ },
+ "fr": {
+ "terms": [
+ {
+ "id": "apy",
+ "term": "APY",
+ "full_term": "Rendement Annuel en Pourcentage",
+ "category": "yields",
+ "definition": "Le rendement annuel en pourcentage (APY) représente le taux de rendement réel gagné sur un investissement, en tenant compte de l'effet des intérêts composés. En DeFi, l'APY montre combien vous pouvez gagner annuellement en prêtant, fournissant de la liquidité ou en stakant.",
+ "short_definition": "Le rendement annuel d'un investissement incluant les effets des intérêts composés",
+ "example": "Un pool de liquidité offrant 15% d'APY signifie que votre investissement initial croîtrait de 15% sur une année avec composition.",
+ "related_terms": [
+ "apr",
+ "yield-farming",
+ "liquidity-mining",
+ "compound-interest"
+ ],
+ "risks": [
+ "Perte impermanente pour les tokens LP",
+ "Risque de smart contract",
+ "Risque de protocole"
+ ],
+ "tags": [
+ "defi",
+ "rendements",
+ "intérêts",
+ "retours"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre APR et APY ?",
+ "answer": "L'APR montre les intérêts simples tandis que l'APY inclut les effets de composition. L'APY est généralement plus élevé et plus précis pour les rendements DeFi."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "A balanced overview of decentralised finance services you can use to make your ETH work for you."
+ },
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "A hitchhiker's guide to liquidity mining curating tips & tools to help you make the most of DeFi's agrarian revolution."
+ }
+ ]
+ },
+ {
+ "id": "impermanent-loss",
+ "term": "Perte Impermanente",
+ "full_term": "Perte Impermanente",
+ "category": "risks",
+ "definition": "La perte impermanente se produit lorsque vous fournissez de la liquidité aux teneurs de marché automatisés (AMM) et que le ratio de prix de vos tokens déposés change par rapport au moment où vous les avez déposés. La perte est 'impermanente' car elle ne devient permanente que lorsque vous retirez votre liquidité.",
+ "short_definition": "Perte temporaire subie par les fournisseurs de liquidité quand les prix des tokens divergent",
+ "example": "Si vous fournissez de la liquidité ETH/USDC à 1 ETH = 2000$, mais que l'ETH monte à 3000$, vous aurez moins d'ETH et plus d'USDC au retrait, ratant une partie des gains d'ETH.",
+ "related_terms": [
+ "liquidity-providing",
+ "amm",
+ "slippage",
+ "arbitrage"
+ ],
+ "risks": [
+ "Risque de divergence de prix",
+ "Coût d'opportunité",
+ "Exposition à la volatilité du marché"
+ ],
+ "tags": [
+ "defi",
+ "risques",
+ "liquidité",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment minimiser la perte impermanente ?",
+ "answer": "Choisissez des paires stables, utilisez soigneusement les plages de liquidité concentrée, ou considérez le staking unilatéral au lieu de fournir de la liquidité à des paires volatiles."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧭 DeFi Moneygames: Assessing risk and avoiding wreckage",
+ "url": "/defi-moneygames/",
+ "description": "Explains impermanent loss with practical farming pool risk levels."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "IL in context of pegged vs volatile assets, concentrated liquidity amplification."
+ }
+ ]
+ },
+ {
+ "id": "yield-farming",
+ "term": "Yield Farming",
+ "full_term": "Agriculture de Rendement",
+ "category": "strategies",
+ "definition": "Le yield farming est la pratique de déplacer des actifs crypto entre différents protocoles DeFi pour maximiser les rendements. Les farmers fournissent typiquement de la liquidité, prêtent des actifs, ou stakent des tokens pour gagner des rendements sous forme d'intérêts, de frais, ou de tokens de récompense.",
+ "short_definition": "Stratégie de maximisation des rendements en déplaçant des actifs entre protocoles DeFi",
+ "example": "Un yield farmer pourrait fournir de la liquidité ETH/USDC sur Uniswap, staker les tokens LP sur une plateforme de récompenses, et utiliser les tokens gagnés dans un autre protocole pour des rendements additionnels.",
+ "related_terms": [
+ "liquidity-mining",
+ "apy",
+ "defi",
+ "staking"
+ ],
+ "risks": [
+ "Risque de smart contract",
+ "Perte impermanente",
+ "Volatilité des prix des tokens",
+ "Rug pulls"
+ ],
+ "tags": [
+ "defi",
+ "stratégies",
+ "rendements",
+ "farming"
+ ],
+ "common_questions": [
+ {
+ "question": "Le yield farming est-il rentable ?",
+ "answer": "Le yield farming peut être rentable mais implique des risques significatifs incluant les vulnérabilités de smart contracts, la perte impermanente, et les frais de gas élevés. Le succès nécessite une recherche minutieuse et une gestion des risques."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "Comprehensive farming guide."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Tiered ranking of farming opportunities."
+ },
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "6 base yield strategies."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-mining",
+ "term": "Liquidity Mining",
+ "full_term": "Minage de Liquidité",
+ "category": "strategies",
+ "definition": "Le liquidity mining est un mécanisme où les utilisateurs fournissent de la liquidité aux échanges décentralisés ou protocoles de prêt en échange de récompenses en tokens. C'est utilisé par les protocoles pour amorcer la liquidité et distribuer des tokens de gouvernance aux utilisateurs.",
+ "short_definition": "Gagner des récompenses en tokens en fournissant de la liquidité aux protocoles DeFi",
+ "example": "Compound distribue des tokens COMP aux utilisateurs qui apportent des actifs à leurs pools de prêt, incitant l'apport de liquidité.",
+ "related_terms": [
+ "yield-farming",
+ "governance-tokens",
+ "liquidity-providing",
+ "incentives"
+ ],
+ "risks": [
+ "Volatilité du prix des tokens",
+ "Risque de smart contract",
+ "Changements de programme"
+ ],
+ "tags": [
+ "defi",
+ "incitations",
+ "liquidité",
+ "récompenses"
+ ],
+ "common_questions": [
+ {
+ "question": "Combien de temps durent les programmes de liquidity mining ?",
+ "answer": "Les programmes varient largement, de quelques semaines à des années. Beaucoup de protocoles ajustent les récompenses selon les besoins du protocole et les décisions de gouvernance."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "Comprehensive guide to liquidity mining sources and strategies."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Ranked list of incentivized liquidity pools."
+ },
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Evolution from mining to shaping."
+ }
+ ]
+ },
+ {
+ "id": "amm",
+ "term": "AMM",
+ "full_term": "Teneur de Marché Automatisé",
+ "category": "technical",
+ "definition": "Un Teneur de Marché Automatisé (AMM) est un type de protocole d'échange décentralisé qui s'appuie sur des formules mathématiques pour fixer le prix des actifs plutôt que sur des carnets d'ordres. Les AMM permettent le trading sans permission en utilisant des pools de liquidité où les utilisateurs peuvent échanger des tokens automatiquement.",
+ "short_definition": "Échange décentralisé utilisant des formules mathématiques pour la tarification au lieu de carnets d'ordres",
+ "example": "Uniswap est un AMM où les utilisateurs peuvent échanger ETH contre USDC directement depuis les pools de liquidité sans besoin de contrepartie.",
+ "related_terms": [
+ "liquidity-pool",
+ "slippage",
+ "impermanent-loss",
+ "arbitrage"
+ ],
+ "risks": [
+ "Slippage sur les gros trades",
+ "Vulnérabilités de smart contract",
+ "Risques pour les fournisseurs de liquidité"
+ ],
+ "tags": [
+ "defi",
+ "dex",
+ "trading",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment un AMM détermine-t-il les prix ?",
+ "answer": "Les AMM utilisent des algorithmes comme x*y=k (produit constant) pour ajuster automatiquement les prix basés sur l'offre et la demande dans les pools de liquidité."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "A look at Uniswap's, Sushiswap's and Curve's value capture mechanism to better understand how value accrues for token holders."
+ },
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Compares AMM liquidity structures: x*y=k, stableswap, concentrated liquidity, and Maverick modes."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "History of AMM evolution from UNIv2 to stableswap to concentrated liquidity to Fluid DEX."
+ }
+ ]
+ },
+ {
+ "id": "dao",
+ "term": "DAO",
+ "full_term": "Organisation Autonome Décentralisée",
+ "category": "protocols",
+ "definition": "Une Organisation Autonome Décentralisée (DAO) est une organisation basée sur la blockchain gouvernée par des smart contracts et des détenteurs de tokens plutôt que par des structures de gestion traditionnelles. Les membres votent sur des propositions utilisant des tokens de gouvernance pour prendre des décisions sur l'avenir du protocole.",
+ "short_definition": "Organisation basée blockchain gouvernée par les détenteurs de tokens et smart contracts",
+ "example": "MakerDAO gouverne le protocole Maker, où les détenteurs de tokens MKR votent sur les frais de stabilité, types de collatéral, et autres paramètres du protocole.",
+ "related_terms": [
+ "governance-tokens",
+ "voting",
+ "proposals",
+ "decentralization"
+ ],
+ "risks": [
+ "Attaques de gouvernance",
+ "Faible participation",
+ "Incertitude réglementaire"
+ ],
+ "tags": [
+ "defi",
+ "gouvernance",
+ "dao",
+ "décentralisation"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment participer à la gouvernance d'une DAO ?",
+ "answer": "Détenir des tokens de gouvernance, rester informé des propositions, et voter sur les décisions qui affectent l'avenir du protocole."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Deep analysis of DAO governance failures and antagonisms."
+ },
+ {
+ "title": "Calling for your support to keep Aave's governance community-driven",
+ "url": "/aave-governance-program/",
+ "description": "Practical DAO participation: delegation, voting, governance challenges."
+ },
+ {
+ "title": "Introducing my next step: The DeFi Collective",
+ "url": "/defi-collective/",
+ "description": "Nonprofit DAO structure to support resilient DeFi protocols."
+ }
+ ]
+ },
+ {
+ "id": "smart-contract",
+ "term": "Smart Contract",
+ "full_term": "Contrat Intelligent",
+ "category": "technical",
+ "definition": "Un smart contract est un contrat auto-exécutant avec des termes directement écrits en code. En DeFi, les smart contracts exécutent automatiquement les transactions lorsque des conditions prédéterminées sont remplies, éliminant le besoin d'intermédiaires.",
+ "short_definition": "Code auto-exécutant qui fait automatiquement respecter les termes du contrat sur blockchain",
+ "example": "Le smart contract d'un protocole de prêt liquide automatiquement les positions sous-collatéralisées sans intervention humaine.",
+ "related_terms": [
+ "defi",
+ "ethereum",
+ "automation",
+ "trustless"
+ ],
+ "risks": [
+ "Vulnérabilités de code",
+ "Échecs d'audit",
+ "Risques d'immutabilité"
+ ],
+ "tags": [
+ "blockchain",
+ "ethereum",
+ "automatisation",
+ "code"
+ ],
+ "common_questions": [
+ {
+ "question": "Les smart contracts peuvent-ils être changés après déploiement ?",
+ "answer": "La plupart des smart contracts sont immuables une fois déployés, bien que certains incluent des mécanismes de mise à niveau contrôlés par la gouvernance ou des clés admin."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Smart contract immutability and what makes a protocol unstoppable."
+ },
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "Smart contracts as autonomous central banks."
+ }
+ ]
+ },
+ {
+ "id": "defi",
+ "term": "DeFi",
+ "full_term": "Finance Décentralisée",
+ "category": "technical",
+ "definition": "La Finance Décentralisée (DeFi) fait référence à une forme de finance basée sur blockchain qui recrée et améliore les systèmes financiers traditionnels utilisant des smart contracts, supprimant les intermédiaires comme les banques et courtiers. Les applications DeFi fonctionnent sur des blockchains publiques et sont accessibles à tous.",
+ "short_definition": "Système financier basé blockchain opérant sans intermédiaires traditionnels",
+ "example": "Vous pouvez prêter de l'USDC sur Compound, emprunter contre de l'ETH sur Aave, et échanger des tokens sur Uniswap - tout sans banques ni courtiers.",
+ "related_terms": [
+ "smart-contract",
+ "ethereum",
+ "trustless",
+ "permissionless"
+ ],
+ "risks": [
+ "Bugs de smart contract",
+ "Changements réglementaires",
+ "Volatilité du marché"
+ ],
+ "tags": [
+ "defi",
+ "blockchain",
+ "finance",
+ "décentralisation"
+ ],
+ "common_questions": [
+ {
+ "question": "Quels sont les principaux avantages de la DeFi par rapport à la finance traditionnelle ?",
+ "answer": "Accessibilité 24/7, accès sans permission, transparence, programmabilité, et généralement de meilleurs rendements pour les utilisateurs."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "Comprehensive overview of DeFi services with 6 base strategies."
+ },
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "Core DeFi properties: transparency, accessibility, interoperability."
+ },
+ {
+ "title": "A cold look at decentralized finance mass adoption",
+ "url": "/great-filter-defi/",
+ "description": "Analysis of DeFi adoption barriers."
+ }
+ ]
+ },
+ {
+ "id": "stablecoin",
+ "term": "Stablecoin",
+ "full_term": "Monnaie Stable",
+ "category": "tokens",
+ "definition": "Un stablecoin est une cryptomonnaie conçue pour maintenir une valeur stable relative à un actif de référence, généralement le Dollar US. Les stablecoins fournissent les bénéfices des cryptos (transferts rapides, transfrontaliers) tout en minimisant la volatilité des prix.",
+ "short_definition": "Cryptomonnaie conçue pour maintenir une valeur stable relative à un actif de référence",
+ "example": "L'USDC maintient une valeur de 1$ soutenue par des réserves en dollars, tandis que le DAI est décentralisé et soutenu par du collatéral crypto.",
+ "related_terms": [
+ "collateral",
+ "peg",
+ "volatility",
+ "reserve"
+ ],
+ "risks": [
+ "Risque de dépeg",
+ "Centralisation",
+ "Liquidation du collatéral"
+ ],
+ "tags": [
+ "stablecoin",
+ "usdc",
+ "dai",
+ "peg"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre stablecoins centralisés et décentralisés ?",
+ "answer": "Les stablecoins centralisés comme l'USDC sont soutenus par des réserves fiat, tandis que les décentralisés comme DAI utilisent du collatéral crypto et des algorithmes."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Is stability a necessity for cryptocurrencies mainstream adoption?",
+ "url": "/stablecoins/",
+ "description": "Foundational explainer."
+ },
+ {
+ "title": "The Maurauder's Map of Decentralized Stablecoins",
+ "url": "/stablecoin-marauder-map/",
+ "description": "Comprehensive map of designs."
+ },
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "Algorithmic stablecoin mechanics."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-pool",
+ "term": "Pool de Liquidité",
+ "full_term": "Réserve de Liquidité",
+ "category": "technical",
+ "definition": "Un pool de liquidité est une collection de fonds verrouillés dans un smart contract qui permet le trading décentralisé, le prêt, et autres fonctions DeFi. Les utilisateurs contribuent des actifs aux pools et gagnent des frais des trades ou intérêts des prêts.",
+ "short_definition": "Smart contract contenant des fonds qui permettent le trading et prêt décentralisés",
+ "example": "Le pool ETH/USDC sur Uniswap contient à la fois ETH et USDC, permettant aux utilisateurs d'échanger entre ces tokens tandis que les LP gagnent des frais de trading.",
+ "related_terms": [
+ "amm",
+ "liquidity-providing",
+ "trading-fees",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Perte impermanente",
+ "Risque de smart contract",
+ "Périodes de faible liquidité"
+ ],
+ "tags": [
+ "defi",
+ "liquidité",
+ "trading",
+ "pools"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment les fournisseurs de liquidité gagnent-ils de l'argent ?",
+ "answer": "Les LP gagnent des frais de trading (typiquement 0,3%) de chaque échange, plus des tokens de récompense potentiels des programmes de liquidity mining."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "How liquidity pools work across DEXes."
+ },
+ {
+ "title": "💦 The Yield Farmer Tier List",
+ "url": "/yieldfarmer-tierlist/",
+ "description": "Practical overview of incentivized liquidity pools."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Evolution of liquidity pool designs for pegged assets."
+ }
+ ]
+ },
+ {
+ "id": "slippage",
+ "term": "Slippage",
+ "full_term": "Glissement de Prix",
+ "category": "risks",
+ "definition": "Le slippage fait référence à la différence entre le prix attendu d'une transaction et le prix d'exécution réel. Il se produit lorsqu'il y a une liquidité insuffisante ou une forte volatilité, causant un mouvement défavorable du prix pendant l'exécution de la transaction.",
+ "short_definition": "Différence entre le prix attendu et le prix d'exécution réel d'une transaction",
+ "example": "Vous essayez d'acheter pour 10 000$ d'un token à 100$, mais à cause du slippage, vous finissez par payer en moyenne 102$ par token.",
+ "related_terms": [
+ "liquidity",
+ "amm",
+ "price-impact",
+ "mev"
+ ],
+ "risks": [
+ "Coûts plus élevés que prévu",
+ "Front-running",
+ "Attaques sandwich"
+ ],
+ "tags": [
+ "trading",
+ "amm",
+ "liquidité",
+ "prix"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment minimiser le slippage ?",
+ "answer": "Tradez des montants plus petits, utilisez des paires liquides, définissez une tolérance de slippage appropriée, ou utilisez des agrégateurs qui trouvent les meilleures routes."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Slippage in token swaps: minimum received, pool depth."
+ },
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "Slippage as function of pool liquidity."
+ }
+ ]
+ },
+ {
+ "id": "governance-token",
+ "term": "Token de Gouvernance",
+ "full_term": "Jeton de Gouvernance",
+ "category": "tokens",
+ "definition": "Les tokens de gouvernance donnent aux détenteurs des droits de vote sur les décisions du protocole comme les changements de paramètres, les mises à niveau, et la gestion du trésor. Ils représentent un contrôle démocratique sur les protocoles décentralisés et s'apprécient souvent avec le succès du protocole.",
+ "short_definition": "Token qui fournit des droits de vote sur les décisions de gouvernance du protocole",
+ "example": "Les détenteurs de tokens UNI peuvent voter sur les mises à niveau du protocole Uniswap, les structures de frais, et les propositions de dépenses du trésor.",
+ "related_terms": [
+ "dao",
+ "voting",
+ "proposals",
+ "token-economics"
+ ],
+ "risks": [
+ "Attaques de gouvernance",
+ "Volatilité du prix du token",
+ "Faible participation"
+ ],
+ "tags": [
+ "gouvernance",
+ "vote",
+ "dao",
+ "tokens"
+ ],
+ "common_questions": [
+ {
+ "question": "Les tokens de gouvernance ont-ils une valeur monétaire ?",
+ "answer": "Oui, ils se négocient sur les marchés et tirent leur valeur du succès du protocole et des flux de trésorerie futurs potentiels ou avantages."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "CRV, SUSHI, UNI as governance tokens with different value capture."
+ },
+ {
+ "title": "🎡 DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "Governance tokens as flywheel enablers: CRV/CVX deep dive."
+ },
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Governance token dysfunction analysis."
+ }
+ ]
+ },
+ {
+ "id": "flash-loan",
+ "term": "Flash Loan",
+ "full_term": "Prêt Éclair",
+ "category": "technical",
+ "definition": "Les flash loans sont des prêts sans collatéral qui doivent être empruntés et remboursés dans le même bloc de transaction. Ils permettent des stratégies DeFi complexes comme l'arbitrage, les liquidations, et les échanges de collatéral sans nécessiter de capital initial.",
+ "short_definition": "Prêt instantané sans collatéral qui doit être remboursé dans la même transaction",
+ "example": "Un trader utilise un flash loan pour emprunter 1000 ETH, faire de l'arbitrage sur les différences de prix entre échanges, et rembourser le prêt plus les frais - tout en une transaction.",
+ "related_terms": [
+ "arbitrage",
+ "liquidation",
+ "mev",
+ "atomic-transaction"
+ ],
+ "risks": [
+ "Échec de transaction",
+ "Coûts de gas élevés",
+ "Exécution complexe"
+ ],
+ "tags": [
+ "defi",
+ "prêts",
+ "arbitrage",
+ "avancé"
+ ],
+ "common_questions": [
+ {
+ "question": "Que se passe-t-il si je ne peux pas rembourser un flash loan ?",
+ "answer": "Toute la transaction s'annule, ce qui signifie que vous récupérez vos fonds originaux mais payez les frais de gas pour la transaction échouée."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Understanding innovations in money markets to envision their future",
+ "url": "/money-market-innovations/",
+ "description": "Flash loans via DeFiSaver using Aave."
+ },
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Flash loans for vault management."
+ }
+ ]
+ },
+ {
+ "id": "ethereum",
+ "term": "Ethereum",
+ "full_term": "Ethereum",
+ "category": "protocols",
+ "definition": "Ethereum est une plateforme blockchain décentralisée et open-source qui permet la création de smart contracts et d'applications décentralisées (dApps). C'est la blockchain principale pour les applications DeFi grâce à sa programmabilité et son écosystème établi.",
+ "short_definition": "Plateforme blockchain programmable qui alimente la plupart des applications DeFi",
+ "example": "La plupart des protocoles DeFi comme Uniswap, Aave et Compound sont construits sur la blockchain Ethereum.",
+ "related_terms": [
+ "smart-contract",
+ "defi",
+ "gas",
+ "erc-20"
+ ],
+ "risks": [
+ "Frais de gas élevés",
+ "Congestion du réseau",
+ "Limitations de scalabilité"
+ ],
+ "tags": [
+ "blockchain",
+ "ethereum",
+ "plateforme",
+ "smart-contracts"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi Ethereum est-il si important pour la DeFi ?",
+ "answer": "Les smart contracts programmables d'Ethereum permettent des applications financières complexes, et il a le plus grand écosystème DeFi et liquidité."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Why decentralization matters? A 12 min overview for the layman",
+ "url": "/decentralization-layman/",
+ "description": "Ethereum in context of decentralization."
+ },
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "Ethereum as the network enabling DeFi composability."
+ }
+ ]
+ },
+ {
+ "id": "layer-2",
+ "term": "Layer 2",
+ "full_term": "Solution de Mise à l'Échelle Layer 2",
+ "category": "protocols",
+ "definition": "Les solutions Layer 2 sont des frameworks secondaires construits au-dessus de blockchains existantes pour améliorer la scalabilité et réduire les coûts. Elles traitent les transactions hors de la chaîne principale tout en héritant de sa sécurité.",
+ "short_definition": "Solutions de mise à l'échelle construites sur les blockchains pour réduire les frais et augmenter la vitesse",
+ "example": "Polygon, Arbitrum et Optimism sont des solutions Layer 2 qui offrent des transactions DeFi moins chères que le mainnet Ethereum.",
+ "related_terms": [
+ "ethereum",
+ "scaling",
+ "rollups",
+ "sidechains"
+ ],
+ "risks": [
+ "Risques de centralisation",
+ "Délais de sortie",
+ "Complexité technique"
+ ],
+ "tags": [
+ "mise-à-l'échelle",
+ "layer2",
+ "ethereum",
+ "frais"
+ ],
+ "common_questions": [
+ {
+ "question": "Les solutions Layer 2 sont-elles aussi sécurisées qu'Ethereum ?",
+ "answer": "Elles héritent de la sécurité d'Ethereum mais peuvent avoir des risques additionnels selon leur implémentation spécifique et niveau de centralisation."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚔ Advanced CRV warfare: analysis of protocols built on top of Curve and Convex",
+ "url": "/crv-wars-l2/",
+ "description": "L2 deployment of Curve ecosystem and multi-chain dynamics."
+ }
+ ]
+ },
+ {
+ "id": "bridge",
+ "term": "Bridge",
+ "full_term": "Pont Inter-Chaînes",
+ "category": "protocols",
+ "definition": "Un bridge est un protocole qui permet aux utilisateurs de transférer des actifs et données entre différentes blockchains ou solutions Layer 2. Les bridges permettent l'interopérabilité dans l'écosystème DeFi multi-chaînes.",
+ "short_definition": "Protocole permettant le transfert d'actifs entre différentes blockchains",
+ "example": "Vous pouvez utiliser un bridge pour déplacer de l'ETH du mainnet Ethereum vers Polygon, ou de l'USDC d'Ethereum vers Arbitrum.",
+ "related_terms": [
+ "interoperability",
+ "wrapped-tokens",
+ "layer-2",
+ "multichain"
+ ],
+ "risks": [
+ "Exploits de smart contract",
+ "Centralisation",
+ "Risques de liquidité"
+ ],
+ "tags": [
+ "bridge",
+ "interopérabilité",
+ "inter-chaînes",
+ "transfert"
+ ],
+ "common_questions": [
+ {
+ "question": "Les bridges sont-ils sûrs à utiliser ?",
+ "answer": "Les bridges portent des risques car ce sont des smart contracts complexes. Utilisez des bridges bien audités et établis et n'investissez jamais plus que ce que vous pouvez vous permettre de perdre."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "oracle",
+ "term": "Oracle",
+ "full_term": "Oracle de Prix",
+ "category": "technical",
+ "definition": "Un oracle est un service qui fournit des données du monde réel aux applications blockchain. En DeFi, les oracles de prix fournissent les prix d'actifs actuels pour les protocoles de prêt, dérivés, et autres applications qui ont besoin de données hors-chaîne.",
+ "short_definition": "Service fournissant des données du monde réel comme les prix aux applications blockchain",
+ "example": "Les oracles Chainlink fournissent les prix ETH/USD aux protocoles de prêt pour déterminer les valeurs de collatéral et seuils de liquidation.",
+ "related_terms": [
+ "chainlink",
+ "price-feeds",
+ "liquidation",
+ "collateral"
+ ],
+ "risks": [
+ "Manipulation d'oracle",
+ "Latence de données",
+ "Point de défaillance unique"
+ ],
+ "tags": [
+ "oracle",
+ "données",
+ "prix",
+ "chainlink"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi les smart contracts ne peuvent-ils pas obtenir directement les données de prix ?",
+ "answer": "Les blockchains ne peuvent pas accéder aux données externes par conception. Les oracles agissent comme des ponts pour amener les informations du monde réel sur la chaîne de manière sécurisée."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Oracle risks: ChainLink multisig, dependency chains."
+ },
+ {
+ "title": "Assessing risk in decentralized finance: a handbook for money markets",
+ "url": "/money-markets-risk/",
+ "description": "Oracles as critical risk dimension."
+ },
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "TWAP oracles in expansion/contraction mechanisms."
+ }
+ ]
+ },
+ {
+ "id": "mev",
+ "term": "MEV",
+ "full_term": "Valeur Extractible Maximale",
+ "category": "technical",
+ "definition": "MEV fait référence au profit maximum qui peut être extrait en réorganisant, incluant, ou excluant des transactions dans un bloc. Cela inclut le front-running, les attaques sandwich, et les opportunités d'arbitrage.",
+ "short_definition": "Profit extrait en manipulant l'ordre des transactions dans les blocs",
+ "example": "Un bot voit votre gros trade DEX, place un ordre d'achat avant le vôtre et un ordre de vente après, profitant de l'impact de prix que vous créez.",
+ "related_terms": [
+ "front-running",
+ "sandwich-attack",
+ "arbitrage",
+ "flashbots"
+ ],
+ "risks": [
+ "Coûts de trading augmentés",
+ "Extraction injuste",
+ "Centralisation du réseau"
+ ],
+ "tags": [
+ "mev",
+ "arbitrage",
+ "front-running",
+ "mining"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment me protéger du MEV ?",
+ "answer": "Utilisez des mempools privés, définissez une tolérance de slippage appropriée, ou utilisez des interfaces de trading protégées contre le MEV."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "dex-aggregator",
+ "term": "Agrégateur DEX",
+ "full_term": "Agrégateur d'Échange Décentralisé",
+ "category": "protocols",
+ "definition": "Un agrégateur DEX est un service qui source la liquidité de multiples échanges décentralisés pour trouver les meilleurs prix et le plus faible slippage pour les trades. Ils optimisent le routage pour minimiser les coûts de trading.",
+ "short_definition": "Service qui trouve les meilleurs prix à travers plusieurs DEX pour les trades",
+ "example": "1inch agrège les prix d'Uniswap, SushiSwap, et autres DEX pour exécuter votre trade au meilleur taux possible.",
+ "related_terms": [
+ "uniswap",
+ "sushiswap",
+ "slippage",
+ "routing"
+ ],
+ "risks": [
+ "Risque de smart contract",
+ "Complexité",
+ "Coûts de gas"
+ ],
+ "tags": [
+ "agrégateur",
+ "dex",
+ "trading",
+ "optimisation"
+ ],
+ "common_questions": [
+ {
+ "question": "Les agrégateurs donnent-ils toujours de meilleurs prix ?",
+ "answer": "Généralement oui, mais considérez les coûts de gas. Pour les petits trades, le coût de gas du routage complexe pourrait dépasser les économies."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Practical guide to DEX aggregators: ParaSwap, rate comparison, gas optimization."
+ }
+ ]
+ },
+ {
+ "id": "multisig",
+ "term": "Multisig",
+ "full_term": "Portefeuille Multi-Signatures",
+ "category": "technical",
+ "definition": "Un portefeuille multisig nécessite plusieurs signatures (clés) pour autoriser les transactions, fournissant une sécurité améliorée par rapport aux portefeuilles à clé unique. Couramment utilisé pour la gouvernance de protocole et la gestion de trésorerie.",
+ "short_definition": "Portefeuille nécessitant plusieurs signatures pour autoriser les transactions",
+ "example": "Un multisig 3-sur-5 nécessite au moins 3 des 5 signataires désignés pour approuver toute transaction.",
+ "related_terms": [
+ "security",
+ "governance",
+ "treasury",
+ "keys"
+ ],
+ "risks": [
+ "Perte de clés",
+ "Complexité de coordination",
+ "Points de défaillance uniques"
+ ],
+ "tags": [
+ "sécurité",
+ "multisig",
+ "portefeuille",
+ "gouvernance"
+ ],
+ "common_questions": [
+ {
+ "question": "Que se passe-t-il si les signataires multisig ne sont pas disponibles ?",
+ "answer": "Si vous ne pouvez pas atteindre le seuil minimum, les fonds deviennent inaccessibles. C'est pourquoi des plans de sauvegarde et signataires de confiance sont cruciaux."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Multisig risks: ChainLink 3/20 multisig, wrench attacks."
+ }
+ ]
+ },
+ {
+ "id": "gas",
+ "term": "Gas",
+ "full_term": "Frais de Gas",
+ "category": "technical",
+ "definition": "Le gas est l'unité qui mesure l'effort computationnel nécessaire pour exécuter des opérations sur Ethereum. Les utilisateurs paient des frais de gas aux mineurs/validateurs pour traiter leurs transactions.",
+ "short_definition": "Frais payés pour exécuter des transactions sur la blockchain Ethereum",
+ "example": "Un simple transfert d'ETH pourrait coûter 21 000 unités de gas, tandis que les interactions DeFi complexes peuvent coûter plus de 200 000 unités de gas.",
+ "related_terms": [
+ "ethereum",
+ "gwei",
+ "transaction",
+ "miners"
+ ],
+ "risks": [
+ "Coût élevé pendant la congestion",
+ "Transactions échouées",
+ "Tarification imprévisible"
+ ],
+ "tags": [
+ "gas",
+ "frais",
+ "ethereum",
+ "transaction"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi les frais de gas sont-ils parfois si élevés ?",
+ "answer": "Les frais de gas augmentent avec la demande du réseau. Pendant les périodes chargées, les utilisateurs rivalisent en payant des frais plus élevés pour que leurs transactions soient traitées plus rapidement."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "Dedicated gas primer: gwei, checking prices, impact on strategies."
+ },
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Gas efficiency in swapping and aggregator optimization."
+ },
+ {
+ "title": "🧰 The DeFinancial Farming Toolbox",
+ "url": "/defi-farmer-toolbox/",
+ "description": "Gas cost analysis: impact on farming yields."
+ }
+ ]
+ },
+ {
+ "id": "erc-20",
+ "term": "ERC-20",
+ "full_term": "Ethereum Request for Comment 20",
+ "category": "technical",
+ "definition": "ERC-20 est un standard technique pour les tokens fongibles sur la blockchain Ethereum. Il définit une interface commune qui permet aux tokens d'être facilement intégrés avec les portefeuilles, échanges, et autres applications.",
+ "short_definition": "Standard pour créer des tokens fongibles sur Ethereum",
+ "example": "USDC, DAI, UNI, et la plupart des tokens DeFi sont des tokens ERC-20 qui suivent ce standard.",
+ "related_terms": [
+ "ethereum",
+ "tokens",
+ "standard",
+ "fungible"
+ ],
+ "risks": [
+ "Bugs de smart contract",
+ "Risques spécifiques aux tokens",
+ "Exploits d'approbation"
+ ],
+ "tags": [
+ "erc20",
+ "tokens",
+ "standard",
+ "ethereum"
+ ],
+ "common_questions": [
+ {
+ "question": "Puis-je utiliser les tokens ERC-20 sur d'autres blockchains ?",
+ "answer": "Pas directement, mais vous pouvez les bridge vers d'autres chaînes ou utiliser des versions wrappées qui suivent d'autres standards."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "wrapped-token",
+ "term": "Token Wrappé",
+ "full_term": "Jeton Enveloppé",
+ "category": "tokens",
+ "definition": "Un token wrappé représente une autre cryptomonnaie sur une blockchain différente. Il est soutenu 1:1 par l'actif original détenu en custody, permettant la fonctionnalité inter-chaînes.",
+ "short_definition": "Token représentant une autre cryptomonnaie sur une blockchain différente",
+ "example": "WETH (Wrapped ETH) permet à l'ETH d'être utilisé dans les contrats ERC-20, tandis que WBTC apporte la fonctionnalité Bitcoin à Ethereum.",
+ "related_terms": [
+ "bridge",
+ "cross-chain",
+ "custody",
+ "erc-20"
+ ],
+ "risks": [
+ "Risque de custody",
+ "Risque de dépeg",
+ "Vulnérabilités de bridge"
+ ],
+ "tags": [
+ "wrappé",
+ "tokens",
+ "inter-chaînes",
+ "bitcoin"
+ ],
+ "common_questions": [
+ {
+ "question": "Un token wrappé est-il identique à l'original ?",
+ "answer": "Fonctionnellement similaire mais techniquement différent. Ils devraient maintenir une valeur 1:1 mais portent des risques additionnels du mécanisme de wrapping."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Exploring stable assets on Ethereum: approaches & endgame",
+ "url": "/ethereum-stable-assets/",
+ "description": "Wrapped tokens explained: wBTC, tokenized assets."
+ }
+ ]
+ },
+ {
+ "id": "mempool",
+ "term": "Mempool",
+ "full_term": "Pool de Mémoire",
+ "category": "technical",
+ "definition": "Le mempool est une zone d'attente pour les transactions non confirmées sur un réseau blockchain. Les transactions restent dans le mempool jusqu'à ce que les mineurs ou validateurs les incluent dans un bloc.",
+ "short_definition": "Zone d'attente pour les transactions blockchain non confirmées",
+ "example": "Quand vous soumettez une transaction, elle va d'abord au mempool où les bots MEV peuvent la voir avant qu'elle soit incluse dans un bloc.",
+ "related_terms": [
+ "transaction",
+ "mining",
+ "mev",
+ "gas"
+ ],
+ "risks": [
+ "Front-running",
+ "Transaction bloquée",
+ "Extraction MEV"
+ ],
+ "tags": [
+ "mempool",
+ "transactions",
+ "mining",
+ "blockchain"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi ma transaction est-elle bloquée dans le mempool ?",
+ "answer": "Généralement à cause de frais de gas trop bas. Les mineurs priorisent les transactions avec des frais plus élevés, donc la vôtre attend jusqu'à ce que la congestion du réseau diminue ou que vous augmentiez les frais."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "validator",
+ "term": "Validateur",
+ "full_term": "Validateur de Réseau",
+ "category": "technical",
+ "definition": "Les validateurs sont des participants du réseau qui valident les transactions et créent de nouveaux blocs dans les blockchains Proof of Stake. Ils stakent des tokens comme collatéral et gagnent des récompenses pour un comportement honnête.",
+ "short_definition": "Participants du réseau qui valident les transactions dans les systèmes Proof of Stake",
+ "example": "Les validateurs Ethereum 2.0 stakent 32 ETH pour participer au consensus et gagner des récompenses de staking.",
+ "related_terms": [
+ "staking",
+ "proof-of-stake",
+ "consensus",
+ "ethereum"
+ ],
+ "risks": [
+ "Risque de slashing",
+ "Exigences techniques",
+ "Périodes de verrouillage"
+ ],
+ "tags": [
+ "validateur",
+ "staking",
+ "consensus",
+ "ethereum"
+ ],
+ "common_questions": [
+ {
+ "question": "Qu'est-ce que le slashing dans le staking ?",
+ "answer": "Le slashing est une pénalité où les validateurs perdent une partie de leurs tokens stakés pour comportement malveillant ou temps d'arrêt prolongé."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "consensus",
+ "term": "Consensus",
+ "full_term": "Mécanisme de Consensus",
+ "category": "technical",
+ "definition": "Un mécanisme de consensus est la méthode par laquelle un réseau blockchain s'accorde sur la validité des transactions et l'état du registre. Les types courants incluent Proof of Work et Proof of Stake.",
+ "short_definition": "Méthode pour que les réseaux blockchain s'accordent sur la validité des transactions",
+ "example": "Bitcoin utilise le consensus Proof of Work tandis qu'Ethereum a transitionné vers Proof of Stake pour une meilleure efficacité énergétique.",
+ "related_terms": [
+ "proof-of-stake",
+ "proof-of-work",
+ "mining",
+ "validator"
+ ],
+ "risks": [
+ "Attaques 51%",
+ "Centralisation",
+ "Hypothèses de sécurité"
+ ],
+ "tags": [
+ "consensus",
+ "blockchain",
+ "sécurité",
+ "proof-of-stake"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi Ethereum est-il passé de Proof of Work à Proof of Stake ?",
+ "answer": "Pour une meilleure efficacité énergétique, une sécurité améliorée, et pour activer des fonctionnalités comme le sharding pour une meilleure scalabilité."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "block",
+ "term": "Bloc",
+ "full_term": "Bloc de Blockchain",
+ "category": "technical",
+ "definition": "Un bloc est une collection de transactions qui sont regroupées et ajoutées à la blockchain. Chaque bloc contient un hash cryptographique du bloc précédent, créant une chaîne immuable.",
+ "short_definition": "Collection de transactions regroupées ensemble sur une blockchain",
+ "example": "Un bloc Ethereum contient plusieurs transactions et est produit approximativement toutes les 12 secondes.",
+ "related_terms": [
+ "blockchain",
+ "transaction",
+ "mining",
+ "hash"
+ ],
+ "risks": [
+ "Réorganisation de blocs",
+ "Délais de confirmation",
+ "Forks du réseau"
+ ],
+ "tags": [
+ "bloc",
+ "blockchain",
+ "transactions",
+ "mining"
+ ],
+ "common_questions": [
+ {
+ "question": "Combien de confirmations ai-je besoin ?",
+ "answer": "Pour les transactions de haute valeur, attendez 6+ confirmations sur Ethereum. Pour les montants plus petits, 1-3 confirmations sont généralement suffisantes."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "apr",
+ "term": "APR",
+ "full_term": "Taux de Pourcentage Annuel",
+ "category": "yields",
+ "definition": "Le Taux de Pourcentage Annuel (APR) représente le taux d'intérêt annuel simple sans effets de composition. En DeFi, l'APR montre le rendement de base avant de considérer les intérêts composés.",
+ "short_definition": "Taux d'intérêt annuel simple sans effets de composition",
+ "example": "Un pool de prêt offrant 10% d'APR signifie que vous gagnez 10% par an en intérêts simples.",
+ "related_terms": [
+ "apy",
+ "compound-interest",
+ "yield",
+ "interest"
+ ],
+ "risks": [
+ "Inflation érodant les rendements réels",
+ "Risque de protocole",
+ "Changements de taux"
+ ],
+ "tags": [
+ "defi",
+ "rendements",
+ "intérêts",
+ "taux"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre APR et APY ?",
+ "answer": "L'APR montre les intérêts simples tandis que l'APY inclut les effets de composition. L'APY est généralement plus élevé et plus précis pour les rendements DeFi."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "📖 How to make DeFinancial products work for you",
+ "url": "/definancial-guide/",
+ "description": "A balanced overview of decentralised finance services you can use to make your ETH work for you."
+ }
+ ]
+ },
+ {
+ "id": "lending",
+ "term": "Prêt",
+ "full_term": "Prêt DeFi",
+ "category": "yields",
+ "definition": "Le prêt en DeFi permet aux utilisateurs de prêter leurs actifs crypto pour gagner des intérêts. Les smart contracts gèrent automatiquement le processus de prêt, éliminant le besoin d'intermédiaires traditionnels.",
+ "short_definition": "Gagner des intérêts en prêtant des actifs crypto via smart contracts",
+ "example": "Vous pouvez prêter de l'USDC sur Aave pour gagner des intérêts payés par les emprunteurs qui ont besoin de liquidité.",
+ "related_terms": [
+ "borrowing",
+ "interest",
+ "collateral",
+ "liquidation"
+ ],
+ "risks": [
+ "Risque de smart contract",
+ "Créances douteuses",
+ "Volatilité des taux d'intérêt"
+ ],
+ "tags": [
+ "defi",
+ "prêt",
+ "rendement",
+ "intérêt"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment les taux d'intérêt sont-ils déterminés en DeFi ?",
+ "answer": "Les taux sont généralement déterminés algorithmiquement basés sur l'offre et la demande - plus la demande d'emprunt est élevée par rapport à l'offre, plus les taux sont élevés."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Understanding innovations in money markets to envision their future",
+ "url": "/money-market-innovations/",
+ "description": "Comprehensive overview of lending innovations."
+ },
+ {
+ "title": "Assessing risk in decentralized finance: a handbook for money markets",
+ "url": "/money-markets-risk/",
+ "description": "Risk assessment framework for lending protocols."
+ },
+ {
+ "title": "Is this a Lending Protocol Renaissance?",
+ "url": "/lending-protocol-renaissance/",
+ "description": "New lending models: Morpho, DYAD, Fluid, Tapioca."
+ }
+ ]
+ },
+ {
+ "id": "borrowing",
+ "term": "Emprunt",
+ "full_term": "Emprunt DeFi",
+ "category": "yields",
+ "definition": "L'emprunt en DeFi permet aux utilisateurs d'emprunter des actifs crypto en fournissant du collatéral. Cela permet l'effet de levier, l'accès à la liquidité, et diverses stratégies de trading sans vendre les avoirs existants.",
+ "short_definition": "Obtenir des prêts crypto en fournissant du collatéral aux smart contracts",
+ "example": "Vous pouvez emprunter de l'USDC contre votre collatéral ETH sur Compound pour maintenir l'exposition ETH tout en accédant à la liquidité.",
+ "related_terms": [
+ "collateral",
+ "liquidation",
+ "ltv",
+ "interest-rate"
+ ],
+ "risks": [
+ "Risque de liquidation",
+ "Augmentation des taux d'intérêt",
+ "Chute du prix du collatéral"
+ ],
+ "tags": [
+ "defi",
+ "emprunt",
+ "collatéral",
+ "levier"
+ ],
+ "common_questions": [
+ {
+ "question": "Que se passe-t-il si je ne peux pas rembourser mon prêt DeFi ?",
+ "answer": "Si votre ratio de collatéral tombe en dessous du seuil requis, votre collatéral sera automatiquement liquidé pour rembourser le prêt. Il n'y a pas de poursuites comme avec les prêts traditionnels."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "Deep dive into borrowing mechanics: troves, initiation fees, collateralization."
+ },
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Practical guide to borrowing DAI from Maker vaults to fund DeFi strategies."
+ },
+ {
+ "title": "🌽 Defi money markets cookbook",
+ "url": "/money-market-recipes/",
+ "description": "Money markets like Aave or Alchemix are essential in DeFi. Cookbook of borrowing-based strategies."
+ }
+ ]
+ },
+ {
+ "id": "collateral",
+ "term": "Collatéral",
+ "full_term": "Collatéral de Prêt",
+ "category": "yields",
+ "definition": "Le collatéral est un actif mis en gage comme garantie pour un prêt. En DeFi, les utilisateurs déposent du collatéral pour emprunter d'autres actifs, avec les smart contracts gérant automatiquement le collatéral et le processus de liquidation.",
+ "short_definition": "Actifs déposés comme garantie pour soutenir un prêt",
+ "example": "Pour emprunter 1000$ d'USDC, vous pourriez déposer 1500$ d'ETH comme collatéral pour maintenir un ratio de collatéralisation sûr.",
+ "related_terms": [
+ "borrowing",
+ "liquidation",
+ "ltv",
+ "over-collateralized"
+ ],
+ "risks": [
+ "Volatilité des prix",
+ "Risque de liquidation",
+ "Risque de smart contract"
+ ],
+ "tags": [
+ "defi",
+ "prêt",
+ "collatéral",
+ "emprunt"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi ai-je besoin de plus de collatéral que ce que j'emprunte ?",
+ "answer": "La sur-collatéralisation protège les prêteurs contre la volatilité des prix crypto. Si votre collatéral baisse en valeur, il y a encore suffisamment de valeur pour couvrir le prêt."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "ETH as collateral in Maker vaults: practical management and liquidation prevention."
+ },
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "Collateral mechanics in Liquity: ETH deposits, collateralization ratios, recovery mode."
+ },
+ {
+ "title": "Is this a Lending Protocol Renaissance?",
+ "url": "/lending-protocol-renaissance/",
+ "description": "CDP vs money market collateral models compared in depth."
+ }
+ ]
+ },
+ {
+ "id": "ltv",
+ "term": "LTV",
+ "full_term": "Ratio Prêt-sur-Valeur",
+ "category": "yields",
+ "definition": "Le ratio LTV représente le pourcentage de la valeur du collatéral qui peut être emprunté. Un LTV plus bas signifie un prêt plus conservateur, tandis qu'un LTV plus élevé augmente le risque de liquidation.",
+ "short_definition": "Pourcentage de la valeur du collatéral qui peut être emprunté",
+ "example": "Avec un LTV de 75%, vous pouvez emprunter jusqu'à 750$ contre 1000$ de collatéral.",
+ "related_terms": [
+ "collateral",
+ "liquidation",
+ "borrowing",
+ "health-factor"
+ ],
+ "risks": [
+ "Risque de liquidation",
+ "Volatilité du marché",
+ "Changements soudains de LTV"
+ ],
+ "tags": [
+ "defi",
+ "prêt",
+ "emprunt",
+ "ratio"
+ ],
+ "common_questions": [
+ {
+ "question": "Quel est un LTV sûr pour éviter la liquidation ?",
+ "answer": "Généralement, rester en dessous de 60-70% du LTV maximum est considéré comme sûr, laissant une marge pour la volatilité des prix avant d'atteindre le seuil de liquidation."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Collateralization ratios as inverse of LTV."
+ },
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "110% minimum collateralization ratio."
+ }
+ ]
+ },
+ {
+ "id": "liquidation",
+ "term": "Liquidation",
+ "full_term": "Liquidation de Collatéral",
+ "category": "risks",
+ "definition": "La liquidation se produit lorsque la valeur du collatéral d'un emprunteur tombe en dessous du seuil requis, déclenchant la vente automatique du collatéral pour rembourser le prêt et protéger les prêteurs.",
+ "short_definition": "Vente automatique du collatéral quand le prêt devient sous-collatéralisé",
+ "example": "Si votre collatéral ETH baisse en valeur et que votre prêt devient sous-collatéralisé, le protocole liquidera votre ETH pour rembourser le prêt.",
+ "related_terms": [
+ "collateral",
+ "ltv",
+ "borrowing",
+ "health-factor"
+ ],
+ "risks": [
+ "Perte de collatéral",
+ "Pénalités de liquidation",
+ "Volatilité des prix"
+ ],
+ "tags": [
+ "defi",
+ "risques",
+ "liquidation",
+ "collatéral"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment éviter la liquidation ?",
+ "answer": "Maintenez un ratio de collatéral élevé, surveillez votre facteur de santé, ajoutez du collatéral ou remboursez une partie du prêt si vous approchez du seuil de liquidation."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Maker liquidation mechanics and DeFiSaver Save function."
+ },
+ {
+ "title": "⚖️ Liquity: an unstoppable, efficient and innovative borrowing service",
+ "url": "/liquity-protocol/",
+ "description": "Stability pool as liquidation backstop."
+ },
+ {
+ "title": "Understanding innovations in money markets to envision their future",
+ "url": "/money-market-innovations/",
+ "description": "B.Protocol reclaiming liquidations."
+ }
+ ]
+ },
+ {
+ "id": "vault",
+ "term": "Vault",
+ "full_term": "Coffre de Rendement",
+ "category": "strategies",
+ "definition": "Un vault est une stratégie DeFi automatisée qui met en commun les fonds des utilisateurs et les déploie à travers divers protocoles pour maximiser les rendements. Les vaults gèrent automatiquement la complexité du yield farming.",
+ "short_definition": "Stratégie automatisée qui met en commun les fonds pour maximiser les rendements à travers les protocoles DeFi",
+ "example": "Les vaults Yearn Finance déplacent automatiquement vos fonds entre différents protocoles pour trouver les rendements les plus élevés.",
+ "related_terms": [
+ "yield-farming",
+ "auto-compounding",
+ "strategy",
+ "pooled-funds"
+ ],
+ "risks": [
+ "Risque de stratégie",
+ "Risque de smart contract",
+ "Perte impermanente"
+ ],
+ "tags": [
+ "defi",
+ "vaults",
+ "automatisation",
+ "rendement"
+ ],
+ "common_questions": [
+ {
+ "question": "Les vaults sont-ils sûrs ?",
+ "answer": "Les vaults portent les risques des protocoles sous-jacents qu'ils utilisent, plus les risques de leur propre smart contract et stratégie. Recherchez toujours les audits et l'historique avant d'investir."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🤖 Vaults: DeFi Investing Streamlined?",
+ "url": "/vaults/",
+ "description": "Dedicated article on vault mechanics."
+ },
+ {
+ "title": "YearnFinance - DeFi on autopilot?",
+ "url": "/yearn-finance/",
+ "description": "yVaults explained."
+ }
+ ]
+ },
+ {
+ "id": "staking",
+ "term": "Staking",
+ "full_term": "Mise en Jeu de Cryptomonnaie",
+ "category": "yields",
+ "definition": "Le staking implique de verrouiller des tokens pour soutenir les opérations blockchain ou les fonctions de protocole en échange de récompenses. Cela inclut le staking de validateur et le staking de protocole DeFi.",
+ "short_definition": "Verrouiller des tokens pour gagner des récompenses en soutenant les opérations de réseau ou protocole",
+ "example": "Vous pouvez staker de l'ETH pour devenir validateur et gagner des récompenses de staking, ou staker des tokens de protocole pour gagner des tokens de gouvernance.",
+ "related_terms": [
+ "validator",
+ "rewards",
+ "lock-up",
+ "slashing"
+ ],
+ "risks": [
+ "Risque de slashing",
+ "Périodes de verrouillage",
+ "Performance du validateur"
+ ],
+ "tags": [
+ "staking",
+ "récompenses",
+ "validation",
+ "verrouillage"
+ ],
+ "common_questions": [
+ {
+ "question": "Puis-je perdre mes tokens stakés ?",
+ "answer": "Oui, dans les systèmes Proof of Stake, les comportements malveillants ou les temps d'arrêt prolongés peuvent résulter en 'slashing' - une pénalité où vous perdez une partie de vos tokens stakés."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🧭 DeFi Moneygames: Assessing risk and avoiding wreckage",
+ "url": "/defi-moneygames/",
+ "description": "Staking pool risk tiers."
+ },
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "CRV staking (veCRV) mechanics."
+ }
+ ]
+ },
+ {
+ "id": "auto-compounding",
+ "term": "Auto-composition",
+ "full_term": "Composition Automatique",
+ "category": "strategies",
+ "definition": "L'auto-composition réinvestit automatiquement les récompenses gagnées dans l'investissement original, maximisant les rendements grâce aux intérêts composés sans intervention manuelle.",
+ "short_definition": "Réinvestissement automatique des récompenses pour maximiser les rendements composés",
+ "example": "Un vault de rendement fait de l'auto-composition en vendant automatiquement les tokens gagnés et en achetant plus du token de dépôt pour augmenter votre position.",
+ "related_terms": [
+ "compound-interest",
+ "vault",
+ "yield-farming",
+ "reinvestment"
+ ],
+ "risks": [
+ "Coûts de gas rongeant les rendements",
+ "Impact de prix",
+ "Changements de stratégie"
+ ],
+ "tags": [
+ "defi",
+ "composition",
+ "automatisation",
+ "rendements"
+ ],
+ "common_questions": [
+ {
+ "question": "L'auto-composition en vaut-elle toujours la peine ?",
+ "answer": "Cela dépend de la fréquence de composition, des coûts de gas, et de la taille de votre position. Pour les petites positions, les frais de gas peuvent dépasser les bénéfices de la composition fréquente."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🤖 Vaults: DeFi Investing Streamlined?",
+ "url": "/vaults/",
+ "description": "Vaults enable easy DeFi investments with a streamlined management of the position for the end-users."
+ },
+ {
+ "title": "YearnFinance - DeFi on autopilot?",
+ "url": "/yearn-finance/",
+ "description": "Yearn Finance V2 is just a few weeks old, yet it is already one of the most influential releases of the year for DeFi."
+ }
+ ]
+ },
+ {
+ "id": "swap",
+ "term": "Swap",
+ "full_term": "Échange de Tokens",
+ "category": "trading",
+ "definition": "Un swap est l'échange direct d'une cryptomonnaie pour une autre, typiquement exécuté via des AMM ou agrégateurs DEX sans nécessiter de carnets d'ordres ou de contreparties.",
+ "short_definition": "Échange direct d'une cryptomonnaie pour une autre",
+ "example": "Échanger 1 ETH contre 2 000 USDC sur Uniswap en utilisant le teneur de marché automatisé du protocole.",
+ "related_terms": [
+ "amm",
+ "dex",
+ "slippage",
+ "trading-fees"
+ ],
+ "risks": [
+ "Slippage",
+ "Transactions échouées",
+ "Extraction MEV"
+ ],
+ "tags": [
+ "trading",
+ "swap",
+ "échange",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre un swap et un trade traditionnel ?",
+ "answer": "Les swaps utilisent des pools de liquidité et des formules mathématiques pour déterminer les prix, tandis que le trading traditionnel utilise des carnets d'ordres avec des acheteurs et vendeurs."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Dedicated article on token swapping."
+ }
+ ]
+ },
+ {
+ "id": "dex",
+ "term": "DEX",
+ "full_term": "Échange Décentralisé",
+ "category": "trading",
+ "definition": "Un échange décentralisé fonctionne sans autorité centrale, permettant aux utilisateurs de trader des cryptomonnaies directement depuis leurs portefeuilles via des smart contracts et AMM.",
+ "short_definition": "Échange fonctionnant sans autorité centrale utilisant des smart contracts",
+ "example": "Uniswap et SushiSwap sont des DEX populaires où vous pouvez trader des tokens directement depuis votre portefeuille sans créer de comptes.",
+ "related_terms": [
+ "amm",
+ "smart-contract",
+ "liquidity-pool",
+ "permissionless"
+ ],
+ "risks": [
+ "Bugs de smart contract",
+ "Liquidité plus faible",
+ "Expérience utilisateur complexe"
+ ],
+ "tags": [
+ "trading",
+ "dex",
+ "décentralisé",
+ "smart-contract"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi utiliser un DEX plutôt qu'un échange centralisé ?",
+ "answer": "Les DEX offrent une garde de fonds personnelle, pas de KYC, résistance à la censure, et contrôle total de vos actifs, mais avec moins de liquidité et une interface plus complexe."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "Core article on DEX models and tokenomics."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "Velodrome/Solidly DEX model analysis."
+ },
+ {
+ "title": "Subtles nuances with great consequences: a cross analysis of Curve and Velodrome",
+ "url": "/crv-vs-velo/",
+ "description": "Cross-analysis of two leading DEX models."
+ }
+ ]
+ },
+ {
+ "id": "cex",
+ "term": "CEX",
+ "full_term": "Échange Centralisé",
+ "category": "trading",
+ "definition": "Un échange centralisé est opéré par une entreprise qui contrôle les fonds des utilisateurs et facilite le trading via des carnets d'ordres traditionnels, nécessitant que les utilisateurs déposent des fonds et créent des comptes.",
+ "short_definition": "Échange opéré par une entreprise contrôlant les fonds utilisateurs avec carnets d'ordres",
+ "example": "Binance, Coinbase et Kraken sont des CEX majeurs où vous déposez des fonds pour trader avec une meilleure liquidité et expérience utilisateur.",
+ "related_terms": [
+ "orderbook",
+ "custody",
+ "kyc",
+ "liquidity"
+ ],
+ "risks": [
+ "Risque de contrepartie",
+ "Risque réglementaire",
+ "Gel de compte"
+ ],
+ "tags": [
+ "trading",
+ "cex",
+ "centralisé",
+ "carnet-ordres"
+ ],
+ "common_questions": [
+ {
+ "question": "Quand utiliser un CEX plutôt qu'un DEX ?",
+ "answer": "Les CEX offrent plus de liquidité, interfaces plus simples, support client, et rampes fiat, mais nécessitent confiance, KYC, et renonciation au contrôle des fonds."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "price-impact",
+ "term": "Impact de Prix",
+ "full_term": "Impact sur le Prix",
+ "category": "trading",
+ "definition": "L'impact de prix mesure à quel point une transaction déplace le prix de marché d'un actif. Les gros trades dans des pools illiquides causent un impact de prix significatif, menant à des prix d'exécution défavorables.",
+ "short_definition": "Combien une transaction déplace le prix de marché d'un actif",
+ "example": "Acheter 100 000$ d'un token dans un petit pool de liquidité pourrait causer 5% d'impact de prix, signifiant que vous payez 5% de plus que le prix de départ.",
+ "related_terms": [
+ "slippage",
+ "liquidity",
+ "amm",
+ "market-depth"
+ ],
+ "risks": [
+ "Coûts de trading plus élevés",
+ "Prix défavorables",
+ "Extraction MEV"
+ ],
+ "tags": [
+ "trading",
+ "prix",
+ "impact",
+ "liquidité"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment réduire l'impact de prix ?",
+ "answer": "Divisez les gros trades en plus petits, utilisez des pools plus liquides, ou utilisez des agrégateurs qui répartissent votre ordre sur plusieurs sources de liquidité."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Rate display, slippage, and price impact in swapping."
+ }
+ ]
+ },
+ {
+ "id": "arbitrage",
+ "term": "Arbitrage",
+ "full_term": "Arbitrage de Prix",
+ "category": "trading",
+ "definition": "L'arbitrage est la pratique d'acheter et vendre simultanément des actifs identiques sur différents marchés pour profiter des différences de prix. En DeFi, les bots exploitent les écarts de prix entre DEX ou CEX.",
+ "short_definition": "Profiter des différences de prix d'actifs identiques sur différents marchés",
+ "example": "Si l'ETH se trade à 2000$ sur Uniswap et 2005$ sur SushiSwap, un arbitrageur achète sur Uniswap et vend sur SushiSwap pour 5$ de profit par ETH.",
+ "related_terms": [
+ "flash-loan",
+ "mev",
+ "price-impact",
+ "dex"
+ ],
+ "risks": [
+ "Coûts de transaction",
+ "Échec d'exécution",
+ "Slippage"
+ ],
+ "tags": [
+ "trading",
+ "arbitrage",
+ "profit",
+ "dex"
+ ],
+ "common_questions": [
+ {
+ "question": "L'arbitrage est-il rentable pour les utilisateurs individuels ?",
+ "answer": "Difficile pour les particuliers car les bots automatisés sont plus rapides, et les frais de gas peuvent dépasser les profits sur les petites opportunités d'arbitrage."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "routing",
+ "term": "Routage",
+ "full_term": "Routage de Trade",
+ "category": "trading",
+ "definition": "Le routage est le processus de trouver le chemin le plus efficace pour une transaction à travers plusieurs sources de liquidité pour minimiser les coûts et le slippage, souvent utilisé par les agrégateurs DEX.",
+ "short_definition": "Trouver des chemins de trading optimaux à travers plusieurs sources de liquidité",
+ "example": "1inch route votre trade ETH-vers-USDC à travers plusieurs DEX et pools pour obtenir le meilleur prix possible.",
+ "related_terms": [
+ "dex-aggregator",
+ "slippage",
+ "arbitrage",
+ "optimization"
+ ],
+ "risks": [
+ "Exécution complexe",
+ "Coûts de gas plus élevés",
+ "Échecs de routage"
+ ],
+ "tags": [
+ "trading",
+ "routage",
+ "optimisation",
+ "agrégateur"
+ ],
+ "common_questions": [
+ {
+ "question": "Le routage complexe en vaut-il toujours la peine ?",
+ "answer": "Cela dépend de la taille du trade et des frais de gas. Pour les petits trades, les économies de prix peuvent être dépassées par les frais de gas supplémentaires du routage complexe."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "Trade routing through multiple DEXes."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-provider",
+ "term": "Fournisseur de Liquidité",
+ "full_term": "Fournisseur de Liquidité (LP)",
+ "category": "trading",
+ "definition": "Un fournisseur de liquidité apporte des actifs aux lieux de trading pour faciliter les échanges. En DeFi, les LP déposent des paires de tokens dans les pools AMM pour gagner des frais de trading et des récompenses.",
+ "short_definition": "Entité qui fournit des actifs pour faciliter le trading et gagner des frais",
+ "example": "Vous devenez un LP en déposant des valeurs égales d'ETH et d'USDC dans un pool Uniswap, gagnant 0,3% de tous les frais de trading.",
+ "related_terms": [
+ "liquidity-pool",
+ "amm",
+ "trading-fees",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Perte impermanente",
+ "Risque de smart contract",
+ "Changements de taux de frais"
+ ],
+ "tags": [
+ "trading",
+ "liquidité",
+ "fournisseur",
+ "frais"
+ ],
+ "common_questions": [
+ {
+ "question": "Combien gagne un fournisseur de liquidité ?",
+ "answer": "Les gains dépendent du volume de trading, des frais du pool (généralement 0,3%), de votre part du pool, et des éventuels tokens de récompense des programmes d'incitation."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "LP fee distribution models across DEXes."
+ },
+ {
+ "title": "Subtles nuances with great consequences: a cross analysis of Curve and Velodrome",
+ "url": "/crv-vs-velo/",
+ "description": "LP incentivization comparison."
+ }
+ ]
+ },
+ {
+ "id": "constant-product",
+ "term": "Produit Constant",
+ "full_term": "Formule de Produit Constant",
+ "category": "trading",
+ "definition": "La formule de produit constant (x*y=k) est le modèle mathématique utilisé par les AMM comme Uniswap pour fixer automatiquement les prix basés sur les ratios de tokens dans les pools de liquidité.",
+ "short_definition": "Formule mathématique (x*y=k) utilisée par les AMM pour la tarification automatique",
+ "example": "Dans un pool ETH/USDC, si vous achetez de l'ETH, la quantité d'ETH diminue et l'USDC augmente, maintenant le produit constant tout en augmentant le prix de l'ETH.",
+ "related_terms": [
+ "amm",
+ "uniswap",
+ "pricing",
+ "liquidity-pool"
+ ],
+ "risks": [
+ "Impact de prix",
+ "Opportunités d'arbitrage",
+ "Perte impermanente"
+ ],
+ "tags": [
+ "trading",
+ "amm",
+ "formule",
+ "tarification"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi utiliser la formule x*y=k ?",
+ "answer": "Elle garantit qu'il y a toujours de la liquidité disponible à n'importe quel prix, le prix augmente automatiquement quand un actif devient rare, et elle est simple à implémenter et comprendre."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "Explains x*y=k bonding curves, their strengths and slippage limitations."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Compares x*y=k to stableswap with liquidity distribution diagrams."
+ }
+ ]
+ },
+ {
+ "id": "leverage",
+ "term": "Effet de Levier",
+ "full_term": "Effet de Levier Financier",
+ "category": "trading",
+ "definition": "L'effet de levier permet aux traders de contrôler des positions plus importantes que leur capital ne le permettrait normalement en empruntant des fonds. En DeFi, l'effet de levier amplifie à la fois les gains et les pertes potentiels grâce au capital emprunté.",
+ "short_definition": "Utiliser des fonds empruntés pour amplifier la taille des positions de trading et les rendements potentiels",
+ "example": "Avec un effet de levier 3x, vous pouvez contrôler 3000$ d'ETH avec seulement 1000$ de votre propre capital, amplifiant les gains et pertes par 3.",
+ "related_terms": [
+ "margin-trading",
+ "liquidation",
+ "collateral",
+ "borrowing"
+ ],
+ "risks": [
+ "Pertes amplifiées",
+ "Risque de liquidation",
+ "Coûts d'intérêt",
+ "Volatilité du marché"
+ ],
+ "tags": [
+ "effet-de-levier",
+ "trading",
+ "emprunt",
+ "amplification"
+ ],
+ "common_questions": [
+ {
+ "question": "Quel niveau d'effet de levier est sûr pour un débutant ?",
+ "answer": "Les débutants devraient commencer avec un faible effet de levier (2x maximum) ou éviter complètement jusqu'à bien comprendre les risques. Un effet de levier élevé peut liquider rapidement les positions."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎚 ETH exposure or DeFi yields: why choose?",
+ "url": "/leveraging-eth/",
+ "description": "Practical guide to leveraging ETH via Maker."
+ },
+ {
+ "title": "Leverage Like a Sir: Polynomial Gains, No Liquidation Pains",
+ "url": "/leverage-sir/",
+ "description": "Novel leverage protocol with no liquidation."
+ },
+ {
+ "title": "🌽 Defi money markets cookbook",
+ "url": "/money-market-recipes/",
+ "description": "Leveraged strategies using money markets."
+ }
+ ]
+ },
+ {
+ "id": "margin-trading",
+ "term": "Trading sur Marge",
+ "full_term": "Négociation sur Marge",
+ "category": "trading",
+ "definition": "Le trading sur marge implique d'emprunter des fonds pour trader des positions plus importantes que le solde de votre compte ne le permet. Les traders fournissent du collatéral et peuvent être liquidés si les positions évoluent significativement contre eux.",
+ "short_definition": "Trader avec des fonds empruntés en utilisant du collatéral pour contrôler des positions plus importantes",
+ "example": "Vous déposez 1000$ d'ETH comme collatéral et empruntez 2000$ d'USDC pour acheter plus d'ETH, créant une position longue avec effet de levier qui peut être liquidée si l'ETH baisse.",
+ "related_terms": [
+ "leverage",
+ "collateral",
+ "liquidation",
+ "maintenance-margin"
+ ],
+ "risks": [
+ "Risque de liquidation",
+ "Paiements d'intérêts",
+ "Appels de marge",
+ "Exposition à la volatilité renforcée"
+ ],
+ "tags": [
+ "marge",
+ "effet-de-levier",
+ "trading",
+ "emprunt"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre trading sur marge et trading au comptant ?",
+ "answer": "Le trading au comptant utilise uniquement vos propres fonds, tandis que le trading sur marge utilise des fonds empruntés pour amplifier les positions, augmentant à la fois les profits et risques potentiels."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "perpetuals",
+ "term": "Perpétuels",
+ "full_term": "Contrats à Terme Perpétuels",
+ "category": "trading",
+ "definition": "Les contrats à terme perpétuels sont des contrats dérivés qui suivent le prix d'un actif sous-jacent sans date d'expiration. Ils utilisent des taux de financement pour maintenir l'alignement des prix avec les marchés au comptant.",
+ "short_definition": "Contrats dérivés qui suivent les prix d'actifs sans dates d'expiration",
+ "example": "Trader des perpétuels ETH sur dYdX vous permet d'aller long ou short sur l'ETH avec effet de levier, payant ou recevant des taux de financement basés sur le sentiment du marché.",
+ "related_terms": [
+ "futures",
+ "funding-rate",
+ "derivatives",
+ "leverage"
+ ],
+ "risks": [
+ "Coûts de taux de financement",
+ "Risque de liquidation",
+ "Risque de base",
+ "Risque de contrepartie"
+ ],
+ "tags": [
+ "perpétuels",
+ "dérivés",
+ "contrats-à-terme",
+ "effet-de-levier"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre perpétuels et contrats à terme traditionnels ?",
+ "answer": "Les perpétuels n'ont pas de date d'expiration et utilisent des taux de financement pour maintenir l'alignement des prix, tandis que les contrats à terme traditionnels ont des dates d'expiration fixes."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "funding-rate",
+ "term": "Taux de Financement",
+ "full_term": "Taux de Financement Perpétuel",
+ "category": "trading",
+ "definition": "Le taux de financement est un paiement périodique entre traders longs et shorts dans les marchés de contrats à terme perpétuels pour maintenir l'alignement du prix du contrat avec le prix au comptant de l'actif sous-jacent.",
+ "short_definition": "Paiement périodique entre traders de contrats à terme perpétuels pour maintenir l'alignement des prix",
+ "example": "Si les perpétuels ETH se tradent au-dessus du prix au comptant, les positions longues paient les positions courtes des frais de financement toutes les 8 heures pour inciter la convergence des prix.",
+ "related_terms": [
+ "perpetuals",
+ "basis",
+ "arbitrage",
+ "price-convergence"
+ ],
+ "risks": [
+ "Coûts de financement",
+ "Volatilité du taux",
+ "Risque de timing",
+ "Impact sur la stratégie"
+ ],
+ "tags": [
+ "taux-de-financement",
+ "perpétuels",
+ "dérivés",
+ "paiements"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment sont calculés les taux de financement ?",
+ "answer": "Les taux de financement sont généralement basés sur la différence entre le prix perpétuel et le prix au comptant, plus un taux d'intérêt. Ils s'ajustent pour maintenir l'équilibre entre positions longues et courtes."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "delta-neutral",
+ "term": "Delta Neutre",
+ "full_term": "Stratégie Delta Neutre",
+ "category": "trading",
+ "definition": "Une stratégie delta neutre vise à éliminer le risque de prix directionnel en équilibrant les positions longues et courtes de sorte que la valeur du portefeuille ne change pas avec les petits mouvements de prix de l'actif sous-jacent.",
+ "short_definition": "Stratégie qui élimine le risque de prix directionnel grâce à des positions longues/courtes équilibrées",
+ "example": "Fournir de la liquidité ETH/USDC tout en shortant l'ETH avec des contrats à terme perpétuels pour se couvrir contre les mouvements de prix ETH, gagnant des frais tout en minimisant l'exposition aux prix.",
+ "related_terms": [
+ "hedging",
+ "liquidity-providing",
+ "perpetuals",
+ "market-neutral"
+ ],
+ "risks": [
+ "Couverture imparfaite",
+ "Coûts de financement",
+ "Besoins de rééquilibrage",
+ "Risque de base"
+ ],
+ "tags": [
+ "delta-neutre",
+ "couverture",
+ "avancé",
+ "marché-neutre"
+ ],
+ "common_questions": [
+ {
+ "question": "Une stratégie delta neutre est-elle vraiment sans risque ?",
+ "answer": "Non, elle élimine le risque directionnel mais reste exposée aux risques de volatilité, de base, de financement, et nécessite un rééquilibrage actif pour maintenir la neutralité."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Why Polaris? The Stablecoin we needed to build",
+ "url": "/why-polaris/",
+ "description": "Explains Ethena's delta-neutral strategy for USDe yield."
+ }
+ ]
+ },
+ {
+ "id": "derivatives",
+ "term": "Dérivés",
+ "full_term": "Dérivés Financiers",
+ "category": "trading",
+ "definition": "Les dérivés sont des contrats financiers dont la valeur dérive d'actifs sous-jacents comme les cryptomonnaies, actions, ou matières premières. En DeFi, ils permettent des stratégies de trading avancées et la gestion des risques.",
+ "short_definition": "Contrats financiers tirant leur valeur d'actifs sous-jacents",
+ "example": "Les options sur ETH, contrats à terme perpétuels, et actifs synthétiques sont tous des dérivés qui vous permettent de trader l'exposition aux prix sans posséder l'ETH sous-jacent.",
+ "related_terms": [
+ "options",
+ "futures",
+ "synthetic-assets",
+ "leverage"
+ ],
+ "risks": [
+ "Complexité",
+ "Risque de contrepartie",
+ "Risque de liquidité",
+ "Amplification de l'effet de levier"
+ ],
+ "tags": [
+ "dérivés",
+ "avancé",
+ "instruments-financiers",
+ "trading"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi utiliser des dérivés plutôt que trader l'actif directement ?",
+ "answer": "Les dérivés offrent effet de levier, couverture, accès à des actifs difficiles à détenir directement, et stratégies complexes comme le shorting ou la neutralité au marché."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "options",
+ "term": "Options",
+ "full_term": "Trading d'Options",
+ "category": "trading",
+ "definition": "Les options sont des contrats dérivés qui donnent au détenteur le droit (mais non l'obligation) d'acheter ou vendre un actif à un prix spécifique avant expiration. Elles sont utilisées pour la couverture, la spéculation, et la génération de revenus.",
+ "short_definition": "Contrats donnant le droit d'acheter/vendre des actifs à des prix spécifiques avant expiration",
+ "example": "Acheter des options d'achat ETH pour un strike de 2500$ vous donne le droit d'acheter de l'ETH à 2500$ peu importe le prix du marché, tandis que vendre des calls couverts génère des revenus.",
+ "related_terms": [
+ "strike-price",
+ "premium",
+ "expiration",
+ "volatility"
+ ],
+ "risks": [
+ "Décomposition temporelle",
+ "Risque de volatilité",
+ "Perte de prime",
+ "Risque d'assignation"
+ ],
+ "tags": [
+ "options",
+ "dérivés",
+ "couverture",
+ "spéculation"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre options d'achat et de vente ?",
+ "answer": "Les options d'achat (calls) donnent le droit d'acheter un actif, permettant de profiter de la hausse des prix. Les options de vente (puts) donnent le droit de vendre, permettant de profiter de la baisse ou de se couvrir."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "proposal",
+ "term": "Proposition",
+ "full_term": "Proposition de Gouvernance",
+ "category": "governance",
+ "definition": "Une proposition de gouvernance est une suggestion formelle soumise à une communauté DAO ou protocole pour vote. Les propositions peuvent inclure des changements de paramètres, des mises à niveau de protocole, des dépenses de trésorerie, ou des décisions stratégiques.",
+ "short_definition": "Suggestion formelle soumise à la communauté DAO pour vote sur les changements de protocole",
+ "example": "Une proposition pour changer les frais de trading d'Uniswap de 0,3% à 0,25% devrait être votée par les détenteurs de tokens UNI avant implémentation.",
+ "related_terms": [
+ "dao",
+ "voting",
+ "governance-token",
+ "quorum"
+ ],
+ "risks": [
+ "Mauvaise prise de décision",
+ "Faible participation",
+ "Attaques de gouvernance"
+ ],
+ "tags": [
+ "gouvernance",
+ "proposition",
+ "vote",
+ "dao"
+ ],
+ "common_questions": [
+ {
+ "question": "Qui peut soumettre une proposition de gouvernance ?",
+ "answer": "Cela varie selon les protocoles, mais généralement les détenteurs de tokens de gouvernance ayant un certain seuil minimum, ou des délégués reconnus peuvent soumettre des propositions."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Analysis of governance proposals and their dysfunction."
+ },
+ {
+ "title": "Calling for your support to keep Aave's governance community-driven",
+ "url": "/aave-governance-program/",
+ "description": "Aave proposal process."
+ }
+ ]
+ },
+ {
+ "id": "quorum",
+ "term": "Quorum",
+ "full_term": "Quorum de Vote",
+ "category": "governance",
+ "definition": "Le quorum est le nombre minimum de votes ou pourcentage de pouvoir de vote total requis pour qu'une proposition de gouvernance soit considérée comme valide et contraignante.",
+ "short_definition": "Participation minimale au vote requise pour la validité d'une proposition",
+ "example": "Si une DAO nécessite un quorum de 10% et possède 100M de tokens, au moins 10M de tokens doivent participer au vote pour que la proposition passe.",
+ "related_terms": [
+ "proposal",
+ "voting",
+ "governance-token",
+ "participation"
+ ],
+ "risks": [
+ "Faible participation",
+ "Blocage de gouvernance",
+ "Règle de minorité"
+ ],
+ "tags": [
+ "gouvernance",
+ "quorum",
+ "vote",
+ "participation"
+ ],
+ "common_questions": [
+ {
+ "question": "Que se passe-t-il si le quorum n'est pas atteint ?",
+ "answer": "La proposition est généralement rejetée ou reportée, même si elle a une majorité de votes favorables parmi les participants. Certains protocoles permettent des votes de suivi."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "delegation",
+ "term": "Délégation",
+ "full_term": "Délégation de Vote",
+ "category": "governance",
+ "definition": "La délégation permet aux détenteurs de tokens d'assigner leur pouvoir de vote à une autre partie (délégué) qui vote en leur nom, permettant une participation plus informée à la gouvernance.",
+ "short_definition": "Assigner le pouvoir de vote à une autre partie pour qu'elle vote en votre nom",
+ "example": "Si vous détenez des tokens UNI mais n'avez pas le temps de rechercher chaque proposition, vous pouvez déléguer votre pouvoir de vote à un membre de la communauté ou organisation de confiance.",
+ "related_terms": [
+ "voting-power",
+ "governance-token",
+ "representative",
+ "proxy-voting"
+ ],
+ "risks": [
+ "Désalignement du délégué",
+ "Centralisation du pouvoir",
+ "Participation directe réduite"
+ ],
+ "tags": [
+ "gouvernance",
+ "délégation",
+ "vote",
+ "procuration"
+ ],
+ "common_questions": [
+ {
+ "question": "Puis-je changer mon délégué à tout moment ?",
+ "answer": "Généralement oui, la plupart des systèmes de gouvernance permettent de changer de délégué ou de reprendre son pouvoir de vote à tout moment avant les votes."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Calling for your support to keep Aave's governance community-driven",
+ "url": "/aave-governance-program/",
+ "description": "Guide to vote delegation in Aave."
+ },
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Discusses delegation and voting power concentration."
+ }
+ ]
+ },
+ {
+ "id": "treasury",
+ "term": "Trésorerie",
+ "full_term": "Trésorerie DAO",
+ "category": "governance",
+ "definition": "Une trésorerie est un pool de fonds contrôlé par une DAO ou protocole, typiquement utilisé pour le financement du développement, la croissance de l'écosystème, les partenariats, et les incitations communautaires.",
+ "short_definition": "Pool de fonds contrôlé par DAO pour le développement et la croissance de l'écosystème",
+ "example": "La trésorerie d'Uniswap contient des millions en tokens UNI et autres actifs, utilisés pour financer des subventions, partenariats, et développement de protocole via des votes de gouvernance.",
+ "related_terms": [
+ "dao",
+ "governance",
+ "funding",
+ "grants"
+ ],
+ "risks": [
+ "Mauvaise allocation des fonds",
+ "Capture de gouvernance",
+ "Épuisement de la trésorerie"
+ ],
+ "tags": [
+ "gouvernance",
+ "trésorerie",
+ "financement",
+ "dao"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment les fonds de trésorerie sont-ils gérés ?",
+ "answer": "Via des votes de gouvernance où les détenteurs de tokens décident des allocations, généralement avec des processus de proposition, discussion, et vote formel."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Farewell to the GHO Liquidity Committee",
+ "url": "/farewell-glc/",
+ "description": "Treasury management and liquidity allocation."
+ },
+ {
+ "title": "Introducing my next step: The DeFi Collective",
+ "url": "/defi-collective/",
+ "description": "Nonprofit treasury for DeFi support."
+ }
+ ]
+ },
+ {
+ "id": "vote-escrow",
+ "term": "Vote Escrow",
+ "full_term": "Vote Escrow (veToken)",
+ "category": "governance",
+ "definition": "Vote escrow permet aux utilisateurs de verrouiller des tokens pour des périodes étendues afin de recevoir un pouvoir de vote amélioré et des récompenses. Des périodes de verrouillage plus longues fournissent typiquement plus de poids de vote et de bénéfices.",
+ "short_definition": "Verrouiller des tokens pour des périodes étendues pour gagner un pouvoir de vote et des récompenses améliorés",
+ "example": "Le système veCRV de Curve permet aux utilisateurs de verrouiller CRV jusqu'à 4 ans, avec des verrouillages plus longs fournissant plus de pouvoir de vote et des récompenses plus élevées des frais de protocole.",
+ "related_terms": [
+ "governance-token",
+ "voting-power",
+ "lock-up",
+ "incentive-alignment"
+ ],
+ "risks": [
+ "Périodes de verrouillage",
+ "Coût d'opportunité",
+ "Volatilité du prix des tokens"
+ ],
+ "tags": [
+ "gouvernance",
+ "vote-escrow",
+ "verrouillage",
+ "pouvoir-de-vote"
+ ],
+ "common_questions": [
+ {
+ "question": "Que se passe-t-il si je veux débloquer mes tokens plus tôt ?",
+ "answer": "La plupart des systèmes ve ne permettent pas de déblocage anticipé. Vous devez attendre la fin de la période de verrouillage, bien que certains protocoles offrent des marchés secondaires pour les positions verrouillées."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "veCRV model: time-weighted lock, fee share, gauge voting."
+ },
+ {
+ "title": "⚔ CRV wars: understanding the race to accumulate power to influence Curve Finance protocol",
+ "url": "/crv-wars/",
+ "description": "veCRV/vlCVX voting power comparison."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "veNFT evolution of vote-escrow."
+ }
+ ]
+ },
+ {
+ "id": "snapshot",
+ "term": "Snapshot",
+ "full_term": "Instantané de Gouvernance",
+ "category": "governance",
+ "definition": "Un snapshot est une hauteur de bloc spécifique à laquelle les détentions de tokens sont enregistrées pour le vote de gouvernance, empêchant les utilisateurs d'acheter des tokens juste pour voter puis de les vendre immédiatement.",
+ "short_definition": "Enregistrement des détentions de tokens à une hauteur de bloc spécifique pour un vote de gouvernance équitable",
+ "example": "Un vote de gouvernance annonce un snapshot au bloc 15 000 000, signifiant que seuls les portefeuilles détenant des tokens à ce bloc peuvent participer, empêchant l'achat de votes de dernière minute.",
+ "related_terms": [
+ "voting",
+ "governance-token",
+ "block-height",
+ "vote-buying"
+ ],
+ "risks": [
+ "Gaming de notification avancée",
+ "Manipulation du timing de snapshot",
+ "Exclusion des détenteurs récents"
+ ],
+ "tags": [
+ "gouvernance",
+ "snapshot",
+ "vote",
+ "équité"
+ ],
+ "common_questions": [
+ {
+ "question": "Combien de temps avant le vote le snapshot est-il pris ?",
+ "answer": "Cela varie selon les protocoles, mais généralement quelques jours à une semaine avant le début du vote pour permettre la préparation tout en empêchant les manipulations de dernière minute."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Janus: the new sworn enemy of DeFi protocols?",
+ "url": "/defi-janus/",
+ "description": "Snapshot as signaling mechanism in governance."
+ }
+ ]
+ },
+ {
+ "id": "tvl",
+ "term": "TVL",
+ "full_term": "Valeur Totale Verrouillée",
+ "category": "protocols",
+ "definition": "La Valeur Totale Verrouillée (TVL) mesure le montant total d'actifs déposés et verrouillés dans un protocole DeFi ou à travers l'écosystème DeFi entier. C'est une métrique clé pour évaluer l'adoption et la sécurité du protocole.",
+ "short_definition": "Montant total d'actifs déposés et verrouillés dans les protocoles DeFi",
+ "example": "Si Uniswap a 5 milliards$ de TVL, cela signifie que pour 5 milliards$ d'actifs crypto sont actuellement verrouillés dans les pools de liquidité d'Uniswap.",
+ "related_terms": [
+ "liquidity",
+ "protocol-metrics",
+ "market-cap",
+ "adoption"
+ ],
+ "risks": [
+ "Manipulation de TVL",
+ "Fuite de capitaux",
+ "Concentration de risque de protocole"
+ ],
+ "tags": [
+ "tvl",
+ "métriques",
+ "verrouillé",
+ "valeur"
+ ],
+ "common_questions": [
+ {
+ "question": "Une TVL plus élevée signifie-t-elle qu'un protocole est plus sûr ?",
+ "answer": "Pas nécessairement. Bien qu'une TVL élevée indique la confiance et l'adoption, elle peut aussi créer des cibles plus importantes pour les attaquants et ne garantit pas la sécurité du code."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "The Maurauder's Map of Decentralized Stablecoins",
+ "url": "/stablecoin-marauder-map/",
+ "description": "TVL comparison in stablecoin context."
+ }
+ ]
+ },
+ {
+ "id": "dapp",
+ "term": "dApp",
+ "full_term": "Application Décentralisée",
+ "category": "protocols",
+ "definition": "Une application décentralisée (dApp) est une application qui fonctionne sur un réseau blockchain plutôt que sur des serveurs centralisés. Les dApps utilisent des smart contracts pour leur logique backend et n'ont typiquement aucune autorité de contrôle unique.",
+ "short_definition": "Application fonctionnant sur blockchain plutôt que sur des serveurs centralisés",
+ "example": "Uniswap, Aave et Compound sont des dApps DeFi populaires qui fonctionnent entièrement sur Ethereum utilisant des smart contracts.",
+ "related_terms": [
+ "smart-contract",
+ "ethereum",
+ "decentralization",
+ "blockchain"
+ ],
+ "risks": [
+ "Bugs de smart contract",
+ "Attaques frontend",
+ "Risques de gouvernance"
+ ],
+ "tags": [
+ "dapp",
+ "décentralisé",
+ "application",
+ "blockchain"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre une dApp et une app traditionnelle ?",
+ "answer": "Les dApps fonctionnent sur blockchain avec des smart contracts, sont généralement open-source, résistantes à la censure, et n'ont pas de contrôle centralisé, contrairement aux apps traditionnelles."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "DeFi dApps as building blocks: PoolTogether, Rarible, Gitcoin."
+ }
+ ]
+ },
+ {
+ "id": "wallet",
+ "term": "Portefeuille",
+ "full_term": "Portefeuille de Cryptomonnaie",
+ "category": "protocols",
+ "definition": "Un portefeuille de cryptomonnaie est un outil logiciel ou matériel qui stocke vos clés privées et vous permet d'envoyer, recevoir, et gérer votre cryptomonnaie. Il ne stocke pas réellement les pièces, mais fournit l'accès à celles-ci sur la blockchain.",
+ "short_definition": "Outil pour stocker les clés privées et gérer la cryptomonnaie",
+ "example": "MetaMask est un portefeuille navigateur populaire qui vous permet d'interagir avec les protocoles DeFi, tandis que Ledger est un portefeuille matériel pour le stockage hors ligne sécurisé.",
+ "related_terms": [
+ "private-key",
+ "seed-phrase",
+ "address",
+ "metamask"
+ ],
+ "risks": [
+ "Perte d'accès",
+ "Piratage",
+ "Erreur utilisateur"
+ ],
+ "tags": [
+ "portefeuille",
+ "sécurité",
+ "stockage",
+ "clés"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle est la différence entre un portefeuille chaud et froid ?",
+ "answer": "Les portefeuilles chauds sont connectés à internet (comme MetaMask) pour faciliter les transactions, tandis que les portefeuilles froids (comme Ledger) stockent les clés hors ligne pour une sécurité maximale."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "kyc",
+ "term": "KYC",
+ "full_term": "Connaître Votre Client",
+ "category": "protocols",
+ "definition": "Connaître Votre Client (KYC) est un processus réglementaire nécessitant aux entreprises de vérifier l'identité de leurs clients. En crypto, certaines plateformes centralisées exigent le KYC, tandis que les protocoles DeFi fonctionnent typiquement sans.",
+ "short_definition": "Processus réglementaire nécessitant la vérification d'identité des clients",
+ "example": "Les échanges centralisés comme Coinbase exigent une vérification KYC avant que vous puissiez trader, mais les DEX comme Uniswap permettent le trading sans vérification d'identité.",
+ "related_terms": [
+ "aml",
+ "compliance",
+ "regulation",
+ "centralized-exchange"
+ ],
+ "risks": [
+ "Perte de confidentialité",
+ "Violations de données",
+ "Conformité réglementaire"
+ ],
+ "tags": [
+ "kyc",
+ "conformité",
+ "identité",
+ "réglementation"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi certains protocoles DeFi n'exigent-ils pas de KYC ?",
+ "answer": "Les protocoles DeFi décentralisés fonctionnent via des smart contracts sans entité centrale pour collecter ou vérifier les informations d'identité, préservant la pseudonymité des utilisateurs."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "gauge",
+ "term": "Gauge",
+ "full_term": "Gauge (Vote)",
+ "category": "trading",
+ "definition": "Un gauge est un mécanisme de smart contract utilisé dans des protocoles comme Curve et Velodrome qui dirige les émissions de tokens vers des pools de liquidité spécifiques. Les détenteurs de tokens (généralement des veTokens) votent sur les gauges pour déterminer comment les récompenses sont distribuées entre les pools. Le vote des gauges est central au modèle tokenomique ve(3,3) et constitue le champ de bataille principal des 'Curve Wars'.",
+ "short_definition": "Mécanisme de vote qui dirige les émissions de tokens vers des pools de liquidité spécifiques",
+ "example": "Les détenteurs de veCRV votent chaque semaine sur les gauges Curve pour diriger les émissions de CRV vers leurs pools préférés.",
+ "related_terms": [
+ "vote-escrow",
+ "bribes",
+ "ve-3-3",
+ "liquidity-mining"
+ ],
+ "risks": [
+ "Achat de votes via les bribes",
+ "Centralisation du pouvoir de vote",
+ "Dilution des émissions"
+ ],
+ "tags": [
+ "defi",
+ "gouvernance",
+ "émissions",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi les gauges sont-ils importants ?",
+ "answer": "Les gauges déterminent où les récompenses en tokens sont dirigées. Contrôler les votes des gauges signifie contrôler les incitations à la liquidité, c'est pourquoi les protocoles se battent agressivement pour le pouvoir de vote."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚔ CRV Wars: understanding the race to accumulate power to influence Curve Finance protocol",
+ "url": "/crv-wars/",
+ "description": "La bataille pour le contrôle des gauges sur Curve Finance."
+ }
+ ]
+ },
+ {
+ "id": "bribes",
+ "term": "Bribes",
+ "full_term": "Bribes / Incitations au Vote",
+ "category": "trading",
+ "definition": "Les bribes (ou incitations au vote) sont des récompenses en tokens offertes aux détenteurs de veTokens en échange de la direction de leurs votes de gauge vers des pools de liquidité spécifiques. Les protocoles ou projets paient des bribes pour attirer les émissions vers leurs pools, créant un marché secondaire pour le pouvoir de vote.",
+ "short_definition": "Récompenses en tokens payées aux votants pour diriger les émissions vers des pools spécifiques",
+ "example": "Un nouveau projet de stablecoin dépose 100k$ en bribes sur Votium pour attirer les votes veCRV vers son pool, assurant une liquidité profonde pour son token.",
+ "related_terms": [
+ "gauge",
+ "vote-escrow",
+ "ve-3-3",
+ "liquidity-mining"
+ ],
+ "risks": [
+ "Incertitude sur le ROI des bribes",
+ "Capital mercenaire",
+ "Capture de la gouvernance"
+ ],
+ "tags": [
+ "defi",
+ "gouvernance",
+ "incitations",
+ "amm"
+ ],
+ "common_questions": [
+ {
+ "question": "Les bribes sont-ils légitimes ?",
+ "answer": "En DeFi, les 'bribes' sont un mécanisme standard et transparent. Le terme est provocateur mais la pratique consiste simplement à payer pour le pouvoir de vote afin de diriger les émissions — entièrement on-chain et auditable."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "⚔ CRV Wars",
+ "url": "/crv-wars/",
+ "description": "Les bribes comme arme dans les CRV Wars."
+ }
+ ]
+ },
+ {
+ "id": "capital-efficiency",
+ "term": "Efficacité du Capital",
+ "full_term": "Efficacité du Capital",
+ "category": "trading",
+ "definition": "L'efficacité du capital mesure l'efficacité avec laquelle un protocole utilise le capital déposé pour générer des rendements ou faciliter les échanges. Une meilleure efficacité signifie que moins de capital est nécessaire pour le même résultat. Dans les AMMs, la liquidité concentrée (Uniswap v3) et le liquidity shaping (Maverick) améliorent l'efficacité du capital.",
+ "short_definition": "Efficacité avec laquelle un protocole utilise le capital déposé",
+ "example": "La liquidité concentrée d'Uniswap v3 peut offrir la même profondeur de trading qu'Uniswap v2 avec jusqu'à 4000x moins de capital.",
+ "related_terms": [
+ "concentrated-liquidity",
+ "liquidity-shaping",
+ "amm",
+ "liquidity-pool"
+ ],
+ "risks": [
+ "Perte impermanente amplifiée",
+ "Complexité accrue",
+ "Gestion active requise"
+ ],
+ "tags": [
+ "defi",
+ "amm",
+ "liquidité",
+ "efficacité"
+ ],
+ "common_questions": [
+ {
+ "question": "Une meilleure efficacité du capital est-elle toujours souhaitable ?",
+ "answer": "Pas nécessairement. Une efficacité du capital plus élevée s'accompagne souvent d'une complexité accrue et d'une perte impermanente amplifiée."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Comment Maverick améliore l'efficacité du capital."
+ }
+ ]
+ },
+ {
+ "id": "liquidity-shaping",
+ "term": "Liquidity Shaping",
+ "full_term": "Liquidity Shaping",
+ "category": "trading",
+ "definition": "Le liquidity shaping est une évolution de la liquidité concentrée où les fournisseurs de liquidité peuvent définir des schémas de distribution personnalisés pour leur capital sur les plages de prix. Pionnier par Maverick Protocol, il permet aux LPs de déplacer automatiquement leur liquidité avec les mouvements de prix.",
+ "short_definition": "Schémas de distribution de liquidité personnalisés qui s'ajustent automatiquement avec les prix",
+ "example": "Sur Maverick, un LP peut choisir un mode 'Mode Right' qui suit le prix de l'ETH à la hausse, gardant la liquidité concentrée autour du prix actuel sans ajustement manuel.",
+ "related_terms": [
+ "concentrated-liquidity",
+ "capital-efficiency",
+ "amm",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Risque de nouveau mécanisme",
+ "Risque de smart contract",
+ "Complexité de sélection du mode"
+ ],
+ "tags": [
+ "defi",
+ "amm",
+ "liquidité",
+ "innovation"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle différence entre liquidity shaping et liquidité concentrée ?",
+ "answer": "La liquidité concentrée (Uniswap v3) nécessite une sélection et un rééquilibrage manuels. Le liquidity shaping (Maverick) ajoute des modes directionnels automatiques qui déplacent la liquidité avec le prix."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Plongée dans l'innovation du liquidity shaping de Maverick."
+ }
+ ]
+ },
+ {
+ "id": "composability",
+ "term": "Composabilité",
+ "full_term": "Composabilité",
+ "category": "technical",
+ "definition": "La composabilité est la capacité des protocoles DeFi à interagir et à se construire les uns sur les autres de manière transparente, souvent appelée 'money legos'. Comme les smart contracts sont ouverts et sans permission, tout protocole peut s'intégrer avec n'importe quel autre, créant des produits financiers complexes en combinant des briques simples.",
+ "short_definition": "Capacité des protocoles DeFi à s'intégrer et se construire les uns sur les autres",
+ "example": "Un utilisateur peut déposer de l'ETH dans Lido (obtenant du stETH), utiliser le stETH comme collatéral sur Aave (empruntant des USDC), puis fournir de la liquidité USDC sur Curve — trois protocoles composés ensemble.",
+ "related_terms": [
+ "smart-contract",
+ "defi",
+ "flash-loan",
+ "lending"
+ ],
+ "risks": [
+ "Défaillances en cascade entre protocoles",
+ "Risque de dépendance",
+ "Risque de complexité"
+ ],
+ "tags": [
+ "defi",
+ "technique",
+ "money-legos",
+ "intégration"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi la composabilité est-elle importante ?",
+ "answer": "La composabilité permet aux développeurs de construire sur des protocoles existants plutôt que de repartir de zéro, accélérant l'innovation."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "DeFi is a toolbox reaching beyond finance",
+ "url": "/defi-beyond-finance/",
+ "description": "La composabilité de la DeFi au-delà de la finance."
+ }
+ ]
+ },
+ {
+ "id": "rollup",
+ "term": "Rollup",
+ "full_term": "Rollup",
+ "category": "technical",
+ "definition": "Un rollup est une solution de scalabilité Layer 2 qui exécute les transactions hors de la chaîne principale Ethereum mais publie les données de transaction sur le Layer 1 pour la sécurité. Il existe deux types principaux : les Optimistic Rollups (Optimism, Arbitrum) et les ZK-Rollups (zkSync, StarkNet) qui utilisent des preuves à connaissance nulle.",
+ "short_definition": "Solution de scalabilité Layer 2 qui exécute les transactions hors chaîne tout en publiant les données sur le Layer 1",
+ "example": "Arbitrum est un Optimistic Rollup qui traite les transactions à une fraction du coût du gas d'Ethereum mainnet tout en héritant des garanties de sécurité d'Ethereum.",
+ "related_terms": [
+ "layer-2",
+ "ethereum",
+ "gas",
+ "bridge"
+ ],
+ "risks": [
+ "Risque de bridge lors du transfert d'actifs",
+ "Centralisation du séquenceur",
+ "Délais de retrait (Optimistic)"
+ ],
+ "tags": [
+ "scalabilité",
+ "layer-2",
+ "ethereum",
+ "technique"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle différence entre Optimistic et ZK rollups ?",
+ "answer": "Les Optimistic Rollups supposent la validité et permettent des preuves de fraude pendant une période de contestation. Les ZK-Rollups prouvent la validité mathématiquement avec des preuves à connaissance nulle."
+ }
+ ],
+ "related_articles": []
+ },
+ {
+ "id": "ve-3-3",
+ "term": "ve(3,3)",
+ "full_term": "ve(3,3)",
+ "category": "technical",
+ "definition": "ve(3,3) est un modèle tokenomique combinant le mécanisme vote-escrow (ve) de Curve avec la théorie des jeux (3,3) d'OlympusDAO. Pionnier par Solidly d'Andre Cronje et affiné par Velodrome, il aligne les incitations en permettant aux détenteurs de veTokens de voter sur les émissions des gauges et de gagner les frais des pools pour lesquels ils votent.",
+ "short_definition": "Modèle tokenomique combinant le verrouillage vote-escrow avec la théorie des jeux coopérative (3,3)",
+ "example": "Velodrome sur Optimism utilise ve(3,3) : les détenteurs de VELO verrouillent leurs tokens en veVELO, votent sur les gauges et gagnent 100% des frais de trading des pools pour lesquels ils votent.",
+ "related_terms": [
+ "vote-escrow",
+ "gauge",
+ "bribes",
+ "venft"
+ ],
+ "risks": [
+ "Critique de ponzinomics",
+ "Durabilité des émissions",
+ "Capture de la gouvernance"
+ ],
+ "tags": [
+ "tokenomique",
+ "gouvernance",
+ "defi",
+ "modèle-ve"
+ ],
+ "common_questions": [
+ {
+ "question": "Le ve(3,3) est-il durable à long terme ?",
+ "answer": "La durabilité dépend de la capacité du protocole à générer des frais de trading réels qui justifient les émissions."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗡 CRV vs VELO Wars",
+ "url": "/crv-vs-velo/",
+ "description": "Comparaison du modèle ve de Curve avec le ve(3,3) de Velodrome."
+ }
+ ]
+ },
+ {
+ "id": "venft",
+ "term": "veNFT",
+ "full_term": "veNFT (NFT Vote-Escrow)",
+ "category": "technical",
+ "definition": "Un veNFT est un NFT qui représente une position de token vote-escrow. Contrairement aux veTokens traditionnels (non-transférables), les veNFTs rendent les positions verrouillées échangeables en les enveloppant sous forme de NFTs. Cela permet aux utilisateurs de sortir de positions verrouillées sur les marchés secondaires.",
+ "short_definition": "NFT représentant une position de token vote-escrow, rendant les positions verrouillées échangeables",
+ "example": "Sur Velodrome, verrouiller des VELO crée un veVELO NFT. Ce NFT peut être échangé sur les marchés secondaires.",
+ "related_terms": [
+ "vote-escrow",
+ "ve-3-3",
+ "nft",
+ "gauge"
+ ],
+ "risks": [
+ "Décote du prix du veNFT par rapport au sous-jacent",
+ "Risque de smart contract",
+ "Risque de liquidité sur les marchés secondaires"
+ ],
+ "tags": [
+ "gouvernance",
+ "nft",
+ "vote-escrow",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi envelopper les veTokens en NFTs ?",
+ "answer": "Les veTokens traditionnels sont verrouillés et non-transférables, ce qui crée une inefficacité du capital. Les veNFTs résolvent cela en rendant les positions échangeables, composables et utilisables comme collatéral."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "veNFT Infrastructure",
+ "url": "/veNFT-infrastructure/",
+ "description": "Plongée dans l'écosystème et l'infrastructure veNFT."
+ }
+ ]
+ },
+ {
+ "id": "health-factor",
+ "term": "Facteur de Santé",
+ "full_term": "Facteur de Santé",
+ "category": "risks",
+ "definition": "Le facteur de santé est un indicateur numérique de la sécurité d'une position de prêt, représentant le ratio entre la valeur du collatéral et la valeur empruntée ajusté par les seuils de liquidation. Au-dessus de 1, la position est sûre ; en dessous de 1, elle peut être liquidée.",
+ "short_definition": "Indicateur numérique de la sécurité d'une position de prêt par rapport au seuil de liquidation",
+ "example": "Avec un facteur de santé de 1.5, votre position a une marge de sécurité de 50% avant liquidation.",
+ "related_terms": [
+ "liquidation",
+ "ltv",
+ "collateral",
+ "lending"
+ ],
+ "risks": [
+ "Chute rapide pendant la volatilité",
+ "Risque de cascade de liquidations",
+ "Risque de délai d'oracle"
+ ],
+ "tags": [
+ "prêt",
+ "risques",
+ "liquidation",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Quel est un facteur de santé sûr ?",
+ "answer": "Cela dépend de la volatilité de l'actif. Pour les actifs volatils, un facteur de 2+ est recommandé. Pour les stablecoins, 1.5 peut suffire."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Money Markets Risk",
+ "url": "/money-markets-risk/",
+ "description": "Comprendre les métriques de risque dans les protocoles de prêt."
+ }
+ ]
+ },
+ {
+ "id": "liquidation-cascade",
+ "term": "Cascade de Liquidations",
+ "full_term": "Cascade de Liquidations",
+ "category": "risks",
+ "definition": "Une cascade de liquidations se produit lorsqu'une série de liquidations déclenche des baisses de prix supplémentaires, qui provoquent la sous-collatéralisation de plus de positions, déclenchant encore plus de liquidations dans une spirale descendante auto-renforcée.",
+ "short_definition": "Réaction en chaîne de liquidations où chacune provoque des baisses de prix et d'autres liquidations",
+ "example": "Lors du crash de mai 2021, la chute de 30% de l'ETH a déclenché des liquidations massives sur Aave et Compound, qui ont vendu plus d'ETH, faisant baisser les prix encore plus.",
+ "related_terms": [
+ "liquidation",
+ "health-factor",
+ "collateral",
+ "lending"
+ ],
+ "risks": [
+ "Défaillance systémique du protocole",
+ "Accumulation de dette non couverte",
+ "Défaillance des oracles sous stress"
+ ],
+ "tags": [
+ "risques",
+ "prêt",
+ "systémique",
+ "liquidation"
+ ],
+ "common_questions": [
+ {
+ "question": "Comment les protocoles peuvent-ils prévenir les cascades de liquidations ?",
+ "answer": "Par des ratios LTV conservateurs, des mécanismes de liquidation graduelle, des disjoncteurs et des sources d'oracles diversifiées."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Money Markets Risk",
+ "url": "/money-markets-risk/",
+ "description": "Analyse du risque systémique dans le prêt DeFi."
+ }
+ ]
+ },
+ {
+ "id": "depeg",
+ "term": "Depeg",
+ "full_term": "Depeg",
+ "category": "risks",
+ "definition": "Un depeg se produit lorsqu'un stablecoin ou un actif indexé perd son ancrage de prix prévu (typiquement 1$ pour les stablecoins USD). Les causes incluent les bank runs, les crises de collatéral, les défaillances d'oracle ou la perte de confiance. La gravité va de fluctuations mineures à l'effondrement total (ex: UST/LUNA).",
+ "short_definition": "Quand un stablecoin ou actif indexé perd son ancrage de prix prévu",
+ "example": "L'USDC a brièvement décroché à 0,87$ en mars 2023 lorsque Silicon Valley Bank (détenant 3,3 milliards$ des réserves de Circle) s'est effondrée.",
+ "related_terms": [
+ "stablecoin",
+ "collateral",
+ "oracle",
+ "liquidation"
+ ],
+ "risks": [
+ "Depegs en cascade à travers la DeFi",
+ "Déséquilibre des pools de liquidité",
+ "Effondrement de la valeur du collatéral"
+ ],
+ "tags": [
+ "stablecoin",
+ "risques",
+ "ancrage",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Tous les depegs sont-ils dangereux ?",
+ "answer": "Non. Les depegs temporaires mineurs (ex: déviation de 0,5%) sont normaux et corrigés par les arbitrageurs. Les depegs soutenus dépassant 2-5% signalent des problèmes plus profonds."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗺 The Stablecoin Marauder Map",
+ "url": "/stablecoin-marauder-map/",
+ "description": "Cartographie des mécanismes et risques des stablecoins."
+ }
+ ]
+ },
+ {
+ "id": "liquid-staking",
+ "term": "Staking Liquide",
+ "full_term": "Staking Liquide",
+ "category": "strategies",
+ "definition": "Le staking liquide permet aux utilisateurs de staker leurs tokens (ex: ETH) et de recevoir un token dérivé liquide (ex: stETH, rETH) en retour. Ce dérivé peut être utilisé à travers la DeFi pendant que l'actif sous-jacent génère des récompenses de staking.",
+ "short_definition": "Staker des tokens tout en recevant un dérivé liquide utilisable en DeFi",
+ "example": "Staker 10 ETH via Lido donne 10 stETH, qui génère des récompenses de staking (~3-5% APR) tout en étant utilisable comme collatéral sur Aave.",
+ "related_terms": [
+ "staking",
+ "restaking",
+ "composability",
+ "collateral"
+ ],
+ "risks": [
+ "Depeg du dérivé par rapport au sous-jacent",
+ "Risque de smart contract",
+ "Risque de slashing du validateur"
+ ],
+ "tags": [
+ "staking",
+ "defi",
+ "ethereum",
+ "stratégies"
+ ],
+ "common_questions": [
+ {
+ "question": "Le staking liquide est-il sûr ?",
+ "answer": "Le staking liquide ajoute un risque de smart contract en plus du risque de staking classique. Les protocoles majeurs comme Lido et Rocket Pool sont éprouvés, mais le token dérivé peut temporairement décrocher."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Les dérivés de staking liquide dans le contexte des échanges d'actifs indexés."
+ }
+ ]
+ },
+ {
+ "id": "restaking",
+ "term": "Restaking",
+ "full_term": "Restaking",
+ "category": "strategies",
+ "definition": "Le restaking est la pratique d'utiliser des actifs déjà stakés (comme le stETH) pour fournir de la sécurité à des protocoles ou services supplémentaires. Pionnier par EigenLayer, le restaking permet aux validateurs Ethereum de sécuriser d'autres réseaux, gagnant des récompenses supplémentaires mais introduisant des risques de slashing additionnels.",
+ "short_definition": "Utiliser des actifs déjà stakés pour sécuriser des protocoles supplémentaires et gagner un rendement additionnel",
+ "example": "Un staker ETH dépose du stETH dans EigenLayer pour restaker, gagnant les récompenses de staking ETH de base plus des récompenses supplémentaires.",
+ "related_terms": [
+ "liquid-staking",
+ "staking",
+ "slashing",
+ "composability"
+ ],
+ "risks": [
+ "Conditions de slashing supplémentaires",
+ "Empilement des risques de smart contract",
+ "Risque systémique de la sécurité partagée"
+ ],
+ "tags": [
+ "staking",
+ "defi",
+ "sécurité",
+ "rendements"
+ ],
+ "common_questions": [
+ {
+ "question": "Quels sont les risques du restaking ?",
+ "answer": "Le restaking empile les risques : vous faites face aux risques de staking de base plus des conditions de slashing supplémentaires de chaque service que vous sécurisez."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Leverage with SIR Protocol",
+ "url": "/leverage-sir/",
+ "description": "Le restaking dans le contexte des stratégies de rendement avec levier."
+ }
+ ]
+ },
+ {
+ "id": "seigniorage",
+ "term": "Seigneuriage",
+ "full_term": "Seigneuriage",
+ "category": "tokens",
+ "definition": "En crypto, le seigneuriage désigne le profit qu'un protocole de stablecoin réalise en émettant des tokens qui coûtent moins à créer que leur valeur faciale. Les stablecoins algorithmiques utilisent des mécanismes de seigneuriage : quand la demande augmente, de nouveaux tokens sont mintés, et quand elle diminue, des tokens sont brûlés.",
+ "short_definition": "Profit tiré de l'émission de stablecoins qui coûtent moins à créer que leur valeur faciale",
+ "example": "Basis Cash et Empty Set Dollar utilisaient des modèles de seigneuriage : quand le stablecoin s'échangeait au-dessus de 1$, de nouveaux tokens étaient mintés, mais les deux ont échoué à maintenir leur ancrage.",
+ "related_terms": [
+ "stablecoin",
+ "depeg",
+ "tokenomics",
+ "emission"
+ ],
+ "risks": [
+ "Risque de spirale mortelle",
+ "Instabilité de l'ancrage",
+ "Dynamiques de bank run"
+ ],
+ "tags": [
+ "stablecoin",
+ "tokenomique",
+ "algorithmique",
+ "tokens"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi les stablecoins à seigneuriage ont-ils échoué ?",
+ "answer": "La plupart ont échoué car le mécanisme de contraction de l'offre était trop faible. Une fois la confiance rompue, la spirale mortelle rend la récupération quasi impossible."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Understanding Seigniorage: Basis Cash & ESD",
+ "url": "/seigniorage-basis-esd/",
+ "description": "Analyse des mécanismes de seigneuriage et de leurs échecs."
+ }
+ ]
+ },
+ {
+ "id": "overcollateralization",
+ "term": "Surcollatéralisation",
+ "full_term": "Surcollatéralisation",
+ "category": "tokens",
+ "definition": "La surcollatéralisation signifie verrouiller plus de valeur en collatéral que le montant emprunté ou minté. Ce tampon protège les prêteurs et les détenteurs de stablecoins contre les baisses de prix de l'actif collatéral. C'est le fondement de la plupart des protocoles de prêt DeFi et des stablecoins décentralisés.",
+ "short_definition": "Verrouiller plus de valeur en collatéral que le montant emprunté comme tampon de sécurité",
+ "example": "Pour emprunter 1000 LUSD sur Liquity, vous devez déposer au moins 1100$ d'ETH (ratio de collatéralisation minimum de 110%).",
+ "related_terms": [
+ "collateral",
+ "ltv",
+ "liquidation",
+ "cdp"
+ ],
+ "risks": [
+ "Inefficacité du capital",
+ "Risque de liquidation si le collatéral baisse",
+ "Coût d'opportunité du capital verrouillé"
+ ],
+ "tags": [
+ "prêt",
+ "stablecoin",
+ "collatéral",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi ne pas utiliser une collatéralisation 1:1 ?",
+ "answer": "Les actifs crypto sont volatils. Si le collatéral baisse en dessous du prêt, le protocole accumule de la dette non couverte. La surcollatéralisation fournit un tampon pour liquider avant que cela n'arrive."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Liquity Protocol",
+ "url": "/liquity-protocol/",
+ "description": "La surcollatéralisation dans le design du stablecoin Liquity."
+ }
+ ]
+ },
+ {
+ "id": "emission",
+ "term": "Émission",
+ "full_term": "Émission (Token)",
+ "category": "yields",
+ "definition": "L'émission de tokens désigne le rythme et le calendrier auxquels de nouveaux tokens sont créés et distribués par un protocole. Les émissions sont utilisées pour inciter les fournisseurs de liquidité, les stakers ou d'autres participants. Le calendrier d'émission est un facteur critique de la tokenomique.",
+ "short_definition": "Rythme et calendrier auxquels de nouveaux tokens sont créés et distribués",
+ "example": "Curve émet des tokens CRV aux fournisseurs de liquidité selon les poids des gauges. Le taux d'émission diminue progressivement selon un calendrier prédéfini.",
+ "related_terms": [
+ "liquidity-mining",
+ "gauge",
+ "tokenomics",
+ "flywheel"
+ ],
+ "risks": [
+ "Pression vendeuse inflationniste",
+ "Projections d'APY non durables",
+ "Capital mercenaire"
+ ],
+ "tags": [
+ "tokenomique",
+ "rendements",
+ "incitations",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Les émissions sont-elles durables ?",
+ "answer": "Les émissions ne sont durables que si le protocole génère suffisamment de valeur réelle (frais, revenus) pour justifier la distribution de tokens."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎡 The DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "Comment les émissions alimentent les dynamiques de flywheel."
+ }
+ ]
+ },
+ {
+ "id": "protocol-owned-liquidity",
+ "term": "Liquidité Possédée par le Protocole",
+ "full_term": "Liquidité Possédée par le Protocole (POL)",
+ "category": "governance",
+ "definition": "La Liquidité Possédée par le Protocole (POL) est de la liquidité qui appartient à la trésorerie du protocole plutôt que d'être louée à des fournisseurs de liquidité externes via des émissions. Au lieu de payer des incitations continues, les protocoles acquièrent leurs propres positions LP.",
+ "short_definition": "Liquidité détenue par la trésorerie du protocole plutôt que louée à des LPs externes",
+ "example": "Au lieu de payer 1M$/mois en émissions pour attirer de la liquidité, un protocole utilise le bonding pour acquérir ses propres tokens LP, construisant une liquidité permanente.",
+ "related_terms": [
+ "liquidity-mining",
+ "dao",
+ "flywheel",
+ "emission"
+ ],
+ "risks": [
+ "Perte impermanente sur les positions LP de la trésorerie",
+ "Risque d'allocation du capital",
+ "Complexité du mécanisme de bonding"
+ ],
+ "tags": [
+ "gouvernance",
+ "trésorerie",
+ "liquidité",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Pourquoi la POL est-elle meilleure que la liquidité louée ?",
+ "answer": "La liquidité louée part quand les incitations s'arrêtent. La POL est permanente — le protocole n'a pas besoin de payer continuellement des émissions. Elle génère aussi des frais de trading pour la trésorerie."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Farewell GLC",
+ "url": "/farewell-glc/",
+ "description": "La liquidité possédée par le protocole dans la gestion de trésorerie DAO."
+ }
+ ]
+ },
+ {
+ "id": "flywheel",
+ "term": "Flywheel",
+ "full_term": "Flywheel",
+ "category": "governance",
+ "definition": "Un flywheel DeFi est un cycle auto-renforcé où chaque composant du design d'un protocole amplifie les autres, créant une boucle vertueuse de croissance. Typiquement : plus de liquidité → meilleurs trades → plus de frais → plus de valeur du token → plus de verrouillage → plus de pouvoir de gouvernance → émissions dirigées → plus de liquidité.",
+ "short_definition": "Cycle auto-renforcé où les composants du protocole amplifient mutuellement leur croissance",
+ "example": "Le flywheel de Velodrome : les traders génèrent des frais → les détenteurs de veVELO gagnent les frais en votant → plus de VELO est verrouillé → les émissions attirent plus de liquidité → plus de traders.",
+ "related_terms": [
+ "ve-3-3",
+ "gauge",
+ "emission",
+ "protocol-owned-liquidity"
+ ],
+ "risks": [
+ "Spirale mortelle quand le flywheel s'inverse",
+ "Dépendance à la croissance continue",
+ "Vulnérabilité aux chocs externes"
+ ],
+ "tags": [
+ "tokenomique",
+ "gouvernance",
+ "croissance",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Qu'est-ce qui brise un flywheel ?",
+ "answer": "Un flywheel peut se briser quand n'importe quel composant faiblit : un crash du marché réduit les frais, les émissions deviennent non durables, ou un concurrent offre de meilleures incitations."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🎡 The DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "Plongée dans les mécaniques de flywheel en DeFi."
+ }
+ ]
+ },
+ {
+ "id": "money-market",
+ "term": "Marché Monétaire",
+ "full_term": "Marché Monétaire",
+ "category": "protocols",
+ "definition": "En DeFi, un marché monétaire est un protocole qui facilite le prêt et l'emprunt d'actifs crypto via des smart contracts. Les prêteurs déposent des actifs dans des pools et gagnent des intérêts, tandis que les emprunteurs fournissent du collatéral et paient des intérêts. Les principaux marchés monétaires incluent Aave, Compound et Morpho.",
+ "short_definition": "Protocole facilitant le prêt et l'emprunt décentralisés d'actifs crypto",
+ "example": "Sur Aave, vous déposez 10 ETH comme collatéral et empruntez 5000 USDC à taux variable.",
+ "related_terms": [
+ "lending",
+ "borrowing",
+ "collateral",
+ "health-factor"
+ ],
+ "risks": [
+ "Risque de smart contract",
+ "Risque de liquidation",
+ "Volatilité des taux d'intérêt",
+ "Manipulation d'oracle"
+ ],
+ "tags": [
+ "prêt",
+ "protocoles",
+ "defi",
+ "emprunt"
+ ],
+ "common_questions": [
+ {
+ "question": "En quoi les marchés monétaires DeFi diffèrent-ils des traditionnels ?",
+ "answer": "Les marchés monétaires DeFi sont sans permission, non-custodiaux et fonctionnent 24/7 via des smart contracts. Les taux s'ajustent algorithmiquement selon l'offre et la demande."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "Money Markets Risk",
+ "url": "/money-markets-risk/",
+ "description": "Comprendre le risque dans les marchés monétaires DeFi."
+ }
+ ]
+ },
+ {
+ "id": "cdp",
+ "term": "CDP",
+ "full_term": "CDP (Position de Dette Collatéralisée)",
+ "category": "protocols",
+ "definition": "Une Position de Dette Collatéralisée (CDP) est un smart contract où un utilisateur dépose du collatéral pour minter ou emprunter des stablecoins. Popularisé par MakerDAO (déposer de l'ETH, minter du DAI), les CDPs sont l'épine dorsale des stablecoins décentralisés et du prêt on-chain.",
+ "short_definition": "Smart contract où du collatéral est déposé pour minter ou emprunter des stablecoins",
+ "example": "Sur MakerDAO, vous ouvrez un CDP en déposant 3000$ d'ETH et en mintant 1500 DAI (collatéralisation de 200%). Si l'ETH chute et votre ratio passe sous 150%, votre position est liquidée.",
+ "related_terms": [
+ "overcollateralization",
+ "liquidation",
+ "stablecoin",
+ "money-market"
+ ],
+ "risks": [
+ "Risque de liquidation",
+ "Volatilité du collatéral",
+ "Risque de smart contract",
+ "Changements de frais de stabilité"
+ ],
+ "tags": [
+ "prêt",
+ "stablecoin",
+ "protocoles",
+ "defi"
+ ],
+ "common_questions": [
+ {
+ "question": "Quelle différence entre un CDP et un prêt classique ?",
+ "answer": "Un CDP permet de minter de nouveaux stablecoins contre votre collatéral, tandis qu'un prêt DeFi classique emprunte des actifs existants d'un pool. Les CDPs créent de la nouvelle offre ; les pools de prêt redistribuent l'offre existante."
+ }
+ ],
+ "related_articles": [
+ {
+ "title": "🗺 The Stablecoin Marauder Map",
+ "url": "/stablecoin-marauder-map/",
+ "description": "Les CDPs dans le paysage plus large des stablecoins."
+ }
+ ]
+ },
+ {
+ "id": "lp-token",
+ "term": "Token LP",
+ "full_term": "Token de Fournisseur de Liquidité",
+ "category": "tokens",
+ "definition": "Un token LP est reçu en échange de la fourniture de liquidité à un pool. Il représente votre part du pool et peut être échangé pour récupérer vos actifs déposés plus les frais accumulés. Les tokens LP peuvent aussi être stakés dans des farms pour des récompenses supplémentaires.",
+ "short_definition": "Token représentant la part d'un utilisateur dans un pool de liquidité",
+ "example": "En fournissant 1 ETH et 2000 USDC à un pool Uniswap, vous recevez des tokens LP ETH/USDC représentant votre part du pool.",
+ "related_terms": [
+ "liquidity-pool",
+ "liquidity-providing",
+ "amm",
+ "impermanent-loss"
+ ],
+ "risks": [
+ "Impermanent loss",
+ "Smart contract risk",
+ "Pool-specific risks"
+ ],
+ "tags": [
+ "tokens",
+ "lp",
+ "liquidité",
+ "pool"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "🤖 Vaults: DeFi Investing Streamlined?",
+ "url": "/vaults/",
+ "description": "LP tokens as vault deposits and tokenized strategies."
+ }
+ ]
+ },
+ {
+ "id": "synthetic-asset",
+ "term": "Actif Synthétique",
+ "full_term": "Actif Synthétique",
+ "category": "tokens",
+ "definition": "Un actif synthétique est un token blockchain qui réplique la valeur d'un actif du monde réel (actions, matières premières, devises) sans nécessiter la détention de l'actif sous-jacent. Ils utilisent des oracles de prix et du collatéral pour maintenir leur ancrage.",
+ "short_definition": "Token blockchain qui suit le prix d'un actif du monde réel",
+ "example": "sETH de Synthetix suit le prix de l'ETH, sTSLA suit le cours de l'action Tesla, permettant une exposition sans détenir directement ces actifs.",
+ "related_terms": [
+ "derivatives",
+ "oracle",
+ "collateral",
+ "price-feeds"
+ ],
+ "risks": [
+ "Oracle manipulation",
+ "Collateral liquidation",
+ "Tracking errors"
+ ],
+ "tags": [
+ "synthétique",
+ "actif",
+ "dérivé",
+ "tokens"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Exploring stable assets on Ethereum: approaches & endgame",
+ "url": "/ethereum-stable-assets/",
+ "description": "Pegged/synthetic assets on Ethereum."
+ }
+ ]
+ },
+ {
+ "id": "rebase-token",
+ "term": "Token Rebase",
+ "full_term": "Token à Offre Élastique",
+ "category": "tokens",
+ "definition": "Un token rebase (ou à offre élastique) ajuste automatiquement son offre en circulation pour cibler un prix spécifique. Quand le prix est au-dessus de la cible, de nouveaux tokens sont mintés ; quand il est en dessous, les tokens sont brûlés ou contractés.",
+ "short_definition": "Token avec une offre élastique qui s'ajuste pour maintenir la stabilité du prix",
+ "example": "Ampleforth (AMPL) ajuste quotidiennement l'offre de chaque portefeuille : si le prix est au-dessus de 1$, les soldes augmentent ; en dessous, ils diminuent.",
+ "related_terms": [
+ "elastic-supply",
+ "algorithmic",
+ "price-stability",
+ "inflation"
+ ],
+ "risks": [
+ "Supply volatility",
+ "Complexity",
+ "Unpredictable returns"
+ ],
+ "tags": [
+ "rebase",
+ "élastique",
+ "offre",
+ "tokens"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "Rebase mechanisms in ESD, DSD: expansion/contraction."
+ },
+ {
+ "title": "⚖ The tale of two seigniorage models: Basis vs ESD",
+ "url": "/seigniorage-basis-esd/",
+ "description": "Elastic currency models and rebases."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "Anti-dilutive rebases for veSOLID holders."
+ }
+ ]
+ },
+ {
+ "id": "utility-token",
+ "term": "Token Utilitaire",
+ "full_term": "Token Utilitaire",
+ "category": "tokens",
+ "definition": "Un token utilitaire est un token qui donne accès aux fonctionnalités, services ou produits d'un protocole spécifique. Contrairement aux tokens de gouvernance qui confèrent un pouvoir de vote, les tokens utilitaires servent de 'carburant' pour utiliser le protocole.",
+ "short_definition": "Token donnant accès aux fonctionnalités ou services d'un protocole",
+ "example": "Le LINK de Chainlink est un token utilitaire : il est utilisé pour payer les services d'oracle et récompenser les opérateurs de nœuds.",
+ "related_terms": [
+ "governance-token",
+ "protocol",
+ "services",
+ "ecosystem"
+ ],
+ "risks": [
+ "Utility demand changes",
+ "Competition",
+ "Protocol changes"
+ ],
+ "tags": [
+ "tokens",
+ "utilitaire",
+ "accès",
+ "protocole"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "nft",
+ "term": "NFT",
+ "full_term": "Token Non-Fongible",
+ "category": "tokens",
+ "definition": "Un NFT (Non-Fungible Token) est un token numérique unique qui représente la propriété d'un élément spécifique — art, musique, objets de jeu, etc. Contrairement aux tokens fongibles comme ETH, chaque NFT est unique et non interchangeable.",
+ "short_definition": "Token numérique unique représentant la propriété d'un élément spécifique",
+ "example": "Un artiste crée un NFT de son œuvre sur Ethereum. L'acheteur possède le token unique prouvant la propriété de cette œuvre numérique.",
+ "related_terms": [
+ "erc-721",
+ "digital-ownership",
+ "collectibles",
+ "metadata"
+ ],
+ "risks": [
+ "Illiquidity",
+ "Speculative bubbles",
+ "Storage dependencies"
+ ],
+ "tags": [
+ "nft",
+ "non-fongible",
+ "propriété",
+ "tokens"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Non-fungible tokens explained with Blastoise and Charizard",
+ "url": "/nft/",
+ "description": "Core NFT explainer."
+ },
+ {
+ "title": "Non-fungible tokens (NFTs): the weight and contribution of ascertainable history",
+ "url": "/nft-usecases/",
+ "description": "NFT use cases and provable scarcity."
+ },
+ {
+ "title": "NFTfi: NFT meets DeFi, liquidity and leverage ensue",
+ "url": "/nftfi-defi-nft/",
+ "description": "NFT meets DeFi infrastructure."
+ }
+ ]
+ },
+ {
+ "id": "erc-721",
+ "term": "ERC-721",
+ "full_term": "Ethereum Request for Comment 721",
+ "category": "technical",
+ "definition": "ERC-721 est le standard technique pour les tokens non-fongibles (NFTs) sur Ethereum. Il définit comment créer des tokens uniques qui ne sont pas interchangeables, contrairement aux tokens ERC-20 fongibles. Chaque token ERC-721 a un identifiant unique.",
+ "short_definition": "Standard pour la création de tokens non-fongibles sur Ethereum",
+ "example": "Un CryptoPunk est un token ERC-721 : chaque punk est unique et non interchangeable avec un autre.",
+ "related_terms": [
+ "nft",
+ "ethereum",
+ "standard",
+ "unique-tokens"
+ ],
+ "risks": [
+ "Standard limitations",
+ "Gas costs",
+ "Compatibility issues"
+ ],
+ "tags": [
+ "erc721",
+ "nft",
+ "standard",
+ "ethereum"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Non-fungible tokens explained with Blastoise and Charizard",
+ "url": "/nft/",
+ "description": "Explains ERC-721 as the NFT standard."
+ }
+ ]
+ },
+ {
+ "id": "token-burn",
+ "term": "Destruction de Tokens",
+ "full_term": "Destruction de Tokens (Burn)",
+ "category": "tokens",
+ "definition": "La destruction de tokens (burning) consiste à envoyer des tokens vers une adresse inaccessible, les retirant définitivement de la circulation. C'est un mécanisme déflationniste utilisé pour réduire l'offre et potentiellement augmenter la valeur des tokens restants.",
+ "short_definition": "Suppression permanente de tokens de la circulation",
+ "example": "Ethereum brûle une partie des frais de gas depuis l'EIP-1559, réduisant progressivement l'offre d'ETH en circulation.",
+ "related_terms": [
+ "deflationary",
+ "supply",
+ "tokenomics",
+ "value-accrual"
+ ],
+ "risks": [
+ "Irreversible action",
+ "Economic assumptions",
+ "Governance decisions"
+ ],
+ "tags": [
+ "tokens",
+ "burn",
+ "déflationniste",
+ "offre"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "tokenomics",
+ "term": "Tokenomique",
+ "full_term": "Économie du Token",
+ "category": "tokens",
+ "definition": "La tokenomique (tokenomics) désigne le design économique et les mécaniques d'un token : offre totale, distribution, émissions, mécanismes de burn, utilité, gouvernance et incitations. C'est un facteur crucial dans l'évaluation d'un projet crypto.",
+ "short_definition": "Design économique et mécanique d'un token de cryptomonnaie",
+ "example": "La tokenomique de CRV inclut : émissions décroissantes sur 4 ans, verrouillage pour le vote (veCRV), distribution aux LPs, et burn des frais.",
+ "related_terms": [
+ "supply",
+ "inflation",
+ "distribution",
+ "incentives"
+ ],
+ "risks": [
+ "Poor design consequences",
+ "Inflation",
+ "Centralization"
+ ],
+ "tags": [
+ "tokenomique",
+ "économie",
+ "design",
+ "tokens"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "UNI, SUSHI, CRV tokenomics compared."
+ },
+ {
+ "title": "🎡 DeFi Flywheel",
+ "url": "/defi-flywheel/",
+ "description": "CRV/CVX flywheel tokenomics."
+ },
+ {
+ "title": "ve(3,3), the logical next step after veCRV?",
+ "url": "/solidly-velodrome-fork/",
+ "description": "ve(3,3) tokenomics design."
+ }
+ ]
+ },
+ {
+ "id": "vesting",
+ "term": "Vesting",
+ "full_term": "Vesting de Tokens",
+ "category": "tokens",
+ "definition": "Le vesting est la libération progressive de tokens dans le temps selon un calendrier prédéfini. Il empêche les détenteurs (équipe, investisseurs) de vendre immédiatement tous leurs tokens, alignant leurs intérêts avec le succès à long terme du projet.",
+ "short_definition": "Libération progressive de tokens dans le temps selon un calendrier",
+ "example": "L'équipe d'un projet reçoit des tokens avec un vesting de 4 ans et un cliff de 1 an : aucun token pendant 12 mois, puis libération mensuelle pendant 3 ans.",
+ "related_terms": [
+ "cliff",
+ "release-schedule",
+ "alignment",
+ "lock-up"
+ ],
+ "risks": [
+ "Selling pressure after vesting",
+ "Team departures",
+ "Schedule changes"
+ ],
+ "tags": [
+ "tokens",
+ "vesting",
+ "distribution",
+ "calendrier"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "SushiSwap 6-month vesting on rewards."
+ }
+ ]
+ },
+ {
+ "id": "airdrop",
+ "term": "Airdrop",
+ "full_term": "Airdrop de Tokens",
+ "category": "tokens",
+ "definition": "Un airdrop est la distribution gratuite de tokens à des adresses de portefeuilles, généralement pour récompenser les utilisateurs précoces, inciter à l'utilisation du protocole ou distribuer des tokens de gouvernance. Les airdrops sont devenus un outil marketing clé et un mécanisme de distribution en DeFi.",
+ "short_definition": "Distribution gratuite de tokens à des adresses de portefeuilles",
+ "example": "Uniswap a distribué 400 UNI à chaque portefeuille ayant utilisé le protocole avant septembre 2020, d'une valeur de milliers de dollars au sommet.",
+ "related_terms": [
+ "distribution",
+ "governance-tokens",
+ "rewards",
+ "decentralization"
+ ],
+ "risks": [
+ "Regulatory concerns",
+ "Selling pressure",
+ "Sybil attacks"
+ ],
+ "tags": [
+ "tokens",
+ "airdrop",
+ "distribution",
+ "récompenses"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "whitelist",
+ "term": "Liste Blanche",
+ "full_term": "Liste Blanche de Tokens",
+ "category": "tokens",
+ "definition": "Une liste blanche (whitelist) est une liste d'adresses de portefeuilles approuvées pour participer à des événements exclusifs comme des ventes de tokens, des mints de NFTs ou des airdrops. L'inscription se fait souvent via des activités communautaires.",
+ "short_definition": "Liste d'adresses approuvées pour un accès anticipé aux événements de tokens",
+ "example": "Pour être sur la whitelist d'un mint de NFTs, les utilisateurs doivent être actifs sur le Discord du projet et remplir certains critères.",
+ "related_terms": [
+ "presale",
+ "early-access",
+ "kyc",
+ "allowlist"
+ ],
+ "risks": [
+ "Centralization",
+ "Unfair advantage",
+ "Gaming attempts"
+ ],
+ "tags": [
+ "tokens",
+ "whitelist",
+ "accès",
+ "exclusif"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "market-cap",
+ "term": "Capitalisation Boursière",
+ "full_term": "Capitalisation Boursière",
+ "category": "tokens",
+ "definition": "La capitalisation boursière (market cap) est la valeur totale d'une cryptomonnaie, calculée en multipliant le prix actuel par l'offre en circulation. C'est la métrique la plus courante pour comparer la taille relative des cryptomonnaies.",
+ "short_definition": "Valeur totale d'une cryptomonnaie (prix × offre en circulation)",
+ "example": "Si ETH est à 2000$ avec 120 millions d'ETH en circulation, la capitalisation boursière est de 240 milliards de dollars.",
+ "related_terms": [
+ "circulating-supply",
+ "price",
+ "valuation",
+ "ranking"
+ ],
+ "risks": [
+ "Manipulation with low supply",
+ "Dilution from new tokens",
+ "Market volatility"
+ ],
+ "tags": [
+ "tokens",
+ "capitalisation",
+ "marché",
+ "métriques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "circulating-supply",
+ "term": "Offre en Circulation",
+ "full_term": "Offre de Tokens en Circulation",
+ "category": "tokens",
+ "definition": "L'offre en circulation désigne le nombre de tokens publiquement disponibles et activement échangés sur le marché. Elle exclut les tokens verrouillés, en vesting ou brûlés. C'est la métrique utilisée pour calculer la capitalisation boursière.",
+ "short_definition": "Nombre de tokens publiquement disponibles et activement échangés",
+ "example": "Si un token a une offre totale de 1 milliard mais 600 millions en circulation, la capitalisation boursière est calculée sur les 600 millions.",
+ "related_terms": [
+ "total-supply",
+ "max-supply",
+ "market-cap",
+ "locked-tokens"
+ ],
+ "risks": [
+ "Supply inflation",
+ "Unlock events",
+ "Calculation differences"
+ ],
+ "tags": [
+ "tokens",
+ "offre",
+ "circulation",
+ "métriques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "total-supply",
+ "term": "Offre Totale",
+ "full_term": "Offre Totale de Tokens",
+ "category": "tokens",
+ "definition": "L'offre totale est le nombre total de tokens qui existent actuellement, incluant les tokens en circulation et ceux verrouillés ou en vesting. Elle exclut les tokens brûlés mais inclut ceux non encore distribués.",
+ "short_definition": "Nombre total de tokens qui existent actuellement",
+ "example": "Un token avec 1 milliard d'offre totale peut avoir seulement 300 millions en circulation, le reste étant en vesting pour l'équipe et les investisseurs.",
+ "related_terms": [
+ "circulating-supply",
+ "max-supply",
+ "minting",
+ "burning"
+ ],
+ "risks": [
+ "Inflation",
+ "Supply changes",
+ "Burn rate variations"
+ ],
+ "tags": [
+ "tokens",
+ "offre",
+ "totale",
+ "métriques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "max-supply",
+ "term": "Offre Maximale",
+ "full_term": "Offre Maximale de Tokens",
+ "category": "tokens",
+ "definition": "L'offre maximale est le nombre maximum de tokens qui pourront jamais exister pour une cryptomonnaie donnée. Contrairement à l'offre totale, elle représente un plafond absolu qui ne peut être dépassé. Tous les tokens n'ont pas d'offre maximale.",
+ "short_definition": "Nombre maximum de tokens pouvant exister",
+ "example": "Bitcoin a une offre maximale de 21 millions de BTC. ETH n'a pas d'offre maximale fixe, bien que l'EIP-1559 le rende potentiellement déflationniste.",
+ "related_terms": [
+ "total-supply",
+ "scarcity",
+ "deflationary",
+ "hard-cap"
+ ],
+ "risks": [
+ "Policy changes",
+ "Fork risks",
+ "Economic assumptions"
+ ],
+ "tags": [
+ "tokens",
+ "offre",
+ "maximum",
+ "métriques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "sandwich-attack",
+ "term": "Attaque Sandwich",
+ "full_term": "Attaque Sandwich",
+ "category": "risks",
+ "definition": "Une attaque sandwich est une forme de MEV où un attaquant place un ordre d'achat avant et un ordre de vente après la transaction d'une victime. Cela fait monter le prix avant le swap de la victime (qui achète plus cher) et l'attaquant vend ensuite à profit.",
+ "short_definition": "Attaque MEV qui encadre le trade d'une victime avec des ordres d'achat/vente",
+ "example": "Un bot détecte un gros swap ETH/USDC, achète de l'ETH juste avant (faisant monter le prix), la victime achète à un prix plus élevé, puis le bot vend immédiatement après.",
+ "related_terms": [
+ "mev",
+ "front-running",
+ "slippage",
+ "mempool"
+ ],
+ "risks": [
+ "Increased trading costs",
+ "Unfair extraction",
+ "Poor execution"
+ ],
+ "tags": [
+ "mev",
+ "sandwich",
+ "attaque",
+ "risques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "front-running",
+ "term": "Front-running",
+ "full_term": "Front-running de Transaction",
+ "category": "risks",
+ "definition": "Le front-running consiste à exécuter une transaction avant une autre en payant des frais de gas plus élevés. En DeFi, les bots surveillent le mempool pour détecter les grosses transactions et les devancer pour en tirer profit, une forme de MEV.",
+ "short_definition": "Exécuter une transaction avant une autre en payant des frais de gas plus élevés",
+ "example": "Un bot détecte un gros achat d'ETH en attente dans le mempool, achète de l'ETH avant cette transaction (faisant monter le prix), puis vend après pour un profit.",
+ "related_terms": [
+ "mev",
+ "mempool",
+ "gas",
+ "sandwich-attack"
+ ],
+ "risks": [
+ "Lost profits",
+ "Higher costs",
+ "Unfair advantages"
+ ],
+ "tags": [
+ "mev",
+ "front-running",
+ "gas",
+ "attaque"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "twap",
+ "term": "TWAP",
+ "full_term": "Prix Moyen Pondéré dans le Temps",
+ "category": "technical",
+ "definition": "Le TWAP (Time-Weighted Average Price) est le prix moyen d'un actif calculé sur une période définie. Il est utilisé par les oracles de prix pour résister aux manipulations instantanées et par les traders pour exécuter de gros ordres sans impact de prix.",
+ "short_definition": "Prix moyen d'un actif calculé sur une période pour résister à la manipulation",
+ "example": "Un oracle TWAP calcule le prix moyen de l'ETH sur les 30 dernières minutes, rendant la manipulation par flash loan pratiquement impossible.",
+ "related_terms": [
+ "oracle",
+ "price-feeds",
+ "manipulation",
+ "average"
+ ],
+ "risks": [
+ "Lagging prices",
+ "Still manipulable over time",
+ "Complexity"
+ ],
+ "tags": [
+ "technique",
+ "twap",
+ "oracle",
+ "prix"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "The state & future of algorithmic stablecoins",
+ "url": "/algorithmic-stablecoins/",
+ "description": "TWAP used in expansion/contraction decisions."
+ }
+ ]
+ },
+ {
+ "id": "concentrated-liquidity",
+ "term": "Liquidité Concentrée",
+ "full_term": "Liquidité Concentrée",
+ "category": "technical",
+ "definition": "La liquidité concentrée permet aux fournisseurs de liquidité d'allouer leur capital dans des plages de prix personnalisées plutôt que de le répartir sur toute la courbe de prix. Introduite par Uniswap v3, elle améliore l'efficacité du capital mais nécessite une gestion active.",
+ "short_definition": "Fournir de la liquidité dans des plages de prix spécifiques pour une meilleure efficacité",
+ "example": "Au lieu de fournir de la liquidité ETH/USDC sur toute la plage de prix, un LP concentre sa liquidité entre 1800$ et 2200$.",
+ "related_terms": [
+ "uniswap-v3",
+ "capital-efficiency",
+ "liquidity-providing",
+ "price-range"
+ ],
+ "risks": [
+ "Out-of-range positions",
+ "Impermanent loss",
+ "Active management needed"
+ ],
+ "tags": [
+ "liquidité",
+ "concentrée",
+ "efficacité",
+ "uniswap"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Staying Ahead of the Curve: the shift from Liquidity Mining to Liquidity Shaping",
+ "url": "/maverick-liquidity-shaping/",
+ "description": "Deep dive into concentrated liquidity: Maverick modes vs UNIv3."
+ },
+ {
+ "title": "The Pegged Asset Swap Wars",
+ "url": "/pegged-assets-swap/",
+ "description": "Historical progression from UNIv2 to StableSwap to UNIv3 concentrated liquidity."
+ }
+ ]
+ },
+ {
+ "id": "order-book",
+ "term": "Carnet d'Ordres",
+ "full_term": "Carnet d'Ordres",
+ "category": "technical",
+ "definition": "Un carnet d'ordres est une liste en temps réel de tous les ordres d'achat et de vente pour un actif, organisés par niveau de prix. C'est le mécanisme de trading utilisé par les échanges centralisés et certains DEX on-chain.",
+ "short_definition": "Liste en temps réel des ordres d'achat et de vente organisés par prix",
+ "example": "Le carnet d'ordres d'ETH/USDC montre les offres d'achat à 1999$, 1998$, etc. et les demandes de vente à 2001$, 2002$, etc.",
+ "related_terms": [
+ "market-depth",
+ "bid-ask",
+ "centralized-exchange",
+ "amm"
+ ],
+ "risks": [
+ "Order manipulation",
+ "Low liquidity gaps",
+ "Centralization"
+ ],
+ "tags": [
+ "carnet-ordres",
+ "trading",
+ "prix",
+ "technique"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "market-depth",
+ "term": "Profondeur de Marché",
+ "full_term": "Profondeur de Marché",
+ "category": "technical",
+ "definition": "La profondeur de marché mesure la capacité d'un marché à absorber de gros ordres d'achat ou de vente sans provoquer de mouvement de prix significatif. Un marché profond a beaucoup d'ordres à chaque niveau de prix.",
+ "short_definition": "Capacité du marché à absorber de gros ordres sans impact significatif sur le prix",
+ "example": "Un marché avec 10M$ d'ordres d'achat dans un range de 1% est plus profond qu'un marché avec seulement 100k$.",
+ "related_terms": [
+ "liquidity",
+ "price-impact",
+ "slippage",
+ "volume"
+ ],
+ "risks": [
+ "Shallow markets",
+ "High slippage",
+ "Liquidity fragmentation"
+ ],
+ "tags": [
+ "trading",
+ "profondeur",
+ "liquidité",
+ "marché"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "bid-ask-spread",
+ "term": "Écart Achat-Vente",
+ "full_term": "Écart Achat-Vente",
+ "category": "technical",
+ "definition": "L'écart achat-vente (bid-ask spread) est la différence entre le prix le plus élevé que les acheteurs sont prêts à payer et le prix le plus bas que les vendeurs acceptent. Un spread étroit indique un marché liquide ; un spread large signale une faible liquidité.",
+ "short_definition": "Différence entre le prix d'achat le plus élevé et le prix de vente le plus bas",
+ "example": "Si l'offre la plus élevée pour ETH est 2000$ et la demande la plus basse est 2002$, le spread est de 2$.",
+ "related_terms": [
+ "order-book",
+ "market-maker",
+ "liquidity",
+ "trading-fees"
+ ],
+ "risks": [
+ "Wide spreads increase costs",
+ "Low liquidity",
+ "Market inefficiency"
+ ],
+ "tags": [
+ "trading",
+ "spread",
+ "achat",
+ "vente"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "volume",
+ "term": "Volume",
+ "full_term": "Volume de Trading",
+ "category": "technical",
+ "definition": "Le volume de trading représente le montant total d'un actif échangé sur une période donnée (généralement 24h). Un volume élevé indique un marché actif et liquide ; un faible volume peut signaler un désintérêt ou une faible liquidité.",
+ "short_definition": "Montant total d'un actif échangé sur une période donnée",
+ "example": "Un DEX avec 500M$ de volume quotidien est plus actif et généralement plus liquide qu'un DEX avec 5M$ de volume.",
+ "related_terms": [
+ "liquidity",
+ "market-activity",
+ "price-discovery",
+ "turnover"
+ ],
+ "risks": [
+ "Low volume illiquidity",
+ "Wash trading",
+ "Manipulation"
+ ],
+ "tags": [
+ "trading",
+ "volume",
+ "liquidité",
+ "métriques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "limit-order",
+ "term": "Ordre à Cours Limité",
+ "full_term": "Ordre à Cours Limité",
+ "category": "technical",
+ "definition": "Un ordre à cours limité est une instruction d'acheter ou vendre un actif à un prix spécifique ou meilleur. Contrairement aux ordres au marché qui s'exécutent immédiatement, les ordres limités attendent que le prix cible soit atteint.",
+ "short_definition": "Ordre d'échange à un prix spécifique ou meilleur",
+ "example": "Placer un ordre limité d'achat de 1 ETH à 1800$ : l'ordre ne s'exécute que si le prix descend à 1800$ ou moins.",
+ "related_terms": [
+ "market-order",
+ "order-book",
+ "execution",
+ "price-level"
+ ],
+ "risks": [
+ "No execution guarantee",
+ "Partial fills",
+ "Price gaps"
+ ],
+ "tags": [
+ "trading",
+ "ordre",
+ "limite",
+ "prix"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "market-order",
+ "term": "Ordre au Marché",
+ "full_term": "Ordre au Marché",
+ "category": "technical",
+ "definition": "Un ordre au marché est une instruction d'acheter ou vendre un actif immédiatement au meilleur prix disponible. Il garantit l'exécution mais pas le prix, ce qui peut entraîner du slippage sur les marchés peu liquides.",
+ "short_definition": "Ordre d'échange immédiat au prix actuel du marché",
+ "example": "Passer un ordre au marché pour acheter 10 ETH s'exécute immédiatement au prix actuel, mais avec du slippage si la liquidité est faible.",
+ "related_terms": [
+ "limit-order",
+ "slippage",
+ "execution",
+ "current-price"
+ ],
+ "risks": [
+ "Price uncertainty",
+ "Slippage",
+ "Poor execution during volatility"
+ ],
+ "tags": [
+ "trading",
+ "ordre",
+ "marché",
+ "exécution"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "stop-loss",
+ "term": "Stop Loss",
+ "full_term": "Ordre Stop Loss",
+ "category": "strategies",
+ "definition": "Un ordre stop loss est une instruction de vendre automatiquement un actif quand son prix tombe à un niveau prédéfini, limitant les pertes potentielles. En DeFi, les stop loss peuvent être implémentés via des protocoles comme Gelato Network.",
+ "short_definition": "Ordre de vente automatique déclenché quand le prix tombe à un niveau défini",
+ "example": "Placer un stop loss sur ETH à 1800$ quand le prix actuel est 2000$ : si ETH descend à 1800$, la vente s'exécute automatiquement.",
+ "related_terms": [
+ "risk-management",
+ "automated-trading",
+ "loss-limitation",
+ "trigger-price"
+ ],
+ "risks": [
+ "False triggers",
+ "Gap downs",
+ "Stop hunting"
+ ],
+ "tags": [
+ "trading",
+ "stop-loss",
+ "risques",
+ "automatisation"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "take-profit",
+ "term": "Take Profit",
+ "full_term": "Ordre Take Profit",
+ "category": "strategies",
+ "definition": "Un ordre take profit est une instruction de vendre automatiquement un actif quand son prix atteint un objectif de profit prédéfini. Il permet de sécuriser les gains sans surveiller le marché en continu.",
+ "short_definition": "Ordre de vente automatique déclenché quand le prix atteint un objectif à la hausse",
+ "example": "Placer un take profit sur ETH à 2500$ quand le prix actuel est 2000$ : si ETH monte à 2500$, la vente s'exécute automatiquement, sécurisant 25% de gain.",
+ "related_terms": [
+ "profit-taking",
+ "target-price",
+ "automated-trading",
+ "exit-strategy"
+ ],
+ "risks": [
+ "Missing further gains",
+ "Premature exit",
+ "Execution delays"
+ ],
+ "tags": [
+ "trading",
+ "take-profit",
+ "automatisation",
+ "profits"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "dca",
+ "term": "DCA",
+ "full_term": "Investissement Programmé (Dollar Cost Averaging)",
+ "category": "strategies",
+ "definition": "Le DCA (Dollar Cost Averaging) est une stratégie d'investissement consistant à acheter régulièrement un montant fixe d'un actif, quel que soit son prix. Cela lisse le prix d'achat moyen et réduit l'impact de la volatilité.",
+ "short_definition": "Achats réguliers à montant fixe indépendamment du prix pour réduire l'impact de la volatilité",
+ "example": "Acheter 100$ d'ETH chaque semaine pendant un an, accumulant plus d'ETH quand les prix sont bas et moins quand ils sont hauts.",
+ "related_terms": [
+ "cost-basis",
+ "volatility",
+ "accumulation",
+ "systematic-investing"
+ ],
+ "risks": [
+ "Missing lump sum opportunities",
+ "Prolonged bear markets",
+ "Transaction costs"
+ ],
+ "tags": [
+ "stratégie",
+ "dca",
+ "moyenne",
+ "systématique"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "audit",
+ "term": "Audit",
+ "full_term": "Audit de Smart Contract",
+ "category": "risks",
+ "definition": "Un audit est une revue de sécurité approfondie du code de smart contract par des experts externes pour identifier les vulnérabilités, les bugs et les vecteurs d'attaque potentiels avant le déploiement. Les audits ne garantissent pas la sécurité mais réduisent significativement les risques.",
+ "short_definition": "Revue de sécurité du code de smart contract pour identifier les vulnérabilités",
+ "example": "Avant son lancement, Aave a fait auditer ses smart contracts par plusieurs firmes comme Trail of Bits et OpenZeppelin.",
+ "related_terms": [
+ "security",
+ "vulnerabilities",
+ "smart-contract",
+ "code-review"
+ ],
+ "risks": [
+ "Audit limitations",
+ "Time-based vulnerabilities",
+ "False security confidence"
+ ],
+ "tags": [
+ "sécurité",
+ "audit",
+ "smart-contracts",
+ "revue"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "rug-pull",
+ "term": "Rug Pull",
+ "full_term": "Rug Pull",
+ "category": "risks",
+ "definition": "Un rug pull est une arnaque où les développeurs d'un projet retirent soudainement toute la liquidité ou s'enfuient avec les fonds des investisseurs. Cela peut se faire en retirant la liquidité d'un DEX, en utilisant des fonctions admin cachées, ou en vendant massivement des tokens.",
+ "short_definition": "Arnaque où les développeurs abandonnent le projet et volent les fonds des investisseurs",
+ "example": "Les développeurs créent un token, attirent de la liquidité, puis retirent tout l'ETH du pool de liquidité, rendant le token sans valeur.",
+ "related_terms": [
+ "exit-scam",
+ "honeypot",
+ "liquidity-removal",
+ "fraud"
+ ],
+ "risks": [
+ "Total loss of funds",
+ "No legal recourse",
+ "Project abandonment"
+ ],
+ "tags": [
+ "arnaque",
+ "rug-pull",
+ "fraude",
+ "risques"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "The Hitchhiker's Guide to Crypto Bullshit",
+ "url": "/crypto-hitchhiker-guide/",
+ "description": "How to spot shitcoins/scams."
+ }
+ ]
+ },
+ {
+ "id": "exit-scam",
+ "term": "Exit Scam",
+ "full_term": "Exit Scam",
+ "category": "risks",
+ "definition": "Un exit scam se produit quand les fondateurs d'un projet disparaissent avec les fonds des investisseurs après avoir levé des capitaux via une vente de tokens, une IDO ou un pool de liquidité. C'est l'un des risques les plus courants dans les projets crypto non vérifiés.",
+ "short_definition": "Disparition des fondateurs avec l'argent des investisseurs après la levée de fonds",
+ "example": "Les fondateurs d'un projet lèvent 10 millions$ via une vente de tokens, puis disparaissent en retirant toute la liquidité, laissant les tokens sans valeur.",
+ "related_terms": [
+ "rug-pull",
+ "fraud",
+ "abandoned-project",
+ "theft"
+ ],
+ "risks": [
+ "Complete fund loss",
+ "No recovery options",
+ "Damaged ecosystem trust"
+ ],
+ "tags": [
+ "arnaque",
+ "exit-scam",
+ "fraude",
+ "risques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "honeypot",
+ "term": "Honeypot",
+ "full_term": "Contrat Honeypot",
+ "category": "risks",
+ "definition": "Un honeypot est un contrat malveillant qui semble offrir des opportunités attractives mais contient du code caché empêchant les utilisateurs de retirer leurs fonds. Le contrat peut permettre les achats mais bloquer les ventes.",
+ "short_definition": "Contrat malveillant qui piège les fonds avec des restrictions de retrait cachées",
+ "example": "Un token semble échangeable sur un DEX, mais le smart contract contient du code qui empêche toute vente — seul le créateur peut vendre.",
+ "related_terms": [
+ "scam",
+ "malicious-contract",
+ "trapped-funds",
+ "deception"
+ ],
+ "risks": [
+ "Permanent fund loss",
+ "Hidden restrictions",
+ "Deceptive mechanics"
+ ],
+ "tags": [
+ "arnaque",
+ "honeypot",
+ "malveillant",
+ "risques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "exploit",
+ "term": "Exploit",
+ "full_term": "Exploit de Smart Contract",
+ "category": "risks",
+ "definition": "Un exploit est une attaque qui tire parti des vulnérabilités dans le code des smart contracts pour voler des fonds ou causer des dommages. Les exploits peuvent cibler des erreurs logiques, des vulnérabilités de réentrance, des manipulations d'oracle ou des failles de contrôle d'accès.",
+ "short_definition": "Attaque exploitant les vulnérabilités des smart contracts pour voler des fonds",
+ "example": "Le hack de The DAO en 2016 a exploité une vulnérabilité de réentrance pour drainer 60 millions de dollars d'ETH.",
+ "related_terms": [
+ "hack",
+ "vulnerability",
+ "attack",
+ "security-breach"
+ ],
+ "risks": [
+ "Fund loss",
+ "Protocol damage",
+ "Market disruption"
+ ],
+ "tags": [
+ "sécurité",
+ "exploit",
+ "vulnérabilité",
+ "attaque"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "bug-bounty",
+ "term": "Bug Bounty",
+ "full_term": "Programme de Bug Bounty",
+ "category": "risks",
+ "definition": "Les programmes de bug bounty récompensent les chercheurs en sécurité qui trouvent et signalent de manière responsable les vulnérabilités dans le code des protocoles. Les récompenses peuvent aller de quelques milliers à plusieurs millions de dollars selon la gravité.",
+ "short_definition": "Programme de récompenses pour la découverte et le signalement de vulnérabilités de sécurité",
+ "example": "Immunefi héberge des programmes de bug bounty DeFi avec des récompenses allant jusqu'à 10 millions de dollars pour les vulnérabilités critiques.",
+ "related_terms": [
+ "security",
+ "vulnerability",
+ "white-hat",
+ "responsible-disclosure"
+ ],
+ "risks": [
+ "Incomplete coverage",
+ "Delayed fixes",
+ "Public disclosure timing"
+ ],
+ "tags": [
+ "sécurité",
+ "bounty",
+ "vulnérabilité",
+ "récompense"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "white-hat",
+ "term": "White Hat",
+ "full_term": "Hacker White Hat",
+ "category": "risks",
+ "definition": "Un white hat (chapeau blanc) est un hacker éthique qui identifie et signale les vulnérabilités de sécurité de manière responsable pour aider les protocoles à se protéger. Les white hats participent souvent aux programmes de bug bounty.",
+ "short_definition": "Hacker éthique qui trouve des vulnérabilités pour améliorer la sécurité",
+ "example": "Un white hat découvre une vulnérabilité critique dans un protocole DeFi, signale le bug à l'équipe via le programme de bug bounty et reçoit une récompense de 500k$.",
+ "related_terms": [
+ "bug-bounty",
+ "security-researcher",
+ "ethical-hacking",
+ "responsible-disclosure"
+ ],
+ "risks": [
+ "Misunderstood intentions",
+ "Legal complications",
+ "Insufficient rewards"
+ ],
+ "tags": [
+ "sécurité",
+ "white-hat",
+ "éthique",
+ "hacker"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "flash-loan-attack",
+ "term": "Attaque par Flash Loan",
+ "full_term": "Attaque par Flash Loan",
+ "category": "risks",
+ "definition": "Une attaque par flash loan utilise des prêts instantanés sans collatéral pour manipuler des protocoles DeFi. L'attaquant emprunte une grande quantité, manipule les prix ou exploite une vulnérabilité, et rembourse le prêt dans la même transaction.",
+ "short_definition": "Attaque utilisant des flash loans pour manipuler des protocoles à des fins de profit",
+ "example": "Un attaquant emprunte 100M$ via un flash loan, manipule le prix d'un oracle, liquide des positions à profit, et rembourse le prêt, le tout en une seule transaction.",
+ "related_terms": [
+ "flash-loan",
+ "price-manipulation",
+ "oracle-attack",
+ "arbitrage"
+ ],
+ "risks": [
+ "Protocol drainage",
+ "Market manipulation",
+ "Cascading failures"
+ ],
+ "tags": [
+ "sécurité",
+ "flash-loan",
+ "attaque",
+ "manipulation"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "slashing",
+ "term": "Slashing",
+ "full_term": "Slashing de Validateur",
+ "category": "risks",
+ "definition": "Le slashing est un mécanisme de pénalité dans les réseaux Proof of Stake où une partie des tokens stakés d'un validateur est détruite s'il se comporte mal (double signature, temps d'arrêt prolongé). Il incite les validateurs à agir honnêtement.",
+ "short_definition": "Pénalité où les tokens stakés sont détruits pour mauvais comportement du validateur",
+ "example": "Un validateur Ethereum qui signe deux blocs contradictoires peut perdre jusqu'à 1 ETH en slashing, plus être éjecté du réseau.",
+ "related_terms": [
+ "validator",
+ "staking",
+ "penalty",
+ "proof-of-stake"
+ ],
+ "risks": [
+ "Loss of staked funds",
+ "Reputation damage",
+ "Operational requirements"
+ ],
+ "tags": [
+ "staking",
+ "slashing",
+ "validateur",
+ "pénalité"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "phishing",
+ "term": "Hameçonnage",
+ "full_term": "Hameçonnage Crypto",
+ "category": "risks",
+ "definition": "L'hameçonnage (phishing) en crypto vise à tromper les utilisateurs pour qu'ils révèlent leurs clés privées, seed phrases, ou signent des transactions malveillantes. Les attaques utilisent de faux sites web, emails ou messages imitant des projets légitimes.",
+ "short_definition": "Attaques trompeuses pour voler des clés privées ou pousser vers des transactions malveillantes",
+ "example": "Un faux site imitant MetaMask demande votre seed phrase pour 'restaurer' votre portefeuille, volant ainsi tous vos fonds.",
+ "related_terms": [
+ "social-engineering",
+ "fake-website",
+ "private-keys",
+ "wallet-security"
+ ],
+ "risks": [
+ "Wallet drainage",
+ "Identity theft",
+ "Unauthorized transactions"
+ ],
+ "tags": [
+ "sécurité",
+ "hameçonnage",
+ "arnaque",
+ "risques"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "orderbook",
+ "term": "Carnet d'Ordres",
+ "full_term": "Carnet d'Ordres",
+ "category": "trading",
+ "definition": "Un carnet d'ordres est une liste en temps réel de tous les ordres d'achat et de vente pour un actif, organisés par niveau de prix. Il affiche la profondeur du marché et permet aux traders de voir l'offre et la demande à chaque prix.",
+ "short_definition": "Liste en temps réel des ordres d'achat et de vente organisés par niveaux de prix",
+ "example": "Un DEX avec carnet d'ordres on-chain comme dYdX affiche les ordres d'achat et de vente comme un échange traditionnel.",
+ "related_terms": [
+ "market-depth",
+ "bid-ask-spread",
+ "liquidity",
+ "centralized-exchange"
+ ],
+ "risks": [
+ "Order manipulation",
+ "Liquidity gaps",
+ "Centralized control"
+ ],
+ "tags": [
+ "trading",
+ "carnet-ordres",
+ "prix",
+ "marché"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "liquidity-aggregation",
+ "term": "Agrégation de Liquidité",
+ "full_term": "Agrégation de Liquidité",
+ "category": "trading",
+ "definition": "L'agrégation de liquidité consiste à combiner la liquidité de plusieurs DEX et sources pour offrir les meilleurs prix d'exécution. Les agrégateurs comme 1inch ou Paraswap divisent les ordres entre plusieurs protocoles pour minimiser le slippage.",
+ "short_definition": "Combinaison de liquidité de plusieurs sources pour une meilleure exécution",
+ "example": "Un swap de 100 ETH via 1inch est divisé entre Uniswap, Curve et SushiSwap pour obtenir le meilleur prix global.",
+ "related_terms": [
+ "dex-aggregator",
+ "routing",
+ "slippage",
+ "optimization"
+ ],
+ "risks": [
+ "Complex smart contracts",
+ "Higher gas costs",
+ "Aggregation failures"
+ ],
+ "tags": [
+ "trading",
+ "agrégation",
+ "liquidité",
+ "dex"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "The Cycle of Aggregation Spins On, Now with Lending",
+ "url": "/lending-aggregation/",
+ "description": "Core article on aggregation cycles."
+ },
+ {
+ "title": "🐊 Navigating the swap swamps",
+ "url": "/swap-swamp/",
+ "description": "DEX aggregation in practice."
+ }
+ ]
+ },
+ {
+ "id": "price-oracle",
+ "term": "Oracle de Prix",
+ "full_term": "Oracle de Prix",
+ "category": "trading",
+ "definition": "Un oracle de prix est un service qui fournit des données de prix en temps réel aux smart contracts. Les oracles sont essentiels pour les protocoles DeFi qui ont besoin de prix fiables pour les liquidations, les swaps et les calculs de collatéral. Chainlink est le plus utilisé.",
+ "short_definition": "Service fournissant des données de prix en temps réel aux smart contracts",
+ "example": "Aave utilise les oracles Chainlink pour obtenir le prix de l'ETH afin de déterminer si les positions doivent être liquidées.",
+ "related_terms": [
+ "chainlink",
+ "price-feeds",
+ "external-data",
+ "smart-contracts"
+ ],
+ "risks": [
+ "Oracle manipulation",
+ "Data lag",
+ "Price feed failures"
+ ],
+ "tags": [
+ "oracle",
+ "prix",
+ "données",
+ "technique"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "ChainLink oracle risk analysis."
+ },
+ {
+ "title": "Assessing risk in decentralized finance: a handbook for money markets",
+ "url": "/money-markets-risk/",
+ "description": "Oracle dimension in risk assessment."
+ }
+ ]
+ },
+ {
+ "id": "carry-trade",
+ "term": "Carry Trade",
+ "full_term": "Carry Trade Crypto",
+ "category": "strategies",
+ "definition": "Un carry trade consiste à emprunter des actifs à faible rendement pour investir dans des actifs à rendement plus élevé, profitant du différentiel d'intérêt. En crypto, cela peut impliquer d'emprunter des stablecoins à bas taux pour farmer des rendements plus élevés.",
+ "short_definition": "Emprunter des actifs à faible rendement pour investir dans des actifs à rendement plus élevé",
+ "example": "Emprunter des USDC à 3% sur Aave pour déposer dans un pool offrant 10% APY, capturant le différentiel de 7%.",
+ "related_terms": [
+ "interest-rate-differential",
+ "borrowing",
+ "lending",
+ "currency-risk"
+ ],
+ "risks": [
+ "Currency/token price risk",
+ "Interest rate changes",
+ "Liquidity risk",
+ "Margin calls"
+ ],
+ "tags": [
+ "carry-trade",
+ "intérêt",
+ "arbitrage",
+ "rendement"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "basis-trading",
+ "term": "Basis Trading",
+ "full_term": "Basis Trading",
+ "category": "strategies",
+ "definition": "Le basis trading exploite les différences de prix entre les marchés spot et futures en achetant ou vendant simultanément sur les deux marchés. En crypto, cela implique souvent d'acheter du spot et de vendre des contrats à terme en profit du premium.",
+ "short_definition": "Stratégie d'arbitrage exploitant les différences de prix entre marchés spot et futures",
+ "example": "Acheter 1 ETH à 2000$ sur le marché spot tout en vendant un contrat future ETH à 2050$, capturant le spread de 50$ comme profit.",
+ "related_terms": [
+ "futures",
+ "arbitrage",
+ "convergence",
+ "spread-trading"
+ ],
+ "risks": [
+ "Basis risk",
+ "Funding costs",
+ "Liquidity risk",
+ "Execution timing"
+ ],
+ "tags": [
+ "basis-trading",
+ "arbitrage",
+ "futures",
+ "spread"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Why Polaris? The Stablecoin we needed to build",
+ "url": "/why-polaris/",
+ "description": "Explains basis trading as Ethena/USDe's yield source and its limitations."
+ }
+ ]
+ },
+ {
+ "id": "grid-trading",
+ "term": "Grid Trading",
+ "full_term": "Stratégie de Grid Trading",
+ "category": "strategies",
+ "definition": "Le grid trading est une stratégie automatisée qui place des ordres d'achat et de vente à intervalles de prix prédéfinis, créant une grille d'ordres. Le bot achète bas et vend haut dans les plages définies, profitant de la volatilité latérale.",
+ "short_definition": "Stratégie automatisée plaçant plusieurs ordres à intervalles de prix pour profiter de la volatilité",
+ "example": "Un bot de grid trading place des ordres d'achat tous les 50$ sous le prix actuel de l'ETH et des ordres de vente tous les 50$ au-dessus, capturant les fluctuations.",
+ "related_terms": [
+ "range-trading",
+ "automated-trading",
+ "volatility",
+ "rebalancing"
+ ],
+ "risks": [
+ "Trend risk",
+ "Range breakout",
+ "High transaction costs",
+ "Capital efficiency"
+ ],
+ "tags": [
+ "grid-trading",
+ "automatisation",
+ "volatilité",
+ "stratégie"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "timelock",
+ "term": "Timelock",
+ "full_term": "Timelock de Gouvernance",
+ "category": "governance",
+ "definition": "Un timelock est un mécanisme de sécurité qui impose un délai entre le moment où une proposition de gouvernance est approuvée et le moment où elle est exécutée. Ce délai permet à la communauté de réagir et potentiellement de s'opposer à des changements nuisibles.",
+ "short_definition": "Mécanisme de délai entre l'approbation d'une proposition et son exécution",
+ "example": "Un protocole avec un timelock de 48h : après qu'une proposition est votée, les utilisateurs ont 48h pour retirer leurs fonds s'ils désapprouvent les changements.",
+ "related_terms": [
+ "proposal",
+ "governance",
+ "security",
+ "exit-opportunity"
+ ],
+ "risks": [
+ "Delayed responses to urgent issues",
+ "Coordination complexity",
+ "Emergency situations"
+ ],
+ "tags": [
+ "gouvernance",
+ "timelock",
+ "sécurité",
+ "délai"
+ ],
+ "common_questions": [],
+ "related_articles": [
+ {
+ "title": "Behind the scene of the decentralization theater",
+ "url": "/unstoppable-defi/",
+ "description": "Timelock analysis and admin key risks."
+ },
+ {
+ "title": "Volume begets fees: how are the main decentralized exchanges capturing value?",
+ "url": "/decentralized-exchange-value-capture/",
+ "description": "CRV timelock: 1-4 year lock for veCRV."
+ }
+ ]
+ },
+ {
+ "id": "governance-attack",
+ "term": "Attaque de Gouvernance",
+ "full_term": "Attaque de Gouvernance",
+ "category": "governance",
+ "definition": "Une attaque de gouvernance se produit quand des acteurs malveillants acquièrent suffisamment de pouvoir de vote pour faire passer des propositions nuisibles. Cela peut impliquer d'acheter des tokens, d'utiliser des flash loans pour voter, ou de corrompre les votants.",
+ "short_definition": "Acteurs malveillants prenant le contrôle du vote pour faire passer des propositions nuisibles",
+ "example": "Un attaquant acquiert suffisamment de tokens de gouvernance pour voter le transfert de la trésorerie du protocole vers son propre portefeuille.",
+ "related_terms": [
+ "governance-token",
+ "voting-power",
+ "dao",
+ "hostile-takeover"
+ ],
+ "risks": [
+ "Treasury drainage",
+ "Protocol disruption",
+ "Loss of decentralization"
+ ],
+ "tags": [
+ "gouvernance",
+ "attaque",
+ "vote",
+ "sécurité"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "seed-phrase",
+ "term": "Phrase de Récupération",
+ "full_term": "Phrase de Récupération (Seed Phrase)",
+ "category": "technical",
+ "definition": "Une seed phrase (phrase de récupération) est une série de 12 ou 24 mots qui peut restaurer l'accès à votre portefeuille crypto. Elle représente votre clé privée sous forme lisible et ne doit jamais être partagée ou stockée en ligne.",
+ "short_definition": "Série de mots permettant de restaurer l'accès à votre portefeuille crypto",
+ "example": "Lors de la création d'un portefeuille MetaMask, vous recevez 12 mots à noter sur papier. Ces mots permettent de restaurer votre portefeuille sur n'importe quel appareil.",
+ "related_terms": [
+ "private-keys",
+ "wallet",
+ "backup",
+ "security"
+ ],
+ "risks": [
+ "Permanent loss if forgotten",
+ "Theft if exposed",
+ "Physical damage to storage"
+ ],
+ "tags": [
+ "sécurité",
+ "seed-phrase",
+ "récupération",
+ "portefeuille"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "private-key",
+ "term": "Clé Privée",
+ "full_term": "Clé Privée",
+ "category": "technical",
+ "definition": "Une clé privée est un nombre secret cryptographique qui prouve la propriété et permet de contrôler une adresse blockchain. Quiconque possède la clé privée peut signer des transactions et déplacer les fonds. Elle ne doit jamais être partagée.",
+ "short_definition": "Clé cryptographique secrète qui contrôle votre cryptomonnaie",
+ "example": "Votre clé privée est comme le mot de passe ultime de votre portefeuille. Si quelqu'un l'obtient, il peut transférer tous vos fonds.",
+ "related_terms": [
+ "seed-phrase",
+ "wallet",
+ "public-key",
+ "address"
+ ],
+ "risks": [
+ "Complete fund loss if stolen",
+ "Irreversible if lost",
+ "No recovery options"
+ ],
+ "tags": [
+ "sécurité",
+ "clé-privée",
+ "cryptographie",
+ "portefeuille"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ },
+ {
+ "id": "metamask",
+ "term": "MetaMask",
+ "full_term": "MetaMask",
+ "category": "technical",
+ "definition": "MetaMask est un portefeuille crypto sous forme d'extension de navigateur qui permet d'interagir avec les applications Ethereum et DeFi. C'est le portefeuille le plus utilisé pour se connecter aux dApps, signer des transactions et gérer des tokens.",
+ "short_definition": "Portefeuille navigateur populaire pour interagir avec Ethereum et la DeFi",
+ "example": "Pour utiliser Uniswap, vous connectez votre portefeuille MetaMask au site, approuvez les tokens et signez la transaction de swap.",
+ "related_terms": [
+ "wallet",
+ "ethereum",
+ "dapp",
+ "browser-extension"
+ ],
+ "risks": [
+ "Phishing attacks",
+ "Malicious dApps",
+ "Browser vulnerabilities"
+ ],
+ "tags": [
+ "portefeuille",
+ "metamask",
+ "ethereum",
+ "dapp"
+ ],
+ "common_questions": [],
+ "related_articles": []
+ }
+ ]
+ },
+ "categories": {
+ "en": [
+ {
+ "id": "yields",
+ "name": "Yields & Returns",
+ "description": "Terms related to earning returns in DeFi"
+ },
+ {
+ "id": "risks",
+ "name": "Risks & Security",
+ "description": "Understanding DeFi risks and mitigation strategies"
+ },
+ {
+ "id": "strategies",
+ "name": "Strategies",
+ "description": "DeFi investment and earning strategies"
+ },
+ {
+ "id": "protocols",
+ "name": "Protocols & Platforms",
+ "description": "Major DeFi protocols and platforms"
+ },
+ {
+ "id": "tokens",
+ "name": "Tokens & Assets",
+ "description": "Different types of tokens in DeFi"
+ },
+ {
+ "id": "technical",
+ "name": "Technical Concepts",
+ "description": "Technical aspects of DeFi"
+ },
+ {
+ "id": "trading",
+ "name": "Trading & AMMs",
+ "description": "Trading concepts, exchanges, and automated market makers"
+ },
+ {
+ "id": "governance",
+ "name": "Governance & DAOs",
+ "description": "Decentralized governance, voting, and DAO concepts"
+ }
+ ],
+ "fr": [
+ {
+ "id": "yields",
+ "name": "Rendements et Retours",
+ "description": "Termes liés aux gains en DeFi"
+ },
+ {
+ "id": "risks",
+ "name": "Risques et Sécurité",
+ "description": "Comprendre les risques DeFi et les stratégies d'atténuation"
+ },
+ {
+ "id": "strategies",
+ "name": "Stratégies",
+ "description": "Stratégies d'investissement et de gains DeFi"
+ },
+ {
+ "id": "protocols",
+ "name": "Protocoles et Plateformes",
+ "description": "Principaux protocoles et plateformes DeFi"
+ },
+ {
+ "id": "tokens",
+ "name": "Tokens et Actifs",
+ "description": "Différents types de tokens en DeFi"
+ },
+ {
+ "id": "technical",
+ "name": "Concepts Techniques",
+ "description": "Aspects techniques de la DeFi"
+ },
+ {
+ "id": "trading",
+ "name": "Trading et AMMs",
+ "description": "Concepts de trading, échanges, et teneurs de marché automatisés"
+ },
+ {
+ "id": "governance",
+ "name": "Gouvernance et DAOs",
+ "description": "Gouvernance décentralisée, vote, et concepts de DAO"
+ }
+ ]
+ }
+}
diff --git a/data/media.json b/data/media.json
index 01ffb10a..5b2feece 100644
--- a/data/media.json
+++ b/data/media.json
@@ -13,20 +13,6 @@
"link": "https://cryptoast.fr/effondrement-usdt-bonne-nouvelle-defi/",
"date": "2021"
},
- {
- "tags": ["audio", "discussion", "fr"],
- "name": "La finance décentralisée (DeFi), la banque sans banquiers (avec Brice Berdah)",
- "host": "21 Millions - Capital",
- "link": "https://art19.com/shows/21-millions/episodes/4e69e1fc-74a5-49c8-9b1f-cc5dd5281d78",
- "date": "2020"
- },
- {
- "tags": ["post", "fr", "interview"],
- "name": "Les français qui font Ethereum #1 : Brice Berdah de Monolith",
- "host": "Ethereum France",
- "link": "https://www.ethereum-france.com/les-francais-qui-font-ethereum-1-brice-berdah-de-monolith/",
- "date": "2019"
- },
{
"tags": ["video","fr"],
"name": "Live Bankless FR #1 - Quelle stratégie adopter dans un monde à 100 gwei / transaction rapide ?",
@@ -167,20 +153,6 @@
"link": "https://abelsabstracts.substack.com/p/tokenised-ownership-is-the-best-coordination",
"date": "2020"
},
- {
- "tags": ["audio", "interview", "en"],
- "name": "Charge it! Putting Crypto on Debit Cards - Featuring Brice Berdah of Monolith",
- "host": "The DeFi Podcast",
- "link": "https://the-defi-podcast.simplecast.com/episodes/charge-it-putting-crypto-on-debit-cards-featuring-brice-berdah-of-monolith",
- "date": "2019"
- },
- {
- "tags": ["video", "interview", "en"],
- "name": "Building the world’s first self-sovereign consumer finance service, Brice Berdah :Monolith [BULL.IO]",
- "host": "Bull io - Blockchain Media",
- "link": "https://www.youtube.com/watch?v=ljnAsmOe7NA",
- "date": "2019"
- },
{
"tags": ["audio", "interview", "en"],
"name": "The growth and impact of Defi & User Adoption - Token Brice - Episode 14",
@@ -202,4 +174,4 @@
"link": "https://uk.reuters.com/article/uk-crypto-currencies-lending-insight/boom-or-bust-welcome-to-the-freewheeling-world-of-crypto-lending-idUKKBN25M0GQ",
"date": "2020"
}
-]
\ No newline at end of file
+]
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..c72d7d90
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,8 @@
+services:
+ hugo:
+ build: .
+ ports:
+ - "1313:1313"
+ volumes:
+ - .:/src
+ command: hugo server --bind=0.0.0.0 --baseURL=http://localhost:1313
diff --git a/docs/plans/2026-02-21-codebase-audit-v2-design.md b/docs/plans/2026-02-21-codebase-audit-v2-design.md
new file mode 100644
index 00000000..21a841db
--- /dev/null
+++ b/docs/plans/2026-02-21-codebase-audit-v2-design.md
@@ -0,0 +1,152 @@
+# Codebase Audit V2 — Design Document
+
+**Date:** 2026-02-21
+**Scope:** Code quality, performance, SEO, DRY/KISS/YAGNI compliance
+**Approach:** Surgical strikes — strict priority order, one commit per logical change, grouped by risk
+
+## Context
+
+This Hugo blog (0.148.2 Extended, hugo-theme-stack) went through a theme migration and ~100 Hugo versions of evolution. A prior audit (v1, 4 sessions, 48 fixes) addressed the most critical issues. This v2 audit takes a step back to assess architectural health and eliminate remaining tech debt.
+
+**Key decision:** All fixes use root overrides. Theme files in `themes/` are never modified directly.
+
+## Phase 1 — Zero-Risk Quick Wins
+
+No behavioral or visual impact. Pure housekeeping.
+
+### 1.1 Fix .gitignore
+- Replace `.gitignore` contents with `.gitignore.new` content
+- Delete `.gitignore.new`
+- Adds: `resources/_gen/`, `.image-cache/`, `dist/`, `build/`, `*.backup`
+
+### 1.2 Remove tracked .backup files
+- `git rm` the 22 `.backup` files in `content/categories/` and `public/categories/`
+- Pattern already covered by updated `.gitignore`
+
+### 1.3 Deduplicate glossary.json
+- Remove 5 duplicate entries in `data/glossary.json` (EN section):
+ - `bid-ask-spread`, `limit-order`, `market-depth`, `market-order`, `volume`
+- Keep first occurrence, remove second
+
+### 1.4 Override scrollspy.ts — clean console output
+- Copy `themes/hugo-theme-stack/assets/ts/scrollspy.ts` → `assets/ts/scrollspy.ts`
+- Change `console.warn()` → `console.debug()` (3 instances, lines 54, 60, 66)
+
+### 1.5 Override main.ts — remove alert()
+- Copy `themes/hugo-theme-stack/assets/ts/main.ts` → `assets/ts/main.ts`
+- Change `alert(err)` → `console.error(err)` (line 88)
+- Remove `console.log('Something went wrong', err)` (line 89, redundant with console.error)
+
+### 1.6 Remove duplicate CSS declaration
+- `assets/scss/glossary-links.scss` line 33: remove redundant `max-width: 300px`
+- Next line (34) already overrides with `max-width: clamp(200px, 80vw, 300px)`
+
+## Phase 2 — Low-Risk SEO & Accessibility
+
+Semantic HTML changes. No visual impact.
+
+### 2.1 Article title h2 → h1
+- File: `layouts/partials/article/components/details.html` (already overridden)
+- Change `` → ``
+- Verify CSS: check if theme styles `.article-title` by tag or class
+- Add CSS override if needed to maintain identical sizing
+
+### 2.2 Add alt text to list.html
+- Create override: `layouts/_default/list.html`
+- Copy from `themes/hugo-theme-stack/layouts/_default/list.html`
+- Add `alt="{{ .Title }}"` to ` ` tags (lines ~35, ~40)
+
+### 2.3 Add og:image:alt
+- Create override: `layouts/partials/head/opengraph/provider/base.html`
+- Copy from theme, add after og:image block:
+ ```html
+
+ ```
+
+### 2.4 Add twitter:image:alt
+- Create override: `layouts/partials/head/opengraph/provider/twitter.html`
+- Copy from theme, add:
+ ```html
+
+ ```
+
+### 2.5 Move font loading to ``
+- Create override: `layouts/partials/footer/components/custom-font.html` (empty file)
+- Add to `layouts/partials/head/custom.html`:
+ ```html
+
+ ```
+- Place after existing preconnect hints
+
+### 2.6 Add CDN preconnect
+- File: `layouts/partials/head/custom.html`
+- Add: ` `
+
+### 2.7 Add Matomo dns-prefetch
+- File: `layouts/partials/head/custom.html`
+- Add: ` `
+
+## Phase 3 — Medium-Risk CSS Refactor
+
+Visual output must remain pixel-identical.
+
+### 3.1 Convert glossary.css → SCSS
+- Move `assets/css/glossary.css` → `assets/scss/glossary.scss`
+- 1:1 port (preserve structure)
+- Replace hardcoded hex colors with CSS variables from theme
+- Replace raw `@media (max-width: 768px)` with `@include respond()` where applicable
+- Update imports in glossary layout templates
+- Remove `!important` from dark mode selectors (lines 907, 911, 915) by using proper specificity
+
+### 3.2 Convert glossary-term.css → SCSS
+- Move `assets/css/glossary-term.css` → `assets/scss/glossary-term.scss`
+- Same treatment as 3.1
+- Update imports in glossary-term layout template
+
+### 3.3 Extract difficulty color variables
+- File: `assets/scss/custom/difficulty-badges.scss`
+- Add at top:
+ ```scss
+ $difficulty-beginner: #22c55e;
+ $difficulty-beginner-dark: #16a34a;
+ $difficulty-intermediate: #fbbf24;
+ $difficulty-intermediate-dark: #ca8a04;
+ $difficulty-expert: #f87171;
+ $difficulty-expert-dark: #dc2626;
+ ```
+- Replace all 9+ hardcoded color instances
+
+### 3.4 Extract error color variable
+- File: `assets/scss/glossary-links.scss`
+- Replace hardcoded `#e74c3c` with `var(--error-color, #e74c3c)`
+- Define `--error-color` in `assets/scss/custom.scss` `:root` block
+
+### 3.5 Remove !important in glossary dark mode
+- Part of 3.1 conversion
+- Fix specificity so dark mode selectors win without `!important`
+- Target selectors: `.term-name`, `.full-term`, `.faq-question`
+
+### 3.6 Unify body text color
+- File: `assets/scss/custom.scss`
+- Change direct `color: #595959` to `--body-text-color: #595959` in `:root`
+- Ensures all components reading the variable get the correct value
+
+## Out of Scope (Deferred)
+
+- Matomo submodule dirty state cleanup
+- PhotoSwipe 4.1.3 → 5.x upgrade
+- Video shortcode attribute improvements
+- Missing French translations (29 posts)
+- Missing cover images (6 posts)
+- Stale remote branch cleanup
+- Service worker / PWA
+- HTTP caching headers
+- Critical CSS inlining
+
+## Verification Strategy
+
+- `hugo server` after each phase to verify no build errors
+- Visual comparison on: article page, glossary hub, glossary term, list page, homepage
+- Both light and dark mode
+- Both desktop and mobile viewport
+- Both EN and FR language versions
diff --git a/docs/plans/2026-02-21-codebase-audit-v2-implementation.md b/docs/plans/2026-02-21-codebase-audit-v2-implementation.md
new file mode 100644
index 00000000..775bf2a6
--- /dev/null
+++ b/docs/plans/2026-02-21-codebase-audit-v2-implementation.md
@@ -0,0 +1,929 @@
+# Codebase Audit V2 — Implementation Plan
+
+> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
+
+**Goal:** Eliminate tech debt across code quality, performance, SEO, and CSS architecture following DRY/KISS/YAGNI principles.
+
+**Architecture:** Hugo 0.148.2 Extended blog with hugo-theme-stack. All fixes use root-level overrides — theme files in `themes/` are never modified. Changes are grouped into 3 risk phases: zero-risk housekeeping, low-risk SEO, medium-risk CSS refactor.
+
+**Tech Stack:** Hugo (Go templates, SCSS via Hugo Pipes, TypeScript via js.Build), GitHub Pages deployment
+
+**Design doc:** `docs/plans/2026-02-21-codebase-audit-v2-design.md`
+
+---
+
+## Task 1: Fix .gitignore
+
+**Files:**
+- Modify: `.gitignore`
+- Delete: `.gitignore.new`
+
+**Step 1: Replace .gitignore contents**
+
+Replace the entire contents of `.gitignore` with:
+
+```gitignore
+# Node modules and dependencies
+node_modules/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Hugo build outputs
+public/
+resources/_gen/
+.hugo_build.lock
+
+# Development files
+.DS_Store
+.vscode/
+.idea/
+*.swp
+*.swo
+
+# Build artifacts
+dist/
+build/
+
+# Environment files
+.env
+.env.local
+.env.production
+
+# Image optimization cache
+.image-cache/
+
+# Logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Backup files
+*.backup
+
+# Lighthouse reports
+lighthouse-reports/
+```
+
+Note: Added `lighthouse-reports/` and `*.backup` which weren't in `.gitignore.new` but are needed. Removed `package.json` and `package-lock.json` exclusions from old `.gitignore` (they should be tracked).
+
+**Step 2: Delete .gitignore.new**
+
+```bash
+rm .gitignore.new
+```
+
+**Step 3: Verify**
+
+```bash
+hugo server --disableFastRender &
+# Check site builds with no errors
+kill %1
+```
+
+**Step 4: Commit**
+
+```bash
+git add .gitignore
+git rm .gitignore.new
+git commit -m "chore: replace .gitignore with comprehensive patterns
+
+Adds exclusions for resources/_gen, .image-cache, *.backup, build
+artifacts, env files, and editor swap files. Removes outdated
+exclusion of package.json/package-lock.json."
+```
+
+---
+
+## Task 2: Remove tracked .backup files
+
+**Files:**
+- Remove: `content/categories/**/*.backup` (11 files)
+
+Note: The `public/categories/**/*.backup` files mentioned in the audit are in the build output directory (already gitignored). Only `content/` backups need removal.
+
+**Step 1: Find and remove tracked backup files**
+
+```bash
+git ls-files '*.backup' | xargs git rm
+```
+
+**Step 2: Verify no backup files remain tracked**
+
+```bash
+git ls-files '*.backup'
+# Expected: empty output
+```
+
+**Step 3: Commit**
+
+```bash
+git commit -m "chore: remove tracked .backup files from content/categories
+
+11 category image backups from a prior migration. Now excluded
+by *.backup pattern in .gitignore."
+```
+
+---
+
+## Task 3: Deduplicate glossary.json
+
+**Files:**
+- Modify: `data/glossary.json`
+
+**Step 1: Identify duplicates**
+
+Search for the 5 duplicate IDs in the EN section: `bid-ask-spread`, `limit-order`, `market-depth`, `market-order`, `volume`. Each appears twice. Keep the first occurrence, remove the second (including its trailing comma if needed to keep valid JSON).
+
+**Step 2: Run deduplication**
+
+Use a script to find and remove exact duplicate objects:
+
+```bash
+python3 -c "
+import json
+with open('data/glossary.json') as f:
+ data = json.load(f)
+for lang in ['en', 'fr']:
+ if 'terms' in data.get(lang, {}):
+ seen = set()
+ unique = []
+ for term in data[lang]['terms']:
+ tid = term.get('id', '')
+ if tid not in seen:
+ seen.add(tid)
+ unique.append(term)
+ removed = len(data[lang]['terms']) - len(unique)
+ data[lang]['terms'] = unique
+ print(f'{lang}: removed {removed} duplicates')
+with open('data/glossary.json', 'w') as f:
+ json.dump(data, f, indent=2, ensure_ascii=False)
+ f.write('\n')
+"
+```
+
+**Step 3: Verify JSON is valid and Hugo builds**
+
+```bash
+python3 -c "import json; json.load(open('data/glossary.json'))" && echo "Valid JSON"
+hugo server --disableFastRender &
+sleep 3
+kill %1
+echo "Build OK"
+```
+
+**Step 4: Commit**
+
+```bash
+git add data/glossary.json
+git commit -m "fix: remove 5 duplicate glossary entries
+
+Deduplicates bid-ask-spread, limit-order, market-depth,
+market-order, volume which each appeared twice in EN section."
+```
+
+---
+
+## Task 4: Override scrollspy.ts — clean console output
+
+**Files:**
+- Create: `assets/ts/scrollspy.ts` (copy from `themes/hugo-theme-stack/assets/ts/scrollspy.ts`)
+
+**Step 1: Copy theme file to root override**
+
+```bash
+mkdir -p assets/ts
+cp themes/hugo-theme-stack/assets/ts/scrollspy.ts assets/ts/scrollspy.ts
+```
+
+**Step 2: Replace console.warn with console.debug**
+
+In `assets/ts/scrollspy.ts`, change 3 instances:
+
+- Line 54: `console.warn("No header matched query", headers);` → `console.debug("No header matched query", headers);`
+- Line 60: `console.warn("No toc matched query", tocQuery);` → `console.debug("No toc matched query", tocQuery);`
+- Line 66: `console.warn("No navigation matched query", navigationQuery);` → `console.debug("No navigation matched query", navigationQuery);`
+
+**Step 3: Verify Hugo builds (TS compilation)**
+
+```bash
+hugo --gc --minify 2>&1 | head -5
+echo "Exit: $?"
+```
+Expected: Exit 0, no TypeScript errors
+
+**Step 4: Commit**
+
+```bash
+git add assets/ts/scrollspy.ts
+git commit -m "refactor: demote scrollspy warnings to debug level
+
+console.warn fires on every page without a ToC (normal behavior).
+Override theme file to use console.debug instead."
+```
+
+---
+
+## Task 5: Override main.ts — remove alert()
+
+**Files:**
+- Create: `assets/ts/main.ts` (copy from `themes/hugo-theme-stack/assets/ts/main.ts`)
+
+**Step 1: Copy theme file to root override**
+
+```bash
+cp themes/hugo-theme-stack/assets/ts/main.ts assets/ts/main.ts
+```
+
+**Step 2: Fix clipboard error handler**
+
+In `assets/ts/main.ts`, replace lines 87-90:
+
+```typescript
+// BEFORE (lines 87-90):
+ .catch(err => {
+ alert(err)
+ console.log('Something went wrong', err);
+ });
+
+// AFTER:
+ .catch(err => {
+ console.error('Clipboard copy failed:', err);
+ });
+```
+
+**Step 3: Verify Hugo builds**
+
+```bash
+hugo --gc --minify 2>&1 | head -5
+echo "Exit: $?"
+```
+
+**Step 4: Commit**
+
+```bash
+git add assets/ts/main.ts
+git commit -m "fix: replace blocking alert() with console.error in clipboard handler
+
+alert() blocks the UI thread. Silent error logging is appropriate
+for a non-critical copy-to-clipboard failure."
+```
+
+---
+
+## Task 6: Remove duplicate CSS declaration
+
+**Files:**
+- Modify: `assets/scss/glossary-links.scss:33`
+
+**Step 1: Remove redundant line**
+
+In `assets/scss/glossary-links.scss`, remove line 33 (`max-width: 300px;`). Line 34 (`max-width: clamp(200px, 80vw, 300px);`) already supersedes it.
+
+Also remove line 31 (`white-space: normal;`) which overrides line 29 (`white-space: nowrap;`) — the intent is `normal` (wrapping tooltip text), so line 29 is the redundant one. Actually both are intentional: line 29 prevents wrapping for short text, line 31 re-enables it for long text with max-width constraint. The `white-space: nowrap` on line 29 is immediately overridden on line 31 though — this is dead code. Remove line 29.
+
+Final cleanup — remove these redundant lines:
+- Line 29: `white-space: nowrap;` (overridden by line 31)
+- Line 33: `max-width: 300px;` (overridden by line 34)
+
+**Step 2: Verify the tooltip still works**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Open a glossary page with term links and verify tooltips render correctly
+kill %1
+```
+
+**Step 3: Commit**
+
+```bash
+git add assets/scss/glossary-links.scss
+git commit -m "fix: remove 2 redundant CSS declarations in glossary tooltip
+
+Removes white-space: nowrap (immediately overridden) and
+max-width: 300px (superseded by clamp())."
+```
+
+---
+
+## Task 7: Article title h2 → h1
+
+**Files:**
+- Modify: `layouts/partials/article/components/details.html:14`
+
+**Step 1: Check theme CSS for h2-specific selectors**
+
+```bash
+# Search theme SCSS for any h2.article-title or h2 .article-title selectors
+grep -rn 'h2.*article-title\|article-title.*h2' themes/hugo-theme-stack/assets/scss/
+```
+
+If any h2-specific selectors exist, note them for CSS override. If only `.article-title` class selectors are used, no CSS change needed.
+
+**Step 2: Change h2 to h1**
+
+In `layouts/partials/article/components/details.html`, line 14:
+
+```html
+
+
+
+
+
+```
+
+Also change the closing tag on line 18:
+
+```html
+
+
+
+
+
+```
+
+**Step 3: Verify build and visual appearance**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Check an article page — title should look identical
+# Check homepage article list — titles there use a different template, unaffected
+kill %1
+```
+
+**Step 4: Commit**
+
+```bash
+git add layouts/partials/article/components/details.html
+git commit -m "fix(seo): change article title from h2 to h1
+
+Articles had no h1 element, breaking semantic document outline.
+Theme styles .article-title by class, so visual output is unchanged."
+```
+
+---
+
+## Task 8: Add alt text to list.html
+
+**Files:**
+- Create: `layouts/_default/list.html` (override from `themes/hugo-theme-stack/layouts/_default/list.html`)
+
+**Step 1: Copy theme file to root override**
+
+```bash
+cp themes/hugo-theme-stack/layouts/_default/list.html layouts/_default/list.html
+```
+
+**Step 2: Add alt attributes to images**
+
+In `layouts/_default/list.html`:
+
+Line 35-38 — resource-based image:
+```html
+
+
+
+
+
+```
+
+Line 40 — permalink-based image:
+```html
+
+
+
+
+
+```
+
+**Step 3: Verify**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Check a category page (e.g., /categories/analysis/) — images should show alt text in HTML source
+kill %1
+```
+
+**Step 4: Commit**
+
+```bash
+git add layouts/_default/list.html
+git commit -m "fix(a11y): add alt text to section/category list images
+
+Override theme list.html to add alt=\"{{ .Title }}\" to both
+resource-based and permalink-based category images."
+```
+
+---
+
+## Task 9: Add og:image:alt and twitter:image:alt
+
+**Files:**
+- Create: `layouts/partials/head/opengraph/provider/base.html`
+- Create: `layouts/partials/head/opengraph/provider/twitter.html`
+
+**Step 1: Create directory and copy theme files**
+
+```bash
+mkdir -p layouts/partials/head/opengraph/provider
+cp themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/base.html layouts/partials/head/opengraph/provider/base.html
+cp themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/twitter.html layouts/partials/head/opengraph/provider/twitter.html
+```
+
+**Step 2: Add og:image:alt in base.html**
+
+In `layouts/partials/head/opengraph/provider/base.html`, after line 52 (the closing `{{- end -}}` of the image block), add:
+
+```html
+ {{- $description := partialCached "data/description" . .RelPermalink -}}
+
+```
+
+Wait — `$description` is already defined at line 2. So just add after line 52:
+
+```html
+
+```
+
+Place it inside the `{{- if $image.exists -}}` block, before the closing `{{- end -}}`.
+
+**Step 3: Add twitter:image:alt in twitter.html**
+
+In `layouts/partials/head/opengraph/provider/twitter.html`, after line 15 (twitter:image), add:
+
+```html
+ {{- $description := partialCached "data/description" . .RelPermalink -}}
+
+```
+
+Wait — `$description` is already defined at line 7. So just add after line 15:
+
+```html
+
+```
+
+Place it inside the `{{- if $image.exists -}}` block, before the closing `{{- end -}}`.
+
+**Step 4: Verify**
+
+```bash
+hugo --gc --minify 2>&1 | head -5
+# Check rendered HTML for og:image:alt in public/index.html
+grep -o 'og:image:alt.*content="[^"]*"' public/index.html | head -1
+grep -o 'twitter:image:alt.*content="[^"]*"' public/index.html | head -1
+```
+
+**Step 5: Commit**
+
+```bash
+git add layouts/partials/head/opengraph/provider/
+git commit -m "fix(seo): add og:image:alt and twitter:image:alt meta tags
+
+Override OG providers to include alt text for social media image
+previews, using page description or title as fallback."
+```
+
+---
+
+## Task 10: Move font loading from JS to head
+
+**Files:**
+- Create: `layouts/partials/footer/components/custom-font.html` (empty override)
+- Modify: `layouts/partials/head/custom.html`
+
+**Step 1: Create empty font override to disable JS-based loading**
+
+```bash
+mkdir -p layouts/partials/footer/components
+```
+
+Create `layouts/partials/footer/components/custom-font.html` with empty content (this overrides the theme's JS-based font loader with nothing).
+
+**Step 2: Add font stylesheet link to head/custom.html**
+
+In `layouts/partials/head/custom.html`, after line 4 (the preconnect to fonts.gstatic.com), add:
+
+```html
+
+```
+
+**Step 3: Add CDN preconnect (Task 2.6)**
+
+In the same file, after the new font link, add:
+
+```html
+
+```
+
+**Step 4: Add Matomo dns-prefetch (Task 2.7)**
+
+Add:
+
+```html
+
+```
+
+**Step 5: Verify font loading**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Page should render with Lato font — same as before but loaded earlier
+# Check that fonts.googleapis.com link appears in , not in footer JS
+kill %1
+```
+
+**Step 6: Commit**
+
+```bash
+git add layouts/partials/footer/components/custom-font.html layouts/partials/head/custom.html
+git commit -m "perf: move font loading from JS to head, add resource hints
+
+- Move Google Fonts Lato from JS-injected link to proper stylesheet
+ tag in for earlier discovery and JS-independent loading
+- Add preconnect for cdn.jsdelivr.net (PhotoSwipe, Vibrant.js)
+- Add dns-prefetch for ecocrypto.fr (Matomo analytics)"
+```
+
+---
+
+## Task 11: Convert glossary.css → SCSS
+
+**Files:**
+- Move: `assets/css/glossary.css` → `assets/scss/glossary.scss`
+- Modify: `layouts/glossary/list.html:6-7`
+- Modify: `layouts/glossary/glossary-term.html:6-7`
+
+**Step 1: Move CSS file to SCSS directory**
+
+```bash
+mv assets/css/glossary.css assets/scss/glossary.scss
+```
+
+**Step 2: Minimal SCSS changes**
+
+The file is a 1:1 port. Make these targeted changes only:
+
+1. **Remove 3 `!important` declarations** (lines 907, 911, 915). These are redundant because the base selectors already use `color: var(--card-text-color-main)` and `color: var(--card-text-color-secondary)` — the CSS variables themselves change in dark mode via the theme's `:root[data-scheme="dark"]` block. The `[data-scheme="dark"] .term-name` etc. selectors are entirely redundant dead code. Remove lines 906-916 completely (the 3 redundant dark mode selectors).
+
+2. **Replace hardcoded hex colors with CSS variables** where theme equivalents exist:
+ - `#3B82F6` (blue, used for example section) → `var(--glossary-example-color, #3B82F6)` — define in file header
+ - `#F59E0B` / `#D97706` (amber, used for risks) → `var(--glossary-risks-color, #F59E0B)` — define in file header
+ - `#8B5CF6` (purple, used for FAQ) → `var(--glossary-faq-color, #8B5CF6)` — define in file header
+
+ Add at top of file:
+ ```scss
+ /* Glossary section accent colors */
+ $glossary-example-color: #3B82F6;
+ $glossary-risks-color: #F59E0B;
+ $glossary-risks-header-color: #D97706;
+ $glossary-faq-color: #8B5CF6;
+ ```
+
+ Then replace hardcoded hex values with these variables using SCSS interpolation where needed for rgba():
+ - Line 439: `rgba(59, 130, 246, 0.05)` → `rgba($glossary-example-color, 0.05)` (SCSS understands hex→rgb)
+ - Line 440: `rgba(59, 130, 246, 0.2)` → `rgba($glossary-example-color, 0.2)`
+ - Line 442: `#3B82F6` → `$glossary-example-color`
+ - Line 462: `#3B82F6` → `$glossary-example-color`
+ - Line 471: `rgba(251, 191, 36, 0.08)` → `rgba($glossary-risks-color, 0.08)`
+ - Line 472: `rgba(251, 191, 36, 0.25)` → `rgba($glossary-risks-color, 0.25)`
+ - Line 474: `#F59E0B` → `$glossary-risks-color`
+ - Line 494: `#D97706` → `$glossary-risks-header-color`
+ - Line 559: `rgba(139, 92, 246, 0.05)` → `rgba($glossary-faq-color, 0.05)`
+ - Line 560: `rgba(139, 92, 246, 0.02)` → keep as-is (same pattern, just lower opacity)
+ - Line 578: `#8B5CF6` → `$glossary-faq-color`
+ - Line 583: `#8B5CF6` → `$glossary-faq-color`
+ - Line 613: `rgba(139, 92, 246, 0.08)` → `rgba($glossary-faq-color, 0.08)`
+
+**Step 3: Update template imports**
+
+In `layouts/glossary/list.html`, replace lines 6-7:
+
+```html
+
+{{ $glossaryCSS := resources.Get "css/glossary.css" | minify | fingerprint }}
+
+
+
+{{ $glossarySCSS := resources.Get "scss/glossary.scss" | toCSS | minify | fingerprint }}
+
+```
+
+In `layouts/glossary/glossary-term.html`, replace lines 6-7:
+
+```html
+
+{{ $glossaryCSS := resources.Get "css/glossary.css" | minify | fingerprint }}
+
+
+
+{{ $glossarySCSS := resources.Get "scss/glossary.scss" | toCSS | minify | fingerprint }}
+
+```
+
+**Step 4: Verify build and visual output**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Navigate to /glossary/ — should look identical
+# Navigate to a specific glossary term page — should look identical
+# Toggle dark mode — should look identical (and work without !important)
+# Check mobile viewport — responsive styles should work
+kill %1
+```
+
+**Step 5: Remove empty css directory if no files remain**
+
+```bash
+ls assets/css/
+# If only glossary-term.css remains, leave directory for Task 12
+# If empty, rmdir assets/css/
+```
+
+**Step 6: Commit**
+
+```bash
+git add assets/scss/glossary.scss layouts/glossary/list.html layouts/glossary/glossary-term.html
+git rm assets/css/glossary.css 2>/dev/null || true
+git commit -m "refactor: convert glossary.css to SCSS
+
+- Extract 4 hardcoded hex colors into SCSS variables
+- Remove 3 redundant dark mode selectors (CSS variables handle theming)
+- Remove 3 unnecessary !important declarations
+- Add SRI integrity to glossary stylesheet link
+- No visual changes"
+```
+
+---
+
+## Task 12: Convert glossary-term.css → SCSS
+
+**Files:**
+- Move: `assets/css/glossary-term.css` → `assets/scss/glossary-term.scss`
+- Modify: `layouts/glossary/glossary-term.html:8-9`
+
+**Step 1: Move CSS file to SCSS directory**
+
+```bash
+mv assets/css/glossary-term.css assets/scss/glossary-term.scss
+```
+
+**Step 2: Minimal SCSS changes**
+
+1. **Replace hardcoded FAQ color** with the variable from glossary.scss:
+ - Line 88: `rgba(139, 92, 246, 0.05)` → leave as-is (can't import from sibling SCSS without shared variables file, and creating one violates YAGNI for 2 occurrences)
+ - Line 90: `rgba(139, 92, 246, 0.15)` → leave as-is
+ - Line 108: `#8B5CF6` → leave as-is
+
+ Actually, since these files are loaded independently (not through the main SCSS pipeline), SCSS variable sharing would require a separate `_variables.scss` partial. That's a bigger refactor than justified. Keep hardcoded values here — they're consistent with glossary.scss's variables.
+
+ The conversion benefit is: Hugo Pipes SCSS processing, SRI integrity, and future ability to use nesting/mixins.
+
+**Step 3: Update template import**
+
+In `layouts/glossary/glossary-term.html`, replace lines 8-9:
+
+```html
+
+{{ $termCSS := resources.Get "css/glossary-term.css" | minify | fingerprint }}
+
+
+
+{{ $termSCSS := resources.Get "scss/glossary-term.scss" | toCSS | minify | fingerprint }}
+
+```
+
+**Step 4: Clean up empty css directory**
+
+```bash
+rmdir assets/css/ 2>/dev/null && echo "Removed empty css/" || echo "css/ not empty or already gone"
+```
+
+**Step 5: Verify**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Navigate to a glossary term page — should look identical
+# Check dark mode — should work
+# Check mobile layout — should work
+kill %1
+```
+
+**Step 6: Commit**
+
+```bash
+git add assets/scss/glossary-term.scss layouts/glossary/glossary-term.html
+git rm -r assets/css/ 2>/dev/null || true
+git commit -m "refactor: convert glossary-term.css to SCSS
+
+Moves to Hugo SCSS pipeline with SRI integrity.
+Removes empty assets/css/ directory. No visual changes."
+```
+
+---
+
+## Task 13: Extract difficulty color variables
+
+**Files:**
+- Modify: `assets/scss/custom/difficulty-badges.scss`
+
+**Step 1: Add SCSS variables at top of file**
+
+Add after line 1 (`/* Expertise Level / Difficulty System */`):
+
+```scss
+// Difficulty color palette
+$difficulty-beginner: #22c55e;
+$difficulty-beginner-dark: #16a34a;
+$difficulty-intermediate: #fbbf24;
+$difficulty-intermediate-dark: #ca8a04;
+$difficulty-expert: #f87171;
+$difficulty-expert-dark: #dc2626;
+```
+
+**Step 2: Replace all hardcoded color instances**
+
+Replace each hardcoded hex with its variable:
+
+Light mode dot colors (lines 13, 17, 21):
+- `background-color: #22c55e;` → `background-color: $difficulty-beginner;`
+- `background-color: #fbbf24;` → `background-color: $difficulty-intermediate;`
+- `background-color: #f87171;` → `background-color: $difficulty-expert;`
+
+Dark mode dot colors (lines 28, 32, 36):
+- `background-color: #16a34a;` → `background-color: $difficulty-beginner-dark;`
+- `background-color: #ca8a04;` → `background-color: $difficulty-intermediate-dark;`
+- `background-color: #dc2626;` → `background-color: $difficulty-expert-dark;`
+
+Widget bar fills (lines 126, 130, 134):
+- `background-color: #22c55e;` → `background-color: $difficulty-beginner;`
+- `background-color: #fbbf24;` → `background-color: $difficulty-intermediate;`
+- `background-color: #f87171;` → `background-color: $difficulty-expert;`
+
+Widget bar fills dark (lines 147, 151, 155):
+- `background-color: #16a34a;` → `background-color: $difficulty-beginner-dark;`
+- `background-color: #ca8a04;` → `background-color: $difficulty-intermediate-dark;`
+- `background-color: #dc2626;` → `background-color: $difficulty-expert-dark;`
+
+Nav tab borders/backgrounds (lines 194-206):
+- `border-color: #22c55e;` → `border-color: $difficulty-beginner;`
+- `rgba(34, 197, 94, 0.08)` → `rgba($difficulty-beginner, 0.08)`
+- `border-color: #fbbf24;` → `border-color: $difficulty-intermediate;`
+- `rgba(251, 191, 36, 0.08)` → `rgba($difficulty-intermediate, 0.08)`
+- `border-color: #f87171;` → `border-color: $difficulty-expert;`
+- `rgba(239, 68, 68, 0.08)` → `rgba($difficulty-expert, 0.08)`
+
+Nav tab dark mode (lines 211-224):
+- `border-color: #16a34a;` → `border-color: $difficulty-beginner-dark;`
+- `rgba(34, 197, 94, 0.12)` → `rgba($difficulty-beginner, 0.12)` (same base color, different opacity)
+- `border-color: #ca8a04;` → `border-color: $difficulty-intermediate-dark;`
+- `rgba(251, 191, 36, 0.12)` → `rgba($difficulty-intermediate, 0.12)`
+- `border-color: #dc2626;` → `border-color: $difficulty-expert-dark;`
+- `rgba(239, 68, 68, 0.12)` → `rgba($difficulty-expert, 0.12)`
+
+**Step 3: Verify**
+
+```bash
+hugo --gc --minify 2>&1 | head -5
+echo "Exit: $?"
+# Check compiled CSS contains correct hex values
+grep -o '#22c55e\|#16a34a\|#fbbf24\|#ca8a04\|#f87171\|#dc2626' public/scss/style.*.css | head -20
+```
+
+**Step 4: Commit**
+
+```bash
+git add assets/scss/custom/difficulty-badges.scss
+git commit -m "refactor: extract difficulty colors to SCSS variables
+
+Replaces 18 hardcoded hex color instances with 6 SCSS variables.
+Color changes now require editing one line instead of nine."
+```
+
+---
+
+## Task 14: Extract error color variable
+
+**Files:**
+- Modify: `assets/scss/glossary-links.scss:64-65`
+- Modify: `assets/scss/custom.scss:4-6`
+
+**Step 1: Add error color to :root**
+
+In `assets/scss/custom.scss`, add to the `:root` block (after line 5):
+
+```scss
+:root {
+ --body-text-color: #595959;
+ --error-color: #e74c3c;
+}
+```
+
+**Step 2: Use variable in glossary-links.scss**
+
+In `assets/scss/glossary-links.scss`, lines 64-65:
+
+```scss
+// BEFORE
+.glossary-term-missing {
+ color: #e74c3c;
+ border-bottom: 1px dotted #e74c3c;
+
+// AFTER
+.glossary-term-missing {
+ color: var(--error-color);
+ border-bottom: 1px dotted var(--error-color);
+```
+
+**Step 3: Verify**
+
+```bash
+hugo --gc --minify 2>&1 | head -5
+```
+
+**Step 4: Commit**
+
+```bash
+git add assets/scss/custom.scss assets/scss/glossary-links.scss
+git commit -m "refactor: extract error color to CSS variable
+
+Replaces hardcoded #e74c3c with var(--error-color) for
+glossary missing term styling. Defined in :root for reuse."
+```
+
+---
+
+## Task 15: Final verification
+
+**Files:** None (verification only)
+
+**Step 1: Full build test**
+
+```bash
+hugo --gc --minify
+echo "Exit: $?"
+```
+
+Expected: Exit 0, no errors
+
+**Step 2: Verify all page types render**
+
+```bash
+hugo server --disableFastRender &
+sleep 3
+# Test these URLs:
+# http://localhost:1313/ (homepage)
+# http://localhost:1313/p/defi-bullshit-detector/ (article page)
+# http://localhost:1313/glossary/ (glossary hub)
+# http://localhost:1313/glossary/apy/ (glossary term)
+# http://localhost:1313/categories/analysis/ (category list)
+# http://localhost:1313/difficulty/beginner/ (difficulty filter)
+# http://localhost:1313/fr/ (French homepage)
+kill %1
+```
+
+**Step 3: Verify h1 is present on article pages**
+
+```bash
+grep -c '' public/p/defi-bullshit-detector/index.html
+# Expected: 1
+```
+
+**Step 4: Verify no !important in glossary CSS**
+
+```bash
+grep '!important' public/scss/glossary.*.css 2>/dev/null
+# Expected: no output (all removed)
+```
+
+**Step 5: Verify SRI on glossary stylesheets**
+
+```bash
+grep 'integrity="sha256' public/glossary/index.html | head -2
+# Expected: 2 lines with integrity attributes
+```
+
+**Step 6: Check git status is clean**
+
+```bash
+git status
+# Expected: clean working tree, all changes committed
+git log --oneline -15
+# Expected: ~14 commits for this audit
+```
diff --git a/docs/plans/2026-02-27-ui-polish.md b/docs/plans/2026-02-27-ui-polish.md
new file mode 100644
index 00000000..a7f2b050
--- /dev/null
+++ b/docs/plans/2026-02-27-ui-polish.md
@@ -0,0 +1,574 @@
+# UI/UX Polish Implementation Plan
+
+> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
+
+**Goal:** Elevate the blog's visual polish through targeted fixes to contrast, typography, spacing, interactions, and consistency — without changing the design identity.
+
+**Architecture:** All CSS changes go in `/assets/scss/custom.scss` (root override), which is imported after theme styles. No theme files are modified. Variables overridden via `:root` selectors in custom.scss cascade correctly since it loads last. One template change removes duplicate font loading.
+
+**Tech Stack:** Hugo + SCSS via Hugo Pipes, hugo-theme-stack
+
+---
+
+## Audit Summary
+
+The blog has a solid foundation. The theme provides good structure, and previous audit sessions fixed many issues (AAA body text contrast, reduced motion, SRI, etc.). This plan targets the remaining rough edges that separate "good enough" from "polished."
+
+**Critical accessibility failures found:**
+- Yellow tag (#ffb900) with white text: **1.7:1** contrast (needs 4.5:1)
+- Inline code text (#808080 on ~#e0e0e0): **3.0:1** contrast (needs 4.5:1)
+- Dark mode tertiary text on cards: **4.4:1** (needs 4.5:1)
+
+**Key polish gaps:**
+- Duplicate Google Fonts load (head + footer JS)
+- Only 2 font weights loaded (400, 700) but CSS uses 300, 600
+- No hover/focus states on pagination, social icons
+- Shadow levels l2 and l3 are identical (no visual progression)
+- Transition timings vary inconsistently (0.15s to 0.5s)
+- Category tag hover transition is sluggish (0.5s)
+- Article card hover is shadow-only (no lift)
+
+---
+
+### Task 1: Fix Critical Contrast Failures
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+All overrides in `:root` block of custom.scss.
+
+**Step 1: Fix yellow tag color and inline code contrast**
+
+Add to `assets/scss/custom.scss`, inside the existing `:root` block (expand it):
+
+```scss
+/* Fix tag contrast: #ffb900 white text = 1.7:1 FAIL → dark text */
+/* Fix inline code contrast: #808080 on ~#e0e0e0 = 3.0:1 FAIL */
+:root {
+ --body-text-color: #595959;
+ --error-color: #e74c3c;
+ --code-text-color: #546e7a;
+}
+```
+
+The `--code-text-color: #546e7a` (blue-grey) gives **4.7:1** on the `rgba(0,0,0,0.12)` code background over white, and **6.0:1** on plain white. Passes AA.
+
+For the yellow tag, override the tag background list. The issue is that `$defaultTagBackgrounds` is a Sass variable used in a `@for` loop in the theme's `article.scss`. We can't override Sass variables from custom.scss. Instead, we override the generated CSS with a specificity bump:
+
+```scss
+/* Override yellow tag (#ffb900) to use dark text for contrast */
+.article-list article:nth-child(5n+4) .article-category a,
+.article-list article:nth-child(5n+4) .article-tags a {
+ color: #1a1a1a;
+}
+```
+
+This targets the 4th item in each cycle of 5 (the yellow tag) and switches to dark text. **11.5:1** on #ffb900 — passes AAA.
+
+**Step 2: Fix dark mode code and tertiary text contrast**
+
+```scss
+[data-scheme="dark"] {
+ --code-text-color: #90a4ae;
+ --card-text-color-tertiary: rgba(255, 255, 255, 0.65);
+}
+```
+
+Dark mode code: `#90a4ae` on `#272822` = **4.8:1** (passes AA).
+Dark mode tertiary: `rgba(255,255,255,0.65)` on `#424242` = **4.7:1** (passes AA, was 4.4:1).
+
+**Step 3: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build, no errors.
+
+**Step 4: Commit**
+
+```
+fix(a11y): fix critical contrast failures in tags, code, and dark mode
+
+Yellow tag text, inline code, and dark mode tertiary text all failed
+WCAG AA contrast minimums. Override colors to meet 4.5:1+ ratios.
+```
+
+---
+
+### Task 2: Remove Duplicate Font Loading
+
+**Files:**
+- Modify: `themes/hugo-theme-stack/layouts/partials/footer/components/custom-font.html`
+
+The font is loaded twice:
+1. `layouts/partials/head/custom.html` line 5: ` ` (correct — blocking in head)
+2. `themes/.../footer/components/custom-font.html`: JS that appends the same ` ` (redundant)
+
+**Step 1: Empty the duplicate font loader**
+
+Replace the contents of `themes/hugo-theme-stack/layouts/partials/footer/components/custom-font.html` with an empty comment:
+
+```html
+
+```
+
+**Step 2: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build. Font still loads via the head ` `.
+
+**Step 3: Commit**
+
+```
+perf: remove duplicate Google Fonts load from footer JS
+
+Font was being loaded twice — once in head/custom.html (correct,
+render-blocking with preconnect) and again via JS in the footer.
+Remove the redundant footer loader.
+```
+
+---
+
+### Task 3: Typography Refinement — Font Weights and Heading Rhythm
+
+**Files:**
+- Modify: `layouts/partials/head/custom.html`
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Load missing font weights**
+
+The CSS uses `font-weight: 300` (light), `font-weight: 600` (semi-bold), and `font-weight: 900` (extra-bold in glossary). Currently only 400 and 700 are loaded, so browsers synthesize the others — which looks blurry/heavy.
+
+In `layouts/partials/head/custom.html`, change:
+```html
+
+```
+to:
+```html
+
+```
+
+**Step 2: Add heading line-heights and consistent scale**
+
+In `assets/scss/custom.scss`, add:
+
+```scss
+/* Typography: heading line-heights and vertical rhythm */
+.article-content {
+ h1 { line-height: 1.2; margin: 2em 0 0.75em; }
+ h2 { line-height: 1.25; margin: 1.75em 0 0.6em; }
+ h3 { line-height: 1.3; margin: 1.5em 0 0.5em; }
+ h4, h5, h6 { line-height: 1.35; margin: 1.25em 0 0.5em; }
+
+ /* First heading after content start needs less top margin */
+ > h1:first-child,
+ > h2:first-child,
+ > h3:first-child {
+ margin-top: 0.5em;
+ }
+}
+```
+
+This gives headings proper breathing room — tighter line-height (headings should be more compact than body text) and consistent margins that create a clear vertical rhythm.
+
+**Step 3: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 4: Commit**
+
+```
+style(typography): load missing font weights and add heading rhythm
+
+Load Lato 300/900 in addition to 400/700 to prevent browser-synthesized
+weights. Add explicit heading line-heights and margins for consistent
+vertical rhythm in article content.
+```
+
+---
+
+### Task 4: Interaction Polish — Hover States and Transitions
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Standardize transitions and add hover lift to article cards**
+
+```scss
+/* Interaction polish: article card hover lift */
+.article-list article {
+ transition: box-shadow 0.2s ease, transform 0.2s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ }
+}
+
+/* Compact list: subtle background highlight on hover */
+.article-list--compact article > a {
+ transition: background-color 0.15s ease;
+
+ &:hover {
+ background-color: var(--card-background-selected);
+ }
+}
+```
+
+**Step 2: Add pagination hover and focus states**
+
+```scss
+/* Pagination hover/focus states */
+.pagination .page-link {
+ transition: background-color 0.15s ease, color 0.15s ease;
+
+ &:hover:not(.current):not(.dots) {
+ background-color: var(--card-background-selected);
+ color: var(--card-text-color-main);
+ }
+
+ &:focus-visible {
+ outline: 2px solid var(--accent-color);
+ outline-offset: -2px;
+ }
+}
+```
+
+**Step 3: Fix sluggish category tag transition**
+
+```scss
+/* Category tag: 0.5s → 0.2s (0.5s feels sluggish) */
+.article-category a,
+.article-tags a {
+ transition: background-color 0.2s ease;
+}
+```
+
+**Step 4: Add social icon hover transition**
+
+```scss
+/* Social icons: add hover transition */
+.menu-social a {
+ transition: transform 0.2s ease;
+
+ &:hover {
+ transform: scale(1.1);
+ }
+
+ svg {
+ transition: stroke 0.2s ease;
+ }
+}
+```
+
+**Step 5: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 6: Commit**
+
+```
+style(interactions): polish hover states, transitions, and focus indicators
+
+Add lift effect to article cards, background highlight to compact list
+hover, pagination hover/focus states, faster category tag transition
+(0.5s→0.2s), and social icon hover scale.
+```
+
+---
+
+### Task 5: Focus Visibility and Keyboard Navigation
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Add global focus-visible baseline**
+
+```scss
+/* Global focus-visible for keyboard navigation */
+a:focus-visible,
+button:focus-visible,
+select:focus-visible,
+[role="button"]:focus-visible {
+ outline: 2px solid var(--accent-color);
+ outline-offset: 2px;
+}
+
+/* Remove outline for mouse clicks (already has :focus-visible) */
+:focus:not(:focus-visible) {
+ outline: none;
+}
+```
+
+**Step 2: Specific focus refinements**
+
+```scss
+/* Tag cloud links: add focus-visible */
+.tagCloud-tags a:focus-visible {
+ box-shadow: var(--shadow-l2);
+ outline: 2px solid var(--accent-color);
+ outline-offset: 2px;
+}
+
+/* Dark mode toggle: ensure visible focus ring */
+#dark-mode-toggle:focus-visible {
+ outline: 2px solid var(--accent-color);
+ outline-offset: 2px;
+ border-radius: 4px;
+}
+```
+
+**Step 3: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 4: Commit**
+
+```
+fix(a11y): add global focus-visible styles for keyboard navigation
+
+Ensure all interactive elements show a visible focus ring for keyboard
+users. Uses :focus-visible to avoid showing outlines on mouse clicks.
+```
+
+---
+
+### Task 6: Shadow System Fix and Card Depth
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Differentiate shadow-l3 from shadow-l2**
+
+Currently l2 and l3 are identical. Give l3 more depth:
+
+```scss
+/* Fix shadow-l3: was identical to l2, give it more depth */
+:root {
+ --shadow-l3: 0px 14px 28px rgba(0, 0, 0, 0.06),
+ 0px 4px 10px rgba(0, 0, 0, 0.04),
+ 0px 0px 1px rgba(0, 0, 0, 0.04);
+}
+```
+
+This creates a clear visual progression: l1 (subtle) → l2 (raised) → l3 (prominent) → l4 (floating).
+
+**Step 2: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 3: Commit**
+
+```
+style: differentiate shadow-l3 from shadow-l2
+
+Shadow levels 2 and 3 were identical. Give l3 slightly more depth
+to create a clear visual elevation progression.
+```
+
+---
+
+### Task 7: Spacing and Alignment Consistency
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Normalize small spacing inconsistencies**
+
+```scss
+/* Table cell padding: slightly more generous */
+.article-content th,
+.article-content td {
+ padding: 8px 12px;
+}
+
+/* Article details gap: 15px → use consistent 16px (2× base 8px) */
+.article-details {
+ gap: 16px;
+}
+
+/* Article time/translations gap: 15px → 16px */
+.article-time,
+.article-translations {
+ gap: 16px;
+
+ & > div {
+ gap: 16px;
+ }
+}
+
+/* Footer: slightly more breathing room above rule */
+footer.site-footer::before {
+ margin-bottom: 24px;
+}
+```
+
+**Step 2: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 3: Commit**
+
+```
+style(spacing): normalize spacing to consistent 8px-based scale
+
+Align gaps and padding to multiples of 8px for visual consistency.
+Slightly increase table cell padding and footer rule margin.
+```
+
+---
+
+### Task 8: Dark Mode Parity and Polish
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Ensure dark mode shadows are visible**
+
+Dark mode shadows are barely visible because they use the same rgba(0,0,0) values on a dark background:
+
+```scss
+/* Dark mode: make shadows more visible */
+[data-scheme="dark"] {
+ --shadow-l1: 0px 4px 8px rgba(0, 0, 0, 0.12),
+ 0px 0px 2px rgba(0, 0, 0, 0.16),
+ 0px 0px 1px rgba(0, 0, 0, 0.12);
+ --shadow-l2: 0px 10px 20px rgba(0, 0, 0, 0.14),
+ 0px 2px 6px rgba(0, 0, 0, 0.12),
+ 0px 0px 1px rgba(0, 0, 0, 0.10);
+ --shadow-l3: 0px 14px 28px rgba(0, 0, 0, 0.18),
+ 0px 4px 10px rgba(0, 0, 0, 0.14),
+ 0px 0px 1px rgba(0, 0, 0, 0.10);
+}
+```
+
+**Step 2: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 3: Commit**
+
+```
+style(dark-mode): increase shadow opacity for visibility on dark backgrounds
+
+On dark backgrounds, the default shadow opacities (0.04-0.06) are
+essentially invisible. Increase to 0.12-0.18 for visible card elevation.
+```
+
+---
+
+### Task 9: Code Block and Blockquote Refinement
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Refine code and blockquote styling**
+
+```scss
+/* Inline code: slightly more visible padding and border */
+.article-content code {
+ padding: 2px 6px;
+ font-size: 0.88em;
+}
+
+/* Blockquote: refine the left border color to use accent */
+.article-content blockquote {
+ border-inline-start-color: var(--accent-color);
+ opacity: 1;
+}
+
+/* Copy code button: visible on focus for keyboard users */
+.article-content .copyCodeButton:focus-visible {
+ opacity: 1;
+ outline: 2px solid var(--accent-color);
+ outline-offset: 2px;
+}
+```
+
+**Step 2: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 3: Commit**
+
+```
+style: refine inline code padding, blockquote border, and copy button a11y
+
+Give inline code slightly more horizontal padding. Use accent color
+for blockquote left border. Make copy-code button keyboard-accessible.
+```
+
+---
+
+### Task 10: Final Polish — Scrollbar, Selection, and Print
+
+**Files:**
+- Modify: `assets/scss/custom.scss`
+
+**Step 1: Add text selection color and print basics**
+
+```scss
+/* Selection color matches brand */
+::selection {
+ background-color: var(--accent-color);
+ color: var(--accent-color-text);
+}
+
+/* Print: hide non-essential elements */
+@media print {
+ .left-sidebar,
+ .right-sidebar,
+ .pagination,
+ .article-footer .article-tags,
+ .related-content,
+ #toggle-menu {
+ display: none !important;
+ }
+
+ .main-container {
+ max-width: 100% !important;
+ }
+
+ .main-article {
+ box-shadow: none !important;
+ }
+}
+```
+
+**Step 2: Build and verify**
+
+Run: `hugo --quiet`
+Expected: Clean build.
+
+**Step 3: Commit**
+
+```
+style: add branded text selection and basic print styles
+
+Set selection color to brand accent. Add print stylesheet that hides
+sidebars, nav, and removes shadows for clean printed output.
+```
+
+---
+
+## Change Summary
+
+| Category | Changes | Impact |
+|----------|---------|--------|
+| **Contrast/A11y** | Yellow tag dark text, code text #546e7a, dark mode tertiary bump, focus-visible globally | High — fixes WCAG failures |
+| **Typography** | Load Lato 300/900 weights, heading line-heights and margins | High — crisper rendering, better rhythm |
+| **Performance** | Remove duplicate font loading from footer JS | Medium — eliminates redundant network request |
+| **Interactions** | Card hover lift, compact list highlight, pagination states, social icon scale, faster tag transition | Medium — everything feels responsive |
+| **Shadows** | Fix l3≠l2, dark mode shadow opacity increase | Medium — visible depth hierarchy |
+| **Spacing** | 8px-aligned gaps, table padding, footer margin | Low-Medium — subtle but consistent |
+| **Polish** | Blockquote accent border, code padding, selection color, print styles | Low — finishing touches |
+
+**Total: ~10 commits, all CSS except 1 template change (font loading)**
+
+All changes are in `assets/scss/custom.scss` (overrides) except:
+- Task 2: one theme template emptied (duplicate font loader)
+- Task 3: one line change in `head/custom.html` (font weight URL)
diff --git a/hugo.yaml b/hugo.yaml
new file mode 100644
index 00000000..cea85d15
--- /dev/null
+++ b/hugo.yaml
@@ -0,0 +1,207 @@
+baseurl: https://tokenbrice.xyz
+languageCode: en
+theme: [hugo-notice, hugo-theme-stack, matomo]
+title: TokenBrice - Brutally Honest DeFi
+copyright: TokenBrice
+
+# Theme i18n support
+# Available values: ar, bn, ca, de, el, en, es, fr, hu, id, it, ja, ko, nl, pt-br, th, uk, zh-cn, zh-hk, zh-tw
+DefaultContentLanguage: en
+
+# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
+# This will make .Summary and .WordCount behave correctly for CJK languages.
+hasCJKLanguage: false
+enableGitInfo: true
+
+languages:
+ en:
+ languageName: English
+ title: "TokenBrice"
+ weight: 1
+ params:
+ sidebar:
+ subtitle: Brutally Honest DeFi
+ fr:
+ languageName: Français
+ title: "TokenBrice"
+ weight: 2
+ params:
+ sidebar:
+ subtitle: Analyses DeFi
+
+pagination:
+ pagerSize: 10
+
+outputs:
+ home:
+ - HTML
+ - RSS
+ page:
+ - HTML
+ section:
+ - HTML
+ - RSS
+ taxonomy:
+ - HTML
+ - RSS
+ term:
+ - HTML
+ - RSS
+
+permalinks:
+ post: /p/:slug/
+ page: /:slug/
+
+params:
+ matomo:
+ url: "https://ecocrypto.fr/stats/"
+ id: 1
+
+ mainSections:
+ - post
+ featuredImageField: image
+ rssFullContent: true
+ author:
+ name: TokenBrice
+ email: tokenbrice@proton.me
+ favicon: /favicon.ico
+
+ footer:
+ since: 2018
+ customText:
+
+ dateFormat:
+ published: Jan 02, 2006
+ lastUpdated: Jan 02, 2006 15:04 MST
+
+ sidebar:
+ emoji: 🐜
+ subtitle: Brutally Honest DeFi
+ avatar:
+ enabled: true
+ local: false
+ src: /img/main/anthereum-knight-150.png
+
+
+ article:
+ headingAnchor: false
+ math: false
+ toc: true
+ readingTime: true
+ license:
+ enabled: true
+ default: Licensed under CC BY-NC-SA 4.0
+
+ comments:
+ enabled: false
+ widgets:
+ homepage:
+ - type: search
+ - type: archives
+ params:
+ limit: 5
+ - type: expertise
+ - type: categories
+ params:
+ limit: 10
+ - type: tag-cloud
+ params:
+ limit: 10
+ page:
+ - type: toc
+
+ opengraph:
+ twitter:
+ # Your Twitter username
+ site: TokenBrice
+
+ # Available values: summary, summary_large_image
+ card: summary_large_image
+
+ defaultImage:
+ opengraph:
+ enabled: true
+ local: false
+ src:
+
+ colorScheme:
+ # Display toggle
+ toggle: true
+
+ # Available values: auto, light, dark
+ default: auto
+
+ imageProcessing:
+ cover:
+ enabled: true
+ content:
+ enabled: true
+
+### Custom menu
+### See https://stack.jimmycai.com/config/menu
+### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
+menu:
+ main: []
+
+ social:
+ - identifier: X
+ name: X
+ url: https://x.com/tokenbrice/
+ params:
+ icon: brand-x
+ - identifier: youtube
+ name: Youtube
+ url: https://youtube.com/@Token_Brice
+ params:
+ icon: brand-youtube
+ - identifier: telegram
+ name: telegram
+ url: https://t.me/tokenbrice_news/
+ params:
+ icon: brand-telegram
+ - identifier: farcaster
+ name: farcaster
+ url: https://warpcast.com/tokenbrice
+ params:
+ icon: brand-farcaster
+
+related:
+ includeNewer: true
+ threshold: 60
+ toLower: false
+ indices:
+ - name: categories
+ weight: 10
+
+ - name: tags
+ weight: 1
+
+markup:
+ goldmark:
+ extensions:
+ passthrough:
+ enable: true
+ delimiters:
+ block:
+ - - \[
+ - \]
+ - - $$
+ - $$
+ inline:
+ - - \(
+ - \)
+ renderer:
+ ## Set to true if you have HTML content inside Markdown
+ unsafe: true
+ tableOfContents:
+ endLevel: 4
+ ordered: true
+ startLevel: 2
+ highlight:
+ noClasses: false
+ codeFences: true
+ guessSyntax: true
+ lineNoStart: 1
+ lineNos: true
+ lineNumbersInTable: true
+ tabWidth: 4
diff --git a/i18n/en.toml b/i18n/en.toml
index b89a8af7..6696a5a7 100644
--- a/i18n/en.toml
+++ b/i18n/en.toml
@@ -63,6 +63,80 @@ other = "New Update Available"
other = "Refresh"
+# Difficulty / Expertise
+
+# Glossary
+
+[glossarySearch]
+other = "Search terms…"
+
+[glossaryAll]
+other = "All"
+
+[glossaryTerms]
+other = "terms"
+
+[glossaryNoResults]
+other = "No terms found"
+
+[glossaryNoResultsHint]
+other = "Try a different search or category."
+
+[glossaryHome]
+other = "Home"
+
+[glossaryTitle]
+other = "DeFi Glossary"
+
+[glossaryDefinition]
+other = "Definition"
+
+[glossaryExample]
+other = "Example"
+
+[glossaryRisksTitle]
+other = "Risks to Consider"
+
+[glossaryRisks]
+other = "Risks"
+
+[glossaryFaq]
+other = "Common Questions"
+
+[glossaryRelatedTerms]
+other = "Related Terms"
+
+[glossaryRelatedArticles]
+other = "Related Articles"
+
+[glossaryPrevious]
+other = "Previous"
+
+[glossaryNext]
+other = "Next"
+
+[glossaryCategoryFilter]
+other = "Click to filter by category"
+
+
+# Difficulty / Expertise
+
+[difficultyWidgetTitle]
+other = "Expertise Level"
+
+[difficultyBeginner]
+other = "Beginner"
+
+[difficultyIntermediate]
+other = "Intermediate"
+
+[difficultyExpert]
+other = "Expert"
+
+[difficultyNoArticles]
+other = "No articles found yet."
+
+
# Socials
[twitter]
diff --git a/i18n/fr.toml b/i18n/fr.toml
index 0504a27d..40160f9a 100644
--- a/i18n/fr.toml
+++ b/i18n/fr.toml
@@ -63,6 +63,80 @@ other = "Mise à jour"
other = "Rafraîchir"
+# Difficulty / Expertise
+
+# Glossary
+
+[glossarySearch]
+other = "Rechercher un terme…"
+
+[glossaryAll]
+other = "Tous"
+
+[glossaryTerms]
+other = "termes"
+
+[glossaryNoResults]
+other = "Aucun terme trouvé"
+
+[glossaryNoResultsHint]
+other = "Essayez une autre recherche ou catégorie."
+
+[glossaryHome]
+other = "Accueil"
+
+[glossaryTitle]
+other = "Glossaire DeFi"
+
+[glossaryDefinition]
+other = "Définition"
+
+[glossaryExample]
+other = "Exemple"
+
+[glossaryRisksTitle]
+other = "Risques à considérer"
+
+[glossaryRisks]
+other = "Risques"
+
+[glossaryFaq]
+other = "Questions fréquentes"
+
+[glossaryRelatedTerms]
+other = "Termes liés"
+
+[glossaryRelatedArticles]
+other = "Articles connexes"
+
+[glossaryPrevious]
+other = "Précédent"
+
+[glossaryNext]
+other = "Suivant"
+
+[glossaryCategoryFilter]
+other = "Cliquer pour filtrer par catégorie"
+
+
+# Difficulty / Expertise
+
+[difficultyWidgetTitle]
+other = "Niveau d'expertise"
+
+[difficultyBeginner]
+other = "Débutant"
+
+[difficultyIntermediate]
+other = "Intermédiaire"
+
+[difficultyExpert]
+other = "Expert"
+
+[difficultyNoArticles]
+other = "Aucun article trouvé pour le moment."
+
+
# Socials
[twitter]
diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html
new file mode 100644
index 00000000..d761470d
--- /dev/null
+++ b/layouts/_default/_markup/render-image.html
@@ -0,0 +1,74 @@
+{{- $image := .Page.Resources.GetMatch (printf "%s" (.Destination | safeURL)) -}}
+{{- $Permalink := .Destination | relURL | safeURL -}}
+{{- $alt := .PlainText | safeHTML -}}
+{{- $Width := 0 -}}
+{{- $Height := 0 -}}
+{{- $Srcset := "" -}}
+
+{{/* SVG and external images won't work with gallery layout, because their width and height attributes are unknown */}}
+{{- $galleryImage := false -}}
+
+{{/* Determine if we can offer a WebP alternative */}}
+{{- $ext := path.Ext .Destination | lower -}}
+{{- $isConvertible := or (eq $ext ".png") (eq $ext ".jpg") (eq $ext ".jpeg") -}}
+{{- $isExternal := or (hasPrefix .Destination "http://") (hasPrefix .Destination "https://") -}}
+{{- $useWebP := and $isConvertible (not $isExternal) -}}
+{{- $webpSrc := "" -}}
+{{- if $useWebP -}}
+ {{- $webpSrc = printf "%s.webp" (strings.TrimSuffix $ext (.Destination | relURL)) | safeURL -}}
+{{- end -}}
+
+{{- if $image -}}
+ {{- $notSVG := ne (path.Ext .Destination) ".svg" -}}
+ {{- $Permalink = $image.RelPermalink -}}
+
+ {{- if $notSVG -}}
+ {{- $Width = $image.Width -}}
+ {{- $Height = $image.Height -}}
+ {{- $galleryImage = true -}}
+
+ {{- if (default true .Page.Site.Params.imageProcessing.content.enabled) -}}
+ {{- $small := $image.Resize `480x` -}}
+ {{- $medium := $image.Resize `768x` -}}
+ {{- $big := $image.Resize `1024x` -}}
+ {{- $Srcset = printf `%s 480w, %s 768w, %s 1024w` $small.RelPermalink $medium.RelPermalink $big.RelPermalink -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{ if $useWebP -}}
+
+
+
+
+{{- else -}}
+
+{{- end }}
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
new file mode 100644
index 00000000..68de2c4b
--- /dev/null
+++ b/layouts/_default/baseof.html
@@ -0,0 +1,29 @@
+
+
+
+ {{- partial "head/head.html" . -}}
+ {{- block "head" . -}}{{ end }}
+
+
+ Skip to content
+ {{- partial "head/colorScheme" . -}}
+
+ {{/* The container is wider when there's any activated widget */}}
+ {{- $hasWidget := false -}}
+ {{- range .Site.Params.widgets -}}
+ {{- if gt (len .) 0 -}}
+ {{- $hasWidget = true -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- block "left-sidebar" . -}}
+ {{ partial "sidebar/left.html" . }}
+ {{- end -}}
+ {{- block "right-sidebar" . -}}{{ end }}
+
+ {{- block "main" . }}{{- end }}
+
+
+ {{ partial "footer/include.html" . }}
+
+
diff --git a/layouts/_default/difficulty-list.html b/layouts/_default/difficulty-list.html
new file mode 100644
index 00000000..a1fb3476
--- /dev/null
+++ b/layouts/_default/difficulty-list.html
@@ -0,0 +1,49 @@
+{{ define "main" }}
+
+
+
+ {{ $levels := slice "beginner" "intermediate" "expert" }}
+ {{ $labels := dict "beginner" (T "difficultyBeginner") "intermediate" (T "difficultyIntermediate") "expert" (T "difficultyExpert") }}
+ {{ range $levels }}
+ {{ $active := eq . $.Params.difficulty_filter }}
+
+
+ {{ index $labels . }}
+
+ {{ end }}
+
+
+ {{ $difficultyFilter := .Params.difficulty_filter }}
+ {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
+ {{ $notHidden := where $pages "Params.hidden" "!=" true }}
+ {{ $filteredPages := where $notHidden "Params.difficulty" $difficultyFilter }}
+
+ {{ if $filteredPages }}
+ {{ range $filteredPages.GroupByDate "2006" }}
+ {{ $id := lower (replace .Key " " "-") }}
+
+
+
+ {{ range .Pages }}
+ {{ partial "article-list/compact" . }}
+ {{ end }}
+
+
+ {{ end }}
+ {{ else }}
+ {{ T "difficultyNoArticles" }}
+ {{ end }}
+
+ {{ partialCached "footer/footer" . }}
+{{ end }}
+
+{{ define "right-sidebar" }}
+ {{ partial "sidebar/right.html" (dict "Context" . "Scope" "homepage") }}
+{{ end }}
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
new file mode 100644
index 00000000..e7d8d8f1
--- /dev/null
+++ b/layouts/_default/list.html
@@ -0,0 +1,86 @@
+{{ define "main" }}
+
+
+ {{- $subsections := .Sections -}}
+ {{- $pages := .Pages | complement $subsections -}}
+
+ {{- if eq (len $pages) 0 -}}
+ {{/* If there are no normal pages, display subsections in list style, with pagination */}}
+ {{/* This happens with taxonomies like categories or tags */}}
+ {{- $pages = $subsections -}}
+ {{- $subsections = slice -}}
+ {{- end -}}
+
+ {{- with $subsections -}}
+
+ {{- end -}}
+
+ {{/* List only pages that are not a subsection */}}
+ {{ $paginator := .Paginate $pages }}
+
+ {{ range $paginator.Pages }}
+ {{ partial "article-list/compact" . }}
+ {{ end }}
+
+
+ {{- partial "pagination.html" . -}}
+
+ {{ partialCached "footer/footer" . }}
+{{ end }}
+
+{{ define "right-sidebar" }}
+ {{ partial "sidebar/right.html" (dict "Context" . "Scope" "homepage") }}
+{{ end }}
\ No newline at end of file
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
new file mode 100644
index 00000000..bc8430e7
--- /dev/null
+++ b/layouts/_default/rss.xml
@@ -0,0 +1,53 @@
+{{- $pctx := . -}}
+{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
+{{- $pages := slice -}}
+{{- if or $.IsHome $.IsSection -}}
+{{- $pages = $pctx.RegularPages -}}
+{{- else -}}
+{{- $pages = $pctx.Pages -}}
+{{- end -}}
+{{- /* Filter to only include pages from mainSections when on home page */ -}}
+{{- if .IsHome -}}
+{{- $pages = where .Site.RegularPages "Section" "in" .Site.Params.mainSections -}}
+{{- end -}}
+{{- $pages := where $pages "Params.hidden" "!=" true -}}
+{{- $limit := .Site.Config.Services.RSS.Limit -}}
+{{- if ge $limit 1 -}}
+{{- $pages = $pages | first $limit -}}
+{{- end -}}
+{{- printf "" | safeHTML }}
+
+
+ {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}
+ {{ .Permalink }}
+ Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}
+ Hugo -- gohugo.io {{ with .Site.LanguageCode }}
+ {{.}} {{end}}{{ with .Site.Params.Author.email }}
+ {{.}}{{ with $.Site.Params.Author.name }} ({{.}}){{end}} {{end}}{{ with .Site.Params.Author.email }}
+ {{.}}{{ with $.Site.Params.Author.name }} ({{.}}){{end}} {{end}}{{ with .Site.Copyright }}
+ {{.}} {{end}}{{ if not .Date.IsZero }}
+ {{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} {{ end }}
+ {{- with .OutputFormats.Get "RSS" -}}
+ {{ printf " " .Permalink .MediaType | safeHTML }}
+ {{- end -}}
+ {{ range $pages }}
+ {{- $content := safeHTML (.Summary | html) -}}
+ {{- if .Site.Params.rssFullContent -}}
+ {{- $content = safeHTML (.Content | html) -}}
+ {{- end -}}
+ -
+
{{ .Title }}
+ {{ .Permalink }}
+ {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+ {{ with .Site.Params.Author.email }}{{.}}{{ with $.Site.Params.Author.name }} ({{.}}){{end}} {{end}}
+ {{ .Permalink }}
+ {{ printf "
+ {{- end -}}{{ $content }}{{ printf "]]>" | safeHTML }}
+
+ {{ end }}
+
+
+
diff --git a/layouts/glossary/glossary-term.html b/layouts/glossary/glossary-term.html
new file mode 100644
index 00000000..62ceb5b9
--- /dev/null
+++ b/layouts/glossary/glossary-term.html
@@ -0,0 +1,264 @@
+{{ define "body-class" }}
+ article-page glossary-term-page
+{{ end }}
+
+{{ define "head" }}
+{{ $glossarySCSS := resources.Get "scss/glossary.scss" | toCSS | minify | fingerprint }}
+
+{{ $termSCSS := resources.Get "scss/glossary-term.scss" | toCSS | minify | fingerprint }}
+
+{{ end }}
+
+{{ define "main" }}
+ {{- $lang := .Language.Lang -}}
+ {{- $glossaryId := .Params.glossary_id -}}
+ {{- $glossaryData := index .Site.Data.glossary $lang -}}
+ {{- $allTerms := $glossaryData.terms -}}
+ {{- $categories := index .Site.Data.glossary.categories $lang -}}
+
+ {{- /* Find the term */ -}}
+ {{- $term := false -}}
+ {{- $termIndex := 0 -}}
+ {{- range $i, $t := $allTerms -}}
+ {{- if eq $t.id $glossaryId -}}
+ {{- $term = $t -}}
+ {{- $termIndex = $i -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- /* Compute prev/next terms */ -}}
+ {{- $prevTerm := false -}}
+ {{- $nextTerm := false -}}
+ {{- $totalTerms := len $allTerms -}}
+ {{- if gt $termIndex 0 -}}
+ {{- $prevTerm = index $allTerms (sub $termIndex 1) -}}
+ {{- end -}}
+ {{- if lt (add $termIndex 1) $totalTerms -}}
+ {{- $nextTerm = index $allTerms (add $termIndex 1) -}}
+ {{- end -}}
+
+ {{- /* Resolve category info */ -}}
+ {{- $categoryColor := partial "glossary/category-color.html" ($term.category | default "") -}}
+ {{- $categoryIcon := partial "glossary/category-icon.html" ($term.category | default "") -}}
+ {{- $categoryName := $term.category -}}
+ {{- range $categories -}}
+ {{- if eq .id $term.category -}}
+ {{- $categoryName = .name -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- /* Glossary list page URL */ -}}
+ {{- $glossaryUrl := "/glossary/" -}}
+ {{- if eq $lang "fr" -}}
+ {{- $glossaryUrl = "/fr/glossary/" -}}
+ {{- end -}}
+ {{- $glossaryTitle := T "glossaryTitle" -}}
+
+
+
+
+
+
+ {{ T "glossaryHome" }}
+
+
+
+ {{ $glossaryTitle }}
+
+
+
+ {{ $term.term }}
+
+
+
+
+
+
+
+ {{ partial "glossary/term-icon.html" (dict "termId" $glossaryId "fallback" $categoryIcon) }} {{ upper $categoryName }}
+
+
+ {{ $term.term }}
+ {{- if ne $term.full_term $term.term }}
+ ({{ $term.full_term }})
+ {{- end }}
+
+
+
+
+
+
+ {{ T "glossaryDefinition" }}
+ {{ $term.definition }}
+
+
+
+ {{- with $term.example }}
+
+ {{ T "glossaryExample" }}
+
+
+ {{- end }}
+
+
+ {{- if gt (len (default (slice) $term.risks)) 0 }}
+
+ {{ T "glossaryRisksTitle" }}
+
+
+
+ {{- range $term.risks }}
+ {{ . }}
+ {{- end }}
+
+
+
+ {{- end }}
+
+
+ {{- if gt (len (default (slice) $term.common_questions)) 0 }}
+
+ {{ T "glossaryFaq" }}
+ {{- range $term.common_questions }}
+
+ {{ .question }}
+ {{ .answer }}
+
+ {{- end }}
+
+ {{- end }}
+
+
+ {{- if gt (len (default (slice) $term.related_terms)) 0 }}
+
+ {{ T "glossaryRelatedTerms" }}
+
+
+ {{- end }}
+
+
+ {{- if gt (len (default (slice) $term.related_articles)) 0 }}
+
+ {{ T "glossaryRelatedArticles" }}
+
+ {{- range first 3 $term.related_articles }}
+ {{- $articleUrl := .url -}}
+ {{- $articleTitle := .title -}}
+ {{- $articleDesc := .description -}}
+ {{- $articleImage := "" -}}
+ {{- $resolvedUrl := $articleUrl -}}
+ {{- $page := partial "glossary/resolve-page.html" (dict "url" $articleUrl "site" $.Site) -}}
+ {{- if $page -}}
+ {{- $resolvedUrl = $page.RelPermalink -}}
+ {{- with $page.Params.image -}}
+ {{- $img := . -}}
+ {{- if and (not (hasPrefix $img "/")) (not (hasPrefix $img "http")) -}}
+ {{- $img = printf "/%s" $img -}}
+ {{- end -}}
+ {{- $articleImage = $img -}}
+ {{- end -}}
+ {{- end -}}
+
+
+
+
{{ $articleTitle }}
+
+
+ {{- with $articleImage }}
+
+
+
+ {{- end }}
+
+
+ {{- end }}
+
+
+ {{- end }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ partialCached "footer/footer" . }}
+
+
+
+
+{{- /* FAQPage schema only for terms with common_questions */ -}}
+{{- if gt (len (default (slice) $term.common_questions)) 0 }}
+
+{{- end }}
+
+{{ end }}
diff --git a/layouts/glossary/list.html b/layouts/glossary/list.html
new file mode 100644
index 00000000..e5a71da1
--- /dev/null
+++ b/layouts/glossary/list.html
@@ -0,0 +1,129 @@
+{{ define "body-class" }}
+ article-page
+{{ end }}
+
+{{ define "head" }}
+{{ $glossarySCSS := resources.Get "scss/glossary.scss" | toCSS | minify | fingerprint }}
+
+{{ end }}
+
+{{ define "main" }}
+ {{- $lang := .Language.Lang -}}
+ {{- $glossaryData := index .Site.Data.glossary $lang -}}
+ {{- $terms := $glossaryData.terms -}}
+ {{- $categories := index .Site.Data.glossary.categories $lang -}}
+
+
+
+
+ {{ with .Params.categories }}
+ {{ partial "article/components/details" (dict "context" $ "scope" "categories") }}
+ {{ end }}
+ {{ with .Params.tags }}
+ {{ partial "article/components/details" (dict "context" $ "scope" "tags") }}
+ {{ end }}
+
+
+ {{ .Title }}
+ {{ with .Params.description }}
+ {{ . }}
+ {{ end }}
+
+
+
+ {{ .Content }}
+
+
+
+
+
+
+
+
+
+ {{ T "glossaryAll" }} {{ len $terms }}
+ {{- range $categories }}
+ {{- $color := partial "glossary/category-color.html" .id -}}
+
+ {{ partial "glossary/category-icon.html" .id }} {{ .name }}
+
+ {{- end }}
+
+
{{ len $terms }} {{ T "glossaryTerms" }}
+
+
+
+ {{- $letters := slice -}}
+ {{- range $terms -}}
+ {{- $letter := upper (substr .term 0 1) -}}
+ {{- if not (in $letters $letter) -}}
+ {{- $letters = $letters | append $letter -}}
+ {{- end -}}
+ {{- end -}}
+ {{- $letters = sort $letters -}}
+
+ {{- range $letters }}
+ {{ . }}
+ {{- end }}
+
+
+
+
+
+ {{- /* Group terms by first letter */ -}}
+ {{- range $letter := $letters -}}
+
+
{{ $letter }}
+ {{- range $terms -}}
+ {{- if eq (upper (substr .term 0 1)) $letter -}}
+ {{ partial "glossary/term-card-compact.html" (dict "term" . "lang" $lang "site" $.Site) }}
+ {{- end -}}
+ {{- end -}}
+
+ {{- end -}}
+
+
+
{{ T "glossaryNoResults" }}
+
{{ T "glossaryNoResultsHint" }}
+
+
+
+
+
+
+ {{ partial "article/components/footer" . }}
+
+
+
+ {{ partial "article/components/related-content" . }}
+
+
+ {{ partialCached "footer/footer" . }}
+
+
+
+
+
+{{ $glossaryJS := resources.Get "js/glossary.js" | minify | fingerprint }}
+
+
+{{ end }}
diff --git a/layouts/partials/article-list/compact.html b/layouts/partials/article-list/compact.html
new file mode 100644
index 00000000..e0285150
--- /dev/null
+++ b/layouts/partials/article-list/compact.html
@@ -0,0 +1,47 @@
+
+
+
+
+ {{- .Title -}}
+
+
+
+ {{- .Date | time.Format (or .Site.Params.dateFormat.published "Jan 02, 2006") -}}
+
+ {{/* NEW: Show difficulty badge right after date */}}
+ {{ with .Params.difficulty }}
+
+ •
+ {{ . | title }}
+
+ {{ end }}
+
+
+
+ {{- $image := partialCached "helper/image" (dict "Context" . "Type" "articleList") .RelPermalink "articleList" -}}
+ {{ if $image.exists }}
+
+ {{ if $image.resource }}
+ {{- $Permalink := $image.resource.RelPermalink -}}
+ {{- $Width := $image.resource.Width -}}
+ {{- $Height := $image.resource.Height -}}
+
+ {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+ {{- $thumbnail := $image.resource.Fill "120x120" -}}
+ {{- $Permalink = $thumbnail.RelPermalink -}}
+ {{- $Width = $thumbnail.Width -}}
+ {{- $Height = $thumbnail.Height -}}
+ {{- end -}}
+
+
+ {{ else }}
+
+ {{ end }}
+
+ {{ end }}
+
+
diff --git a/layouts/partials/article/article.html b/layouts/partials/article/article.html
new file mode 100644
index 00000000..514cdf1f
--- /dev/null
+++ b/layouts/partials/article/article.html
@@ -0,0 +1,12 @@
+
+ {{ partial "breadcrumbs" . }}
+ {{ partial "article/components/header" . }}
+
+ {{ partial "article/components/content" . }}
+
+ {{ partial "article/components/footer" . }}
+
+ {{ if or .Params.math .Site.Params.article.math }}
+ {{ partialCached "article/components/math.html" . }}
+ {{ end }}
+
\ No newline at end of file
diff --git a/layouts/partials/article/components/details.html b/layouts/partials/article/components/details.html
new file mode 100644
index 00000000..f46a9a8f
--- /dev/null
+++ b/layouts/partials/article/components/details.html
@@ -0,0 +1,70 @@
+
+ {{ if .Params.categories }}
+
+ {{ range (.GetTerms "categories") }}
+
+ {{ .LinkTitle }}
+
+ {{ end }}
+
+ {{ end }}
+
+
+
+
+
+ {{ with .Params.description }}
+
+ {{ . }}
+
+ {{ end }}
+
+
+ {{ $showReadingTime := .Params.readingTime | default (.Site.Params.article.readingTime) }}
+ {{ $showDate := not .Date.IsZero }}
+ {{ $showFooter := or $showDate $showReadingTime }}
+ {{ if $showFooter }}
+
+ {{ if $showDate }}
+
+ {{ partial "helper/icon" "date" }}
+
+ {{- .Date | time.Format (or .Site.Params.dateFormat.published "Jan 02, 2006") -}}
+
+
+ {{ end }}
+
+ {{ if $showReadingTime }}
+
+ {{ partial "helper/icon" "clock" }}
+
+ {{ T "article.readingTime" .ReadingTime }}
+
+
+ {{ end }}
+
+ {{/* NEW: Show difficulty in footer too for lists */}}
+ {{ with .Params.difficulty }}
+
+
+ {{ . | title }}
+
+ {{ end }}
+
+ {{ end }}
+
+ {{ if .IsTranslated }}
+
+ {{ partial "helper/icon" "language" }}
+
+
+ {{ end }}
+
diff --git a/layouts/partials/article/components/header.html b/layouts/partials/article/components/header.html
new file mode 100644
index 00000000..8bd7cdff
--- /dev/null
+++ b/layouts/partials/article/components/header.html
@@ -0,0 +1,48 @@
+
+ {{- $image := partialCached "helper/image" (dict "Context" . "Type" "article") .RelPermalink "article" -}}
+ {{ if $image.exists }}
+
+ {{ end }}
+
+ {{ partialCached "article/components/details" . .RelPermalink }}
+
diff --git a/layouts/partials/breadcrumbs.html b/layouts/partials/breadcrumbs.html
new file mode 100644
index 00000000..604b4328
--- /dev/null
+++ b/layouts/partials/breadcrumbs.html
@@ -0,0 +1,51 @@
+{{- if not .IsHome -}}
+{{- $ancestors := slice -}}
+{{- $current := . -}}
+
+{{- /* Build the breadcrumb trail */ -}}
+{{- range $current.Ancestors.Reverse -}}
+ {{- if not .IsHome -}}
+ {{- $ancestors = $ancestors | append . -}}
+ {{- end -}}
+{{- end -}}
+
+{{- if $ancestors -}}
+
+{{- end -}}
+{{- end -}}
diff --git a/layouts/partials/footer/components/custom-font.html b/layouts/partials/footer/components/custom-font.html
new file mode 100644
index 00000000..50f310aa
--- /dev/null
+++ b/layouts/partials/footer/components/custom-font.html
@@ -0,0 +1 @@
+
diff --git a/layouts/partials/footer/custom.html b/layouts/partials/footer/custom.html
new file mode 100644
index 00000000..8990b73c
--- /dev/null
+++ b/layouts/partials/footer/custom.html
@@ -0,0 +1 @@
+{{ partial "matomo-tracking" . }}
\ No newline at end of file
diff --git a/layouts/partials/glossary/category-color.html b/layouts/partials/glossary/category-color.html
new file mode 100644
index 00000000..aae4c2f1
--- /dev/null
+++ b/layouts/partials/glossary/category-color.html
@@ -0,0 +1,25 @@
+{{- $categoryId := . -}}
+{{- $colors := dict
+ "yields" "#10B981"
+ "rendements" "#10B981"
+ "risks" "#EF4444"
+ "risques" "#EF4444"
+ "strategies" "#8B5CF6"
+ "stratégies" "#8B5CF6"
+ "protocols" "#3B82F6"
+ "protocoles" "#3B82F6"
+ "tokens" "#F59E0B"
+ "technical" "#6B7280"
+ "technique" "#6B7280"
+ "trading" "#06B6D4"
+ "governance" "#EC4899"
+ "gouvernance" "#EC4899"
+ "defi-protocols" "#3B82F6"
+ "trading-amms" "#06B6D4"
+ "governance-daos" "#EC4899"
+ "technical-concepts" "#6366F1"
+ "lending-borrowing" "#059669"
+ "stablecoins" "#F97316"
+ "yield-farming" "#10B981"
+-}}
+{{- index $colors $categoryId | default "#6B7280" -}}
diff --git a/layouts/partials/glossary/category-icon.html b/layouts/partials/glossary/category-icon.html
new file mode 100644
index 00000000..21a9e50e
--- /dev/null
+++ b/layouts/partials/glossary/category-icon.html
@@ -0,0 +1,18 @@
+{{- $categoryId := . -}}
+{{- $icons := dict
+ "yields" "💰"
+ "rendements" "💰"
+ "risks" "⚠️"
+ "risques" "⚠️"
+ "strategies" "🧩"
+ "stratégies" "🧩"
+ "protocols" "🔄"
+ "protocoles" "🔄"
+ "tokens" "🪙"
+ "technical" "⚙️"
+ "technique" "⚙️"
+ "trading" "📊"
+ "governance" "🗳️"
+ "gouvernance" "🗳️"
+-}}
+{{- index $icons $categoryId | default "📄" -}}
diff --git a/layouts/partials/glossary/resolve-page.html b/layouts/partials/glossary/resolve-page.html
new file mode 100644
index 00000000..8089378e
--- /dev/null
+++ b/layouts/partials/glossary/resolve-page.html
@@ -0,0 +1,38 @@
+{{- /* resolve-page.html: Reliably resolves a page by URL
+ Input: dict "url" "site"
+ Output: the resolved Page or false
+ Handles: localhost prefixes, missing slashes, GetPage vs permalink scan
+*/ -}}
+{{- $url := .url -}}
+{{- $site := .site -}}
+{{- $result := false -}}
+
+{{- /* Step 1: Strip localhost prefix if present */ -}}
+{{- if findRE `^https?://localhost` $url -}}
+ {{- $url = replaceRE `^https?://localhost(:\d+)?` "" $url -}}
+{{- end -}}
+
+{{- /* Step 2: Ensure leading slash */ -}}
+{{- if not (hasPrefix $url "/") -}}
+ {{- $url = printf "/%s" $url -}}
+{{- end -}}
+
+{{- /* Step 3: Ensure trailing slash */ -}}
+{{- if not (hasSuffix $url "/") -}}
+ {{- $url = printf "%s/" $url -}}
+{{- end -}}
+
+{{- /* Step 4: Try GetPage first */ -}}
+{{- $page := $site.GetPage $url -}}
+{{- if $page -}}
+ {{- $result = $page -}}
+{{- else -}}
+ {{- /* Step 5: Fallback - scan RegularPages by RelPermalink */ -}}
+ {{- range $site.RegularPages -}}
+ {{- if eq .RelPermalink $url -}}
+ {{- $result = . -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{- return $result -}}
diff --git a/layouts/partials/glossary/term-card-compact.html b/layouts/partials/glossary/term-card-compact.html
new file mode 100644
index 00000000..f1ead38e
--- /dev/null
+++ b/layouts/partials/glossary/term-card-compact.html
@@ -0,0 +1,36 @@
+{{- $term := .term -}}
+{{- $lang := .lang -}}
+{{- $categoryColor := partial "glossary/category-color.html" $term.category -}}
+{{- $categoryIcon := partial "glossary/category-icon.html" $term.category -}}
+
+{{- /* Language-aware glossary base path */ -}}
+{{- $glossaryBase := "/glossary/" -}}
+{{- if eq $lang "fr" -}}
+ {{- $glossaryBase = "/fr/glossary/" -}}
+{{- end -}}
+
+{{- /* Resolve category name */ -}}
+{{- $site := .site -}}
+{{- $categories := index $site.Data.glossary.categories $lang -}}
+{{- $categoryName := $term.category -}}
+{{- range $categories -}}
+ {{- if eq .id $term.category -}}
+ {{- $categoryName = .name -}}
+ {{- end -}}
+{{- end -}}
+
+
+
+ {{ partial "glossary/term-icon.html" (dict "termId" $term.id "fallback" $categoryIcon) }}
+
+
+
+
{{ $term.short_definition }}
+
+ {{ $categoryName }}
+
diff --git a/layouts/partials/glossary/term-card.html b/layouts/partials/glossary/term-card.html
new file mode 100644
index 00000000..92915d19
--- /dev/null
+++ b/layouts/partials/glossary/term-card.html
@@ -0,0 +1,144 @@
+{{- $term := .term -}}
+{{- $lang := .lang -}}
+{{- $allTerms := .allTerms -}}
+{{- $site := .site -}}
+{{- $categoryColor := partial "glossary/category-color.html" $term.category -}}
+{{- $categoryIcon := partial "glossary/category-icon.html" $term.category -}}
+
+{{- /* Language-aware glossary base path */ -}}
+{{- $glossaryBase := "/glossary/" -}}
+{{- if eq $lang "fr" -}}
+ {{- $glossaryBase = "/fr/glossary/" -}}
+{{- end -}}
+
+{{- /* Resolve category name */ -}}
+{{- $categories := index $site.Data.glossary.categories $lang -}}
+{{- $categoryName := $term.category -}}
+{{- range $categories -}}
+ {{- if eq .id $term.category -}}
+ {{- $categoryName = .name -}}
+ {{- end -}}
+{{- end -}}
+
+
+
+
+
+
+
{{ $term.definition }}
+
+ {{- with $term.example }}
+
+ {{- end }}
+
+ {{- $hasRisks := gt (len (default (slice) $term.risks)) 0 -}}
+ {{- $hasRelated := gt (len (default (slice) $term.related_terms)) 0 -}}
+ {{- if or $hasRisks $hasRelated }}
+
+ {{- if $hasRisks }}
+
+
+
+ {{- range $term.risks }}
+ {{ . }}
+ {{- end }}
+
+
+ {{- end }}
+
+ {{- if $hasRelated }}
+
+ {{- end }}
+
+ {{- end }}
+
+ {{- if gt (len (default (slice) $term.common_questions)) 0 }}
+
+
+
+ {{- range $term.common_questions }}
+
+
{{ .question }}
+
{{ .answer }}
+
+ {{- end }}
+
+
+ {{- end }}
+
+ {{- if gt (len (default (slice) $term.related_articles)) 0 }}
+
+
{{ if eq $lang "fr" }}Articles connexes{{ else }}Related Articles{{ end }}
+
+ {{- range first 3 $term.related_articles }}
+ {{- $articleUrl := .url -}}
+ {{- $articleTitle := .title -}}
+ {{- $articleDesc := .description -}}
+ {{- $articleImage := "" -}}
+ {{- $resolvedUrl := $articleUrl -}}
+ {{- $page := partial "glossary/resolve-page.html" (dict "url" $articleUrl "site" $site) -}}
+ {{- if $page -}}
+ {{- $resolvedUrl = $page.RelPermalink -}}
+ {{- with $page.Params.image -}}
+ {{- $articleImage = . -}}
+ {{- end -}}
+ {{- end -}}
+
+
+
+
{{ $articleTitle }}
+
+
+ {{- with $articleImage }}
+
+
+
+ {{- end }}
+
+
+ {{- end }}
+
+
+ {{- end }}
+
+
diff --git a/layouts/partials/glossary/term-icon.html b/layouts/partials/glossary/term-icon.html
new file mode 100644
index 00000000..0381ad56
--- /dev/null
+++ b/layouts/partials/glossary/term-icon.html
@@ -0,0 +1,9 @@
+{{- $termId := .termId -}}
+{{- $fallback := .fallback | default "📄" -}}
+{{- $iconPath := printf "icons/glossary/%s.svg" $termId -}}
+{{- $iconFile := resources.GetMatch $iconPath -}}
+{{- if $iconFile -}}
+ {{- $iconFile.Content | safeHTML -}}
+{{- else -}}
+ {{- $fallback -}}
+{{- end -}}
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
deleted file mode 100644
index 652dc05b..00000000
--- a/layouts/partials/head.html
+++ /dev/null
@@ -1,165 +0,0 @@
-
-
-
- {{ hugo.Generator }}
-
- {{- with .Site.Params.defaultTheme | default "light" -}}
- {{- if eq . "light" -}}
-
- {{- else -}}
-
- {{- end -}}
- {{- end -}}
-
-
- {{- if .Site.Params.enableDarkMode }}
-
- {{- end }}
-
-
- {{- if and .Site.Params.enableForceHTTPS (eq hugo.Environment "production") }}
- {{ $url := urls.Parse .Site.BaseURL }}
- {{ $host := $url.Host }}
-
- {{- end }}
-
-
-
-
-
-
-
-
-
-
- {{ partial "utils/title.html" . }}
- {{- $title := .Scratch.Get "title" -}}
- {{ $title }}
-
-
- {{- partial "style.html" . }}
-
-
- {{- with .Site.Params.fontsLink -}}
-
-
-
-
- {{- end }}
-
-
- {{ partial "utils/summary.html" . }}
- {{- $description := .Description | default (.Scratch.Get "summary") | default .Site.Params.siteDescription | plainify -}}
-
-
-
- {{- $favicon := "favicon.ico" -}}
- {{- $safariMaskIcon := "icons/safari-pinned-tab.svg" -}}
- {{- $safariMaskColor := .Site.Params.safariMaskColor -}}
- {{- $appleTouchIcon := "icons/apple-touch-icon.png" -}}
- {{- partial "utils/relative-url.html" (dict "Deliver" . "filename" "") -}}
- {{- $url := .Scratch.Get "url" -}}
- {{- $msApplicationStartURL := $url -}}
- {{- $msApplicationTileColor := .Site.Params.msApplicationTileColor -}}
- {{- partial "utils/relative-url.html" (dict "Deliver" . "filename" "icons/mstile-150x150.png") -}}
- {{- $url := .Scratch.Get "url" -}}
- {{- $msApplicationTileImage := $url -}}
- {{- $manifest := "manifest.json" -}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ with .OutputFormats.Get "SectionsAtom" -}}
- {{ printf ` ` .Rel .MediaType .Permalink $.Site.Title | safeHTML }}
- {{ end -}}
- {{ with .OutputFormats.Get "SectionsRSS" -}}
- {{ printf ` ` .Rel .MediaType .Permalink $.Site.Title | safeHTML }}
- {{ end }}
-
-
-
- {{ if .Params.canonicalUrl }}
-
-{{ else }}
-
-{{ end }}
- {{- $Deliver := . -}}
-
- {{- with .Site.Params.jsonLD -}}
- {{ partial "utils/json-ld.html" (dict "Deliver" $Deliver "description" $description) }}
- {{- end }}
-
-
- {{- with .Site.Params.twitterCards -}}
- {{ partial "utils/twitter-cards.html" (dict "Deliver" $Deliver) }}
- {{- end }}
-
- {{- with .Site.Params.openGraph -}}
- {{ partial "utils/open-graph.html" (dict "Deliver" $Deliver "description" $description) }}
- {{- end }}
-
- {{- with .Site.Params.googleSiteVerification }}
-
- {{- end }}
-
- {{- if and .Site.Params.enableGoogleAnalytics (eq hugo.Environment "production") }}
-
-
- {{ partial "third-party/google-analytics.html" . }}
- {{- end }}
-
- {{- if or .Site.Params.enableGoogleAutoAds .Site.Params.enableGoogleAdUnits }}
- {{ if eq hugo.Environment "production" }}
- {{ partial "third-party/google-adsense.html" . }}
- {{ end }}
- {{- end }}
-
- {{- if and .Site.Params.enableGoogleAutoAds (eq hugo.Environment "production") -}}
- {{ partial "third-party/google-adsense-auto.html" . }}
- {{- end }}
-
- {{ partial "matomo-tracking" . }}
- {{ partial "custom/head.html" . }}
-
-
-
-
-
diff --git a/layouts/partials/head/custom.html b/layouts/partials/head/custom.html
new file mode 100644
index 00000000..fee6bb05
--- /dev/null
+++ b/layouts/partials/head/custom.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
diff --git a/layouts/partials/head/head.html b/layouts/partials/head/head.html
new file mode 100644
index 00000000..96ea493a
--- /dev/null
+++ b/layouts/partials/head/head.html
@@ -0,0 +1,45 @@
+
+
+
+{{- $description := partialCached "data/description" . .RelPermalink -}}
+
+{{ with .Params.Keywords }} {{ end }}
+
+{{- $title := partial "data/title" . -}}
+{{ $title }}
+
+{{ if .Params.canonicalUrl -}}
+
+{{- else -}}
+
+{{- end }}
+
+{{- partial "head/style.html" . -}}
+{{- partial "head/script.html" . -}}
+
+
+{{ partial "head/opengraph/include.html" . }}
+
+
+{{- partial "head/hreflang.html" . -}}
+
+
+
+
+
+{{- partial "head/jsonld.html" . -}}
+{{- partial "head/organization-schema.html" . -}}
+
+{{- range .AlternativeOutputFormats -}}
+
+{{- end -}}
+
+{{ with .Site.Params.favicon }}
+
+{{ end }}
+
+
+
+
+
+{{- partial "head/custom.html" . -}}
diff --git a/layouts/partials/head/hreflang.html b/layouts/partials/head/hreflang.html
new file mode 100644
index 00000000..82a5cd74
--- /dev/null
+++ b/layouts/partials/head/hreflang.html
@@ -0,0 +1,16 @@
+{{- if .IsTranslated -}}
+{{- range .AllTranslations -}}
+
+{{- end -}}
+{{- range .AllTranslations -}}
+{{- if eq .Language.Lang "en" -}}
+
+{{- end -}}
+{{- end -}}
+{{- else -}}
+{{- /* For pages without translations, still indicate the current language */ -}}
+
+{{- if eq .Language.Lang "en" -}}
+
+{{- end -}}
+{{- end -}}
diff --git a/layouts/partials/head/jsonld.html b/layouts/partials/head/jsonld.html
new file mode 100644
index 00000000..d312956c
--- /dev/null
+++ b/layouts/partials/head/jsonld.html
@@ -0,0 +1,62 @@
+{{- if and .IsPage (ne .Type "glossary") -}}
+{{- $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" -}}
+{{- $desc := .Description | default (.Summary | plainify) -}}
+
+{{- else if .IsHome -}}
+
+{{- end -}}
diff --git a/layouts/partials/head/opengraph/provider/base.html b/layouts/partials/head/opengraph/provider/base.html
new file mode 100644
index 00000000..59d1e5b5
--- /dev/null
+++ b/layouts/partials/head/opengraph/provider/base.html
@@ -0,0 +1,54 @@
+{{- $title := partialCached "data/title" . .RelPermalink -}}
+{{- $description := partialCached "data/description" . .RelPermalink -}}
+
+
+
+
+
+
+
+{{- $locale := .Params.locale -}}
+{{- if not $locale -}}
+ {{- if eq .Language.Lang "fr" -}}
+ {{- $locale = "fr_FR" -}}
+ {{- else -}}
+ {{- $locale = "en_US" -}}
+ {{- end -}}
+{{- end -}}
+
+
+{{- if .IsPage -}}
+
+ {{- range .Params.tags -}}
+
+ {{- end -}}
+{{- end -}}
+
+{{- if .IsPage -}}
+ {{- if not .Date.IsZero -}}
+
+ {{- end -}}
+ {{- if not .Lastmod.IsZero -}}
+
+ {{- end -}}
+{{- else -}}
+ {{- if not .Site.Lastmod.IsZero -}}
+
+ {{- end -}}
+{{- end -}}
+
+{{ $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" }}
+{{- if $image.exists -}}
+
+ {{- if $image.resource -}}
+
+
+ {{- end -}}
+
+{{- end -}}
diff --git a/layouts/partials/head/opengraph/provider/twitter.html b/layouts/partials/head/opengraph/provider/twitter.html
new file mode 100644
index 00000000..eb864b1d
--- /dev/null
+++ b/layouts/partials/head/opengraph/provider/twitter.html
@@ -0,0 +1,17 @@
+{{- with .Site.Params.opengraph.twitter.site -}}
+
+
+{{- end -}}
+
+{{- $title := partialCached "data/title" . .RelPermalink -}}
+{{- $description := partialCached "data/description" . .RelPermalink -}}
+
+
+
+
+{{- $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" -}}
+{{- if $image.exists -}}
+
+
+
+{{- end -}}
diff --git a/layouts/partials/head/organization-schema.html b/layouts/partials/head/organization-schema.html
new file mode 100644
index 00000000..e30428cb
--- /dev/null
+++ b/layouts/partials/head/organization-schema.html
@@ -0,0 +1,43 @@
+{{- if .IsHome -}}
+
+{{- end -}}
diff --git a/layouts/partials/matomo-tracking.html b/layouts/partials/matomo-tracking.html
new file mode 100644
index 00000000..6c79b742
--- /dev/null
+++ b/layouts/partials/matomo-tracking.html
@@ -0,0 +1,22 @@
+{{- /* layouts/partials/matomo-tracking.html */ -}}
+{{- /* Use hugo.IsServer instead of deprecated Site.IsServer */ -}}
+{{ if hugo.IsServer }}
+ {{ $trackingScript := resources.Get "js/matomo-tracking.js" }}
+
+{{ else }}
+ {{ $trackingScript := resources.Get "js/matomo-tracking.js" | minify | fingerprint }}
+
+{{ end }}
diff --git a/layouts/partials/widget/expertise.html b/layouts/partials/widget/expertise.html
new file mode 100644
index 00000000..3e476094
--- /dev/null
+++ b/layouts/partials/widget/expertise.html
@@ -0,0 +1,63 @@
+{{- $context := .Context -}}
+
diff --git a/layouts/shortcodes/audio.html b/layouts/shortcodes/audio.html
new file mode 100644
index 00000000..bb7b1c5c
--- /dev/null
+++ b/layouts/shortcodes/audio.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/shortcodes/defi-term.html b/layouts/shortcodes/defi-term.html
new file mode 100644
index 00000000..1b663d85
--- /dev/null
+++ b/layouts/shortcodes/defi-term.html
@@ -0,0 +1,23 @@
+{{- $termId := .Get 0 -}}
+{{- $lang := .Page.Language.Lang -}}
+{{- $customText := .Get "text" -}}
+{{- $glossaryData := index .Site.Data.glossary $lang -}}
+{{- $term := index (where $glossaryData.terms "id" $termId) 0 -}}
+
+{{- if $term -}}
+ {{- $linkText := $customText | default $term.term -}}
+ {{- $glossaryPath := "/glossary/" -}}
+ {{- if eq $lang "fr" -}}
+ {{- $glossaryPath = "/fr/glossary/" -}}
+ {{- end -}}
+
+ {{ $linkText }}
+{{- else -}}
+ {{- $fallbackText := $customText | default $termId -}}
+ {{ $fallbackText }}
+{{- end -}}
diff --git a/layouts/shortcodes/details.html b/layouts/shortcodes/details.html
new file mode 100644
index 00000000..d1d8771e
--- /dev/null
+++ b/layouts/shortcodes/details.html
@@ -0,0 +1,4 @@
+
+ {{ .Get "title" | default "Click to expand" }}
+ {{ .Inner | markdownify }}
+
diff --git a/layouts/shortcodes/glossary-categories.html b/layouts/shortcodes/glossary-categories.html
new file mode 100644
index 00000000..02c4cb94
--- /dev/null
+++ b/layouts/shortcodes/glossary-categories.html
@@ -0,0 +1,23 @@
+{{- $lang := .Page.Language.Lang -}}
+{{- $categories := index .Site.Data.glossary.categories $lang -}}
+
+
+ {{- range $categories -}}
+
+ {{- end -}}
+
+
+{{ $catJS := resources.Get "js/glossary-categories.js" | minify | fingerprint }}
+
diff --git a/layouts/shortcodes/glossary-search.html b/layouts/shortcodes/glossary-search.html
new file mode 100644
index 00000000..fc884b62
--- /dev/null
+++ b/layouts/shortcodes/glossary-search.html
@@ -0,0 +1,5 @@
+
+
+
+
{{ if eq .Page.Language.Lang "fr" }}La recherche et la navigation seront disponibles ci-dessous.{{ else }}Search and navigation will be available below.{{ end }}
+
diff --git a/lighthouse.sh b/lighthouse.sh
new file mode 100755
index 00000000..0e092789
--- /dev/null
+++ b/lighthouse.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+# Run Lighthouse audits against the local Hugo site.
+# Usage: ./lighthouse.sh [page1 page2 ...]
+# Defaults to "/" if no pages specified.
+# Reports are saved in lighthouse-reports/
+
+set -euo pipefail
+
+PORT=1314
+REPORT_DIR="$(cd "$(dirname "$0")" && pwd)/lighthouse-reports"
+HUGO_PID=""
+
+cleanup() {
+ if [ -n "$HUGO_PID" ]; then
+ kill "$HUGO_PID" 2>/dev/null || true
+ wait "$HUGO_PID" 2>/dev/null || true
+ fi
+}
+trap cleanup EXIT
+
+# Default pages to test
+PAGES=("${@:-/}")
+
+mkdir -p "$REPORT_DIR"
+
+# Start Hugo server
+echo "Starting Hugo server on port $PORT..."
+hugo server --port "$PORT" --disableLiveReload --baseURL "http://localhost:$PORT" --environment production --minify &>/dev/null &
+HUGO_PID=$!
+
+# Wait for server to be ready
+for i in $(seq 1 10); do
+ if curl -s -o /dev/null -w "" "http://localhost:$PORT/"; then
+ break
+ fi
+ sleep 1
+done
+
+TIMESTAMP=$(date +%Y%m%d-%H%M%S)
+
+for PAGE in "${PAGES[@]}"; do
+ SLUG=$(echo "$PAGE" | sed 's|^/||; s|/$||; s|/|_|g')
+ [ -z "$SLUG" ] && SLUG="homepage"
+
+ echo "Running Lighthouse on $PAGE -> $SLUG..."
+ npx lighthouse "http://localhost:$PORT$PAGE" \
+ --chrome-flags="--headless --no-sandbox" \
+ --preset desktop \
+ --output html \
+ --output-path "$REPORT_DIR/${SLUG}_${TIMESTAMP}.report.html" \
+ --quiet 2>&1
+
+ # Also generate JSON
+ npx lighthouse "http://localhost:$PORT$PAGE" \
+ --chrome-flags="--headless --no-sandbox" \
+ --preset desktop \
+ --output json \
+ --output-path "$REPORT_DIR/${SLUG}_${TIMESTAMP}.report.json" \
+ --quiet 2>&1
+done
+
+echo ""
+echo "Reports saved in $REPORT_DIR/"
+ls -lh "$REPORT_DIR"/*"$TIMESTAMP"* 2>/dev/null
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..df590f02
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2558 @@
+{
+ "name": "tokenbrice-blog",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "tokenbrice-blog",
+ "version": "1.0.0",
+ "license": "CC-BY-NC-SA-4.0",
+ "devDependencies": {
+ "lighthouse": "^13.0.1"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz",
+ "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@formatjs/fast-memoize": "2.2.7",
+ "@formatjs/intl-localematcher": "0.6.2",
+ "decimal.js": "^10.4.3",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz",
+ "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz",
+ "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/icu-skeleton-parser": "1.8.16",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.8.16",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz",
+ "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz",
+ "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@opentelemetry/api-logs": {
+ "version": "0.57.2",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz",
+ "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/context-async-hooks": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz",
+ "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ }
+ },
+ "node_modules/@opentelemetry/core": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz",
+ "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/semantic-conventions": "1.28.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ }
+ },
+ "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.28.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
+ "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation": {
+ "version": "0.57.2",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz",
+ "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/api-logs": "0.57.2",
+ "@types/shimmer": "^1.2.0",
+ "import-in-the-middle": "^1.8.1",
+ "require-in-the-middle": "^7.1.1",
+ "semver": "^7.5.2",
+ "shimmer": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-amqplib": {
+ "version": "0.46.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz",
+ "integrity": "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-connect": {
+ "version": "0.43.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz",
+ "integrity": "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0",
+ "@types/connect": "3.4.38"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-dataloader": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz",
+ "integrity": "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-express": {
+ "version": "0.47.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz",
+ "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-fs": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz",
+ "integrity": "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-generic-pool": {
+ "version": "0.43.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz",
+ "integrity": "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-graphql": {
+ "version": "0.47.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz",
+ "integrity": "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-hapi": {
+ "version": "0.45.2",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz",
+ "integrity": "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-http": {
+ "version": "0.57.2",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz",
+ "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "1.30.1",
+ "@opentelemetry/instrumentation": "0.57.2",
+ "@opentelemetry/semantic-conventions": "1.28.0",
+ "forwarded-parse": "2.1.2",
+ "semver": "^7.5.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.28.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
+ "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-ioredis": {
+ "version": "0.47.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz",
+ "integrity": "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/redis-common": "^0.36.2",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-kafkajs": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz",
+ "integrity": "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-knex": {
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz",
+ "integrity": "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-koa": {
+ "version": "0.47.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz",
+ "integrity": "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-lru-memoizer": {
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz",
+ "integrity": "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-mongodb": {
+ "version": "0.52.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz",
+ "integrity": "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-mongoose": {
+ "version": "0.46.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz",
+ "integrity": "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-mysql": {
+ "version": "0.45.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz",
+ "integrity": "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0",
+ "@types/mysql": "2.15.26"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-mysql2": {
+ "version": "0.45.2",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz",
+ "integrity": "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0",
+ "@opentelemetry/sql-common": "^0.40.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-pg": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz",
+ "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.26.0",
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0",
+ "@opentelemetry/sql-common": "^0.40.1",
+ "@types/pg": "8.6.1",
+ "@types/pg-pool": "2.0.6"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-redis-4": {
+ "version": "0.46.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz",
+ "integrity": "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/redis-common": "^0.36.2",
+ "@opentelemetry/semantic-conventions": "^1.27.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-tedious": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz",
+ "integrity": "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.57.1",
+ "@opentelemetry/semantic-conventions": "^1.27.0",
+ "@types/tedious": "^4.0.14"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.3.0"
+ }
+ },
+ "node_modules/@opentelemetry/instrumentation-undici": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz",
+ "integrity": "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.8.0",
+ "@opentelemetry/instrumentation": "^0.57.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.7.0"
+ }
+ },
+ "node_modules/@opentelemetry/redis-common": {
+ "version": "0.36.2",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz",
+ "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/resources": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz",
+ "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "1.30.1",
+ "@opentelemetry/semantic-conventions": "1.28.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ }
+ },
+ "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.28.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
+ "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/sdk-trace-base": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz",
+ "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "1.30.1",
+ "@opentelemetry/resources": "1.30.1",
+ "@opentelemetry/semantic-conventions": "1.28.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ }
+ },
+ "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.28.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
+ "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.39.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz",
+ "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@opentelemetry/sql-common": {
+ "version": "0.40.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz",
+ "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/core": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0"
+ }
+ },
+ "node_modules/@paulirish/trace_engine": {
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.61.tgz",
+ "integrity": "sha512-/O08DwmUqIlJjUSPSZbNF8lWnlxaMsIOV6sS+uDKCxBd5i1psAmjEoG3JAqR6+nHD8X+YY474NW7SxUH/K+/kQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "legacy-javascript": "latest",
+ "third-party-web": "latest"
+ }
+ },
+ "node_modules/@prisma/instrumentation": {
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz",
+ "integrity": "sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.8"
+ }
+ },
+ "node_modules/@puppeteer/browsers": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.12.0.tgz",
+ "integrity": "sha512-Xuq42yxcQJ54ti8ZHNzF5snFvtpgXzNToJ1bXUGQRaiO8t+B6UM8sTUJfvV+AJnqtkJU/7hdy6nbKyA12aHtRw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "debug": "^4.4.3",
+ "extract-zip": "^2.0.1",
+ "progress": "^2.0.3",
+ "proxy-agent": "^6.5.0",
+ "semver": "^7.7.3",
+ "tar-fs": "^3.1.1",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "browsers": "lib/cjs/main-cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry/core": {
+ "version": "9.47.1",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz",
+ "integrity": "sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry/node": {
+ "version": "9.47.1",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.47.1.tgz",
+ "integrity": "sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@opentelemetry/api": "^1.9.0",
+ "@opentelemetry/context-async-hooks": "^1.30.1",
+ "@opentelemetry/core": "^1.30.1",
+ "@opentelemetry/instrumentation": "^0.57.2",
+ "@opentelemetry/instrumentation-amqplib": "^0.46.1",
+ "@opentelemetry/instrumentation-connect": "0.43.1",
+ "@opentelemetry/instrumentation-dataloader": "0.16.1",
+ "@opentelemetry/instrumentation-express": "0.47.1",
+ "@opentelemetry/instrumentation-fs": "0.19.1",
+ "@opentelemetry/instrumentation-generic-pool": "0.43.1",
+ "@opentelemetry/instrumentation-graphql": "0.47.1",
+ "@opentelemetry/instrumentation-hapi": "0.45.2",
+ "@opentelemetry/instrumentation-http": "0.57.2",
+ "@opentelemetry/instrumentation-ioredis": "0.47.1",
+ "@opentelemetry/instrumentation-kafkajs": "0.7.1",
+ "@opentelemetry/instrumentation-knex": "0.44.1",
+ "@opentelemetry/instrumentation-koa": "0.47.1",
+ "@opentelemetry/instrumentation-lru-memoizer": "0.44.1",
+ "@opentelemetry/instrumentation-mongodb": "0.52.0",
+ "@opentelemetry/instrumentation-mongoose": "0.46.1",
+ "@opentelemetry/instrumentation-mysql": "0.45.1",
+ "@opentelemetry/instrumentation-mysql2": "0.45.2",
+ "@opentelemetry/instrumentation-pg": "0.51.1",
+ "@opentelemetry/instrumentation-redis-4": "0.46.1",
+ "@opentelemetry/instrumentation-tedious": "0.18.1",
+ "@opentelemetry/instrumentation-undici": "0.10.1",
+ "@opentelemetry/resources": "^1.30.1",
+ "@opentelemetry/sdk-trace-base": "^1.30.1",
+ "@opentelemetry/semantic-conventions": "^1.34.0",
+ "@prisma/instrumentation": "6.11.1",
+ "@sentry/core": "9.47.1",
+ "@sentry/node-core": "9.47.1",
+ "@sentry/opentelemetry": "9.47.1",
+ "import-in-the-middle": "^1.14.2",
+ "minimatch": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry/node-core": {
+ "version": "9.47.1",
+ "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.47.1.tgz",
+ "integrity": "sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/core": "9.47.1",
+ "@sentry/opentelemetry": "9.47.1",
+ "import-in-the-middle": "^1.14.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.9.0",
+ "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/core": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/instrumentation": ">=0.57.1 <1",
+ "@opentelemetry/resources": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/semantic-conventions": "^1.34.0"
+ }
+ },
+ "node_modules/@sentry/opentelemetry": {
+ "version": "9.47.1",
+ "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.47.1.tgz",
+ "integrity": "sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/core": "9.47.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.9.0",
+ "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/core": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0",
+ "@opentelemetry/semantic-conventions": "^1.34.0"
+ }
+ },
+ "node_modules/@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/mysql": {
+ "version": "2.15.26",
+ "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz",
+ "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.2.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.1.tgz",
+ "integrity": "sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/pg": {
+ "version": "8.6.1",
+ "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz",
+ "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "pg-protocol": "*",
+ "pg-types": "^2.2.0"
+ }
+ },
+ "node_modules/@types/pg-pool": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz",
+ "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/pg": "*"
+ }
+ },
+ "node_modules/@types/shimmer": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz",
+ "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/tedious": {
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz",
+ "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/atomically": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz",
+ "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "stubborn-fs": "^2.0.0",
+ "when-exit": "^2.1.4"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz",
+ "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/bare-fs": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz",
+ "integrity": "sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-events": "^2.5.4",
+ "bare-path": "^3.0.0",
+ "bare-stream": "^2.6.4",
+ "bare-url": "^2.2.2",
+ "fast-fifo": "^1.3.2"
+ },
+ "engines": {
+ "bare": ">=1.16.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/bare-os": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz",
+ "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "bare": ">=1.14.0"
+ }
+ },
+ "node_modules/bare-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
+ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-os": "^3.0.1"
+ }
+ },
+ "node_modules/bare-stream": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz",
+ "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "streamx": "^2.21.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*",
+ "bare-events": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ },
+ "bare-events": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/bare-url": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz",
+ "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-path": "^3.0.0"
+ }
+ },
+ "node_modules/basic-ftp": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz",
+ "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chrome-launcher": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz",
+ "integrity": "sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/node": "*",
+ "escape-string-regexp": "^4.0.0",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^2.0.1"
+ },
+ "bin": {
+ "print-chrome-path": "bin/print-chrome-path.cjs"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ }
+ },
+ "node_modules/chromium-bidi": {
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.1.1.tgz",
+ "integrity": "sha512-zB9MpoPd7VJwjowQqiW3FKOvQwffFMjQ8Iejp5ZW+sJaKLRhZX1sTxzl3Zt22TDB4zP0OOqs8lRoY7eAW5geyQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "mitt": "^3.0.1",
+ "zod": "^3.24.1"
+ },
+ "peerDependencies": {
+ "devtools-protocol": "*"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/configstore": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz",
+ "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "atomically": "^2.0.3",
+ "dot-prop": "^9.0.0",
+ "graceful-fs": "^4.2.11",
+ "xdg-basedir": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/csp_evaluator": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz",
+ "integrity": "sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/devtools-protocol": {
+ "version": "0.0.1527314",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1527314.tgz",
+ "integrity": "sha512-UohCFOlzpPPD/IcsxM0k4lVZp/GfhPVJ6l2No5XX+LknpGisPWJe17oOHQhZTHf6ThUFIMwHO6bSEZUq/6oP7w==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/dot-prop": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz",
+ "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^4.18.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/forwarded-parse": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz",
+ "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-uri": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz",
+ "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.2",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/http-link-header": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz",
+ "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/image-ssim": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz",
+ "integrity": "sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/import-in-the-middle": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz",
+ "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-import-attributes": "^1.9.5",
+ "cjs-module-lexer": "^1.2.2",
+ "module-details-from-path": "^1.0.3"
+ }
+ },
+ "node_modules/intl-messageformat": {
+ "version": "10.7.18",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz",
+ "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/fast-memoize": "2.2.7",
+ "@formatjs/icu-messageformat-parser": "2.11.4",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/ip-address": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
+ "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jpeg-js": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
+ "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/js-library-detector": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz",
+ "integrity": "sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/legacy-javascript": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/legacy-javascript/-/legacy-javascript-0.0.1.tgz",
+ "integrity": "sha512-lPyntS4/aS7jpuvOlitZDFifBCb4W8L/3QU0PLbUTUj+zYah8rfVjYic88yG7ZKTxhS5h9iz7duT8oUXKszLhg==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/lighthouse": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-13.0.1.tgz",
+ "integrity": "sha512-SsxFXPE0DoUv6rH3hva0luh0pbpyIx9McBQ1WUpqCYFMtArODT6l9Zpu1K3XSdkeMQ2/zFcMN5o3pPVhfVwnCA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@paulirish/trace_engine": "0.0.61",
+ "@sentry/node": "^9.28.1",
+ "axe-core": "^4.11.0",
+ "chrome-launcher": "^1.2.1",
+ "configstore": "^7.0.0",
+ "csp_evaluator": "1.1.5",
+ "devtools-protocol": "0.0.1527314",
+ "enquirer": "^2.3.6",
+ "http-link-header": "^1.1.1",
+ "intl-messageformat": "^10.5.3",
+ "jpeg-js": "^0.4.4",
+ "js-library-detector": "^6.7.0",
+ "lighthouse-logger": "^2.0.2",
+ "lighthouse-stack-packs": "1.12.3",
+ "lodash-es": "^4.17.21",
+ "lookup-closest-locale": "6.2.0",
+ "open": "^8.4.0",
+ "puppeteer-core": "^24.23.0",
+ "robots-parser": "^3.0.1",
+ "speedline-core": "^1.4.3",
+ "third-party-web": "^0.27.0",
+ "tldts-icann": "^7.0.17",
+ "ws": "^7.0.0",
+ "yargs": "^17.3.1",
+ "yargs-parser": "^21.0.0"
+ },
+ "bin": {
+ "chrome-debug": "core/scripts/manual-chrome-launcher.js",
+ "lighthouse": "cli/index.js",
+ "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js"
+ },
+ "engines": {
+ "node": ">=22.19"
+ }
+ },
+ "node_modules/lighthouse-logger": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.2.tgz",
+ "integrity": "sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "debug": "^4.4.1",
+ "marky": "^1.2.2"
+ }
+ },
+ "node_modules/lighthouse-stack-packs": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.12.3.tgz",
+ "integrity": "sha512-d8IsOpE83kbANgnM+Tp8+x6HcMpX9o2ITBiUERssgzAIFdZCQzs/f4k6D0DLQTE59enml9mbAOU52Wu35exWtg==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lookup-closest-locale": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz",
+ "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/marky": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz",
+ "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/module-details-from-path": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",
+ "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pac-proxy-agent": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz",
+ "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.6",
+ "pac-resolver": "^7.0.1",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/pac-resolver": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "degenerator": "^5.0.0",
+ "netmask": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pg-int8": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
+ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/pg-protocol": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz",
+ "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pg-types": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
+ "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pg-int8": "1.0.1",
+ "postgres-array": "~2.0.0",
+ "postgres-bytea": "~1.0.0",
+ "postgres-date": "~1.0.4",
+ "postgres-interval": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postgres-array": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
+ "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postgres-bytea": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
+ "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postgres-date": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
+ "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postgres-interval": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
+ "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/proxy-agent": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
+ "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.6",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.1.0",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/puppeteer-core": {
+ "version": "24.37.2",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.2.tgz",
+ "integrity": "sha512-nN8qwE3TGF2vA/+xemPxbesntTuqD9vCGOiZL2uh8HES3pPzLX20MyQjB42dH2rhQ3W3TljZ4ZaKZ0yX/abQuw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@puppeteer/browsers": "2.12.0",
+ "chromium-bidi": "13.1.1",
+ "debug": "^4.4.3",
+ "devtools-protocol": "0.0.1566079",
+ "typed-query-selector": "^2.12.0",
+ "webdriver-bidi-protocol": "0.4.0",
+ "ws": "^8.19.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/devtools-protocol": {
+ "version": "0.0.1566079",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz",
+ "integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/puppeteer-core/node_modules/ws": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
+ "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I= sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-in-the-middle": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz",
+ "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.5",
+ "module-details-from-path": "^1.0.3",
+ "resolve": "^1.22.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/robots-parser": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz",
+ "integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shimmer": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz",
+ "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^10.0.1",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/speedline-core": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz",
+ "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "image-ssim": "^0.2.0",
+ "jpeg-js": "^0.4.1"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stubborn-fs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz",
+ "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "stubborn-utils": "^1.0.1"
+ }
+ },
+ "node_modules/stubborn-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz",
+ "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz",
+ "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ },
+ "optionalDependencies": {
+ "bare-fs": "^4.0.1",
+ "bare-path": "^3.0.0"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/third-party-web": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.27.0.tgz",
+ "integrity": "sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tldts-core": {
+ "version": "7.0.22",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.22.tgz",
+ "integrity": "sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tldts-icann": {
+ "version": "7.0.22",
+ "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.22.tgz",
+ "integrity": "sha512-Wb5HEhrSy+zJtdJ6gop7ZNQ/Iacz/0c8t+6Kp1QoT84VRfc0TfPJLrb8f6YuRvCUOVjU889KJlPcG+5glVX8GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^7.0.22"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-query-selector": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
+ "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/webdriver-bidi-protocol": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.0.tgz",
+ "integrity": "sha512-U9VIlNRrq94d1xxR9JrCEAx5Gv/2W7ERSv8oWRoNe/QYbfccS0V3h/H6qeNeCRJxXGMhhnkqvwNrvPAYeuP9VA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/when-exit": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz",
+ "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xdg-basedir": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz",
+ "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 91e1161e..d190dbac 100644
--- a/package.json
+++ b/package.json
@@ -1,34 +1,25 @@
{
- "name": "hugo-image-optimizer",
+ "name": "tokenbrice-blog",
"version": "1.0.0",
- "description": "Smart image optimization for Hugo",
+ "description": "TokenBrice Blog - Brutally Honest DeFi",
"scripts": {
- "optimize": "node build/optimize.js",
- "build": "webpack --config build/webpack.config.dev.js",
- "build:production": "webpack --config build/webpack.config.production.js"
+ "serve": "hugo server --disableFastRender --navigateToChanged",
+ "build": "hugo --gc --minify"
},
- "author": "Jérémy Hagneré ",
- "license": "MIT",
- "dependencies": {
- "async": "^2.1.4",
- "hash-files": "^1.1.1",
- "image-optimizer": "^0.4.0-pre2",
- "img-loader": "^3.0.1",
- "lodash": "^4.17.4",
- "sharp": "^0.17.1",
- "uglifyjs-webpack-plugin": "^2.2.0",
- "vue": "^2.6.11",
- "vue-multiselect": "^2.1.6"
+ "author": "TokenBrice",
+ "license": "CC-BY-NC-SA-4.0",
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/TokenBrice/blog.git"
},
+ "keywords": [],
+ "type": "commonjs",
+ "bugs": {
+ "url": "https://github.com/TokenBrice/blog/issues"
+ },
+ "homepage": "https://github.com/TokenBrice/blog#readme",
"devDependencies": {
- "css-loader": "^3.5.3",
- "eslint": "^3.19.0",
- "eslint-config-airbnb-base": "^11.2.0",
- "eslint-plugin-import": "^2.3.0",
- "vue-loader": "^15.9.2",
- "vue-style-loader": "^4.1.2",
- "vue-template-compiler": "^2.6.11",
- "webpack": "^4.43.0",
- "webpack-cli": "^3.3.11"
+ "lighthouse": "^13.0.1"
}
}
diff --git a/resources/_gen/assets/scss/scss/main.scss_a899b346ffc3a4bc65b84e40528dea51.content b/resources/_gen/assets/scss/scss/main.scss_a899b346ffc3a4bc65b84e40528dea51.content
deleted file mode 100644
index d7a63712..00000000
--- a/resources/_gen/assets/scss/scss/main.scss_a899b346ffc3a4bc65b84e40528dea51.content
+++ /dev/null
@@ -1 +0,0 @@
-html,body{margin:0;width:100%;height:100%;font-size:20px;text-size-adjust:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none}body{-moz-tab-size:4;tab-size:4;color:var(--color-contrast-high);background-color:var(--color-bg);overflow-wrap:break-word;word-wrap:break-word;line-height:1.618;transition:all .5s}.container{min-height:100%;min-width:100%;position:relative}.main{padding:2em 1em 15em;display:block}.main-inner{margin:0 auto;display:block}.icon{width:1em;height:1em;fill:currentColor;display:inline-block}svg{vertical-align:middle}h1,h2,h3,h4,h5,h6{margin:1.618em 0 1em;color:var(--color-contrast-higher)}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{text-decoration:none !important;color:var(--color-contrast-higher)}h1{font-size:2em}h2{font-size:1.8em}h3{font-size:1.6em}h4{font-size:1.4em}h5{font-size:1.2em}h6{font-size:1em}a{color:var(--color-contrast-high);text-decoration:none;transition:all .5s}a:hover{color:var(--color-primary)}::selection{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.3)}::-webkit-scrollbar{width:0.4rem;height:0.4rem}::-webkit-scrollbar-track{background-color:var(--color-bg)}::-webkit-scrollbar-thumb{background-color:var(--color-contrast-low)}::-webkit-scrollbar-thumb:hover{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}::-webkit-scrollbar-thumb:active{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.75)}::-webkit-scrollbar-corner{background-color:var(--color-bg)}.menu{font-family:"Roboto",sans-serif}.list-title,.term-title,.list-year,.list-month,.post-title,.post-subtitle,.related-title,.post-nav,thead,dt{font-family:"Comfortaa",sans-serif}.post-body h1,.post-body h2,.post-body h3,.post-body h4,.post-body h5,.post-body h6{font-family:"Comfortaa",sans-serif}.contents-title{font-family:"Comfortaa",sans-serif}code,pre,sup,.post-meta,.updated-badge,.post-gitinfo,.minimal-footer,.minimal-footer-about,.busuanzi-site-uv-and-pv,.copy-button{font-family:"Source Code Pro",monospace}blockquote{font-family:"Lato",sans-serif}.contents{font-family:"Lato",sans-serif}body{font-family:"IBM Plex Serif",serif}[data-indent="true"] .contents-title{text-align:center}[data-indent="true"] .post-body p{text-indent:2em;margin:0}[data-indent="true"] .post-body .caption{text-indent:0;margin:0 0 1em}[data-indent="true"] .post-body blockquote{margin:1em 0;padding:0;border:none}[data-indent="true"] .post-body img,[data-indent="true"] .post-body video{margin:1em auto}[data-indent="true"] .post-body table{margin:1em 0}[data-indent="true"] .post-body pre,[data-indent="true"] .post-body .highlight{margin:1rem 0}[data-indent="true"] .post-body h1,[data-indent="true"] .post-body h2,[data-indent="true"] .post-body h3,[data-indent="true"] .post-body h4,[data-indent="true"] .post-body h5,[data-indent="true"] .post-body h6{text-align:center}[data-indent="true"] .post-body .anchor-link{position:relative;transform:none;display:block;float:none}[data-indent="true"] .post-body ol,[data-indent="true"] .post-body ul{margin:0;padding-left:4em}[data-indent="true"] .post-body ol p,[data-indent="true"] .post-body ul p{text-indent:0}[data-indent="true"] .post-body li ol,[data-indent="true"] .post-body li ul{padding-left:2em}[data-indent="true"] .post-body dl{text-indent:2em}[data-indent="true"] .post-body dl dd{text-indent:0;margin-left:4em}[data-indent="true"] .post-body dl p{text-indent:0}:root{--color-primary:hsl(220, 90%, 56%);--color-primary-h:220;--color-primary-s:90%;--color-primary-l:56%;--color-bg:hsl(0, 0%, 100%);--color-bg-h:0;--color-bg-s:0%;--color-bg-l:100%;--color-contrast-lower:hsl(0, 0%, 95%);--color-contrast-lower-h:0;--color-contrast-lower-s:0%;--color-contrast-lower-l:95%;--color-contrast-low:hsl(240, 1%, 83%);--color-contrast-low-h:240;--color-contrast-low-s:1%;--color-contrast-low-l:83%;--color-contrast-medium:hsl(240, 1%, 48%);--color-contrast-medium-h:240;--color-contrast-medium-s:1%;--color-contrast-medium-l:48%;--color-contrast-high:hsl(240, 4%, 20%);--color-contrast-high-h:240;--color-contrast-high-s:4%;--color-contrast-high-l:20%;--color-contrast-higher:hsl(240, 8%, 12%);--color-contrast-higher-h:240;--color-contrast-higher-s:8%;--color-contrast-higher-l:12%}[data-theme="dark"]{--color-primary:hsl(201, 65%, 62%);--color-primary-h:201;--color-primary-s:65%;--color-primary-l:62%;--color-bg:hsl(231, 14%, 10%);--color-bg-h:231;--color-bg-s:14%;--color-bg-l:10%;--color-contrast-lower:hsl(230, 8%, 15%);--color-contrast-lower-h:230;--color-contrast-lower-s:8%;--color-contrast-lower-l:15%;--color-contrast-low:hsl(240, 2%, 25%);--color-contrast-low-h:240;--color-contrast-low-s:2%;--color-contrast-low-l:25%;--color-contrast-medium:hsl(80, 1%, 50%);--color-contrast-medium-h:80;--color-contrast-medium-s:1%;--color-contrast-medium-l:50%;--color-contrast-high:hsl(69, 4%, 68%);--color-contrast-high-h:69;--color-contrast-high-s:4%;--color-contrast-high-l:68%;--color-contrast-higher:hsl(60, 10%, 80%);--color-contrast-higher-h:60;--color-contrast-higher-s:10%;--color-contrast-higher-l:80%}#theme-switcher{cursor:pointer;position:relative;z-index:4}[data-theme="dark"] img{filter:brightness(50%)}[data-theme="dark"] #theme-switcher,[data-theme="dark"] #lang-switcher{opacity:0.5}#theme-switcher{padding:1em;float:right}.chroma-dark{color:#f8f8f2;background-color:#282a36}.chroma-dark .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma-dark .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma-dark .hl{display:block;width:100%;background-color:#3c3c3c}.chroma-dark .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .k{color:#ff79c6}.chroma-dark .kc{color:#ff79c6}.chroma-dark .kd{color:#8be9fd;font-style:italic}.chroma-dark .kn{color:#ff79c6}.chroma-dark .kp{color:#ff79c6}.chroma-dark .kr{color:#ff79c6}.chroma-dark .kt{color:#8be9fd}.chroma-dark .na{color:#50fa7b}.chroma-dark .nb{color:#8be9fd;font-style:italic}.chroma-dark .nc{color:#50fa7b}.chroma-dark .nf{color:#50fa7b}.chroma-dark .nl{color:#8be9fd;font-style:italic}.chroma-dark .nt{color:#ff79c6}.chroma-dark .nv{color:#8be9fd;font-style:italic}.chroma-dark .vc{color:#8be9fd;font-style:italic}.chroma-dark .vg{color:#8be9fd;font-style:italic}.chroma-dark .vi{color:#8be9fd;font-style:italic}.chroma-dark .s{color:#f1fa8c}.chroma-dark .sa{color:#f1fa8c}.chroma-dark .sb{color:#f1fa8c}.chroma-dark .sc{color:#f1fa8c}.chroma-dark .dl{color:#f1fa8c}.chroma-dark .sd{color:#f1fa8c}.chroma-dark .s2{color:#f1fa8c}.chroma-dark .se{color:#f1fa8c}.chroma-dark .sh{color:#f1fa8c}.chroma-dark .si{color:#f1fa8c}.chroma-dark .sx{color:#f1fa8c}.chroma-dark .sr{color:#f1fa8c}.chroma-dark .s1{color:#f1fa8c}.chroma-dark .ss{color:#f1fa8c}.chroma-dark .m{color:#bd93f9}.chroma-dark .mb{color:#bd93f9}.chroma-dark .mf{color:#bd93f9}.chroma-dark .mh{color:#bd93f9}.chroma-dark .mi{color:#bd93f9}.chroma-dark .il{color:#bd93f9}.chroma-dark .mo{color:#bd93f9}.chroma-dark .o{color:#ff79c6}.chroma-dark .ow{color:#ff79c6}.chroma-dark .c{color:#6272a4}.chroma-dark .ch{color:#6272a4}.chroma-dark .cm{color:#6272a4}.chroma-dark .c1{color:#6272a4}.chroma-dark .cs{color:#6272a4}.chroma-dark .cp{color:#ff79c6}.chroma-dark .cpf{color:#ff79c6}.chroma-dark .gd{color:#ffcccc}.chroma-dark .ge{text-decoration:underline}.chroma-dark .gh{font-weight:bold}.chroma-dark .gi{color:#ccffcc}.chroma-dark .go{color:#44475a}.chroma-dark .gu{font-weight:bold}.chroma-dark .gl{text-decoration:underline}.header{z-index:3}.header{position:relative;background:linear-gradient(90deg, rgba(247,149,51,0.101961) 0, rgba(243,112,85,0.101961) 15%, rgba(239,78,123,0.101961) 30%, rgba(161,102,171,0.101961) 44%, rgba(80,115,184,0.101961) 58%, rgba(16,152,173,0.101961) 72%, rgba(7,179,155,0.101961) 86%, rgba(109,186,130,0.101961) 100%)}.site-brand{text-align:center}.brand{width:300px;height:100px;fill:#cfcbd4}.nav{z-index:3;position:relative}.menu{padding:0;margin:0;list-style:none;line-height:1.5;font-weight:500}.menu-item{display:inline-block}.menu-item a{color:var(--color-contrast-medium)}.menu-item a:hover{color:var(--color-primary)}.active a{color:var(--color-primary)}.menu{text-align:center;background:var(--color-contrast-lower)}.menu-item{margin:0 1em}.menu-item-name{display:flex}.list .main-inner{width:50em}.list-title{text-align:center}.list ul{list-style:none;padding:0}.list-item-title{flex:1}.list-item-time{text-align:right;margin-left:1em}.list-item{line-height:2;position:relative;transition:border .5s;border-bottom:1px dashed var(--color-contrast-low);margin-top:1em;padding-bottom:0.5em;display:flex;align-items:baseline}.list-item:hover{border-bottom-color:var(--color-primary)}.list-item:hover ::before{background:var(--color-primary)}.list-item ::before{content:" ";position:absolute;left:0.618em;top:0.618em;width:6.66666667px;height:6.66666667px;background:var(--color-contrast-low);border-radius:50%;border:1px solid var(--color-bg);transition:background .5s;font-size:1rem}.list-item-title{margin:0 0.618em 0 2em;font-size:1.2em;line-height:1.5}.list-item-time{margin:0 0.618em 0 2em;color:var(--color-contrast-medium);line-height:1.5}.list-year{display:flex;justify-content:space-between;align-items:baseline}.term-count{color:var(--color-contrast-medium);font-size:0.7em}.single .main-inner{width:50em}.post-title{text-align:center}.post-subtitle{font-size:1.8em;text-align:center;font-weight:700;margin-top:-0.618em}.post-description{text-align:center;margin:1rem 0;font-size:90%}.post-body{margin-top:5em !important}.post-body a{text-decoration:underline;text-decoration-color:var(--color-contrast-low)}.post-body a:hover{text-decoration-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.post p{margin:0 0 1em;line-height:2.15}.post img{display:block;margin:2em auto;max-width:100%;border:1px solid var(--color-contrast-lower);clear:both}.post video{display:block;max-width:100%;margin:2em auto;clear:both}.post sup{font-size:70%;vertical-align:super}.post sup a{text-decoration:none}.post ol,.post ul{padding-left:2em;line-height:2.15}.post hr{border:none;margin:2.427em 0 1.5em;text-align:center}.post hr::after{content:"···";letter-spacing:2em;padding-left:2em}blockquote{margin:2em 0;padding-left:1em;color:var(--color-contrast-medium);border-left:3px solid var(--color-contrast-low)}blockquote a{color:var(--color-contrast-medium)}blockquote a:hover{color:var(--color-primary)}.drop-cap{float:left;font-size:60px;margin-right:23px;margin-top:9.30232558px;line-height:43px}.caption{display:block;text-align:center;margin:-1em 0 0;font-size:90%;color:var(--color-contrast-medium)}.contents{margin-top:5em}.contents ol,.contents ul{list-style:none}ol.toc,ul.toc{padding:0;overflow:auto hidden;white-space:nowrap}.footnotes{font-size:90%;margin-top:5rem}.footnotes hr{margin:0;height:1px;border:none;background-color:var(--color-contrast-medium)}.footnotes hr::after{content:none}.footnotes ol{margin:1.618rem 0 0 !important;padding:0 1rem 0 2rem !important}.footnote-icon{fill:hsla(var(--color-contrast-high-h), var(--color-contrast-high-s), var(--color-contrast-high-l), 0.5);transition:fill .5s;margin-bottom:0.3em}.footnote-icon:hover{fill:var(--color-primary)}.anchor-link{position:absolute;transform:translate(-150%)}.anchor-icon{width:0.75em;height:0.75em;vertical-align:baseline}:root{--anchor-opacity: 0}.anchor-link{opacity:var(--anchor-opacity);transition:all .25s}.post h1:hover,.post h2:hover,.post h3:hover,.post h4:hover,.post h5:hover,.post h6:hover,.post .anchor-link:hover{--anchor-opacity: 1}.table-container{margin:2em 0;overflow-x:auto}table{width:100%;border-collapse:collapse;border-spacing:0;border-color:var(--color-contrast-lower)}th{font-weight:700}th,td{font-size:0.9em;padding:0.4em;border:1px solid var(--color-contrast-lower)}table>tbody>tr:nth-of-type(odd){background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}table>tbody>tr:hover{background-color:var(--color-contrast-lower)}dt{font-weight:700}dd{margin-left:2em}code{padding:2.5px 5px;background-color:var(--color-contrast-lower);font-size:80%}pre{overflow:auto;overflow-wrap:normal;word-wrap:normal;font-size:0.8rem;margin:2rem 0;padding:1em;line-height:1.618;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.75)}pre code{background-color:unset;font-size:0.8rem;padding:0}pre{max-height:20em}.copy-button{position:absolute;top:0;right:0;border:0;font-size:inherit;color:var(--color-bg);background-color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.5);transition:all .5s;cursor:pointer}.copy-button:hover{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.copy-button{visibility:hidden;opacity:0}.katex-display,mjx-container[jax="CHTML"][display="true"]{overflow:auto hidden;text-indent:0}.footer{position:absolute;bottom:0;width:100%;font-size:90%;color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.footer a{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.footer a:hover{color:var(--color-primary)}.footer-inner{padding:1em;text-align:center}.footer-icon{margin:0 0.25em 0.3em}.footer-icon{fill:#f06292}@keyframes heartbeat{0%,100%{transform:scale(1)}10%,30%{transform:scale(0.9)}20%,40%,50%,60%,70%,80%{transform:scale(1.1)}}.footer-icon{animation:heartbeat 1.33s ease-in-out infinite}#lang-switcher{position:relative;z-index:4;color:var(--color-contrast-medium)}#langs{display:none;position:absolute;margin:0;padding:0;list-style:none}#langs li{width:max-content}#lang-switcher{padding:1em;float:left}.post-meta{color:var(--color-contrast-medium);font-size:80%;text-align:center;margin:1rem 0}.post-meta a{color:var(--color-contrast-medium)}.post-meta a:hover{color:var(--color-primary)}.home .post-meta{margin:1rem 0}.post-meta-item{margin:0.5em;display:inline-block}.post-meta-icon{fill:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.5);margin-bottom:0.3em}.post-copyright{margin:0;list-style:none;margin-top:5em;padding:0.5em 1em;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5);border-left:3px solid hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5);line-height:2}.copyright-item{line-height:1.5;margin:0.5em 0}.copyright-item-text{font-weight:500}.updated-badge-container{margin-top:5em;text-align:center}.updated-badge-left{fill:var(--color-contrast-low)}.updated-badge-right{fill:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.post-gitinfo{font-size:70%;margin-top:5rem;display:flex;justify-content:space-between;color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8);overflow:auto hidden}.post-gitinfo a{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.post-gitinfo a:hover{color:var(--color-primary)}.post-gitinfo-left,.post-gitinfo-right{display:flex}.post-gitinfo-right{text-align:right}.commit,.commit-msg{margin-right:1em}.edit{margin-left:1em}.git-icon,.msg-icon,.feedback-icon,.edit-icon{margin:0 0.3em 0.3em 0}.post-share{margin-top:5rem;color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.post-share a{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.post-share a:hover{color:inherit}.share-items{text-align:center}.share-item{margin:0 0.5em}.share-item{display:inline-block}.share-item .icon{transition:fill .5s}.twitter-icon:hover{fill:#1DA1F2}.facebook-icon:hover{fill:#1877F2}.linkedin-icon:hover{fill:#0077B5}.telegram-icon:hover{fill:#2CA5E0}.weibo-icon:hover{fill:#E6162D}.douban-icon:hover{fill:#007722}.qq-icon:hover{fill:#12B7F5}.qzone-icon:hover{fill:#FECE00}.qrcode-icon:hover{fill:var(--color-primary)}#qrcode-img{position:absolute;transform:translate(calc(-100% + 1em), calc(-100% - 1em));opacity:0;transition:opacity .5s}#qrcode-img img{display:none}.qrcode-container:hover #qrcode-img{opacity:1}.qrcode-container:hover #qrcode-img img{display:inline-block;border:1px solid var(--color-contrast-lower)}.related-posts{border:1px solid var(--color-contrast-lower);padding:0.6em 1em;line-height:2em;margin-top:5em}.related-title{font-size:1em;margin:0}.related-icon{float:right;margin-top:0.4em}.related-list{margin:0;padding:0;list-style:none}.related-link{line-height:1.5;display:inline-block}.post-tags{margin-top:5rem;text-align:center;font-size:90%}.post-tags-link{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.9);margin:0 0.5em;line-height:2;display:inline-block}.tag-icon{margin-right:0.3em;font-size:80%}.minimal-footer{font-size:80%;margin-top:5rem;display:flex;justify-content:space-between;align-items:baseline;line-height:2}.post-tag,.post-category{max-width:42%}.post-category{text-align:right}.post-category .active{color:var(--color-contrast-high)}.post-tag-link,.post-category-link{display:inline-block}.post-tag-link,.post-category-link,.post-category{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.9)}.post-nav{list-style:none;padding:0;display:flex;justify-content:space-between;border-top:1px solid var(--color-contrast-lower);font-weight:700;margin-top:5em;padding-top:0.618em}.post-nav-prev{margin-right:auto;max-width:42%}.post-nav-next{margin-left:auto;text-align:right;max-width:42%}.back-to-top{position:fixed;right:0;z-index:1}.back-to-top a{display:block;padding:1em;color:var(--color-contrast-medium)}.back-to-top a:hover{color:var(--color-primary)}.back-to-top{bottom:-3.6em;transition:bottom 0.3s ease-in-out}.back-to-top.show{bottom:0}.chroma{color:#4d4d4d;background-color:#ffffff}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffffcc}.chroma .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .k{color:#2c5dcd;font-weight:bold}.chroma .kc{color:#2c5dcd;font-weight:bold}.chroma .kd{color:#2c5dcd;font-weight:bold}.chroma .kn{color:#2c5dcd;font-weight:bold}.chroma .kp{color:#2c5dcd}.chroma .kr{color:#2c5dcd;font-weight:bold}.chroma .kt{color:#5918bb;font-weight:bold}.chroma .na{color:#2c5dcd;font-style:italic}.chroma .nb{color:#5918bb;font-weight:bold}.chroma .nc{text-decoration:underline}.chroma .no{color:#318495}.chroma .nd{color:#ff8000;font-weight:bold}.chroma .ni{color:#5918bb;font-weight:bold}.chroma .ne{color:#5918bb;font-weight:bold}.chroma .nf{color:#ff8000;font-weight:bold}.chroma .nt{color:#2c5dcd;font-weight:bold}.chroma .s{color:#00cc66}.chroma .sa{color:#00cc66}.chroma .sb{color:#00cc66}.chroma .sc{color:#00cc66}.chroma .dl{color:#00cc66}.chroma .sd{color:#00cc66;font-style:italic}.chroma .s2{color:#00cc66}.chroma .se{color:#c5060b;font-weight:bold}.chroma .sh{color:#00cc66}.chroma .si{color:#00cc66}.chroma .sx{color:#318495}.chroma .sr{color:#00cc66}.chroma .s1{color:#00cc66}.chroma .ss{color:#c5060b;font-weight:bold}.chroma .m{color:#5918bb;font-weight:bold}.chroma .mb{color:#5918bb;font-weight:bold}.chroma .mf{color:#5918bb;font-weight:bold}.chroma .mh{color:#5918bb;font-weight:bold}.chroma .mi{color:#5918bb;font-weight:bold}.chroma .il{color:#5918bb;font-weight:bold}.chroma .mo{color:#5918bb;font-weight:bold}.chroma .o{color:#2c5dcd}.chroma .ow{color:#2c5dcd;font-weight:bold}.chroma .c{color:#0080ff}.chroma .ch{color:#0080ff}.chroma .cm{color:#0080ff}.chroma .c1{color:#0080ff}.chroma .cs{color:#0080ff;font-weight:bold}.chroma .cp{color:#0080ff}.chroma .cpf{color:#0080ff}.chroma .gd{background-color:#ffcccc}.chroma .ge{font-style:italic}.chroma .gr{color:#ff0000}.chroma .gh{color:#2c5dcd;font-weight:bold}.chroma .gi{background-color:#ccffcc}.chroma .go{color:#aaaaaa}.chroma .gp{color:#2c5dcd;font-weight:bold}.chroma .gs{font-weight:bold}.chroma .gu{color:#2c5dcd;font-weight:bold}.chroma .gt{color:#c5060b}.chroma .gl{text-decoration:underline}.chroma .w{color:#cbcbcb}.highlight{font-size:0.8rem;margin:2rem 0}.highlight pre{margin:0 !important;max-height:unset}.highlight .lntd pre{background-color:unset;overflow:visible}.highlight table>tbody>tr:nth-of-type(odd){background-color:inherit}.highlight table>tbody>tr:hover{background-color:inherit}span.lnt{user-select:none;display:block;margin-right:-1em !important;padding:0 !important;text-align:right}.chroma,.chroma-dark{color:var(--color-contrast-high);background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}.lntable,.highlight>pre{max-height:20em}article.content.post.home{margin-top:5em}.summary-title-link{color:var(--color-contrast-higher)}.summary{line-height:2.15;display:block}.read-more-container{text-align:center;margin-top:1.618em}.read-more-link{display:inline-block}.pagination{list-style:none;margin:5em 0 0;padding:0;display:flex;justify-content:space-between}.pagination-prev{margin-right:auto}.pagination-next{margin-left:auto;text-align:right}.tree{margin-left:-2.4em;overflow:auto hidden;white-space:nowrap}.category-item{color:var(--color-primary);font-size:1.2em}.category-item:hover{color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.75)}.category-count{color:var(--color-contrast-medium)}.category-post:hover{color:var(--color-contrast-medium)}.tag-cloud{text-align:center}.tag-cloud-item{margin:0.5rem;display:inline-block}.fof::before{background-image:url();background-repeat:no-repeat;background-size:cover;background-position:50% 50%;content:" ";position:fixed;width:100%;height:100%;top:0;left:0;z-index:1}.fof .main-inner{background:rgba(0,0,0,0.25);min-height:100%;min-width:100%;position:absolute;z-index:3}.fof video{position:fixed;top:50%;left:50%;min-width:100%;min-height:100%;width:auto;height:auto;z-index:2;transform:translateX(-50%) translateY(-50%)}.fof h1{font-size:3rem;text-transform:uppercase;letter-spacing:0.3rem;text-align:center;top:15%;left:5%;right:5%;position:absolute;color:#fff;margin:0.67em 0}.fof .fof-footer{font-size:2rem;position:absolute;bottom:15%;left:10%;right:10%;text-align:center}.fof a{color:#eee}.fof a:hover{color:#fff}@media only screen and (max-device-width: 1024px){.fof #bgvid{display:none}}.medium-zoom-overlay,.medium-zoom-image--opened{z-index:5}@media (max-width: 1100px){.main-inner{width:auto !important}.anchor-link{position:relative;transform:none;float:right}#back-to-top{display:none}.menu{display:flex;justify-content:space-around;word-break:break-all}.menu-item{margin:0}}[data-hide="true"]{display:none}[data-small-caps="true"] .post-body h1,[data-small-caps="true"] .post-body h2,[data-small-caps="true"] .post-body h3,[data-small-caps="true"] .post-body h4,[data-small-caps="true"] .post-body h5,[data-small-caps="true"] .post-body h6{font-variant:small-caps}[data-small-caps="true"] .contents-title{font-variant:small-caps}[data-align="justify"] .post-body p,[data-align="justify"] .post-body li,[data-align="justify"] .post-body dd{text-align:justify;text-justify:distribute}[data-align="center"] .post-body p{text-align:center}[data-type="poetry"] .post-body{display:table;margin:0 auto}[data-type="poetry"] .post-body>p:first-child img,[data-type="poetry"] .post-body>p:first-child video{margin-top:0}[data-type="poetry"] .post-body>blockquote:first-child{margin-top:0}[data-type="poetry"] .post-body>blockquote:last-child{margin-bottom:0}[data-type="poetry"] .post-body>p:last-child{margin:0}[data-type="poetry"] .post-body>p:last-child img,[data-type="poetry"] .post-body>p:last-child video{margin-bottom:0}[data-type="poetry"] .post-body>p:last-child .caption{margin:1em 0 0}[data-type="poetry"] section.footnotes>ol>li:last-child>p:last-child{margin:0}[data-toc-num="true"] .contents ol{counter-reset:item}[data-toc-num="true"] .contents ol li::before{counter-increment:item;margin-right:0.5em}[data-toc-num="true"] .contents>ol>li::before{content:counters(item, ".") "."}[data-toc-num="true"] .contents li>ol>li::before{content:counters(item, ".")}@media (max-width: 1024px){ol.toc,ul.toc{white-space:normal}}
diff --git a/resources/_gen/assets/scss/scss/main.scss_a899b346ffc3a4bc65b84e40528dea51.json b/resources/_gen/assets/scss/scss/main.scss_a899b346ffc3a4bc65b84e40528dea51.json
deleted file mode 100644
index 65c5c8b5..00000000
--- a/resources/_gen/assets/scss/scss/main.scss_a899b346ffc3a4bc65b84e40528dea51.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Target":"css/meme.min.42e8b514fd4969202348c08fc9faa88cf544b206f6a09c5a89805983a7fca4d7.css","MediaType":"text/css","Data":{"Integrity":"sha256-Qui1FP1JaSAjSMCPyfqojPVEsgb2oJxaiYBZg6f8pNc="}}
\ No newline at end of file
diff --git a/resources/_gen/assets/scss/scss/main.scss_dedbf6c187d0257b78d5bac2d0d1f92a.content b/resources/_gen/assets/scss/scss/main.scss_dedbf6c187d0257b78d5bac2d0d1f92a.content
deleted file mode 100644
index d7a63712..00000000
--- a/resources/_gen/assets/scss/scss/main.scss_dedbf6c187d0257b78d5bac2d0d1f92a.content
+++ /dev/null
@@ -1 +0,0 @@
-html,body{margin:0;width:100%;height:100%;font-size:20px;text-size-adjust:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none}body{-moz-tab-size:4;tab-size:4;color:var(--color-contrast-high);background-color:var(--color-bg);overflow-wrap:break-word;word-wrap:break-word;line-height:1.618;transition:all .5s}.container{min-height:100%;min-width:100%;position:relative}.main{padding:2em 1em 15em;display:block}.main-inner{margin:0 auto;display:block}.icon{width:1em;height:1em;fill:currentColor;display:inline-block}svg{vertical-align:middle}h1,h2,h3,h4,h5,h6{margin:1.618em 0 1em;color:var(--color-contrast-higher)}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{text-decoration:none !important;color:var(--color-contrast-higher)}h1{font-size:2em}h2{font-size:1.8em}h3{font-size:1.6em}h4{font-size:1.4em}h5{font-size:1.2em}h6{font-size:1em}a{color:var(--color-contrast-high);text-decoration:none;transition:all .5s}a:hover{color:var(--color-primary)}::selection{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.3)}::-webkit-scrollbar{width:0.4rem;height:0.4rem}::-webkit-scrollbar-track{background-color:var(--color-bg)}::-webkit-scrollbar-thumb{background-color:var(--color-contrast-low)}::-webkit-scrollbar-thumb:hover{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}::-webkit-scrollbar-thumb:active{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.75)}::-webkit-scrollbar-corner{background-color:var(--color-bg)}.menu{font-family:"Roboto",sans-serif}.list-title,.term-title,.list-year,.list-month,.post-title,.post-subtitle,.related-title,.post-nav,thead,dt{font-family:"Comfortaa",sans-serif}.post-body h1,.post-body h2,.post-body h3,.post-body h4,.post-body h5,.post-body h6{font-family:"Comfortaa",sans-serif}.contents-title{font-family:"Comfortaa",sans-serif}code,pre,sup,.post-meta,.updated-badge,.post-gitinfo,.minimal-footer,.minimal-footer-about,.busuanzi-site-uv-and-pv,.copy-button{font-family:"Source Code Pro",monospace}blockquote{font-family:"Lato",sans-serif}.contents{font-family:"Lato",sans-serif}body{font-family:"IBM Plex Serif",serif}[data-indent="true"] .contents-title{text-align:center}[data-indent="true"] .post-body p{text-indent:2em;margin:0}[data-indent="true"] .post-body .caption{text-indent:0;margin:0 0 1em}[data-indent="true"] .post-body blockquote{margin:1em 0;padding:0;border:none}[data-indent="true"] .post-body img,[data-indent="true"] .post-body video{margin:1em auto}[data-indent="true"] .post-body table{margin:1em 0}[data-indent="true"] .post-body pre,[data-indent="true"] .post-body .highlight{margin:1rem 0}[data-indent="true"] .post-body h1,[data-indent="true"] .post-body h2,[data-indent="true"] .post-body h3,[data-indent="true"] .post-body h4,[data-indent="true"] .post-body h5,[data-indent="true"] .post-body h6{text-align:center}[data-indent="true"] .post-body .anchor-link{position:relative;transform:none;display:block;float:none}[data-indent="true"] .post-body ol,[data-indent="true"] .post-body ul{margin:0;padding-left:4em}[data-indent="true"] .post-body ol p,[data-indent="true"] .post-body ul p{text-indent:0}[data-indent="true"] .post-body li ol,[data-indent="true"] .post-body li ul{padding-left:2em}[data-indent="true"] .post-body dl{text-indent:2em}[data-indent="true"] .post-body dl dd{text-indent:0;margin-left:4em}[data-indent="true"] .post-body dl p{text-indent:0}:root{--color-primary:hsl(220, 90%, 56%);--color-primary-h:220;--color-primary-s:90%;--color-primary-l:56%;--color-bg:hsl(0, 0%, 100%);--color-bg-h:0;--color-bg-s:0%;--color-bg-l:100%;--color-contrast-lower:hsl(0, 0%, 95%);--color-contrast-lower-h:0;--color-contrast-lower-s:0%;--color-contrast-lower-l:95%;--color-contrast-low:hsl(240, 1%, 83%);--color-contrast-low-h:240;--color-contrast-low-s:1%;--color-contrast-low-l:83%;--color-contrast-medium:hsl(240, 1%, 48%);--color-contrast-medium-h:240;--color-contrast-medium-s:1%;--color-contrast-medium-l:48%;--color-contrast-high:hsl(240, 4%, 20%);--color-contrast-high-h:240;--color-contrast-high-s:4%;--color-contrast-high-l:20%;--color-contrast-higher:hsl(240, 8%, 12%);--color-contrast-higher-h:240;--color-contrast-higher-s:8%;--color-contrast-higher-l:12%}[data-theme="dark"]{--color-primary:hsl(201, 65%, 62%);--color-primary-h:201;--color-primary-s:65%;--color-primary-l:62%;--color-bg:hsl(231, 14%, 10%);--color-bg-h:231;--color-bg-s:14%;--color-bg-l:10%;--color-contrast-lower:hsl(230, 8%, 15%);--color-contrast-lower-h:230;--color-contrast-lower-s:8%;--color-contrast-lower-l:15%;--color-contrast-low:hsl(240, 2%, 25%);--color-contrast-low-h:240;--color-contrast-low-s:2%;--color-contrast-low-l:25%;--color-contrast-medium:hsl(80, 1%, 50%);--color-contrast-medium-h:80;--color-contrast-medium-s:1%;--color-contrast-medium-l:50%;--color-contrast-high:hsl(69, 4%, 68%);--color-contrast-high-h:69;--color-contrast-high-s:4%;--color-contrast-high-l:68%;--color-contrast-higher:hsl(60, 10%, 80%);--color-contrast-higher-h:60;--color-contrast-higher-s:10%;--color-contrast-higher-l:80%}#theme-switcher{cursor:pointer;position:relative;z-index:4}[data-theme="dark"] img{filter:brightness(50%)}[data-theme="dark"] #theme-switcher,[data-theme="dark"] #lang-switcher{opacity:0.5}#theme-switcher{padding:1em;float:right}.chroma-dark{color:#f8f8f2;background-color:#282a36}.chroma-dark .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma-dark .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma-dark .hl{display:block;width:100%;background-color:#3c3c3c}.chroma-dark .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma-dark .k{color:#ff79c6}.chroma-dark .kc{color:#ff79c6}.chroma-dark .kd{color:#8be9fd;font-style:italic}.chroma-dark .kn{color:#ff79c6}.chroma-dark .kp{color:#ff79c6}.chroma-dark .kr{color:#ff79c6}.chroma-dark .kt{color:#8be9fd}.chroma-dark .na{color:#50fa7b}.chroma-dark .nb{color:#8be9fd;font-style:italic}.chroma-dark .nc{color:#50fa7b}.chroma-dark .nf{color:#50fa7b}.chroma-dark .nl{color:#8be9fd;font-style:italic}.chroma-dark .nt{color:#ff79c6}.chroma-dark .nv{color:#8be9fd;font-style:italic}.chroma-dark .vc{color:#8be9fd;font-style:italic}.chroma-dark .vg{color:#8be9fd;font-style:italic}.chroma-dark .vi{color:#8be9fd;font-style:italic}.chroma-dark .s{color:#f1fa8c}.chroma-dark .sa{color:#f1fa8c}.chroma-dark .sb{color:#f1fa8c}.chroma-dark .sc{color:#f1fa8c}.chroma-dark .dl{color:#f1fa8c}.chroma-dark .sd{color:#f1fa8c}.chroma-dark .s2{color:#f1fa8c}.chroma-dark .se{color:#f1fa8c}.chroma-dark .sh{color:#f1fa8c}.chroma-dark .si{color:#f1fa8c}.chroma-dark .sx{color:#f1fa8c}.chroma-dark .sr{color:#f1fa8c}.chroma-dark .s1{color:#f1fa8c}.chroma-dark .ss{color:#f1fa8c}.chroma-dark .m{color:#bd93f9}.chroma-dark .mb{color:#bd93f9}.chroma-dark .mf{color:#bd93f9}.chroma-dark .mh{color:#bd93f9}.chroma-dark .mi{color:#bd93f9}.chroma-dark .il{color:#bd93f9}.chroma-dark .mo{color:#bd93f9}.chroma-dark .o{color:#ff79c6}.chroma-dark .ow{color:#ff79c6}.chroma-dark .c{color:#6272a4}.chroma-dark .ch{color:#6272a4}.chroma-dark .cm{color:#6272a4}.chroma-dark .c1{color:#6272a4}.chroma-dark .cs{color:#6272a4}.chroma-dark .cp{color:#ff79c6}.chroma-dark .cpf{color:#ff79c6}.chroma-dark .gd{color:#ffcccc}.chroma-dark .ge{text-decoration:underline}.chroma-dark .gh{font-weight:bold}.chroma-dark .gi{color:#ccffcc}.chroma-dark .go{color:#44475a}.chroma-dark .gu{font-weight:bold}.chroma-dark .gl{text-decoration:underline}.header{z-index:3}.header{position:relative;background:linear-gradient(90deg, rgba(247,149,51,0.101961) 0, rgba(243,112,85,0.101961) 15%, rgba(239,78,123,0.101961) 30%, rgba(161,102,171,0.101961) 44%, rgba(80,115,184,0.101961) 58%, rgba(16,152,173,0.101961) 72%, rgba(7,179,155,0.101961) 86%, rgba(109,186,130,0.101961) 100%)}.site-brand{text-align:center}.brand{width:300px;height:100px;fill:#cfcbd4}.nav{z-index:3;position:relative}.menu{padding:0;margin:0;list-style:none;line-height:1.5;font-weight:500}.menu-item{display:inline-block}.menu-item a{color:var(--color-contrast-medium)}.menu-item a:hover{color:var(--color-primary)}.active a{color:var(--color-primary)}.menu{text-align:center;background:var(--color-contrast-lower)}.menu-item{margin:0 1em}.menu-item-name{display:flex}.list .main-inner{width:50em}.list-title{text-align:center}.list ul{list-style:none;padding:0}.list-item-title{flex:1}.list-item-time{text-align:right;margin-left:1em}.list-item{line-height:2;position:relative;transition:border .5s;border-bottom:1px dashed var(--color-contrast-low);margin-top:1em;padding-bottom:0.5em;display:flex;align-items:baseline}.list-item:hover{border-bottom-color:var(--color-primary)}.list-item:hover ::before{background:var(--color-primary)}.list-item ::before{content:" ";position:absolute;left:0.618em;top:0.618em;width:6.66666667px;height:6.66666667px;background:var(--color-contrast-low);border-radius:50%;border:1px solid var(--color-bg);transition:background .5s;font-size:1rem}.list-item-title{margin:0 0.618em 0 2em;font-size:1.2em;line-height:1.5}.list-item-time{margin:0 0.618em 0 2em;color:var(--color-contrast-medium);line-height:1.5}.list-year{display:flex;justify-content:space-between;align-items:baseline}.term-count{color:var(--color-contrast-medium);font-size:0.7em}.single .main-inner{width:50em}.post-title{text-align:center}.post-subtitle{font-size:1.8em;text-align:center;font-weight:700;margin-top:-0.618em}.post-description{text-align:center;margin:1rem 0;font-size:90%}.post-body{margin-top:5em !important}.post-body a{text-decoration:underline;text-decoration-color:var(--color-contrast-low)}.post-body a:hover{text-decoration-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.post p{margin:0 0 1em;line-height:2.15}.post img{display:block;margin:2em auto;max-width:100%;border:1px solid var(--color-contrast-lower);clear:both}.post video{display:block;max-width:100%;margin:2em auto;clear:both}.post sup{font-size:70%;vertical-align:super}.post sup a{text-decoration:none}.post ol,.post ul{padding-left:2em;line-height:2.15}.post hr{border:none;margin:2.427em 0 1.5em;text-align:center}.post hr::after{content:"···";letter-spacing:2em;padding-left:2em}blockquote{margin:2em 0;padding-left:1em;color:var(--color-contrast-medium);border-left:3px solid var(--color-contrast-low)}blockquote a{color:var(--color-contrast-medium)}blockquote a:hover{color:var(--color-primary)}.drop-cap{float:left;font-size:60px;margin-right:23px;margin-top:9.30232558px;line-height:43px}.caption{display:block;text-align:center;margin:-1em 0 0;font-size:90%;color:var(--color-contrast-medium)}.contents{margin-top:5em}.contents ol,.contents ul{list-style:none}ol.toc,ul.toc{padding:0;overflow:auto hidden;white-space:nowrap}.footnotes{font-size:90%;margin-top:5rem}.footnotes hr{margin:0;height:1px;border:none;background-color:var(--color-contrast-medium)}.footnotes hr::after{content:none}.footnotes ol{margin:1.618rem 0 0 !important;padding:0 1rem 0 2rem !important}.footnote-icon{fill:hsla(var(--color-contrast-high-h), var(--color-contrast-high-s), var(--color-contrast-high-l), 0.5);transition:fill .5s;margin-bottom:0.3em}.footnote-icon:hover{fill:var(--color-primary)}.anchor-link{position:absolute;transform:translate(-150%)}.anchor-icon{width:0.75em;height:0.75em;vertical-align:baseline}:root{--anchor-opacity: 0}.anchor-link{opacity:var(--anchor-opacity);transition:all .25s}.post h1:hover,.post h2:hover,.post h3:hover,.post h4:hover,.post h5:hover,.post h6:hover,.post .anchor-link:hover{--anchor-opacity: 1}.table-container{margin:2em 0;overflow-x:auto}table{width:100%;border-collapse:collapse;border-spacing:0;border-color:var(--color-contrast-lower)}th{font-weight:700}th,td{font-size:0.9em;padding:0.4em;border:1px solid var(--color-contrast-lower)}table>tbody>tr:nth-of-type(odd){background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}table>tbody>tr:hover{background-color:var(--color-contrast-lower)}dt{font-weight:700}dd{margin-left:2em}code{padding:2.5px 5px;background-color:var(--color-contrast-lower);font-size:80%}pre{overflow:auto;overflow-wrap:normal;word-wrap:normal;font-size:0.8rem;margin:2rem 0;padding:1em;line-height:1.618;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.75)}pre code{background-color:unset;font-size:0.8rem;padding:0}pre{max-height:20em}.copy-button{position:absolute;top:0;right:0;border:0;font-size:inherit;color:var(--color-bg);background-color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.5);transition:all .5s;cursor:pointer}.copy-button:hover{background-color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.copy-button{visibility:hidden;opacity:0}.katex-display,mjx-container[jax="CHTML"][display="true"]{overflow:auto hidden;text-indent:0}.footer{position:absolute;bottom:0;width:100%;font-size:90%;color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.footer a{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.footer a:hover{color:var(--color-primary)}.footer-inner{padding:1em;text-align:center}.footer-icon{margin:0 0.25em 0.3em}.footer-icon{fill:#f06292}@keyframes heartbeat{0%,100%{transform:scale(1)}10%,30%{transform:scale(0.9)}20%,40%,50%,60%,70%,80%{transform:scale(1.1)}}.footer-icon{animation:heartbeat 1.33s ease-in-out infinite}#lang-switcher{position:relative;z-index:4;color:var(--color-contrast-medium)}#langs{display:none;position:absolute;margin:0;padding:0;list-style:none}#langs li{width:max-content}#lang-switcher{padding:1em;float:left}.post-meta{color:var(--color-contrast-medium);font-size:80%;text-align:center;margin:1rem 0}.post-meta a{color:var(--color-contrast-medium)}.post-meta a:hover{color:var(--color-primary)}.home .post-meta{margin:1rem 0}.post-meta-item{margin:0.5em;display:inline-block}.post-meta-icon{fill:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.5);margin-bottom:0.3em}.post-copyright{margin:0;list-style:none;margin-top:5em;padding:0.5em 1em;background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5);border-left:3px solid hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5);line-height:2}.copyright-item{line-height:1.5;margin:0.5em 0}.copyright-item-text{font-weight:500}.updated-badge-container{margin-top:5em;text-align:center}.updated-badge-left{fill:var(--color-contrast-low)}.updated-badge-right{fill:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.5)}.post-gitinfo{font-size:70%;margin-top:5rem;display:flex;justify-content:space-between;color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8);overflow:auto hidden}.post-gitinfo a{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.post-gitinfo a:hover{color:var(--color-primary)}.post-gitinfo-left,.post-gitinfo-right{display:flex}.post-gitinfo-right{text-align:right}.commit,.commit-msg{margin-right:1em}.edit{margin-left:1em}.git-icon,.msg-icon,.feedback-icon,.edit-icon{margin:0 0.3em 0.3em 0}.post-share{margin-top:5rem;color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.post-share a{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.8)}.post-share a:hover{color:inherit}.share-items{text-align:center}.share-item{margin:0 0.5em}.share-item{display:inline-block}.share-item .icon{transition:fill .5s}.twitter-icon:hover{fill:#1DA1F2}.facebook-icon:hover{fill:#1877F2}.linkedin-icon:hover{fill:#0077B5}.telegram-icon:hover{fill:#2CA5E0}.weibo-icon:hover{fill:#E6162D}.douban-icon:hover{fill:#007722}.qq-icon:hover{fill:#12B7F5}.qzone-icon:hover{fill:#FECE00}.qrcode-icon:hover{fill:var(--color-primary)}#qrcode-img{position:absolute;transform:translate(calc(-100% + 1em), calc(-100% - 1em));opacity:0;transition:opacity .5s}#qrcode-img img{display:none}.qrcode-container:hover #qrcode-img{opacity:1}.qrcode-container:hover #qrcode-img img{display:inline-block;border:1px solid var(--color-contrast-lower)}.related-posts{border:1px solid var(--color-contrast-lower);padding:0.6em 1em;line-height:2em;margin-top:5em}.related-title{font-size:1em;margin:0}.related-icon{float:right;margin-top:0.4em}.related-list{margin:0;padding:0;list-style:none}.related-link{line-height:1.5;display:inline-block}.post-tags{margin-top:5rem;text-align:center;font-size:90%}.post-tags-link{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.9);margin:0 0.5em;line-height:2;display:inline-block}.tag-icon{margin-right:0.3em;font-size:80%}.minimal-footer{font-size:80%;margin-top:5rem;display:flex;justify-content:space-between;align-items:baseline;line-height:2}.post-tag,.post-category{max-width:42%}.post-category{text-align:right}.post-category .active{color:var(--color-contrast-high)}.post-tag-link,.post-category-link{display:inline-block}.post-tag-link,.post-category-link,.post-category{color:hsla(var(--color-contrast-medium-h), var(--color-contrast-medium-s), var(--color-contrast-medium-l), 0.9)}.post-nav{list-style:none;padding:0;display:flex;justify-content:space-between;border-top:1px solid var(--color-contrast-lower);font-weight:700;margin-top:5em;padding-top:0.618em}.post-nav-prev{margin-right:auto;max-width:42%}.post-nav-next{margin-left:auto;text-align:right;max-width:42%}.back-to-top{position:fixed;right:0;z-index:1}.back-to-top a{display:block;padding:1em;color:var(--color-contrast-medium)}.back-to-top a:hover{color:var(--color-primary)}.back-to-top{bottom:-3.6em;transition:bottom 0.3s ease-in-out}.back-to-top.show{bottom:0}.chroma{color:#4d4d4d;background-color:#ffffff}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffffcc}.chroma .lnt{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .ln{margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f}.chroma .k{color:#2c5dcd;font-weight:bold}.chroma .kc{color:#2c5dcd;font-weight:bold}.chroma .kd{color:#2c5dcd;font-weight:bold}.chroma .kn{color:#2c5dcd;font-weight:bold}.chroma .kp{color:#2c5dcd}.chroma .kr{color:#2c5dcd;font-weight:bold}.chroma .kt{color:#5918bb;font-weight:bold}.chroma .na{color:#2c5dcd;font-style:italic}.chroma .nb{color:#5918bb;font-weight:bold}.chroma .nc{text-decoration:underline}.chroma .no{color:#318495}.chroma .nd{color:#ff8000;font-weight:bold}.chroma .ni{color:#5918bb;font-weight:bold}.chroma .ne{color:#5918bb;font-weight:bold}.chroma .nf{color:#ff8000;font-weight:bold}.chroma .nt{color:#2c5dcd;font-weight:bold}.chroma .s{color:#00cc66}.chroma .sa{color:#00cc66}.chroma .sb{color:#00cc66}.chroma .sc{color:#00cc66}.chroma .dl{color:#00cc66}.chroma .sd{color:#00cc66;font-style:italic}.chroma .s2{color:#00cc66}.chroma .se{color:#c5060b;font-weight:bold}.chroma .sh{color:#00cc66}.chroma .si{color:#00cc66}.chroma .sx{color:#318495}.chroma .sr{color:#00cc66}.chroma .s1{color:#00cc66}.chroma .ss{color:#c5060b;font-weight:bold}.chroma .m{color:#5918bb;font-weight:bold}.chroma .mb{color:#5918bb;font-weight:bold}.chroma .mf{color:#5918bb;font-weight:bold}.chroma .mh{color:#5918bb;font-weight:bold}.chroma .mi{color:#5918bb;font-weight:bold}.chroma .il{color:#5918bb;font-weight:bold}.chroma .mo{color:#5918bb;font-weight:bold}.chroma .o{color:#2c5dcd}.chroma .ow{color:#2c5dcd;font-weight:bold}.chroma .c{color:#0080ff}.chroma .ch{color:#0080ff}.chroma .cm{color:#0080ff}.chroma .c1{color:#0080ff}.chroma .cs{color:#0080ff;font-weight:bold}.chroma .cp{color:#0080ff}.chroma .cpf{color:#0080ff}.chroma .gd{background-color:#ffcccc}.chroma .ge{font-style:italic}.chroma .gr{color:#ff0000}.chroma .gh{color:#2c5dcd;font-weight:bold}.chroma .gi{background-color:#ccffcc}.chroma .go{color:#aaaaaa}.chroma .gp{color:#2c5dcd;font-weight:bold}.chroma .gs{font-weight:bold}.chroma .gu{color:#2c5dcd;font-weight:bold}.chroma .gt{color:#c5060b}.chroma .gl{text-decoration:underline}.chroma .w{color:#cbcbcb}.highlight{font-size:0.8rem;margin:2rem 0}.highlight pre{margin:0 !important;max-height:unset}.highlight .lntd pre{background-color:unset;overflow:visible}.highlight table>tbody>tr:nth-of-type(odd){background-color:inherit}.highlight table>tbody>tr:hover{background-color:inherit}span.lnt{user-select:none;display:block;margin-right:-1em !important;padding:0 !important;text-align:right}.chroma,.chroma-dark{color:var(--color-contrast-high);background-color:hsla(var(--color-contrast-lower-h), var(--color-contrast-lower-s), var(--color-contrast-lower-l), 0.5)}.lntable,.highlight>pre{max-height:20em}article.content.post.home{margin-top:5em}.summary-title-link{color:var(--color-contrast-higher)}.summary{line-height:2.15;display:block}.read-more-container{text-align:center;margin-top:1.618em}.read-more-link{display:inline-block}.pagination{list-style:none;margin:5em 0 0;padding:0;display:flex;justify-content:space-between}.pagination-prev{margin-right:auto}.pagination-next{margin-left:auto;text-align:right}.tree{margin-left:-2.4em;overflow:auto hidden;white-space:nowrap}.category-item{color:var(--color-primary);font-size:1.2em}.category-item:hover{color:hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.75)}.category-count{color:var(--color-contrast-medium)}.category-post:hover{color:var(--color-contrast-medium)}.tag-cloud{text-align:center}.tag-cloud-item{margin:0.5rem;display:inline-block}.fof::before{background-image:url();background-repeat:no-repeat;background-size:cover;background-position:50% 50%;content:" ";position:fixed;width:100%;height:100%;top:0;left:0;z-index:1}.fof .main-inner{background:rgba(0,0,0,0.25);min-height:100%;min-width:100%;position:absolute;z-index:3}.fof video{position:fixed;top:50%;left:50%;min-width:100%;min-height:100%;width:auto;height:auto;z-index:2;transform:translateX(-50%) translateY(-50%)}.fof h1{font-size:3rem;text-transform:uppercase;letter-spacing:0.3rem;text-align:center;top:15%;left:5%;right:5%;position:absolute;color:#fff;margin:0.67em 0}.fof .fof-footer{font-size:2rem;position:absolute;bottom:15%;left:10%;right:10%;text-align:center}.fof a{color:#eee}.fof a:hover{color:#fff}@media only screen and (max-device-width: 1024px){.fof #bgvid{display:none}}.medium-zoom-overlay,.medium-zoom-image--opened{z-index:5}@media (max-width: 1100px){.main-inner{width:auto !important}.anchor-link{position:relative;transform:none;float:right}#back-to-top{display:none}.menu{display:flex;justify-content:space-around;word-break:break-all}.menu-item{margin:0}}[data-hide="true"]{display:none}[data-small-caps="true"] .post-body h1,[data-small-caps="true"] .post-body h2,[data-small-caps="true"] .post-body h3,[data-small-caps="true"] .post-body h4,[data-small-caps="true"] .post-body h5,[data-small-caps="true"] .post-body h6{font-variant:small-caps}[data-small-caps="true"] .contents-title{font-variant:small-caps}[data-align="justify"] .post-body p,[data-align="justify"] .post-body li,[data-align="justify"] .post-body dd{text-align:justify;text-justify:distribute}[data-align="center"] .post-body p{text-align:center}[data-type="poetry"] .post-body{display:table;margin:0 auto}[data-type="poetry"] .post-body>p:first-child img,[data-type="poetry"] .post-body>p:first-child video{margin-top:0}[data-type="poetry"] .post-body>blockquote:first-child{margin-top:0}[data-type="poetry"] .post-body>blockquote:last-child{margin-bottom:0}[data-type="poetry"] .post-body>p:last-child{margin:0}[data-type="poetry"] .post-body>p:last-child img,[data-type="poetry"] .post-body>p:last-child video{margin-bottom:0}[data-type="poetry"] .post-body>p:last-child .caption{margin:1em 0 0}[data-type="poetry"] section.footnotes>ol>li:last-child>p:last-child{margin:0}[data-toc-num="true"] .contents ol{counter-reset:item}[data-toc-num="true"] .contents ol li::before{counter-increment:item;margin-right:0.5em}[data-toc-num="true"] .contents>ol>li::before{content:counters(item, ".") "."}[data-toc-num="true"] .contents li>ol>li::before{content:counters(item, ".")}@media (max-width: 1024px){ol.toc,ul.toc{white-space:normal}}
diff --git a/resources/_gen/assets/scss/scss/main.scss_dedbf6c187d0257b78d5bac2d0d1f92a.json b/resources/_gen/assets/scss/scss/main.scss_dedbf6c187d0257b78d5bac2d0d1f92a.json
deleted file mode 100644
index 9eb13cb3..00000000
--- a/resources/_gen/assets/scss/scss/main.scss_dedbf6c187d0257b78d5bac2d0d1f92a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Target":"fr/css/meme.min.42e8b514fd4969202348c08fc9faa88cf544b206f6a09c5a89805983a7fca4d7.css","MediaType":"text/css","Data":{"Integrity":"sha256-Qui1FP1JaSAjSMCPyfqojPVEsgb2oJxaiYBZg6f8pNc="}}
\ No newline at end of file
diff --git a/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content
new file mode 100644
index 00000000..8dc0b8ff
--- /dev/null
+++ b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.content
@@ -0,0 +1,18 @@
+@charset "UTF-8";/*!* Hugo Theme Stack
+*
+* @author: Jimmy Cai
+* @website: https://jimmycai.com
+* @link: https://github.com/CaiJimmy/hugo-theme-stack*/:root{--main-top-padding:35px;--body-background:#f5f5fa;--accent-color:#34495e;--accent-color-darker:#2c3e50;--accent-color-text:#fff;--body-text-color:#707070;--tag-border-radius:4px;--section-separation:40px;--scrollbar-thumb:hsl(0, 0%, 85%);--scrollbar-track:var(--body-background)}@media(min-width:1280px){:root{--main-top-padding:50px}}:root[data-scheme=dark]{--body-background:#303030;--accent-color:#ecf0f1;--accent-color-darker:#bdc3c7;--accent-color-text:#000;--body-text-color:rgba(255, 255, 255, 0.7);--scrollbar-thumb:hsl(0, 0%, 40%);--scrollbar-track:var(--body-background)}:root{--sys-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "Droid Sans", "Helvetica Neue";--zh-font-family:"PingFang SC", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei";--base-font-family:"Lato", var(--sys-font-family), var(--zh-font-family), sans-serif;--code-font-family:Menlo, Monaco, Consolas, "Courier New", var(--zh-font-family), monospace}:root{--card-background:#fff;--card-background-selected:#eaeaea;--card-text-color-main:#000;--card-text-color-secondary:#747474;--card-text-color-tertiary:#767676;--card-separator-color:rgba(218, 218, 218, 0.5);--card-border-radius:10px;--card-padding:20px;--small-card-padding:25px 20px}@media(min-width:768px){:root{--card-padding:25px}}@media(min-width:1280px){:root{--card-padding:30px}}@media(min-width:768px){:root{--small-card-padding:25px}}:root[data-scheme=dark]{--card-background:#424242;--card-background-selected:rgba(255, 255, 255, 0.16);--card-text-color-main:rgba(255, 255, 255, 0.9);--card-text-color-secondary:rgba(255, 255, 255, 0.7);--card-text-color-tertiary:rgba(255, 255, 255, 0.6);--card-separator-color:rgba(255, 255, 255, 0.12)}:root{--article-font-family:var(--base-font-family);--article-font-size:1.6rem;--article-line-height:1.85}@media(min-width:768px){:root{--article-font-size:1.7rem}}:root{--blockquote-border-size:4px;--blockquote-background-color:rgb(248 248 248);--heading-border-size:4px;--link-background-color:189, 195, 199;--link-background-opacity:0.5;--link-background-opacity-hover:0.7;--pre-background-color:#272822;--pre-text-color:#f8f8f2;--code-background-color:rgba(0, 0, 0, 0.12);--code-text-color:#808080;--table-border-color:#dadada;--tr-even-background-color:#efefee;--kbd-border-color:#dadada}:root[data-scheme=dark]{--code-background-color:#272822;--code-text-color:rgba(255, 255, 255, 0.9);--table-border-color:#717171;--tr-even-background-color:#545454;--blockquote-background-color:rgb(75 75 75)}:root{--shadow-l1:0px 4px 8px rgba(0, 0, 0, 0.04), 0px 0px 2px rgba(0, 0, 0, 0.06), 0px 0px 1px rgba(0, 0, 0, 0.04);--shadow-l2:0px 10px 20px rgba(0, 0, 0, 0.04), 0px 2px 6px rgba(0, 0, 0, 0.04), 0px 0px 1px rgba(0, 0, 0, 0.04);--shadow-l3:0px 10px 20px rgba(0, 0, 0, 0.04), 0px 2px 6px rgba(0, 0, 0, 0.04), 0px 0px 1px rgba(0, 0, 0, 0.04);--shadow-l4:0px 24px 32px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04), 0px 4px 8px rgba(0, 0, 0, 0.04),
+ 0px 0px 1px rgba(0, 0, 0, 0.04)}[data-scheme=light]{--pre-text-color:#272822;--pre-background-color:#fafafa}[data-scheme=light] .chroma{color:#272822;background-color:#fafafa}[data-scheme=light] .chroma .err{color:#960050}[data-scheme=light] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}[data-scheme=light] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:100%;display:block}[data-scheme=light] .chroma .lntable>tbody{display:block;width:100%}[data-scheme=light] .chroma .lntable>tbody>tr{display:flex;width:100%}[data-scheme=light] .chroma .lntable>tbody>tr>td:last-child{overflow-x:auto}[data-scheme=light] .chroma .hl{display:block;width:100%;background-color:#ffc}[data-scheme=light] .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f;display:block}[data-scheme=light] .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}[data-scheme=light] .chroma .k{color:#00a8c8}[data-scheme=light] .chroma .kc{color:#00a8c8}[data-scheme=light] .chroma .kd{color:#00a8c8}[data-scheme=light] .chroma .kn{color:#f92672}[data-scheme=light] .chroma .kp{color:#00a8c8}[data-scheme=light] .chroma .kr{color:#00a8c8}[data-scheme=light] .chroma .kt{color:#00a8c8}[data-scheme=light] .chroma .n{color:#111}[data-scheme=light] .chroma .na{color:#75af00}[data-scheme=light] .chroma .nb{color:#111}[data-scheme=light] .chroma .bp{color:#111}[data-scheme=light] .chroma .nc{color:#75af00}[data-scheme=light] .chroma .no{color:#00a8c8}[data-scheme=light] .chroma .nd{color:#75af00}[data-scheme=light] .chroma .ni{color:#111}[data-scheme=light] .chroma .ne{color:#75af00}[data-scheme=light] .chroma .nf{color:#75af00}[data-scheme=light] .chroma .fm{color:#111}[data-scheme=light] .chroma .nl{color:#111}[data-scheme=light] .chroma .nn{color:#111}[data-scheme=light] .chroma .nx{color:#75af00}[data-scheme=light] .chroma .py{color:#111}[data-scheme=light] .chroma .nt{color:#f92672}[data-scheme=light] .chroma .nv{color:#111}[data-scheme=light] .chroma .vc{color:#111}[data-scheme=light] .chroma .vg{color:#111}[data-scheme=light] .chroma .vi{color:#111}[data-scheme=light] .chroma .vm{color:#111}[data-scheme=light] .chroma .l{color:#ae81ff}[data-scheme=light] .chroma .ld{color:#d88200}[data-scheme=light] .chroma .s{color:#d88200}[data-scheme=light] .chroma .sa{color:#d88200}[data-scheme=light] .chroma .sb{color:#d88200}[data-scheme=light] .chroma .sc{color:#d88200}[data-scheme=light] .chroma .dl{color:#d88200}[data-scheme=light] .chroma .sd{color:#d88200}[data-scheme=light] .chroma .s2{color:#d88200}[data-scheme=light] .chroma .se{color:#ae81ff}[data-scheme=light] .chroma .sh{color:#d88200}[data-scheme=light] .chroma .si{color:#d88200}[data-scheme=light] .chroma .sx{color:#d88200}[data-scheme=light] .chroma .sr{color:#d88200}[data-scheme=light] .chroma .s1{color:#d88200}[data-scheme=light] .chroma .ss{color:#d88200}[data-scheme=light] .chroma .m{color:#ae81ff}[data-scheme=light] .chroma .mb{color:#ae81ff}[data-scheme=light] .chroma .mf{color:#ae81ff}[data-scheme=light] .chroma .mh{color:#ae81ff}[data-scheme=light] .chroma .mi{color:#ae81ff}[data-scheme=light] .chroma .il{color:#ae81ff}[data-scheme=light] .chroma .mo{color:#ae81ff}[data-scheme=light] .chroma .o{color:#f92672}[data-scheme=light] .chroma .ow{color:#f92672}[data-scheme=light] .chroma .p{color:#111}[data-scheme=light] .chroma .c{color:#75715e}[data-scheme=light] .chroma .ch{color:#75715e}[data-scheme=light] .chroma .cm{color:#75715e}[data-scheme=light] .chroma .c1{color:#75715e}[data-scheme=light] .chroma .cs{color:#75715e}[data-scheme=light] .chroma .cp{color:#75715e}[data-scheme=light] .chroma .cpf{color:#75715e}[data-scheme=light] .chroma .gd{color:#f92672}[data-scheme=light] .chroma .ge{font-style:italic}[data-scheme=light] .chroma .gi{color:#75af00}[data-scheme=light] .chroma .gs{font-weight:700}[data-scheme=light] .chroma .gu{color:#75715e}[data-scheme=dark]{--pre-text-color:#f8f8f2;--pre-background-color:#272822}[data-scheme=dark] .chroma{color:#f8f8f2;background-color:#272822}[data-scheme=dark] .chroma .err{color:#bb0064}[data-scheme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}[data-scheme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:100%;display:block}[data-scheme=dark] .chroma .lntable>tbody{display:block;width:100%}[data-scheme=dark] .chroma .lntable>tbody>tr{display:flex;width:100%}[data-scheme=dark] .chroma .lntable>tbody>tr>td:last-child{overflow-x:auto}[data-scheme=dark] .chroma .hl{display:block;width:100%;background-color:#ffc}[data-scheme=dark] .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f;display:block}[data-scheme=dark] .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}[data-scheme=dark] .chroma .k{color:#66d9ef}[data-scheme=dark] .chroma .kc{color:#66d9ef}[data-scheme=dark] .chroma .kd{color:#66d9ef}[data-scheme=dark] .chroma .kn{color:#f92672}[data-scheme=dark] .chroma .kp{color:#66d9ef}[data-scheme=dark] .chroma .kr{color:#66d9ef}[data-scheme=dark] .chroma .kt{color:#66d9ef}[data-scheme=dark] .chroma .n{color:#f8f8f2}[data-scheme=dark] .chroma .na{color:#a6e22e}[data-scheme=dark] .chroma .nb{color:#f8f8f2}[data-scheme=dark] .chroma .bp{color:#f8f8f2}[data-scheme=dark] .chroma .nc{color:#a6e22e}[data-scheme=dark] .chroma .no{color:#66d9ef}[data-scheme=dark] .chroma .nd{color:#a6e22e}[data-scheme=dark] .chroma .ni{color:#f8f8f2}[data-scheme=dark] .chroma .ne{color:#a6e22e}[data-scheme=dark] .chroma .nf{color:#a6e22e}[data-scheme=dark] .chroma .fm{color:#f8f8f2}[data-scheme=dark] .chroma .nl{color:#f8f8f2}[data-scheme=dark] .chroma .nn{color:#f8f8f2}[data-scheme=dark] .chroma .nx{color:#a6e22e}[data-scheme=dark] .chroma .py{color:#f8f8f2}[data-scheme=dark] .chroma .nt{color:#f92672}[data-scheme=dark] .chroma .nv{color:#f8f8f2}[data-scheme=dark] .chroma .vc{color:#f8f8f2}[data-scheme=dark] .chroma .vg{color:#f8f8f2}[data-scheme=dark] .chroma .vi{color:#f8f8f2}[data-scheme=dark] .chroma .vm{color:#f8f8f2}[data-scheme=dark] .chroma .l{color:#ae81ff}[data-scheme=dark] .chroma .ld{color:#e6db74}[data-scheme=dark] .chroma .s{color:#e6db74}[data-scheme=dark] .chroma .sa{color:#e6db74}[data-scheme=dark] .chroma .sb{color:#e6db74}[data-scheme=dark] .chroma .sc{color:#e6db74}[data-scheme=dark] .chroma .dl{color:#e6db74}[data-scheme=dark] .chroma .sd{color:#e6db74}[data-scheme=dark] .chroma .s2{color:#e6db74}[data-scheme=dark] .chroma .se{color:#ae81ff}[data-scheme=dark] .chroma .sh{color:#e6db74}[data-scheme=dark] .chroma .si{color:#e6db74}[data-scheme=dark] .chroma .sx{color:#e6db74}[data-scheme=dark] .chroma .sr{color:#e6db74}[data-scheme=dark] .chroma .s1{color:#e6db74}[data-scheme=dark] .chroma .ss{color:#e6db74}[data-scheme=dark] .chroma .m{color:#ae81ff}[data-scheme=dark] .chroma .mb{color:#ae81ff}[data-scheme=dark] .chroma .mf{color:#ae81ff}[data-scheme=dark] .chroma .mh{color:#ae81ff}[data-scheme=dark] .chroma .mi{color:#ae81ff}[data-scheme=dark] .chroma .il{color:#ae81ff}[data-scheme=dark] .chroma .mo{color:#ae81ff}[data-scheme=dark] .chroma .o{color:#f92672}[data-scheme=dark] .chroma .ow{color:#f92672}[data-scheme=dark] .chroma .p{color:#f8f8f2}[data-scheme=dark] .chroma .c{color:#75715e}[data-scheme=dark] .chroma .ch{color:#75715e}[data-scheme=dark] .chroma .cm{color:#75715e}[data-scheme=dark] .chroma .c1{color:#75715e}[data-scheme=dark] .chroma .cs{color:#75715e}[data-scheme=dark] .chroma .cp{color:#75715e}[data-scheme=dark] .chroma .cpf{color:#75715e}[data-scheme=dark] .chroma .gd{color:#f92672}[data-scheme=dark] .chroma .ge{font-style:italic}[data-scheme=dark] .chroma .gi{color:#a6e22e}[data-scheme=dark] .chroma .gs{font-weight:700}[data-scheme=dark] .chroma .gu{color:#75715e}:root{--menu-icon-separation:40px;--container-padding:15px;--widget-separation:var(--section-separation)}.container{margin-left:auto;margin-right:auto}.container .left-sidebar{order:-3;max-width:var(--left-sidebar-max-width)}.container .right-sidebar{order:-1;max-width:var(--right-sidebar-max-width)}@media(min-width:1024px){.container .right-sidebar{display:flex}}@media(min-width:768px){.container.extended{max-width:1024px;--left-sidebar-max-width:25%;--right-sidebar-max-width:30%}}@media(min-width:1024px){.container.extended{max-width:1280px;--left-sidebar-max-width:20%;--right-sidebar-max-width:30%}}@media(min-width:1280px){.container.extended{max-width:1536px;--left-sidebar-max-width:15%;--right-sidebar-max-width:25%}}@media(min-width:768px){.container.compact{--left-sidebar-max-width:25%;max-width:768px}}@media(min-width:1024px){.container.compact{max-width:1024px;--left-sidebar-max-width:20%}}@media(min-width:1280px){.container.compact{max-width:1280px}}.flex{display:flex;flex-direction:row}.flex.column{flex-direction:column}.flex.on-phone--column{flex-direction:column}@media(min-width:768px){.flex.on-phone--column{flex-direction:unset}}.flex .full-width{width:100%}main.main{order:-2;min-width:0;max-width:100%;flex-grow:1;display:flex;flex-direction:column;gap:var(--section-separation)}@media(min-width:768px){main.main{padding-top:var(--main-top-padding)}}.main-container{min-height:100vh;align-items:flex-start;padding:0 15px;gap:var(--section-separation);padding-top:var(--main-top-padding)}@media(min-width:768px){.main-container{padding:0 20px}}/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:initial}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}/*!* Hamburgers
+* @description Tasty CSS-animated hamburgers
+* @author Jonathan Suh @jonsuh
+* @site https://jonsuh.com/hamburgers
+* @link https://github.com/jonsuh/hamburgers*/.hamburger{padding-top:10px;display:inline-block;cursor:pointer;transition-property:opacity,filter;transition-duration:.15s;transition-timing-function:linear;font:inherit;color:inherit;text-transform:none;background-color:initial;border:0;margin:0;overflow:visible}.hamburger:hover{opacity:.7}.hamburger.is-active:hover{opacity:.7}.hamburger.is-active .hamburger-inner,.hamburger.is-active .hamburger-inner::before,.hamburger.is-active .hamburger-inner::after{background-color:var(--card-text-color-main)}.hamburger-box{width:30px;height:24px;display:inline-block;position:relative}.hamburger-inner{display:block;top:50%;margin-top:-2px}.hamburger-inner,.hamburger-inner::before,.hamburger-inner::after{width:30px;height:2px;background-color:var(--card-text-color-main);border-radius:4px;position:absolute;transition-property:transform;transition-duration:.15s;transition-timing-function:ease}.hamburger-inner::before,.hamburger-inner::after{content:"";display:block}.hamburger-inner::before{top:-10px}.hamburger-inner::after{bottom:-10px}.hamburger--spin .hamburger-inner{transition-duration:.22s;transition-timing-function:cubic-bezier(.55,.055,.675,.19)}.hamburger--spin .hamburger-inner::before{transition:top .1s .25s ease-in,opacity .1s ease-in}.hamburger--spin .hamburger-inner::after{transition:bottom .1s .25s ease-in,transform .22s cubic-bezier(.55,.055,.675,.19)}.hamburger--spin.is-active .hamburger-inner{transform:rotate(225deg);transition-delay:.12s;transition-timing-function:cubic-bezier(.215,.61,.355,1)}.hamburger--spin.is-active .hamburger-inner::before{top:0;opacity:0;transition:top .1s ease-out,opacity .1s .12s ease-out}.hamburger--spin.is-active .hamburger-inner::after{bottom:0;transform:rotate(-90deg);transition:bottom .1s ease-out,transform .22s .12s cubic-bezier(.215,.61,.355,1)}#toggle-menu{background:0 0;border:none;position:absolute;right:0;top:0;z-index:2;cursor:pointer}[dir=rtl] #toggle-menu{left:0;right:auto}@media(min-width:768px){#toggle-menu{display:none}}#toggle-menu:focus-visible{outline:2px solid var(--accent-color);outline-offset:2px}#toggle-menu.is-active .hamburger-inner,#toggle-menu.is-active .hamburger-inner::before,#toggle-menu.is-active .hamburger-inner::after{background-color:var(--accent-color)}#main-menu{list-style:none;overflow-y:auto;flex-grow:1;font-size:1.4rem;background-color:var(--card-background);box-shadow:var(--shadow-l1);display:none;margin:0 calc(var(--container-padding) * -1);padding:30px}@media(min-width:1280px){#main-menu{padding:15px 0}}#main-menu,#main-menu .menu-bottom-section ol{flex-direction:column;gap:30px}@media(min-width:1280px){#main-menu,#main-menu .menu-bottom-section ol{gap:25px}}#main-menu.show{display:flex}@media(min-width:768px){#main-menu{align-items:flex-end;display:flex;background-color:initial;padding:0;box-shadow:none;margin:0}}#main-menu li{position:relative;vertical-align:middle;padding:0}@media(min-width:768px){#main-menu li{width:100%}}#main-menu li svg{stroke:currentColor;stroke-width:1.33;width:20px;height:20px}#main-menu li a{height:100%;display:inline-flex;align-items:center;color:var(--body-text-color);gap:var(--menu-icon-separation)}#main-menu li span{flex:1}#main-menu li.current a{color:var(--accent-color);font-weight:700}#main-menu li.menu-bottom-section{margin-top:auto}#main-menu li.menu-bottom-section ol{display:flex;padding-left:0}.menu-social{list-style:none;padding:0;margin:0;display:flex;flex-direction:row;gap:10px}.menu-social svg{width:24px;height:24px;stroke:var(--body-text-color);stroke-width:1.33}.article-list{display:flex;flex-direction:column;gap:var(--section-separation)}.article-list article{display:flex;flex-direction:column;background-color:var(--card-background);box-shadow:var(--shadow-l1);border-radius:var(--card-border-radius);overflow:hidden;transition:box-shadow .3s ease}.article-list article:hover{box-shadow:var(--shadow-l2)}.article-list article .article-image img{width:100%;height:150px;object-fit:cover}@media(min-width:768px){.article-list article .article-image img{height:200px}}@media(min-width:1280px){.article-list article .article-image img{height:250px}}.article-list article:nth-child(5n+1) .article-category a{background:#8ea885;color:#fff}.article-list article:nth-child(5n+2) .article-category a{background:#df7988;color:#fff}.article-list article:nth-child(5n+3) .article-category a{background:#0177b8;color:#fff}.article-list article:nth-child(5n+4) .article-category a{background:#ffb900;color:#fff}.article-list article:nth-child(5n+5) .article-category a{background:#6b69d6;color:#fff}.article-details{display:flex;flex-direction:column;justify-content:center;padding:var(--card-padding);gap:15px}.article-title{font-family:var(--article-font-family);font-weight:600;margin:0;color:var(--card-text-color-main);font-size:2.2rem}@media(min-width:1280px){.article-title{font-size:2.4rem}}.article-title a{color:var(--card-text-color-main)}.article-title a:hover{color:var(--card-text-color-main)}.article-subtitle{font-weight:400;color:var(--card-text-color-secondary);line-height:1.5;margin:0;font-size:1.75rem}@media(min-width:1280px){.article-subtitle{font-size:2rem}}.article-title-wrapper{display:flex;flex-direction:column;gap:8px}.article-time,.article-translations{display:flex;color:var(--card-text-color-tertiary);gap:15px}.article-time svg,.article-translations svg{vertical-align:middle;width:20px;height:20px;stroke-width:1.33;flex-shrink:0}.article-time time,.article-time a,.article-translations time,.article-translations a{font-size:1.4rem;color:var(--card-text-color-tertiary)}.article-time>div,.article-translations>div{display:inline-flex;align-items:center;gap:15px}.article-time{flex-wrap:wrap}.article-translations>div{flex-wrap:wrap}.article-category,.article-tags{display:flex;gap:10px;flex-wrap:wrap}.article-category a,.article-tags a{color:var(--accent-color-text);background-color:var(--accent-color);padding:8px 16px;border-radius:var(--tag-border-radius);display:inline-block;font-size:1.4rem;transition:background-color .5s ease}.article-category a:hover,.article-tags a:hover{color:var(--accent-color-text);background-color:var(--accent-color-darker)}.article-list--compact{border-radius:var(--card-border-radius);box-shadow:var(--shadow-l1);background-color:var(--card-background);--image-size:50px}@media(min-width:768px){.article-list--compact{--image-size:60px}}.article-list--compact article>a{display:flex;align-items:center;padding:var(--small-card-padding);gap:15px}.article-list--compact article:not(:last-of-type){border-bottom:1.5px solid var(--card-separator-color)}.article-list--compact article .article-details{flex-grow:1;padding:0;min-height:var(--image-size);gap:10px}.article-list--compact article .article-title{margin:0;font-size:1.6rem}@media(min-width:768px){.article-list--compact article .article-title{font-size:1.8rem}}.article-list--compact article .article-image img{width:var(--image-size);height:var(--image-size);object-fit:cover}.article-list--compact article .article-time{font-size:1.4rem}.article-list--compact article .article-preview{font-size:1.4rem;color:var(--card-text-color-tertiary);margin-top:10px;line-height:1.5}.article-list--tile article{border-radius:var(--card-border-radius);overflow:hidden;position:relative;height:350px;width:250px;box-shadow:var(--shadow-l1);transition:box-shadow .3s ease;background-color:var(--card-background)}.article-list--tile article:hover{box-shadow:var(--shadow-l2)}.article-list--tile article.has-image .article-details{background-color:rgba(0,0,0,.25)}.article-list--tile article.has-image .article-title{color:#fff}.article-list--tile article .article-image{position:absolute;top:0;left:0;width:100%;height:100%}.article-list--tile article .article-image img{width:100%;height:100%;object-fit:cover}.article-list--tile article .article-details{border-radius:var(--card-border-radius);position:relative;height:100%;width:100%;display:flex;flex-direction:column;justify-content:flex-end;z-index:2;padding:15px}@media(min-width:640px){.article-list--tile article .article-details{padding:20px}}.article-list--tile article .article-title{font-size:2rem;font-weight:500;color:var(--card-text-color-main)}@media(min-width:640px){.article-list--tile article .article-title{font-size:2.2rem}}.widget{display:flex;flex-direction:column}.widget .widget-icon svg{width:32px;height:32px;stroke-width:1.6;color:var(--body-text-color)}.tagCloud .tagCloud-tags{display:flex;flex-wrap:wrap;gap:10px}.tagCloud .tagCloud-tags a{background:var(--card-background);box-shadow:var(--shadow-l1);border-radius:var(--tag-border-radius);padding:8px 20px;color:var(--card-text-color-main);font-size:1.4rem;transition:box-shadow .3s ease}.tagCloud .tagCloud-tags a:hover{box-shadow:var(--shadow-l2)}.widget.archives .widget-archive--list{border-radius:var(--card-border-radius);box-shadow:var(--shadow-l1);background-color:var(--card-background)}.widget.archives .archives-year:not(:last-of-type){border-bottom:1.5px solid var(--card-separator-color)}.widget.archives .archives-year a{font-size:1.4rem;padding:18px 25px;display:flex}.widget.archives .archives-year a span.year{flex:1;color:var(--card-text-color-main);font-weight:700}.widget.archives .archives-year a span.count{color:var(--card-text-color-tertiary)}footer.site-footer{padding:20px 0 var(--section-separation);font-size:1.4rem;line-height:1.75}footer.site-footer:before{content:"";display:block;height:3px;width:50px;background:var(--body-text-color);margin-bottom:20px}footer.site-footer .copyright{color:var(--accent-color);font-weight:700;margin-bottom:5px}footer.site-footer .powerby{color:var(--body-text-color);font-weight:400;font-size:1.2rem}footer.site-footer .powerby a{color:var(--body-text-color)}.pagination{display:flex;background-color:var(--card-background);box-shadow:var(--shadow-l1);border-radius:var(--card-border-radius);overflow:hidden;flex-wrap:wrap}.pagination .page-link{padding:16px 32px;display:inline-flex;color:var(--card-text-color-secondary)}.pagination .page-link.current{font-weight:700;background-color:var(--card-background-selected);color:var(--card-text-color-main)}@media(min-width:768px){.sidebar.sticky{position:sticky}}.left-sidebar{display:flex;flex-direction:column;flex-shrink:0;align-self:stretch;gap:var(--sidebar-element-separation);max-width:none;width:100%;position:relative;--sidebar-avatar-size:100px;--sidebar-element-separation:20px;--emoji-size:40px;--emoji-font-size:20px}@media(min-width:768px){.left-sidebar{width:auto;padding-top:var(--main-top-padding);padding-bottom:var(--main-top-padding);max-height:100vh}}@media(min-width:1536px){.left-sidebar{--sidebar-avatar-size:120px;--sidebar-element-separation:25px;--emoji-size:40px}}.left-sidebar.sticky{top:0}.left-sidebar.compact{--sidebar-avatar-size:80px;--emoji-size:30px;--emoji-font-size:15px}@media(min-width:1024px){.left-sidebar.compact header{flex-direction:row}}.left-sidebar.compact header .site-meta{gap:5px}.left-sidebar.compact header .site-name{font-size:1.4rem}@media(min-width:1536px){.left-sidebar.compact header .site-name{font-size:1.75rem}}.left-sidebar.compact header .site-description{font-size:1.4rem}.right-sidebar{width:100%;display:none;flex-direction:column;gap:var(--widget-separation)}.right-sidebar.sticky{top:0}@media(min-width:1024px){.right-sidebar{padding-top:var(--main-top-padding);padding-bottom:var(--main-top-padding)}}.sidebar header{z-index:1;transition:box-shadow .5s ease;display:flex;flex-direction:column;gap:var(--sidebar-element-separation)}@media(min-width:768px){.sidebar header{padding:0}}.sidebar header .site-avatar{position:relative;margin:0;width:var(--sidebar-avatar-size);height:var(--sidebar-avatar-size);flex-shrink:0}.sidebar header .site-avatar .site-logo{width:100%;height:100%;border-radius:100%;box-shadow:var(--shadow-l1)}.sidebar header .site-avatar .emoji{position:absolute;width:var(--emoji-size);height:var(--emoji-size);line-height:var(--emoji-size);border-radius:100%;bottom:0;right:0;text-align:center;font-size:var(--emoji-font-size);background-color:var(--card-background);box-shadow:var(--shadow-l2)}.sidebar header .site-meta{display:flex;flex-direction:column;gap:10px;justify-content:center}.sidebar header .site-name{color:var(--accent-color);margin:0;font-size:1.6rem}@media(min-width:1536px){.sidebar header .site-name{font-size:1.8rem}}.sidebar header .site-description{color:var(--body-text-color);font-weight:400;margin:0;font-size:1.4rem}@media(min-width:1536px){.sidebar header .site-description{font-size:1.6rem}}[data-scheme=dark] #dark-mode-toggle{color:var(--accent-color);font-weight:700}[data-scheme=dark] #dark-mode-toggle .icon-tabler-toggle-left{display:none}[data-scheme=dark] #dark-mode-toggle .icon-tabler-toggle-right{display:unset}#dark-mode-toggle{margin-top:auto;color:var(--body-text-color);display:flex;align-items:center;cursor:pointer;gap:var(--menu-icon-separation)}#dark-mode-toggle .icon-tabler-toggle-right{display:none}#i18n-switch{color:var(--body-text-color);display:inline-flex;align-content:center;gap:var(--menu-icon-separation)}#i18n-switch select{border:0;background-color:initial;color:var(--body-text-color)}#i18n-switch select option{color:var(--card-text-color-main);background-color:var(--card-background)}html{font-size:62.5%;overflow-y:scroll}*{box-sizing:border-box}body{background:var(--body-background);margin:0;font-family:var(--base-font-family);font-size:1.6rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{scrollbar-width:auto;scrollbar-color:var(--scrollbar-thumb)transparent}::-webkit-scrollbar{height:auto}::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb)}::-webkit-scrollbar-track{background-color:initial}.article-page.hide-sidebar-sm .left-sidebar{display:none}@media(min-width:768px){.article-page.hide-sidebar-sm .left-sidebar{display:inherit}}.article-page .main-article{background:var(--card-background);border-radius:var(--card-border-radius);box-shadow:var(--shadow-l1);overflow:hidden}.article-page .main-article .article-header .article-image img{height:auto;width:100%;max-height:50vh;object-fit:cover}.article-page .main-article .article-header .article-details{padding:var(--card-padding);padding-bottom:0}.article-page .main-article .article-content{margin:var(--card-padding)0;color:var(--card-text-color-main)}.article-page .main-article .article-content .footnotes{font-family:var(--base-font-family)}.article-page .main-article .article-content img{max-width:100%;height:auto}.article-page .main-article .article-footer{margin:var(--card-padding);margin-top:0}.article-page .main-article .article-footer section:not(:first-child){margin-top:var(--card-padding)}.article-page .main-article .article-footer section{color:var(--card-text-color-tertiary);text-transform:uppercase;display:flex;align-items:center;font-size:1.4rem;gap:15px}.article-page .main-article .article-footer section svg{width:20px;height:20px;stroke-width:1.33}.article-page .main-article .article-footer .article-tags{text-transform:unset}.article-page .main-article .article-footer .article-copyright a,.article-page .main-article .article-footer .article-lastmod a{color:var(--body-text-color)}.article-page .main-article .article-footer .article-copyright a.link,.article-page .main-article .article-footer .article-lastmod a.link{box-shadow:unset}.widget--toc{background-color:var(--card-background);border-radius:var(--card-border-radius);box-shadow:var(--shadow-l1);display:flex;flex-direction:column;color:var(--card-text-color-main);overflow:hidden}.widget--toc ::-webkit-scrollbar-thumb{background-color:var(--card-separator-color)}.widget--toc #TableOfContents{overflow-x:auto;max-height:75vh}.widget--toc #TableOfContents ol,.widget--toc #TableOfContents ul{margin:0;padding:0}.widget--toc #TableOfContents ol{list-style-type:none;counter-reset:item}.widget--toc #TableOfContents ol li a:first-of-type::before{counter-increment:item;content:counters(item,".")". ";font-weight:700;margin-right:5px}.widget--toc #TableOfContents>ul{padding:0 1em}.widget--toc #TableOfContents li{margin:15px 0 15px 20px;padding:5px}.widget--toc #TableOfContents li>ol,.widget--toc #TableOfContents li>ul{margin-top:10px;padding-left:10px;margin-bottom:-5px}.widget--toc #TableOfContents li>ol>li:last-child,.widget--toc #TableOfContents li>ul>li:last-child{margin-bottom:0}.widget--toc #TableOfContents li.active-class>a{border-left:var(--heading-border-size)solid var(--accent-color);font-weight:700}.widget--toc #TableOfContents ul li.active-class>a{display:block}.widget--toc #TableOfContents>ul>li.active-class>a{margin-left:calc(-25px - 1em);padding-left:calc(25px + 1em - var(--heading-border-size))}.widget--toc #TableOfContents>ol>li.active-class>a{margin-left:calc(-9px - 1em);padding-left:calc(9px + 1em - var(--heading-border-size));display:block}.widget--toc #TableOfContents>ul>li>ul>li.active-class>a{margin-left:calc(-60px - 1em);padding-left:calc(60px + 1em - var(--heading-border-size))}.widget--toc #TableOfContents>ol>li>ol>li.active-class>a{margin-left:calc(-44px - 1em);padding-left:calc(44px + 1em - var(--heading-border-size));display:block}.widget--toc #TableOfContents>ul>li>ul>li>ul>li.active-class>a{margin-left:calc(-95px - 1em);padding-left:calc(95px + 1em - var(--heading-border-size))}.widget--toc #TableOfContents>ol>li>ol>li>ol>li.active-class>a{margin-left:calc(-79px - 1em);padding-left:calc(79px + 1em - var(--heading-border-size));display:block}.widget--toc #TableOfContents>ul>li>ul>li>ul>li>ul>li.active-class>a{margin-left:calc(-130px - 1em);padding-left:calc(130px + 1em - var(--heading-border-size))}.widget--toc #TableOfContents>ol>li>ol>li>ol>li>ol>li.active-class>a{margin-left:calc(-114px - 1em);padding-left:calc(114px + 1em - var(--heading-border-size));display:block}.widget--toc #TableOfContents>ul>li>ul>li>ul>li>ul>li>ul>li.active-class>a{margin-left:calc(-165px - 1em);padding-left:calc(165px + 1em - var(--heading-border-size))}.widget--toc #TableOfContents>ol>li>ol>li>ol>li>ol>li>ol>li.active-class>a{margin-left:calc(-149px - 1em);padding-left:calc(149px + 1em - var(--heading-border-size));display:block}.related-content{overflow-x:auto;padding-bottom:15px}.related-content>.flex{float:left}.related-content article{margin-right:15px;flex-shrink:0;overflow:hidden;width:250px;height:150px}.related-content article .article-title{font-size:1.8rem;margin:0}.related-content article.has-image .article-details{padding:20px;background:linear-gradient(0deg,rgba(0,0,0,.25) 0%,rgba(0,0,0,.75) 100%)}.article-content{font-family:var(--article-font-family);font-size:var(--article-font-size);padding:0 var(--card-padding);line-height:var(--article-line-height)}.article-content>p{margin:1.5em 0}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{margin-inline-start:calc((var(--card-padding)) * -1);padding-inline-start:calc(var(--card-padding) - var(--heading-border-size));border-inline-start:var(--heading-border-size)solid var(--accent-color);position:relative}.article-content h1 a.header-anchor,.article-content h2 a.header-anchor,.article-content h3 a.header-anchor,.article-content h4 a.header-anchor,.article-content h5 a.header-anchor,.article-content h6 a.header-anchor{transition:opacity .3s ease;opacity:0;position:absolute;left:0;width:var(--card-padding);text-align:center;color:var(--accent-color)}.article-content h1 a.header-anchor:before,.article-content h2 a.header-anchor:before,.article-content h3 a.header-anchor:before,.article-content h4 a.header-anchor:before,.article-content h5 a.header-anchor:before,.article-content h6 a.header-anchor:before{content:"#"}.article-content h1:hover a.header-anchor,.article-content h1:focus a.header-anchor,.article-content h2:hover a.header-anchor,.article-content h2:focus a.header-anchor,.article-content h3:hover a.header-anchor,.article-content h3:focus a.header-anchor,.article-content h4:hover a.header-anchor,.article-content h4:focus a.header-anchor,.article-content h5:hover a.header-anchor,.article-content h5:focus a.header-anchor,.article-content h6:hover a.header-anchor,.article-content h6:focus a.header-anchor{opacity:1}.article-content figure{text-align:center}.article-content figure figcaption{font-size:1.4rem;color:var(--card-text-color-secondary)}.article-content blockquote{position:relative;margin:1.5em 0;border-inline-start:var(--blockquote-border-size)solid var(--card-separator-color);padding:15px calc(var(--card-padding) - var(--blockquote-border-size));background-color:var(--blockquote-background-color)}.article-content blockquote .cite{display:block;text-align:right;font-size:.75em}.article-content blockquote .cite a{text-decoration:underline}.article-content hr{width:100px;margin:40px auto;background:var(--card-text-color-tertiary);height:2px;border:0;opacity:.55}.article-content code{color:var(--code-text-color);background-color:var(--code-background-color);padding:2px 4px;border-radius:var(--tag-border-radius);font-family:var(--code-font-family)}.article-content a,.article-content code{word-break:break-word}.article-content .gallery{position:relative;display:flex;flex-direction:row;justify-content:center;margin:1.5em 0;gap:10px}.article-content .gallery figure{margin:0}.article-content pre{overflow-x:auto;display:block;background-color:var(--pre-background-color);color:var(--pre-text-color);font-family:var(--code-font-family);line-height:1.428571429;word-break:break-all;padding:var(--card-padding)}[dir=rtl] .article-content pre{direction:ltr}.article-content pre code{color:unset;border:none;background:0 0;padding:0}.article-content .highlight{background-color:var(--pre-background-color);padding:var(--card-padding);position:relative}.article-content .highlight:hover .copyCodeButton{opacity:1}[dir=rtl] .article-content .highlight{direction:ltr}.article-content .highlight pre{margin:initial;padding:0;margin:0;width:auto}.article-content .copyCodeButton{position:absolute;top:calc(var(--card-padding));right:calc(var(--card-padding));background:var(--card-background);border:none;box-shadow:var(--shadow-l2);border-radius:var(--tag-border-radius);padding:8px 16px;color:var(--card-text-color-main);cursor:pointer;font-size:14px;opacity:0;transition:opacity .3s ease}.article-content .table-wrapper{padding:0 var(--card-padding);overflow-x:auto;display:block}.article-content table{width:100%;border-collapse:collapse;border-spacing:0;margin-bottom:1.5em;font-size:.96em}.article-content th,.article-content td{text-align:left;padding:4px 8px 4px 10px;border:1px solid var(--table-border-color)}.article-content td{vertical-align:top}.article-content tr:nth-child(even){background-color:var(--tr-even-background-color)}.article-content .twitter-tweet{color:var(--card-text-color-main)}.article-content .video-wrapper{position:relative;width:100%;height:0;padding-bottom:56.25%;overflow:hidden}.article-content .video-wrapper>iframe,.article-content .video-wrapper>video{position:absolute;width:100%;height:100%;left:0;top:0;border:0}.article-content .gitlab-embed-snippets{margin:0!important}.article-content .gitlab-embed-snippets .file-holder.snippet-file-content{margin-block-end:0!important;margin-block-start:0!important;margin-left:calc((var(--card-padding)) * -1)!important;margin-right:calc((var(--card-padding)) * -1)!important;padding:0 var(--card-padding)!important}.article-content blockquote,.article-content figure,.article-content .highlight,.article-content pre,.article-content .gallery,.article-content .video-wrapper,.article-content .table-wrapper,.article-content .s_video_simple{margin-left:calc((var(--card-padding)) * -1);margin-right:calc((var(--card-padding)) * -1);width:calc(100% + var(--card-padding) * 2)}.article-content .katex-display>.katex{overflow-x:auto;overflow-y:hidden}.article-content kbd{border:1px solid var(--kbd-border-color);font-weight:700;font-size:.9em;line-height:1;padding:2px 4px;border-radius:4px;display:inline-block}.section-card{border-radius:var(--card-border-radius);background-color:var(--card-background);padding:var(--small-card-padding);box-shadow:var(--shadow-l1);display:flex;align-items:center;gap:20px;--separation:15px}.section-card .section-term{font-size:2.2rem;margin:0;color:var(--card-text-color-main)}.section-card .section-description{font-weight:400;color:var(--card-text-color-secondary);font-size:1.6rem;margin:0}.section-card .section-details{flex-grow:1;display:flex;flex-direction:column;gap:8px}.section-card .section-image img{width:60px;height:60px}.section-card .section-count{color:var(--card-text-color-tertiary);font-size:1.4rem;margin:0;font-weight:700;text-transform:uppercase}.subsection-list{overflow-x:auto}.subsection-list .article-list--tile{display:flex;padding-bottom:15px}.subsection-list .article-list--tile article{width:250px;height:150px;margin-right:20px;flex-shrink:0}.subsection-list .article-list--tile article .article-title{margin:0;font-size:1.8rem}.subsection-list .article-list--tile article .article-details{padding:20px}.not-found-card{background-color:var(--card-background);box-shadow:var(--shadow-l1);border-radius:var(--card-border-radius);padding:var(--card-padding)}.search-form{position:relative;--button-size:80px}.search-form.widget{--button-size:60px}.search-form.widget label{font-size:1.3rem;top:10px}.search-form.widget input{font-size:1.5rem;padding:30px 20px 15px}.search-form p{position:relative;margin:0}.search-form label{position:absolute;top:15px;inset-inline-start:20px;font-size:1.4rem;color:var(--card-text-color-tertiary)}.search-form input{padding:40px 20px 20px;border-radius:var(--card-border-radius);background-color:var(--card-background);box-shadow:var(--shadow-l1);color:var(--card-text-color-main);width:100%;border:0;-webkit-appearance:none;transition:box-shadow .3s ease;font-size:1.8rem}.search-form input:focus{box-shadow:var(--shadow-l2)}.search-form input:focus-visible{outline:2px solid var(--accent-color);outline-offset:-2px}.search-form button{position:absolute;inset-inline-end:0;top:0;height:100%;width:var(--button-size);cursor:pointer;background-color:initial;border:0;padding:0 10px}.search-form button:focus svg{stroke-width:2;color:var(--accent-color)}.search-form button:focus-visible{outline:2px solid var(--accent-color);outline-offset:-2px}.search-form button svg{color:var(--card-text-color-secondary);stroke-width:1.33;transition:all .3s ease;width:20px;height:20px}a{text-decoration:none;color:var(--accent-color)}a:hover{color:var(--accent-color-darker)}a.link{box-shadow:0 -2px rgba(var(--link-background-color),var(--link-background-opacity))inset;transition:all .3s ease}a.link:hover{box-shadow:0 calc(-1rem * var(--article-line-height))rgba(var(--link-background-color),var(--link-background-opacity-hover))inset}.section-title{text-transform:uppercase;margin-top:0;margin-bottom:10px;display:block;font-size:1.6rem;font-weight:700;color:var(--body-text-color)}.section-title a{color:var(--body-text-color)}:root{--body-text-color:#595959;--error-color:#e74c3c;--code-text-color:#546e7a;--shadow-l3:0px 14px 28px rgba(0, 0, 0, 0.06),
+ 0px 4px 10px rgba(0, 0, 0, 0.04),
+ 0px 0px 1px rgba(0, 0, 0, 0.04)}.glossary-term-link{color:var(--accent-color);text-decoration:none;border-bottom:1px dotted var(--accent-color);position:relative;cursor:help;transition:all .2s ease}.glossary-term-link:hover{color:var(--accent-color-darker);border-bottom-color:var(--accent-color-darker);text-decoration:none}.glossary-term-link::after{content:attr(data-definition);position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--card-text-color-main);color:var(--card-background);padding:.5rem .75rem;border-radius:4px;font-size:.8rem;line-height:1.3;white-space:normal;width:max-content;max-width:clamp(200px,80vw,300px);opacity:0;visibility:hidden;transition:all .2s ease;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,.2)}.glossary-term-link::before{content:'';position:absolute;bottom:calc(100% - 5px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--card-text-color-main);opacity:0;visibility:hidden;transition:all .2s ease;z-index:1001}.glossary-term-link:hover::after,.glossary-term-link:hover::before{opacity:1;visibility:visible}.glossary-term-missing{color:var(--error-color);border-bottom:1px dotted var(--error-color);cursor:help}@media(max-width:768px){.glossary-term-link::after{position:fixed;bottom:20px;left:10px;right:10px;transform:none;max-width:none;width:auto}.glossary-term-link::before{display:none}}[data-scheme=dark] .glossary-term-link::after{background:var(--card-background);color:var(--card-text-color-main);border:1px solid var(--card-separator-color)}[data-scheme=dark] .glossary-term-link::before{border-top-color:var(--card-background)}.breadcrumbs{margin-bottom:1.5rem;font-size:.9rem}.breadcrumb-list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;color:var(--card-text-color-secondary)}.breadcrumb-item{display:flex;align-items:center}.breadcrumb-item:not(:last-child)::after{content:"›";margin:0 .5rem;color:var(--card-text-color-tertiary)}.breadcrumb-item a{color:var(--accent-color);text-decoration:none}.breadcrumb-item a:hover{text-decoration:underline;color:var(--accent-color-darker)}.breadcrumb-item.active{color:var(--card-text-color-main);font-weight:500}@media(max-width:768px){.breadcrumb-list{font-size:.8rem}.breadcrumb-item:not(:last-child):not(:first-child){display:none}.breadcrumb-item:nth-last-child(2)::before{content:"... › ";color:var(--card-text-color-tertiary)}}.difficulty-dot{display:inline-block;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-right:.25rem}.difficulty-dot--beginner{background-color:#22c55e}.difficulty-dot--intermediate{background-color:#fbbf24}.difficulty-dot--expert{background-color:#f87171}[data-scheme=dark] .difficulty-dot--beginner{background-color:#16a34a}[data-scheme=dark] .difficulty-dot--intermediate{background-color:#ca8a04}[data-scheme=dark] .difficulty-dot--expert{background-color:#dc2626}.article-difficulty-footer{display:flex;align-items:center;gap:.25rem}.article-difficulty-footer .difficulty-text{font-size:inherit;font-weight:inherit;color:var(--card-text-color-secondary);text-transform:capitalize}.article-difficulty-inline{color:var(--card-text-color-secondary);font-size:inherit}.article-difficulty-inline .difficulty-text{font-size:inherit;font-weight:inherit;margin-left:.25rem;text-transform:capitalize;color:var(--card-text-color-secondary)}.widget.expertise .widget-expertise--list{border-radius:var(--card-border-radius);box-shadow:var(--shadow-l1);background-color:var(--card-background)}.widget.expertise .expertise-level-item:not(:last-of-type){border-bottom:1.5px solid var(--card-separator-color)}.widget.expertise .expertise-level-item a{display:block;padding:18px 25px;text-decoration:none;color:inherit;transition:background-color .2s ease}.widget.expertise .expertise-level-item a:hover{background-color:var(--card-background-selected);text-decoration:none}.widget.expertise .expertise-level-item .expertise-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.widget.expertise .expertise-level-item .expertise-header .level-name{font-size:1.4rem;font-weight:700;color:var(--card-text-color-main)}.widget.expertise .expertise-level-item .expertise-header .count{font-size:1.4rem;color:var(--card-text-color-tertiary);font-weight:400}.widget.expertise .expertise-level-item .expertise-bar{height:4px;background-color:var(--card-separator-color);border-radius:2px;overflow:hidden}.widget.expertise .expertise-level-item .expertise-bar .bar-fill{height:100%;border-radius:2px;transition:width .3s ease}.widget.expertise .expertise-level-item .expertise-bar .bar-fill.beginner{background-color:#22c55e}.widget.expertise .expertise-level-item .expertise-bar .bar-fill.intermediate{background-color:#fbbf24}.widget.expertise .expertise-level-item .expertise-bar .bar-fill.expert{background-color:#f87171}[data-scheme=dark] .widget.expertise .expertise-bar .bar-fill.beginner{background-color:#16a34a}[data-scheme=dark] .widget.expertise .expertise-bar .bar-fill.intermediate{background-color:#ca8a04}[data-scheme=dark] .widget.expertise .expertise-bar .bar-fill.expert{background-color:#dc2626}.difficulty-nav{display:flex;gap:.5rem;margin-bottom:2rem;flex-wrap:wrap}.difficulty-nav-item{display:inline-flex;align-items:center;padding:.5rem 1rem;border-radius:2rem;font-size:1.4rem;font-weight:500;text-decoration:none;color:var(--card-text-color-secondary);background-color:var(--card-background);border:1.5px solid var(--card-separator-color);transition:all .2s ease}.difficulty-nav-item:hover{text-decoration:none;background-color:var(--card-background-selected)}.difficulty-nav-item.active{font-weight:700;color:var(--card-text-color-main)}.difficulty-nav-item.active.difficulty-nav--beginner{border-color:#22c55e;background-color:rgba(34,197,94,8%)}.difficulty-nav-item.active.difficulty-nav--intermediate{border-color:#fbbf24;background-color:rgba(251,191,36,8%)}.difficulty-nav-item.active.difficulty-nav--expert{border-color:#f87171;background-color:rgba(248,113,113,8%)}[data-scheme=dark] .difficulty-nav-item.active.difficulty-nav--beginner{border-color:#16a34a;background-color:rgba(34,197,94,.12)}[data-scheme=dark] .difficulty-nav-item.active.difficulty-nav--intermediate{border-color:#ca8a04;background-color:rgba(251,191,36,.12)}[data-scheme=dark] .difficulty-nav-item.active.difficulty-nav--expert{border-color:#dc2626;background-color:rgba(248,113,113,.12)}.difficulty-page-header{margin-bottom:2rem}.difficulty-page-header .section-title{color:var(--body-text-color);margin-bottom:1rem}.difficulty-page-header .difficulty-page-description{color:var(--card-text-color-secondary);font-size:1.75rem;line-height:1.5;font-weight:400}.difficulty-page-header .difficulty-page-description p{margin:0}[data-scheme=dark] .difficulty-page-header .section-title{color:var(--body-text-color)}[data-scheme=dark] .difficulty-page-header .difficulty-page-description{color:var(--body-text-color);opacity:.9}@media(max-width:768px){.difficulty-page-header .difficulty-page-description{font-size:1.5rem}.difficulty-nav-item{font-size:1.3rem;padding:.4rem .8rem}}@media(min-width:1024px){.difficulty-page-header .difficulty-page-description{font-size:2rem}}.glossary-categories-overview{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;margin:2rem 0}.category-card{background:var(--card-background);border:1px solid var(--card-separator-color);border-left:4px solid var(--card-separator-color);border-radius:var(--card-border-radius);padding:1.5rem;transition:all .2s ease;box-shadow:var(--shadow-l1)}.category-card.clickable-category{cursor:pointer;user-select:none}.category-card:hover{box-shadow:var(--shadow-l2);transform:translateY(-2px);border-color:var(--accent-color)}.category-card.clickable-category:hover{border-left-width:6px}.category-card:focus-visible{outline:2px solid var(--accent-color);outline-offset:2px}.category-header{display:flex;align-items:flex-start;gap:1rem;margin-bottom:1rem}.category-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;flex-shrink:0;transition:all .3s ease;background:rgba(var(--category-color-rgb,59,130,246),.08)}.category-card:hover .category-icon{background:rgba(var(--category-color-rgb,59,130,246),.15);transform:scale(1.05)}.category-title-group{flex:1;display:flex;flex-direction:column;gap:.5rem}.category-name{margin:0;color:var(--card-text-color-main);font-size:1.2rem;font-weight:700;line-height:1.2}.category-description{margin:0;color:var(--card-text-color-secondary);line-height:1.4;font-size:.9rem}.category-count{background:var(--category-color,var(--accent-color));color:#fff;padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;align-self:flex-start;box-shadow:0 2px 4px rgba(0,0,0,.1)}@media(max-width:768px){.glossary-categories-overview{grid-template-columns:1fr}}.pswp__custom-caption{font-size:14px;color:#fff;background:rgba(0,0,0,.5);padding:4px 12px;border-radius:4px;position:absolute;left:50%;bottom:20px;transform:translateX(-50%);max-width:80%;text-align:center;pointer-events:none}.pswp__custom-caption:empty{display:none}.article-list article:nth-child(5n+4) .article-category a{color:#1a1a1a}[data-scheme=dark]{--card-text-color-tertiary:rgba(255, 255, 255, 0.65);--code-text-color:#90a4ae;--shadow-l1:0px 4px 8px rgba(0, 0, 0, 0.12),
+ 0px 0px 2px rgba(0, 0, 0, 0.16),
+ 0px 0px 1px rgba(0, 0, 0, 0.12);--shadow-l2:0px 10px 20px rgba(0, 0, 0, 0.14),
+ 0px 2px 6px rgba(0, 0, 0, 0.12),
+ 0px 0px 1px rgba(0, 0, 0, 0.10);--shadow-l3:0px 14px 28px rgba(0, 0, 0, 0.18),
+ 0px 4px 10px rgba(0, 0, 0, 0.14),
+ 0px 0px 1px rgba(0, 0, 0, 0.10)}.article-content h1{line-height:1.2;margin:2em 0 .75em}.article-content h2{line-height:1.25;margin:1.75em 0 .6em}.article-content h3{line-height:1.3;margin:1.5em 0 .5em}.article-content h4,.article-content h5,.article-content h6{line-height:1.35;margin:1.25em 0 .5em}.article-content>h1:first-child,.article-content>h2:first-child,.article-content>h3:first-child{margin-top:.5em}.article-list article{transition:box-shadow .2s ease,transform .2s ease}.article-list article:hover{transform:translateY(-2px)}.article-list--compact article>a{transition:background-color .15s ease}.article-list--compact article>a:hover{background-color:var(--card-background-selected)}.pagination .page-link{transition:background-color .15s ease,color .15s ease}.pagination .page-link:hover:not(.current):not(.dots){background-color:var(--card-background-selected);color:var(--card-text-color-main)}.pagination .page-link:focus-visible{outline:2px solid var(--accent-color);outline-offset:-2px}.article-category a,.article-tags a{transition:background-color .2s ease}.menu-social a{transition:transform .2s ease}.menu-social a:hover{transform:scale(1.1)}.menu-social a svg{transition:stroke .2s ease}a:focus-visible,button:focus-visible,select:focus-visible,[role=button]:focus-visible{outline:2px solid var(--accent-color);outline-offset:2px}:focus:not(:focus-visible){outline:none}.tagCloud-tags a:focus-visible{box-shadow:var(--shadow-l2);outline:2px solid var(--accent-color);outline-offset:2px}#dark-mode-toggle:focus-visible{outline:2px solid var(--accent-color);outline-offset:2px;border-radius:4px}.article-content th,.article-content td{padding:8px 12px}.article-details{gap:16px}.article-time,.article-translations{gap:16px}.article-time>div,.article-translations>div{gap:16px}footer.site-footer::before{margin-bottom:24px}.article-content code{padding:2px 6px;font-size:.88em}.article-content blockquote{border-inline-start-color:var(--accent-color)}.article-content .copyCodeButton:focus-visible{opacity:1;outline:2px solid var(--accent-color);outline-offset:2px}::selection{background-color:var(--accent-color);color:var(--accent-color-text)}@media print{.left-sidebar,.right-sidebar,.pagination,.article-footer .article-tags,.related-content,#toggle-menu{display:none!important}.main-container{max-width:100%!important}.main-article{box-shadow:none!important}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
\ No newline at end of file
diff --git a/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json
new file mode 100644
index 00000000..0bba9d10
--- /dev/null
+++ b/resources/_gen/assets/scss/style.scss_77b10c8e87ff110a62c52933fe3f7f11.json
@@ -0,0 +1 @@
+{"Target":"/scss/style.min.f517534918a02242d2cbaf751d030bc2ee92883ddb1ffcc1fafa78f7d096281d.css","MediaType":"text/css","Data":{"Integrity":"sha256-9RdTSRigIkLSy691HQMLwu6SiD3bH/zB+vp499CWKB0="}}
\ No newline at end of file
diff --git a/resources/_gen/images/categories/analysis/analysis.29d6bade366845563e2ddb8072238d82_hu_3d16f9994e593d05.jpg b/resources/_gen/images/categories/analysis/analysis.29d6bade366845563e2ddb8072238d82_hu_3d16f9994e593d05.jpg
new file mode 100644
index 00000000..00bab19e
Binary files /dev/null and b/resources/_gen/images/categories/analysis/analysis.29d6bade366845563e2ddb8072238d82_hu_3d16f9994e593d05.jpg differ
diff --git a/resources/_gen/images/categories/analysis/analysis_hu_63485f887339b101.jpg b/resources/_gen/images/categories/analysis/analysis_hu_63485f887339b101.jpg
new file mode 100644
index 00000000..436ed30e
Binary files /dev/null and b/resources/_gen/images/categories/analysis/analysis_hu_63485f887339b101.jpg differ
diff --git a/resources/_gen/images/categories/dex/DEX.70045a9dbf7061fc9bca46cbd6e0db95_hu_326ee919828ebcc8.jpg b/resources/_gen/images/categories/dex/DEX.70045a9dbf7061fc9bca46cbd6e0db95_hu_326ee919828ebcc8.jpg
new file mode 100644
index 00000000..82abd22c
Binary files /dev/null and b/resources/_gen/images/categories/dex/DEX.70045a9dbf7061fc9bca46cbd6e0db95_hu_326ee919828ebcc8.jpg differ
diff --git a/resources/_gen/images/categories/dex/DEX_hu_d8780e209a5f56a.jpg b/resources/_gen/images/categories/dex/DEX_hu_d8780e209a5f56a.jpg
new file mode 100644
index 00000000..b5a444e4
Binary files /dev/null and b/resources/_gen/images/categories/dex/DEX_hu_d8780e209a5f56a.jpg differ
diff --git a/resources/_gen/images/categories/lending/lending.6fbbcdf77ba5682385e470aabc57f9bf_hu_9b39c985ebf091a8.jpg b/resources/_gen/images/categories/lending/lending.6fbbcdf77ba5682385e470aabc57f9bf_hu_9b39c985ebf091a8.jpg
new file mode 100644
index 00000000..b7f98c0a
Binary files /dev/null and b/resources/_gen/images/categories/lending/lending.6fbbcdf77ba5682385e470aabc57f9bf_hu_9b39c985ebf091a8.jpg differ
diff --git a/resources/_gen/images/categories/lending/lending_hu_89a9d4bfa543b034.jpg b/resources/_gen/images/categories/lending/lending_hu_89a9d4bfa543b034.jpg
new file mode 100644
index 00000000..c55bcfc5
Binary files /dev/null and b/resources/_gen/images/categories/lending/lending_hu_89a9d4bfa543b034.jpg differ
diff --git a/resources/_gen/images/categories/nft/nft.d13a1bb23c567701cca0c6ff0dddaa7b_hu_a1764889eff4e493.jpg b/resources/_gen/images/categories/nft/nft.d13a1bb23c567701cca0c6ff0dddaa7b_hu_a1764889eff4e493.jpg
new file mode 100644
index 00000000..ff48b098
Binary files /dev/null and b/resources/_gen/images/categories/nft/nft.d13a1bb23c567701cca0c6ff0dddaa7b_hu_a1764889eff4e493.jpg differ
diff --git a/resources/_gen/images/categories/nft/nft_hu_6e861264ea36fa3c.jpg b/resources/_gen/images/categories/nft/nft_hu_6e861264ea36fa3c.jpg
new file mode 100644
index 00000000..0c349cfe
Binary files /dev/null and b/resources/_gen/images/categories/nft/nft_hu_6e861264ea36fa3c.jpg differ
diff --git a/resources/_gen/images/categories/practical/practical.7de7e2e65f262564a40493298ac3c72c_hu_321f5fdcfb31cec7.jpg b/resources/_gen/images/categories/practical/practical.7de7e2e65f262564a40493298ac3c72c_hu_321f5fdcfb31cec7.jpg
new file mode 100644
index 00000000..99afd14c
Binary files /dev/null and b/resources/_gen/images/categories/practical/practical.7de7e2e65f262564a40493298ac3c72c_hu_321f5fdcfb31cec7.jpg differ
diff --git a/resources/_gen/images/categories/practical/practical_hu_c83cc6fc65afab52.jpg b/resources/_gen/images/categories/practical/practical_hu_c83cc6fc65afab52.jpg
new file mode 100644
index 00000000..59985f9c
Binary files /dev/null and b/resources/_gen/images/categories/practical/practical_hu_c83cc6fc65afab52.jpg differ
diff --git a/resources/_gen/images/categories/privacy/privacy.9c2af2c1f5a4765c38c92fdd7c6d8341_hu_e8f02637d148e911.jpg b/resources/_gen/images/categories/privacy/privacy.9c2af2c1f5a4765c38c92fdd7c6d8341_hu_e8f02637d148e911.jpg
new file mode 100644
index 00000000..004808f4
Binary files /dev/null and b/resources/_gen/images/categories/privacy/privacy.9c2af2c1f5a4765c38c92fdd7c6d8341_hu_e8f02637d148e911.jpg differ
diff --git a/resources/_gen/images/categories/privacy/privacy_hu_9105f489d9acacbd.jpg b/resources/_gen/images/categories/privacy/privacy_hu_9105f489d9acacbd.jpg
new file mode 100644
index 00000000..d6aea1d3
Binary files /dev/null and b/resources/_gen/images/categories/privacy/privacy_hu_9105f489d9acacbd.jpg differ
diff --git a/resources/_gen/images/categories/projects/projects.f94e6eb6efa7c445dfca1c274335f921_hu_78786acf67ce4201.jpg b/resources/_gen/images/categories/projects/projects.f94e6eb6efa7c445dfca1c274335f921_hu_78786acf67ce4201.jpg
new file mode 100644
index 00000000..f20d463c
Binary files /dev/null and b/resources/_gen/images/categories/projects/projects.f94e6eb6efa7c445dfca1c274335f921_hu_78786acf67ce4201.jpg differ
diff --git a/resources/_gen/images/categories/projects/projects_hu_80c9c895bd0d6dbc.jpg b/resources/_gen/images/categories/projects/projects_hu_80c9c895bd0d6dbc.jpg
new file mode 100644
index 00000000..022cf4ea
Binary files /dev/null and b/resources/_gen/images/categories/projects/projects_hu_80c9c895bd0d6dbc.jpg differ
diff --git a/resources/_gen/images/categories/stablecoin/stablecoin.b385a6d520f3ae2a3dc07f0a11bd8475_hu_904d81fd627858d4.jpg b/resources/_gen/images/categories/stablecoin/stablecoin.b385a6d520f3ae2a3dc07f0a11bd8475_hu_904d81fd627858d4.jpg
new file mode 100644
index 00000000..c043fb94
Binary files /dev/null and b/resources/_gen/images/categories/stablecoin/stablecoin.b385a6d520f3ae2a3dc07f0a11bd8475_hu_904d81fd627858d4.jpg differ
diff --git a/resources/_gen/images/categories/stablecoin/stablecoin_hu_afd54270864dc027.jpg b/resources/_gen/images/categories/stablecoin/stablecoin_hu_afd54270864dc027.jpg
new file mode 100644
index 00000000..30341a94
Binary files /dev/null and b/resources/_gen/images/categories/stablecoin/stablecoin_hu_afd54270864dc027.jpg differ
diff --git a/resources/_gen/images/categories/thesis/thesis.a1cd2bc9308745c39b20ce7d8af3206d_hu_328a97a4e65747f3.jpg b/resources/_gen/images/categories/thesis/thesis.a1cd2bc9308745c39b20ce7d8af3206d_hu_328a97a4e65747f3.jpg
new file mode 100644
index 00000000..9dcc63d5
Binary files /dev/null and b/resources/_gen/images/categories/thesis/thesis.a1cd2bc9308745c39b20ce7d8af3206d_hu_328a97a4e65747f3.jpg differ
diff --git a/resources/_gen/images/categories/thesis/thesis_hu_cb3c63ad1137c1f9.jpg b/resources/_gen/images/categories/thesis/thesis_hu_cb3c63ad1137c1f9.jpg
new file mode 100644
index 00000000..7251e331
Binary files /dev/null and b/resources/_gen/images/categories/thesis/thesis_hu_cb3c63ad1137c1f9.jpg differ
diff --git a/resources/_gen/images/categories/tutorial/tutorial.53ee5d3b64cf38c1afc2786dfffffe11_hu_21a4643211930922.jpg b/resources/_gen/images/categories/tutorial/tutorial.53ee5d3b64cf38c1afc2786dfffffe11_hu_21a4643211930922.jpg
new file mode 100644
index 00000000..aba06a03
Binary files /dev/null and b/resources/_gen/images/categories/tutorial/tutorial.53ee5d3b64cf38c1afc2786dfffffe11_hu_21a4643211930922.jpg differ
diff --git a/resources/_gen/images/categories/tutorial/tutorial_hu_bbd94c100aec3755.jpg b/resources/_gen/images/categories/tutorial/tutorial_hu_bbd94c100aec3755.jpg
new file mode 100644
index 00000000..a6511c05
Binary files /dev/null and b/resources/_gen/images/categories/tutorial/tutorial_hu_bbd94c100aec3755.jpg differ
diff --git a/resources/_gen/images/categories/yield/yield.31d79d31531db53818ccd63927036425_hu_d1f93bbbf462bbd8.jpg b/resources/_gen/images/categories/yield/yield.31d79d31531db53818ccd63927036425_hu_d1f93bbbf462bbd8.jpg
new file mode 100644
index 00000000..dfbbd6b7
Binary files /dev/null and b/resources/_gen/images/categories/yield/yield.31d79d31531db53818ccd63927036425_hu_d1f93bbbf462bbd8.jpg differ
diff --git a/resources/_gen/images/categories/yield/yield_hu_d408c26952183c69.jpg b/resources/_gen/images/categories/yield/yield_hu_d408c26952183c69.jpg
new file mode 100644
index 00000000..d8be974b
Binary files /dev/null and b/resources/_gen/images/categories/yield/yield_hu_d408c26952183c69.jpg differ
diff --git a/scripts/generate-glossary-pages.py b/scripts/generate-glossary-pages.py
new file mode 100644
index 00000000..d5071b22
--- /dev/null
+++ b/scripts/generate-glossary-pages.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+"""Generate individual glossary term pages from data/glossary.json.
+
+Reads the glossary data and creates one markdown file per term per language
+under content/glossary/. Each file has frontmatter that references the term ID;
+the layout template pulls actual content from glossary.json at build time.
+
+Usage:
+ python scripts/generate-glossary-pages.py
+"""
+
+import json
+import os
+import re
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PROJECT_ROOT = os.path.dirname(SCRIPT_DIR)
+GLOSSARY_JSON = os.path.join(PROJECT_ROOT, "data", "glossary.json")
+CONTENT_DIR = os.path.join(PROJECT_ROOT, "content", "glossary")
+
+
+def slugify(text):
+ """Convert text to URL-safe slug."""
+ return re.sub(r"[^a-z0-9-]", "", text.lower().replace(" ", "-"))
+
+
+def escape_yaml(s):
+ """Escape a string for YAML double-quoted scalar."""
+ return s.replace("\\", "\\\\").replace('"', '\\"')
+
+
+def generate_page(term, lang, is_default_lang):
+ """Generate a single term page markdown file."""
+ term_id = term["id"]
+ title = term["term"]
+ full_term = term.get("full_term", title)
+ if full_term and full_term != title:
+ title_display = f"{title} ({full_term})"
+ else:
+ title_display = title
+
+ short_def = term.get("short_definition", term.get("definition", "")[:160])
+ category = term.get("category", "")
+ tags = term.get("tags", [])
+
+ # Build frontmatter
+ tags_yaml = "\n".join(f' - "{escape_yaml(t)}"' for t in tags)
+
+ frontmatter = f"""---
+title: "{escape_yaml(title_display)}"
+description: "{escape_yaml(short_def)}"
+date: 2024-01-01
+lastmod: 2024-01-01
+layout: glossary-term
+type: glossary
+glossary_id: "{term_id}"
+glossary_category: "{category}"
+tags:
+{tags_yaml}
+sitemap:
+ priority: 0.7
+ changefreq: monthly
+---
+"""
+
+ # Determine filename
+ if is_default_lang:
+ filename = f"{term_id}.md"
+ else:
+ filename = f"{term_id}.{lang}.md"
+
+ filepath = os.path.join(CONTENT_DIR, filename)
+ with open(filepath, "w", encoding="utf-8") as f:
+ f.write(frontmatter)
+
+ return filepath
+
+
+def main():
+ with open(GLOSSARY_JSON, "r", encoding="utf-8") as f:
+ data = json.load(f)
+
+ os.makedirs(CONTENT_DIR, exist_ok=True)
+
+ created = 0
+ for lang_code, is_default in [("en", True), ("fr", False)]:
+ lang_data = data.get(lang_code, {})
+ terms = lang_data.get("terms", [])
+ print(f"Generating {len(terms)} pages for '{lang_code}'...")
+
+ for term in terms:
+ path = generate_page(term, lang_code, is_default)
+ created += 1
+
+ print(f"Done. Created {created} files in {CONTENT_DIR}/")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/js/App.vue b/src/js/App.vue
deleted file mode 100644
index 9d77b7ca..00000000
--- a/src/js/App.vue
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/js/main.js b/src/js/main.js
deleted file mode 100644
index b98c0b88..00000000
--- a/src/js/main.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import Vue from 'vue';
-import Filters from './App.vue';
-import Multiselect from "vue-multiselect";
-
-Vue.component('multiselect', Multiselect)
-
-
-/* eslint-disable no-new */
-const app = new Vue({
- el: '#app',
- components: { Filters },
- data() {
- return {}
- }
-});
\ No newline at end of file
diff --git a/src/js/matomo-tracking.js b/src/js/matomo-tracking.js
deleted file mode 100644
index db1b7407..00000000
--- a/src/js/matomo-tracking.js
+++ /dev/null
@@ -1,36 +0,0 @@
-const matomoUrl = document
- .querySelector('script[data-id="matomo-tracking"]')
- .getAttribute('data-matomo-tracking-url');
-const matomoSiteId = document
- .querySelector('script[data-id="matomo-tracking"]')
- .getAttribute('data-matomo-tracking-id');
-
-var _paq = _paq || [];
-
-_paq.push([function() {
- var self = this;
- function getOriginalVisitorCookieTimeout() {
- var now = new Date(),
- nowTs = Math.round(now.getTime() / 1000),
- visitorInfo = self.getVisitorInfo();
- var createTs = parseInt(visitorInfo[2]);
- var cookieTimeout = 33696000; // 13 mois en secondes
- var originalTimeout = createTs + cookieTimeout - nowTs; return originalTimeout; }
- this.setVisitorCookieTimeout( getOriginalVisitorCookieTimeout() ); }]);
-/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
-_paq.push(['disableCookies']);
-_paq.push(['trackPageView']);
-_paq.push(['enableLinkTracking']);
-(function() {
- _paq.push(['setTrackerUrl', `${matomoUrl}/piwik.php`]);
- _paq.push(['setSiteId', matomoSiteId]);
-
- const d = document;
- const g = d.createElement('script');
- const s = d.getElementsByTagName('script')[0];
-
- g.type = 'text/javascript';
- g.defer = true;
- g.src = `${matomoUrl}/piwik.js`;
- s.parentNode.insertBefore(g, s);
-})();
diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png
new file mode 100644
index 00000000..929142fa
Binary files /dev/null and b/static/apple-touch-icon.png differ
diff --git a/static/img/2017/chatbot-masquerade/10b-messages.webp b/static/img/2017/chatbot-masquerade/10b-messages.webp
new file mode 100644
index 00000000..5133f733
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/10b-messages.webp differ
diff --git a/static/img/2017/chatbot-masquerade/cover.webp b/static/img/2017/chatbot-masquerade/cover.webp
new file mode 100644
index 00000000..b1973e45
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/cover.webp differ
diff --git a/static/img/2017/chatbot-masquerade/gender-neutral.webp b/static/img/2017/chatbot-masquerade/gender-neutral.webp
new file mode 100644
index 00000000..15d594cb
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/gender-neutral.webp differ
diff --git a/static/img/2017/chatbot-masquerade/kip.webp b/static/img/2017/chatbot-masquerade/kip.webp
new file mode 100644
index 00000000..504b23fe
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/kip.webp differ
diff --git a/static/img/2017/chatbot-masquerade/linguistics-2.webp b/static/img/2017/chatbot-masquerade/linguistics-2.webp
new file mode 100644
index 00000000..10d0e7f6
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/linguistics-2.webp differ
diff --git a/static/img/2017/chatbot-masquerade/linguistics.webp b/static/img/2017/chatbot-masquerade/linguistics.webp
new file mode 100644
index 00000000..c795f3a7
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/linguistics.webp differ
diff --git a/static/img/2017/chatbot-masquerade/sure-chatbot.webp b/static/img/2017/chatbot-masquerade/sure-chatbot.webp
new file mode 100644
index 00000000..a54f41a9
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/sure-chatbot.webp differ
diff --git a/static/img/2017/chatbot-masquerade/weather-bot-bug.webp b/static/img/2017/chatbot-masquerade/weather-bot-bug.webp
new file mode 100644
index 00000000..700f6f9f
Binary files /dev/null and b/static/img/2017/chatbot-masquerade/weather-bot-bug.webp differ
diff --git a/static/img/2017/distributed-networks-1/cover.jpeg b/static/img/2017/distributed-networks-1/cover.jpeg
deleted file mode 100644
index eb2373cc..00000000
Binary files a/static/img/2017/distributed-networks-1/cover.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-1/melenphone.png b/static/img/2017/distributed-networks-1/melenphone.png
deleted file mode 100644
index 2a4aa70f..00000000
Binary files a/static/img/2017/distributed-networks-1/melenphone.png and /dev/null differ
diff --git a/static/img/2017/distributed-networks-1/networks.png b/static/img/2017/distributed-networks-1/networks.png
deleted file mode 100644
index b24f4d9a..00000000
Binary files a/static/img/2017/distributed-networks-1/networks.png and /dev/null differ
diff --git a/static/img/2017/distributed-networks-1/obama-website.jpeg b/static/img/2017/distributed-networks-1/obama-website.jpeg
deleted file mode 100644
index 40dbf997..00000000
Binary files a/static/img/2017/distributed-networks-1/obama-website.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/cover.jpeg b/static/img/2017/distributed-networks-2/cover.jpeg
deleted file mode 100644
index 01cab65e..00000000
Binary files a/static/img/2017/distributed-networks-2/cover.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/figaro.jpeg b/static/img/2017/distributed-networks-2/figaro.jpeg
deleted file mode 100644
index 05fba779..00000000
Binary files a/static/img/2017/distributed-networks-2/figaro.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/hologram.jpeg b/static/img/2017/distributed-networks-2/hologram.jpeg
deleted file mode 100644
index a5fafda6..00000000
Binary files a/static/img/2017/distributed-networks-2/hologram.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/media-coverage.jpeg b/static/img/2017/distributed-networks-2/media-coverage.jpeg
deleted file mode 100644
index 4cf3793a..00000000
Binary files a/static/img/2017/distributed-networks-2/media-coverage.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/media-map.png b/static/img/2017/distributed-networks-2/media-map.png
deleted file mode 100644
index 101426af..00000000
Binary files a/static/img/2017/distributed-networks-2/media-map.png and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/polls1.jpeg b/static/img/2017/distributed-networks-2/polls1.jpeg
deleted file mode 100644
index f912d833..00000000
Binary files a/static/img/2017/distributed-networks-2/polls1.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/polls2.jpeg b/static/img/2017/distributed-networks-2/polls2.jpeg
deleted file mode 100644
index 5efb52c6..00000000
Binary files a/static/img/2017/distributed-networks-2/polls2.jpeg and /dev/null differ
diff --git a/static/img/2017/distributed-networks-2/polls3.jpeg b/static/img/2017/distributed-networks-2/polls3.jpeg
deleted file mode 100644
index 41b17f7d..00000000
Binary files a/static/img/2017/distributed-networks-2/polls3.jpeg and /dev/null differ
diff --git a/static/img/2017/eco-trail/bulle.png b/static/img/2017/eco-trail/bulle.png
deleted file mode 100644
index ea057cab..00000000
Binary files a/static/img/2017/eco-trail/bulle.png and /dev/null differ
diff --git a/static/img/2017/eco-trail/dechets.jpg b/static/img/2017/eco-trail/dechets.jpg
deleted file mode 100644
index f190516a..00000000
Binary files a/static/img/2017/eco-trail/dechets.jpg and /dev/null differ
diff --git a/static/img/2017/eco-trail/ecotrail.jpg b/static/img/2017/eco-trail/ecotrail.jpg
deleted file mode 100644
index 28419342..00000000
Binary files a/static/img/2017/eco-trail/ecotrail.jpg and /dev/null differ
diff --git a/static/img/2017/eco-trail/graph1.jpg b/static/img/2017/eco-trail/graph1.jpg
deleted file mode 100644
index bff875a3..00000000
Binary files a/static/img/2017/eco-trail/graph1.jpg and /dev/null differ
diff --git a/static/img/2017/reddit/ads-settings.webp b/static/img/2017/reddit/ads-settings.webp
new file mode 100644
index 00000000..fde341cd
Binary files /dev/null and b/static/img/2017/reddit/ads-settings.webp differ
diff --git a/static/img/2017/reddit/ads1.webp b/static/img/2017/reddit/ads1.webp
new file mode 100644
index 00000000..deeb1f6a
Binary files /dev/null and b/static/img/2017/reddit/ads1.webp differ
diff --git a/static/img/2017/reddit/ads2.webp b/static/img/2017/reddit/ads2.webp
new file mode 100644
index 00000000..736990fb
Binary files /dev/null and b/static/img/2017/reddit/ads2.webp differ
diff --git a/static/img/2017/reddit/ads3.webp b/static/img/2017/reddit/ads3.webp
new file mode 100644
index 00000000..269363b2
Binary files /dev/null and b/static/img/2017/reddit/ads3.webp differ
diff --git a/static/img/2017/reddit/ads4.webp b/static/img/2017/reddit/ads4.webp
new file mode 100644
index 00000000..6ae15f59
Binary files /dev/null and b/static/img/2017/reddit/ads4.webp differ
diff --git a/static/img/2017/reddit/alexa-reddit-2.webp b/static/img/2017/reddit/alexa-reddit-2.webp
new file mode 100644
index 00000000..9bfe4c08
Binary files /dev/null and b/static/img/2017/reddit/alexa-reddit-2.webp differ
diff --git a/static/img/2017/reddit/alexa-reddit.webp b/static/img/2017/reddit/alexa-reddit.webp
new file mode 100644
index 00000000..56bae374
Binary files /dev/null and b/static/img/2017/reddit/alexa-reddit.webp differ
diff --git a/static/img/2017/reddit/cover.png b/static/img/2017/reddit/cover.png
index 03d041f0..431ce711 100644
Binary files a/static/img/2017/reddit/cover.png and b/static/img/2017/reddit/cover.png differ
diff --git a/static/img/2017/reddit/cover.webp b/static/img/2017/reddit/cover.webp
new file mode 100644
index 00000000..24d5c7cd
Binary files /dev/null and b/static/img/2017/reddit/cover.webp differ
diff --git a/static/img/2017/reddit/frontpage.webp b/static/img/2017/reddit/frontpage.webp
new file mode 100644
index 00000000..34e4886e
Binary files /dev/null and b/static/img/2017/reddit/frontpage.webp differ
diff --git a/static/img/2017/reddit/markdown.webp b/static/img/2017/reddit/markdown.webp
new file mode 100644
index 00000000..453c8665
Binary files /dev/null and b/static/img/2017/reddit/markdown.webp differ
diff --git a/static/img/2017/reddit/mc-astro-comment.webp b/static/img/2017/reddit/mc-astro-comment.webp
new file mode 100644
index 00000000..aee4b34a
Binary files /dev/null and b/static/img/2017/reddit/mc-astro-comment.webp differ
diff --git a/static/img/2017/reddit/mc-astro-comment2.webp b/static/img/2017/reddit/mc-astro-comment2.webp
new file mode 100644
index 00000000..80f42285
Binary files /dev/null and b/static/img/2017/reddit/mc-astro-comment2.webp differ
diff --git a/static/img/2017/reddit/mc-astro.webp b/static/img/2017/reddit/mc-astro.webp
new file mode 100644
index 00000000..c7e52f03
Binary files /dev/null and b/static/img/2017/reddit/mc-astro.webp differ
diff --git a/static/img/2017/reddit/sidebar.webp b/static/img/2017/reddit/sidebar.webp
new file mode 100644
index 00000000..34c89997
Binary files /dev/null and b/static/img/2017/reddit/sidebar.webp differ
diff --git a/static/img/2017/reddit/snoo.webp b/static/img/2017/reddit/snoo.webp
new file mode 100644
index 00000000..366cdd43
Binary files /dev/null and b/static/img/2017/reddit/snoo.webp differ
diff --git a/static/img/2017/sato/1out5.webp b/static/img/2017/sato/1out5.webp
new file mode 100644
index 00000000..78b9c909
Binary files /dev/null and b/static/img/2017/sato/1out5.webp differ
diff --git a/static/img/2017/sato/2out5.webp b/static/img/2017/sato/2out5.webp
new file mode 100644
index 00000000..788ed6ef
Binary files /dev/null and b/static/img/2017/sato/2out5.webp differ
diff --git a/static/img/2017/sato/301.webp b/static/img/2017/sato/301.webp
new file mode 100644
index 00000000..f51a1dfa
Binary files /dev/null and b/static/img/2017/sato/301.webp differ
diff --git a/static/img/2017/sato/3out5.webp b/static/img/2017/sato/3out5.webp
new file mode 100644
index 00000000..41606810
Binary files /dev/null and b/static/img/2017/sato/3out5.webp differ
diff --git a/static/img/2017/sato/4out5.webp b/static/img/2017/sato/4out5.webp
new file mode 100644
index 00000000..75a5181f
Binary files /dev/null and b/static/img/2017/sato/4out5.webp differ
diff --git a/static/img/2017/sato/5out5.webp b/static/img/2017/sato/5out5.webp
new file mode 100644
index 00000000..63dc0db7
Binary files /dev/null and b/static/img/2017/sato/5out5.webp differ
diff --git a/static/img/2017/sato/Recast-AI-ahirice-sato-cryptobot-1024x158.webp b/static/img/2017/sato/Recast-AI-ahirice-sato-cryptobot-1024x158.webp
new file mode 100644
index 00000000..5e04d97f
Binary files /dev/null and b/static/img/2017/sato/Recast-AI-ahirice-sato-cryptobot-1024x158.webp differ
diff --git a/static/img/2017/sato/beforegit.webp b/static/img/2017/sato/beforegit.webp
new file mode 100644
index 00000000..3029ef1f
Binary files /dev/null and b/static/img/2017/sato/beforegit.webp differ
diff --git a/static/img/2017/sato/commandsato.webp b/static/img/2017/sato/commandsato.webp
new file mode 100644
index 00000000..70010f7e
Binary files /dev/null and b/static/img/2017/sato/commandsato.webp differ
diff --git a/static/img/2017/sato/cryptocompare-json.webp b/static/img/2017/sato/cryptocompare-json.webp
new file mode 100644
index 00000000..26411e32
Binary files /dev/null and b/static/img/2017/sato/cryptocompare-json.webp differ
diff --git a/static/img/2017/sato/cryptomissing.webp b/static/img/2017/sato/cryptomissing.webp
new file mode 100644
index 00000000..3fdbcd79
Binary files /dev/null and b/static/img/2017/sato/cryptomissing.webp differ
diff --git a/static/img/2017/sato/herokudeploy.gif b/static/img/2017/sato/herokudeploy.gif
deleted file mode 100644
index 68849cc9..00000000
Binary files a/static/img/2017/sato/herokudeploy.gif and /dev/null differ
diff --git a/static/img/2017/sato/herokudeploy.mp4 b/static/img/2017/sato/herokudeploy.mp4
new file mode 100644
index 00000000..c3ec9070
Binary files /dev/null and b/static/img/2017/sato/herokudeploy.mp4 differ
diff --git a/static/img/2017/sato/i-crypto-price.webp b/static/img/2017/sato/i-crypto-price.webp
new file mode 100644
index 00000000..2f1ed7d5
Binary files /dev/null and b/static/img/2017/sato/i-crypto-price.webp differ
diff --git a/static/img/2017/sato/integers.webp b/static/img/2017/sato/integers.webp
new file mode 100644
index 00000000..891a6f1e
Binary files /dev/null and b/static/img/2017/sato/integers.webp differ
diff --git a/static/img/2017/sato/messenger-button-1.webp b/static/img/2017/sato/messenger-button-1.webp
new file mode 100644
index 00000000..5b7086f5
Binary files /dev/null and b/static/img/2017/sato/messenger-button-1.webp differ
diff --git a/static/img/2017/sato/priceOMG.webp b/static/img/2017/sato/priceOMG.webp
new file mode 100644
index 00000000..c224cafa
Binary files /dev/null and b/static/img/2017/sato/priceOMG.webp differ
diff --git a/static/img/2017/sato/r.webp b/static/img/2017/sato/r.webp
new file mode 100644
index 00000000..fe74f1a9
Binary files /dev/null and b/static/img/2017/sato/r.webp differ
diff --git a/static/img/2017/sato/skill1.webp b/static/img/2017/sato/skill1.webp
new file mode 100644
index 00000000..ab76f788
Binary files /dev/null and b/static/img/2017/sato/skill1.webp differ
diff --git a/static/img/2017/sato/webhookcryotio.webp b/static/img/2017/sato/webhookcryotio.webp
new file mode 100644
index 00000000..fa75166a
Binary files /dev/null and b/static/img/2017/sato/webhookcryotio.webp differ
diff --git a/static/img/2017/seo-tools/backlinks.webp b/static/img/2017/seo-tools/backlinks.webp
new file mode 100644
index 00000000..3c43b1f0
Binary files /dev/null and b/static/img/2017/seo-tools/backlinks.webp differ
diff --git a/static/img/2017/seo-tools/buzzsumo-sharers.webp b/static/img/2017/seo-tools/buzzsumo-sharers.webp
new file mode 100644
index 00000000..955b3554
Binary files /dev/null and b/static/img/2017/seo-tools/buzzsumo-sharers.webp differ
diff --git a/static/img/2017/seo-tools/buzzsumo.webp b/static/img/2017/seo-tools/buzzsumo.webp
new file mode 100644
index 00000000..c84abdda
Binary files /dev/null and b/static/img/2017/seo-tools/buzzsumo.webp differ
diff --git a/static/img/2017/seo-tools/cover.webp b/static/img/2017/seo-tools/cover.webp
new file mode 100644
index 00000000..f28f223d
Binary files /dev/null and b/static/img/2017/seo-tools/cover.webp differ
diff --git a/static/img/2017/seo-tools/domain-overview.webp b/static/img/2017/seo-tools/domain-overview.webp
new file mode 100644
index 00000000..fe406390
Binary files /dev/null and b/static/img/2017/seo-tools/domain-overview.webp differ
diff --git a/static/img/2017/seo-tools/gtrends1.webp b/static/img/2017/seo-tools/gtrends1.webp
new file mode 100644
index 00000000..fcf1a3c8
Binary files /dev/null and b/static/img/2017/seo-tools/gtrends1.webp differ
diff --git a/static/img/2017/seo-tools/gtrends2.webp b/static/img/2017/seo-tools/gtrends2.webp
new file mode 100644
index 00000000..11e4dc74
Binary files /dev/null and b/static/img/2017/seo-tools/gtrends2.webp differ
diff --git a/static/img/2017/seo-tools/gtrends3.webp b/static/img/2017/seo-tools/gtrends3.webp
new file mode 100644
index 00000000..09c3c25b
Binary files /dev/null and b/static/img/2017/seo-tools/gtrends3.webp differ
diff --git a/static/img/2017/seo-tools/keyword-overview.webp b/static/img/2017/seo-tools/keyword-overview.webp
new file mode 100644
index 00000000..3495877e
Binary files /dev/null and b/static/img/2017/seo-tools/keyword-overview.webp differ
diff --git a/static/img/2017/seo-tools/relatedkw.webp b/static/img/2017/seo-tools/relatedkw.webp
new file mode 100644
index 00000000..f7416388
Binary files /dev/null and b/static/img/2017/seo-tools/relatedkw.webp differ
diff --git a/static/img/2017/seo-tools/screaming-frog.webp b/static/img/2017/seo-tools/screaming-frog.webp
new file mode 100644
index 00000000..8662de20
Binary files /dev/null and b/static/img/2017/seo-tools/screaming-frog.webp differ
diff --git a/static/img/2018/ad-model/arpu-growth.webp b/static/img/2018/ad-model/arpu-growth.webp
new file mode 100644
index 00000000..900ab4d4
Binary files /dev/null and b/static/img/2018/ad-model/arpu-growth.webp differ
diff --git a/static/img/2018/ad-model/arpu.webp b/static/img/2018/ad-model/arpu.webp
new file mode 100644
index 00000000..3dc6ffe8
Binary files /dev/null and b/static/img/2018/ad-model/arpu.webp differ
diff --git a/static/img/2018/ad-model/cover.jpeg b/static/img/2018/ad-model/cover.jpeg
index 3a2445ba..66a5108f 100644
Binary files a/static/img/2018/ad-model/cover.jpeg and b/static/img/2018/ad-model/cover.jpeg differ
diff --git a/static/img/2018/ad-model/cover.webp b/static/img/2018/ad-model/cover.webp
new file mode 100644
index 00000000..c6f15fb9
Binary files /dev/null and b/static/img/2018/ad-model/cover.webp differ
diff --git a/static/img/2018/ad-model/panopticon.webp b/static/img/2018/ad-model/panopticon.webp
new file mode 100644
index 00000000..be568dc0
Binary files /dev/null and b/static/img/2018/ad-model/panopticon.webp differ
diff --git a/static/img/2018/ad-model/revenues.webp b/static/img/2018/ad-model/revenues.webp
new file mode 100644
index 00000000..1b4e187b
Binary files /dev/null and b/static/img/2018/ad-model/revenues.webp differ
diff --git a/static/img/2018/blockchain-telco/benefits.webp b/static/img/2018/blockchain-telco/benefits.webp
new file mode 100644
index 00000000..26c0e68a
Binary files /dev/null and b/static/img/2018/blockchain-telco/benefits.webp differ
diff --git a/static/img/2018/blockchain-telco/buzzword.webp b/static/img/2018/blockchain-telco/buzzword.webp
new file mode 100644
index 00000000..274b68dd
Binary files /dev/null and b/static/img/2018/blockchain-telco/buzzword.webp differ
diff --git a/static/img/2018/blockchain-telco/civic.webp b/static/img/2018/blockchain-telco/civic.webp
new file mode 100644
index 00000000..59c68828
Binary files /dev/null and b/static/img/2018/blockchain-telco/civic.webp differ
diff --git a/static/img/2018/blockchain-telco/cover.webp b/static/img/2018/blockchain-telco/cover.webp
new file mode 100644
index 00000000..3e3f0288
Binary files /dev/null and b/static/img/2018/blockchain-telco/cover.webp differ
diff --git a/static/img/2018/blockchain-telco/dent.webp b/static/img/2018/blockchain-telco/dent.webp
new file mode 100644
index 00000000..8086168c
Binary files /dev/null and b/static/img/2018/blockchain-telco/dent.webp differ
diff --git a/static/img/2018/blockchain-telco/qlc.webp b/static/img/2018/blockchain-telco/qlc.webp
new file mode 100644
index 00000000..30a56416
Binary files /dev/null and b/static/img/2018/blockchain-telco/qlc.webp differ
diff --git a/static/img/2018/decentralisation-layman/aws.webp b/static/img/2018/decentralisation-layman/aws.webp
new file mode 100644
index 00000000..0398d9f5
Binary files /dev/null and b/static/img/2018/decentralisation-layman/aws.webp differ
diff --git a/static/img/2018/decentralisation-layman/cover.png b/static/img/2018/decentralisation-layman/cover.png
index 2448ffb7..4c57fcf3 100644
Binary files a/static/img/2018/decentralisation-layman/cover.png and b/static/img/2018/decentralisation-layman/cover.png differ
diff --git a/static/img/2018/decentralisation-layman/cover.webp b/static/img/2018/decentralisation-layman/cover.webp
new file mode 100644
index 00000000..e9c54849
Binary files /dev/null and b/static/img/2018/decentralisation-layman/cover.webp differ
diff --git a/static/img/2018/decentralisation-layman/decentralisation-quadrant.webp b/static/img/2018/decentralisation-layman/decentralisation-quadrant.webp
new file mode 100644
index 00000000..d5396f86
Binary files /dev/null and b/static/img/2018/decentralisation-layman/decentralisation-quadrant.webp differ
diff --git a/static/img/2018/decentralisation-layman/homer.webp b/static/img/2018/decentralisation-layman/homer.webp
new file mode 100644
index 00000000..53d946c4
Binary files /dev/null and b/static/img/2018/decentralisation-layman/homer.webp differ
diff --git a/static/img/2018/decentralisation-layman/industry-landscape.webp b/static/img/2018/decentralisation-layman/industry-landscape.webp
new file mode 100644
index 00000000..cef1dc26
Binary files /dev/null and b/static/img/2018/decentralisation-layman/industry-landscape.webp differ
diff --git a/static/img/2018/decentralisation-layman/politics.webp b/static/img/2018/decentralisation-layman/politics.webp
new file mode 100644
index 00000000..dd2ade0b
Binary files /dev/null and b/static/img/2018/decentralisation-layman/politics.webp differ
diff --git a/static/img/2018/decentralisation-layman/storage.gif b/static/img/2018/decentralisation-layman/storage.gif
deleted file mode 100644
index 25d213a2..00000000
Binary files a/static/img/2018/decentralisation-layman/storage.gif and /dev/null differ
diff --git a/static/img/2018/decentralisation-layman/storage.mp4 b/static/img/2018/decentralisation-layman/storage.mp4
new file mode 100644
index 00000000..cb3e309f
Binary files /dev/null and b/static/img/2018/decentralisation-layman/storage.mp4 differ
diff --git a/static/img/2018/decentralisation-layman/tangle.webp b/static/img/2018/decentralisation-layman/tangle.webp
new file mode 100644
index 00000000..91d8c640
Binary files /dev/null and b/static/img/2018/decentralisation-layman/tangle.webp differ
diff --git a/static/img/2018/demise-ns/cover.webp b/static/img/2018/demise-ns/cover.webp
new file mode 100644
index 00000000..988b9154
Binary files /dev/null and b/static/img/2018/demise-ns/cover.webp differ
diff --git a/static/img/2018/demise-ns/e-residency.webp b/static/img/2018/demise-ns/e-residency.webp
new file mode 100644
index 00000000..756b6e2e
Binary files /dev/null and b/static/img/2018/demise-ns/e-residency.webp differ
diff --git a/static/img/2018/free-services/big-data.webp b/static/img/2018/free-services/big-data.webp
new file mode 100644
index 00000000..4b03b5f0
Binary files /dev/null and b/static/img/2018/free-services/big-data.webp differ
diff --git a/static/img/2018/free-services/cover.webp b/static/img/2018/free-services/cover.webp
new file mode 100644
index 00000000..4dcaf1e6
Binary files /dev/null and b/static/img/2018/free-services/cover.webp differ
diff --git a/static/img/2018/free-services/google.webp b/static/img/2018/free-services/google.webp
new file mode 100644
index 00000000..e8827c35
Binary files /dev/null and b/static/img/2018/free-services/google.webp differ
diff --git a/static/img/2018/free-services/toolbars.webp b/static/img/2018/free-services/toolbars.webp
new file mode 100644
index 00000000..e066258b
Binary files /dev/null and b/static/img/2018/free-services/toolbars.webp differ
diff --git a/static/img/2018/hitchhikerguide/cover.jpeg b/static/img/2018/hitchhikerguide/cover.jpeg
index 41f60eb2..8c1f2849 100644
Binary files a/static/img/2018/hitchhikerguide/cover.jpeg and b/static/img/2018/hitchhikerguide/cover.jpeg differ
diff --git a/static/img/2018/hitchhikerguide/cover.webp b/static/img/2018/hitchhikerguide/cover.webp
new file mode 100644
index 00000000..11c758e5
Binary files /dev/null and b/static/img/2018/hitchhikerguide/cover.webp differ
diff --git a/static/img/2018/hitchhikerguide/distribution.webp b/static/img/2018/hitchhikerguide/distribution.webp
new file mode 100644
index 00000000..57a40350
Binary files /dev/null and b/static/img/2018/hitchhikerguide/distribution.webp differ
diff --git a/static/img/2018/hitchhikerguide/nano.gif b/static/img/2018/hitchhikerguide/nano.gif
deleted file mode 100644
index 1113c864..00000000
Binary files a/static/img/2018/hitchhikerguide/nano.gif and /dev/null differ
diff --git a/static/img/2018/hitchhikerguide/nano.mp4 b/static/img/2018/hitchhikerguide/nano.mp4
new file mode 100644
index 00000000..b2a9b101
Binary files /dev/null and b/static/img/2018/hitchhikerguide/nano.mp4 differ
diff --git a/static/img/2018/hitchhikerguide/narbonne-wp.webp b/static/img/2018/hitchhikerguide/narbonne-wp.webp
new file mode 100644
index 00000000..f169537f
Binary files /dev/null and b/static/img/2018/hitchhikerguide/narbonne-wp.webp differ
diff --git a/static/img/2018/hitchhikerguide/stellar-wp.webp b/static/img/2018/hitchhikerguide/stellar-wp.webp
new file mode 100644
index 00000000..7a076606
Binary files /dev/null and b/static/img/2018/hitchhikerguide/stellar-wp.webp differ
diff --git a/static/img/2018/hitchhikerguide/team.webp b/static/img/2018/hitchhikerguide/team.webp
new file mode 100644
index 00000000..ce917d3a
Binary files /dev/null and b/static/img/2018/hitchhikerguide/team.webp differ
diff --git a/static/img/2018/money101/1000xcut.webp b/static/img/2018/money101/1000xcut.webp
new file mode 100644
index 00000000..14074999
Binary files /dev/null and b/static/img/2018/money101/1000xcut.webp differ
diff --git a/static/img/2018/money101/bricedollar.webp b/static/img/2018/money101/bricedollar.webp
new file mode 100644
index 00000000..00bd29c9
Binary files /dev/null and b/static/img/2018/money101/bricedollar.webp differ
diff --git a/static/img/2018/money101/coins.webp b/static/img/2018/money101/coins.webp
new file mode 100644
index 00000000..2ccce6c6
Binary files /dev/null and b/static/img/2018/money101/coins.webp differ
diff --git a/static/img/2018/money101/cover.jpeg b/static/img/2018/money101/cover.jpeg
index 53ddae6c..4cb2cb01 100644
Binary files a/static/img/2018/money101/cover.jpeg and b/static/img/2018/money101/cover.jpeg differ
diff --git a/static/img/2018/money101/cover.webp b/static/img/2018/money101/cover.webp
new file mode 100644
index 00000000..65a2f7bd
Binary files /dev/null and b/static/img/2018/money101/cover.webp differ
diff --git a/static/img/2018/money101/fly.gif b/static/img/2018/money101/fly.gif
deleted file mode 100644
index 3e07e772..00000000
Binary files a/static/img/2018/money101/fly.gif and /dev/null differ
diff --git a/static/img/2018/money101/fly.mp4 b/static/img/2018/money101/fly.mp4
new file mode 100644
index 00000000..5316cbe8
Binary files /dev/null and b/static/img/2018/money101/fly.mp4 differ
diff --git a/static/img/2018/money101/fractional-reserve.webp b/static/img/2018/money101/fractional-reserve.webp
new file mode 100644
index 00000000..622393f0
Binary files /dev/null and b/static/img/2018/money101/fractional-reserve.webp differ
diff --git a/static/img/2018/money101/joker.webp b/static/img/2018/money101/joker.webp
new file mode 100644
index 00000000..8d62949c
Binary files /dev/null and b/static/img/2018/money101/joker.webp differ
diff --git a/static/img/2018/money101/print.webp b/static/img/2018/money101/print.webp
new file mode 100644
index 00000000..e35803c1
Binary files /dev/null and b/static/img/2018/money101/print.webp differ
diff --git a/static/img/2018/money101/swap.webp b/static/img/2018/money101/swap.webp
new file mode 100644
index 00000000..7c323189
Binary files /dev/null and b/static/img/2018/money101/swap.webp differ
diff --git a/static/img/2018/naas/cover.jpeg b/static/img/2018/naas/cover.jpeg
index 7861d26a..f63f605b 100644
Binary files a/static/img/2018/naas/cover.jpeg and b/static/img/2018/naas/cover.jpeg differ
diff --git a/static/img/2018/naas/cover.webp b/static/img/2018/naas/cover.webp
new file mode 100644
index 00000000..95d3a606
Binary files /dev/null and b/static/img/2018/naas/cover.webp differ
diff --git a/static/img/2018/nft/augmentors.webp b/static/img/2018/nft/augmentors.webp
new file mode 100644
index 00000000..150b0ba6
Binary files /dev/null and b/static/img/2018/nft/augmentors.webp differ
diff --git a/static/img/2018/nft/blastoise.webp b/static/img/2018/nft/blastoise.webp
new file mode 100644
index 00000000..657797f3
Binary files /dev/null and b/static/img/2018/nft/blastoise.webp differ
diff --git a/static/img/2018/nft/charizard.webp b/static/img/2018/nft/charizard.webp
new file mode 100644
index 00000000..941f419e
Binary files /dev/null and b/static/img/2018/nft/charizard.webp differ
diff --git a/static/img/2018/nft/ck-price.webp b/static/img/2018/nft/ck-price.webp
new file mode 100644
index 00000000..4e7cf3e2
Binary files /dev/null and b/static/img/2018/nft/ck-price.webp differ
diff --git a/static/img/2018/nft/cover.png b/static/img/2018/nft/cover.png
index 8450e609..4e1cf669 100644
Binary files a/static/img/2018/nft/cover.png and b/static/img/2018/nft/cover.png differ
diff --git a/static/img/2018/nft/cover.webp b/static/img/2018/nft/cover.webp
new file mode 100644
index 00000000..2d96bffb
Binary files /dev/null and b/static/img/2018/nft/cover.webp differ
diff --git a/static/img/2018/nft/cryptokitties.webp b/static/img/2018/nft/cryptokitties.webp
new file mode 100644
index 00000000..f051358d
Binary files /dev/null and b/static/img/2018/nft/cryptokitties.webp differ
diff --git a/static/img/2018/nft/erc1155.webp b/static/img/2018/nft/erc1155.webp
new file mode 100644
index 00000000..ab4c2cd0
Binary files /dev/null and b/static/img/2018/nft/erc1155.webp differ
diff --git a/static/img/2018/nft/godsunchained.webp b/static/img/2018/nft/godsunchained.webp
new file mode 100644
index 00000000..b4fe013d
Binary files /dev/null and b/static/img/2018/nft/godsunchained.webp differ
diff --git a/static/img/2018/stablecoins/buy-bitcoin.webp b/static/img/2018/stablecoins/buy-bitcoin.webp
new file mode 100644
index 00000000..bda6f435
Binary files /dev/null and b/static/img/2018/stablecoins/buy-bitcoin.webp differ
diff --git a/static/img/2018/stablecoins/cedi.webp b/static/img/2018/stablecoins/cedi.webp
new file mode 100644
index 00000000..6d4b5b28
Binary files /dev/null and b/static/img/2018/stablecoins/cedi.webp differ
diff --git a/static/img/2018/stablecoins/cover.jpeg b/static/img/2018/stablecoins/cover.jpeg
index 748bc3f6..aa87c9b3 100644
Binary files a/static/img/2018/stablecoins/cover.jpeg and b/static/img/2018/stablecoins/cover.jpeg differ
diff --git a/static/img/2018/stablecoins/cover.webp b/static/img/2018/stablecoins/cover.webp
new file mode 100644
index 00000000..7ef4c012
Binary files /dev/null and b/static/img/2018/stablecoins/cover.webp differ
diff --git a/static/img/2018/stablecoins/doge.webp b/static/img/2018/stablecoins/doge.webp
new file mode 100644
index 00000000..f3fe45d3
Binary files /dev/null and b/static/img/2018/stablecoins/doge.webp differ
diff --git a/static/img/2018/stablecoins/inflation.webp b/static/img/2018/stablecoins/inflation.webp
new file mode 100644
index 00000000..7be5b738
Binary files /dev/null and b/static/img/2018/stablecoins/inflation.webp differ
diff --git a/static/img/2018/user-privacy/adblock-fr.gif b/static/img/2018/user-privacy/adblock-fr.gif
deleted file mode 100644
index 2d3f4968..00000000
Binary files a/static/img/2018/user-privacy/adblock-fr.gif and /dev/null differ
diff --git a/static/img/2018/user-privacy/adblock-fr.mp4 b/static/img/2018/user-privacy/adblock-fr.mp4
new file mode 100644
index 00000000..3158d6d7
Binary files /dev/null and b/static/img/2018/user-privacy/adblock-fr.mp4 differ
diff --git a/static/img/2018/user-privacy/cover.jpeg b/static/img/2018/user-privacy/cover.jpeg
index 61c98e0a..c8d40217 100644
Binary files a/static/img/2018/user-privacy/cover.jpeg and b/static/img/2018/user-privacy/cover.jpeg differ
diff --git a/static/img/2018/user-privacy/cover.webp b/static/img/2018/user-privacy/cover.webp
new file mode 100644
index 00000000..14b811dd
Binary files /dev/null and b/static/img/2018/user-privacy/cover.webp differ
diff --git a/static/img/2018/user-privacy/pixel.webp b/static/img/2018/user-privacy/pixel.webp
new file mode 100644
index 00000000..56c709e2
Binary files /dev/null and b/static/img/2018/user-privacy/pixel.webp differ
diff --git a/static/img/2018/user-privacy/privacy-badger.webp b/static/img/2018/user-privacy/privacy-badger.webp
new file mode 100644
index 00000000..01f06327
Binary files /dev/null and b/static/img/2018/user-privacy/privacy-badger.webp differ
diff --git a/static/img/2018/user-privacy/privacy.webp b/static/img/2018/user-privacy/privacy.webp
new file mode 100644
index 00000000..b7c7f1fc
Binary files /dev/null and b/static/img/2018/user-privacy/privacy.webp differ
diff --git a/static/img/2018/user-privacy/trackers.webp b/static/img/2018/user-privacy/trackers.webp
new file mode 100644
index 00000000..cdb946b9
Binary files /dev/null and b/static/img/2018/user-privacy/trackers.webp differ
diff --git a/static/img/2019/attention-economy/60s.webp b/static/img/2019/attention-economy/60s.webp
new file mode 100644
index 00000000..f0481816
Binary files /dev/null and b/static/img/2019/attention-economy/60s.webp differ
diff --git a/static/img/2019/attention-economy/cover.jpeg b/static/img/2019/attention-economy/cover.jpeg
index f3b42b2a..8626c8d8 100644
Binary files a/static/img/2019/attention-economy/cover.jpeg and b/static/img/2019/attention-economy/cover.jpeg differ
diff --git a/static/img/2019/attention-economy/cover.webp b/static/img/2019/attention-economy/cover.webp
new file mode 100644
index 00000000..62423bb8
Binary files /dev/null and b/static/img/2019/attention-economy/cover.webp differ
diff --git a/static/img/2019/attention-economy/google-updates.webp b/static/img/2019/attention-economy/google-updates.webp
new file mode 100644
index 00000000..392a910b
Binary files /dev/null and b/static/img/2019/attention-economy/google-updates.webp differ
diff --git a/static/img/2019/attention-economy/youtube-kid.webp b/static/img/2019/attention-economy/youtube-kid.webp
new file mode 100644
index 00000000..91b2a854
Binary files /dev/null and b/static/img/2019/attention-economy/youtube-kid.webp differ
diff --git a/static/img/2019/dark-patterns/abtesting.webp b/static/img/2019/dark-patterns/abtesting.webp
new file mode 100644
index 00000000..008fb30c
Binary files /dev/null and b/static/img/2019/dark-patterns/abtesting.webp differ
diff --git a/static/img/2019/dark-patterns/adblocker-guilt-trip.webp b/static/img/2019/dark-patterns/adblocker-guilt-trip.webp
new file mode 100644
index 00000000..4cf8866d
Binary files /dev/null and b/static/img/2019/dark-patterns/adblocker-guilt-trip.webp differ
diff --git a/static/img/2019/dark-patterns/bat.webp b/static/img/2019/dark-patterns/bat.webp
new file mode 100644
index 00000000..dffe838b
Binary files /dev/null and b/static/img/2019/dark-patterns/bat.webp differ
diff --git a/static/img/2019/dark-patterns/cover.jpeg b/static/img/2019/dark-patterns/cover.jpeg
index 63222120..718851fe 100644
Binary files a/static/img/2019/dark-patterns/cover.jpeg and b/static/img/2019/dark-patterns/cover.jpeg differ
diff --git a/static/img/2019/dark-patterns/cover.webp b/static/img/2019/dark-patterns/cover.webp
new file mode 100644
index 00000000..45e9dca4
Binary files /dev/null and b/static/img/2019/dark-patterns/cover.webp differ
diff --git a/static/img/2019/dark-patterns/trick-q.webp b/static/img/2019/dark-patterns/trick-q.webp
new file mode 100644
index 00000000..adf74d2f
Binary files /dev/null and b/static/img/2019/dark-patterns/trick-q.webp differ
diff --git a/static/img/2019/deep-work/cover.jpeg b/static/img/2019/deep-work/cover.jpeg
index 746e9859..47720a1c 100644
Binary files a/static/img/2019/deep-work/cover.jpeg and b/static/img/2019/deep-work/cover.jpeg differ
diff --git a/static/img/2019/deep-work/cover.webp b/static/img/2019/deep-work/cover.webp
new file mode 100644
index 00000000..5f189d4a
Binary files /dev/null and b/static/img/2019/deep-work/cover.webp differ
diff --git a/static/img/2019/deep-work/deepwork-book.webp b/static/img/2019/deep-work/deepwork-book.webp
new file mode 100644
index 00000000..c8a0912b
Binary files /dev/null and b/static/img/2019/deep-work/deepwork-book.webp differ
diff --git a/static/img/2019/deep-work/pomodoro.webp b/static/img/2019/deep-work/pomodoro.webp
new file mode 100644
index 00000000..576fc011
Binary files /dev/null and b/static/img/2019/deep-work/pomodoro.webp differ
diff --git a/static/img/2019/deep-work/search-operators.webp b/static/img/2019/deep-work/search-operators.webp
new file mode 100644
index 00000000..15b60dda
Binary files /dev/null and b/static/img/2019/deep-work/search-operators.webp differ
diff --git a/static/img/2019/staticweb/CircleCI.webp b/static/img/2019/staticweb/CircleCI.webp
new file mode 100644
index 00000000..e33a02c3
Binary files /dev/null and b/static/img/2019/staticweb/CircleCI.webp differ
diff --git a/static/img/2019/staticweb/codeship.webp b/static/img/2019/staticweb/codeship.webp
new file mode 100644
index 00000000..7615e400
Binary files /dev/null and b/static/img/2019/staticweb/codeship.webp differ
diff --git a/static/img/2019/staticweb/forestry-screen.webp b/static/img/2019/staticweb/forestry-screen.webp
new file mode 100644
index 00000000..5aaebf59
Binary files /dev/null and b/static/img/2019/staticweb/forestry-screen.webp differ
diff --git a/static/img/2019/staticweb/forestry.webp b/static/img/2019/staticweb/forestry.webp
new file mode 100644
index 00000000..3525e7b7
Binary files /dev/null and b/static/img/2019/staticweb/forestry.webp differ
diff --git a/static/img/2019/staticweb/gatsby.webp b/static/img/2019/staticweb/gatsby.webp
new file mode 100644
index 00000000..0fee2633
Binary files /dev/null and b/static/img/2019/staticweb/gatsby.webp differ
diff --git a/static/img/2019/staticweb/gitbook-screen.webp b/static/img/2019/staticweb/gitbook-screen.webp
new file mode 100644
index 00000000..9e2ee262
Binary files /dev/null and b/static/img/2019/staticweb/gitbook-screen.webp differ
diff --git a/static/img/2019/staticweb/hexo.webp b/static/img/2019/staticweb/hexo.webp
new file mode 100644
index 00000000..4b89862d
Binary files /dev/null and b/static/img/2019/staticweb/hexo.webp differ
diff --git a/static/img/2019/staticweb/hugo.webp b/static/img/2019/staticweb/hugo.webp
new file mode 100644
index 00000000..2b3d3d81
Binary files /dev/null and b/static/img/2019/staticweb/hugo.webp differ
diff --git a/static/img/2019/staticweb/jamstack.webp b/static/img/2019/staticweb/jamstack.webp
new file mode 100644
index 00000000..3a35eb3c
Binary files /dev/null and b/static/img/2019/staticweb/jamstack.webp differ
diff --git a/static/img/2019/staticweb/jekyll.webp b/static/img/2019/staticweb/jekyll.webp
new file mode 100644
index 00000000..ece3acde
Binary files /dev/null and b/static/img/2019/staticweb/jekyll.webp differ
diff --git a/static/img/2019/staticweb/mediumeditor.webp b/static/img/2019/staticweb/mediumeditor.webp
new file mode 100644
index 00000000..acd6269c
Binary files /dev/null and b/static/img/2019/staticweb/mediumeditor.webp differ
diff --git a/static/img/2019/staticweb/netlify.webp b/static/img/2019/staticweb/netlify.webp
new file mode 100644
index 00000000..16aba791
Binary files /dev/null and b/static/img/2019/staticweb/netlify.webp differ
diff --git a/static/img/2019/staticweb/nyt-bloated.webp b/static/img/2019/staticweb/nyt-bloated.webp
new file mode 100644
index 00000000..54e58bfb
Binary files /dev/null and b/static/img/2019/staticweb/nyt-bloated.webp differ
diff --git a/static/img/2019/staticweb/nyt-light.webp b/static/img/2019/staticweb/nyt-light.webp
new file mode 100644
index 00000000..a25389b9
Binary files /dev/null and b/static/img/2019/staticweb/nyt-light.webp differ
diff --git a/static/img/2019/staticweb/pagebloat.webp b/static/img/2019/staticweb/pagebloat.webp
new file mode 100644
index 00000000..d849c561
Binary files /dev/null and b/static/img/2019/staticweb/pagebloat.webp differ
diff --git a/static/img/2019/staticweb/pelican.webp b/static/img/2019/staticweb/pelican.webp
new file mode 100644
index 00000000..5165bf40
Binary files /dev/null and b/static/img/2019/staticweb/pelican.webp differ
diff --git a/static/img/2019/staticweb/searchconsole.webp b/static/img/2019/staticweb/searchconsole.webp
new file mode 100644
index 00000000..f98a3f30
Binary files /dev/null and b/static/img/2019/staticweb/searchconsole.webp differ
diff --git a/static/img/2019/staticweb/semaphore.webp b/static/img/2019/staticweb/semaphore.webp
new file mode 100644
index 00000000..0955ce5a
Binary files /dev/null and b/static/img/2019/staticweb/semaphore.webp differ
diff --git a/static/img/2019/staticweb/vapid.webp b/static/img/2019/staticweb/vapid.webp
new file mode 100644
index 00000000..d8c0adf0
Binary files /dev/null and b/static/img/2019/staticweb/vapid.webp differ
diff --git a/static/img/2019/technocentrism/cover.jpeg b/static/img/2019/technocentrism/cover.jpeg
index d2ffb010..87999e91 100644
Binary files a/static/img/2019/technocentrism/cover.jpeg and b/static/img/2019/technocentrism/cover.jpeg differ
diff --git a/static/img/2019/technocentrism/cover.webp b/static/img/2019/technocentrism/cover.webp
new file mode 100644
index 00000000..e334eed9
Binary files /dev/null and b/static/img/2019/technocentrism/cover.webp differ
diff --git a/static/img/2020/algorithmic-stablecoins/cover.png b/static/img/2020/algorithmic-stablecoins/cover.png
index f40e06cc..303deb43 100644
Binary files a/static/img/2020/algorithmic-stablecoins/cover.png and b/static/img/2020/algorithmic-stablecoins/cover.png differ
diff --git a/static/img/2020/algorithmic-stablecoins/cover.webp b/static/img/2020/algorithmic-stablecoins/cover.webp
new file mode 100644
index 00000000..18c213a4
Binary files /dev/null and b/static/img/2020/algorithmic-stablecoins/cover.webp differ
diff --git a/static/img/2020/algorithmic-stablecoins/dsd-meme.webp b/static/img/2020/algorithmic-stablecoins/dsd-meme.webp
new file mode 100644
index 00000000..eddd9eb6
Binary files /dev/null and b/static/img/2020/algorithmic-stablecoins/dsd-meme.webp differ
diff --git a/static/img/2020/algorithmic-stablecoins/dsd-mktcap.webp b/static/img/2020/algorithmic-stablecoins/dsd-mktcap.webp
new file mode 100644
index 00000000..dcf58ecc
Binary files /dev/null and b/static/img/2020/algorithmic-stablecoins/dsd-mktcap.webp differ
diff --git a/static/img/2020/bankless-defi-lunches/earning-table.webp b/static/img/2020/bankless-defi-lunches/earning-table.webp
new file mode 100644
index 00000000..bf5e3760
Binary files /dev/null and b/static/img/2020/bankless-defi-lunches/earning-table.webp differ
diff --git a/static/img/2020/bankless-defi-lunches/paying.webp b/static/img/2020/bankless-defi-lunches/paying.webp
new file mode 100644
index 00000000..e9fae8c2
Binary files /dev/null and b/static/img/2020/bankless-defi-lunches/paying.webp differ
diff --git a/static/img/2020/bankless-defi-lunches/wallet.webp b/static/img/2020/bankless-defi-lunches/wallet.webp
new file mode 100644
index 00000000..68a79ec7
Binary files /dev/null and b/static/img/2020/bankless-defi-lunches/wallet.webp differ
diff --git a/static/img/2020/defi-beyond-finance/banklessfr-nft.mp4 b/static/img/2020/defi-beyond-finance/banklessfr-nft.mp4
new file mode 100644
index 00000000..68658b66
Binary files /dev/null and b/static/img/2020/defi-beyond-finance/banklessfr-nft.mp4 differ
diff --git a/static/img/2020/defi-beyond-finance/cover.webp b/static/img/2020/defi-beyond-finance/cover.webp
new file mode 100644
index 00000000..87711ab0
Binary files /dev/null and b/static/img/2020/defi-beyond-finance/cover.webp differ
diff --git a/static/img/2020/defi-beyond-finance/defi-legos.webp b/static/img/2020/defi-beyond-finance/defi-legos.webp
new file mode 100644
index 00000000..c999f25b
Binary files /dev/null and b/static/img/2020/defi-beyond-finance/defi-legos.webp differ
diff --git a/static/img/2020/defi-beyond-finance/gitcoin-grants.webp b/static/img/2020/defi-beyond-finance/gitcoin-grants.webp
new file mode 100644
index 00000000..2ec5e0e9
Binary files /dev/null and b/static/img/2020/defi-beyond-finance/gitcoin-grants.webp differ
diff --git a/static/img/2020/defi-beyond-finance/the-daily-gwei-fr.mp4 b/static/img/2020/defi-beyond-finance/the-daily-gwei-fr.mp4
new file mode 100644
index 00000000..539905db
Binary files /dev/null and b/static/img/2020/defi-beyond-finance/the-daily-gwei-fr.mp4 differ
diff --git a/static/img/2020/defi-farmer-toolbox/DEX.webp b/static/img/2020/defi-farmer-toolbox/DEX.webp
new file mode 100644
index 00000000..89e64de7
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/DEX.webp differ
diff --git a/static/img/2020/defi-farmer-toolbox/cover-fr.jpeg b/static/img/2020/defi-farmer-toolbox/cover-fr.jpeg
index 0f827845..0cc4a637 100644
Binary files a/static/img/2020/defi-farmer-toolbox/cover-fr.jpeg and b/static/img/2020/defi-farmer-toolbox/cover-fr.jpeg differ
diff --git a/static/img/2020/defi-farmer-toolbox/cover-fr.webp b/static/img/2020/defi-farmer-toolbox/cover-fr.webp
new file mode 100644
index 00000000..de6003f1
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/cover-fr.webp differ
diff --git a/static/img/2020/defi-farmer-toolbox/cover.jpeg b/static/img/2020/defi-farmer-toolbox/cover.jpeg
index 79daf580..c7bdefad 100644
Binary files a/static/img/2020/defi-farmer-toolbox/cover.jpeg and b/static/img/2020/defi-farmer-toolbox/cover.jpeg differ
diff --git a/static/img/2020/defi-farmer-toolbox/cover.webp b/static/img/2020/defi-farmer-toolbox/cover.webp
new file mode 100644
index 00000000..76255e95
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/cover.webp differ
diff --git a/static/img/2020/defi-farmer-toolbox/degen.webp b/static/img/2020/defi-farmer-toolbox/degen.webp
new file mode 100644
index 00000000..03035774
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/degen.webp differ
diff --git a/static/img/2020/defi-farmer-toolbox/monolith.webp b/static/img/2020/defi-farmer-toolbox/monolith.webp
new file mode 100644
index 00000000..a003e77f
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/monolith.webp differ
diff --git a/static/img/2020/defi-farmer-toolbox/synthetix-liquidity-mining.webp b/static/img/2020/defi-farmer-toolbox/synthetix-liquidity-mining.webp
new file mode 100644
index 00000000..80b3de8d
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/synthetix-liquidity-mining.webp differ
diff --git a/static/img/2020/defi-farmer-toolbox/zapper-fi.webp b/static/img/2020/defi-farmer-toolbox/zapper-fi.webp
new file mode 100644
index 00000000..00faca4d
Binary files /dev/null and b/static/img/2020/defi-farmer-toolbox/zapper-fi.webp differ
diff --git a/static/img/2020/defi-moneygames/cover.webp b/static/img/2020/defi-moneygames/cover.webp
new file mode 100644
index 00000000..8fff6f00
Binary files /dev/null and b/static/img/2020/defi-moneygames/cover.webp differ
diff --git a/static/img/2020/defi-moneygames/pasta-deathloop.webp b/static/img/2020/defi-moneygames/pasta-deathloop.webp
new file mode 100644
index 00000000..18a53241
Binary files /dev/null and b/static/img/2020/defi-moneygames/pasta-deathloop.webp differ
diff --git a/static/img/2020/defi-moneygames/yfv.webp b/static/img/2020/defi-moneygames/yfv.webp
new file mode 100644
index 00000000..7761d009
Binary files /dev/null and b/static/img/2020/defi-moneygames/yfv.webp differ
diff --git a/static/img/2020/defi-picks-1/alpha-homora-aave.webp b/static/img/2020/defi-picks-1/alpha-homora-aave.webp
new file mode 100644
index 00000000..154dc3ba
Binary files /dev/null and b/static/img/2020/defi-picks-1/alpha-homora-aave.webp differ
diff --git a/static/img/2020/defi-picks-1/bas-boardroom.webp b/static/img/2020/defi-picks-1/bas-boardroom.webp
new file mode 100644
index 00000000..edaa54bf
Binary files /dev/null and b/static/img/2020/defi-picks-1/bas-boardroom.webp differ
diff --git a/static/img/2020/defi-picks-2/harvest-idle-finance.webp b/static/img/2020/defi-picks-2/harvest-idle-finance.webp
new file mode 100644
index 00000000..26e96613
Binary files /dev/null and b/static/img/2020/defi-picks-2/harvest-idle-finance.webp differ
diff --git a/static/img/2020/defi-picks-2/powerpool-yeti.webp b/static/img/2020/defi-picks-2/powerpool-yeti.webp
new file mode 100644
index 00000000..2a57d012
Binary files /dev/null and b/static/img/2020/defi-picks-2/powerpool-yeti.webp differ
diff --git a/static/img/2020/definancial-services-guide/aavewatch.webp b/static/img/2020/definancial-services-guide/aavewatch.webp
new file mode 100644
index 00000000..b07563cd
Binary files /dev/null and b/static/img/2020/definancial-services-guide/aavewatch.webp differ
diff --git a/static/img/2020/definancial-services-guide/cover-fr.resized.webp b/static/img/2020/definancial-services-guide/cover-fr.resized.webp
new file mode 100644
index 00000000..c4e516f2
Binary files /dev/null and b/static/img/2020/definancial-services-guide/cover-fr.resized.webp differ
diff --git a/static/img/2020/definancial-services-guide/cover-fr.webp b/static/img/2020/definancial-services-guide/cover-fr.webp
new file mode 100644
index 00000000..413c335b
Binary files /dev/null and b/static/img/2020/definancial-services-guide/cover-fr.webp differ
diff --git a/static/img/2020/definancial-services-guide/cover.resized.webp b/static/img/2020/definancial-services-guide/cover.resized.webp
new file mode 100644
index 00000000..030c89eb
Binary files /dev/null and b/static/img/2020/definancial-services-guide/cover.resized.webp differ
diff --git a/static/img/2020/definancial-services-guide/cover.webp b/static/img/2020/definancial-services-guide/cover.webp
new file mode 100644
index 00000000..e5049158
Binary files /dev/null and b/static/img/2020/definancial-services-guide/cover.webp differ
diff --git a/static/img/2020/definancial-services-guide/defiscore.webp b/static/img/2020/definancial-services-guide/defiscore.webp
new file mode 100644
index 00000000..82a5ac8f
Binary files /dev/null and b/static/img/2020/definancial-services-guide/defiscore.webp differ
diff --git a/static/img/2020/definancial-services-guide/gas-station.webp b/static/img/2020/definancial-services-guide/gas-station.webp
new file mode 100644
index 00000000..45a98894
Binary files /dev/null and b/static/img/2020/definancial-services-guide/gas-station.webp differ
diff --git a/static/img/2020/definancial-services-guide/idle-dai.webp b/static/img/2020/definancial-services-guide/idle-dai.webp
new file mode 100644
index 00000000..747e5a71
Binary files /dev/null and b/static/img/2020/definancial-services-guide/idle-dai.webp differ
diff --git a/static/img/2020/definancial-services-guide/nothing.webp b/static/img/2020/definancial-services-guide/nothing.webp
new file mode 100644
index 00000000..e2a61000
Binary files /dev/null and b/static/img/2020/definancial-services-guide/nothing.webp differ
diff --git a/static/img/2020/definancial-services-guide/pt-sponsored.webp b/static/img/2020/definancial-services-guide/pt-sponsored.webp
new file mode 100644
index 00000000..262bfbd9
Binary files /dev/null and b/static/img/2020/definancial-services-guide/pt-sponsored.webp differ
diff --git a/static/img/2020/definancial-services-guide/realt.webp b/static/img/2020/definancial-services-guide/realt.webp
new file mode 100644
index 00000000..8ee48abd
Binary files /dev/null and b/static/img/2020/definancial-services-guide/realt.webp differ
diff --git a/static/img/2020/definancial-services-guide/subh/1-stablecoin-yield.webp b/static/img/2020/definancial-services-guide/subh/1-stablecoin-yield.webp
new file mode 100644
index 00000000..961bd269
Binary files /dev/null and b/static/img/2020/definancial-services-guide/subh/1-stablecoin-yield.webp differ
diff --git a/static/img/2020/definancial-services-guide/subh/2-tokenised-real-estate.webp b/static/img/2020/definancial-services-guide/subh/2-tokenised-real-estate.webp
new file mode 100644
index 00000000..2d89750f
Binary files /dev/null and b/static/img/2020/definancial-services-guide/subh/2-tokenised-real-estate.webp differ
diff --git a/static/img/2020/definancial-services-guide/subh/3-tokensets.webp b/static/img/2020/definancial-services-guide/subh/3-tokensets.webp
new file mode 100644
index 00000000..db864c14
Binary files /dev/null and b/static/img/2020/definancial-services-guide/subh/3-tokensets.webp differ
diff --git a/static/img/2020/definancial-services-guide/subh/4-erc20-yields.webp b/static/img/2020/definancial-services-guide/subh/4-erc20-yields.webp
new file mode 100644
index 00000000..3d8e8d98
Binary files /dev/null and b/static/img/2020/definancial-services-guide/subh/4-erc20-yields.webp differ
diff --git a/static/img/2020/definancial-services-guide/subh/5-synthetix.webp b/static/img/2020/definancial-services-guide/subh/5-synthetix.webp
new file mode 100644
index 00000000..c55ad9bb
Binary files /dev/null and b/static/img/2020/definancial-services-guide/subh/5-synthetix.webp differ
diff --git a/static/img/2020/definancial-services-guide/subh/6-liquidity-provider.webp b/static/img/2020/definancial-services-guide/subh/6-liquidity-provider.webp
new file mode 100644
index 00000000..24794f0f
Binary files /dev/null and b/static/img/2020/definancial-services-guide/subh/6-liquidity-provider.webp differ
diff --git a/static/img/2020/definancial-services-guide/tokenviz.webp b/static/img/2020/definancial-services-guide/tokenviz.webp
new file mode 100644
index 00000000..559c5e88
Binary files /dev/null and b/static/img/2020/definancial-services-guide/tokenviz.webp differ
diff --git a/static/img/2020/definancial-services-guide/yieldburger.webp b/static/img/2020/definancial-services-guide/yieldburger.webp
new file mode 100644
index 00000000..90a260d4
Binary files /dev/null and b/static/img/2020/definancial-services-guide/yieldburger.webp differ
diff --git a/static/img/2020/definancial-services-guide/yieldkebab.webp b/static/img/2020/definancial-services-guide/yieldkebab.webp
new file mode 100644
index 00000000..279e6762
Binary files /dev/null and b/static/img/2020/definancial-services-guide/yieldkebab.webp differ
diff --git a/static/img/2020/freecoffees/5DAI.webp b/static/img/2020/freecoffees/5DAI.webp
new file mode 100644
index 00000000..ad7d09fd
Binary files /dev/null and b/static/img/2020/freecoffees/5DAI.webp differ
diff --git a/static/img/2020/freecoffees/card.webp b/static/img/2020/freecoffees/card.webp
new file mode 100644
index 00000000..2acd6228
Binary files /dev/null and b/static/img/2020/freecoffees/card.webp differ
diff --git a/static/img/2020/freecoffees/cover.webp b/static/img/2020/freecoffees/cover.webp
new file mode 100644
index 00000000..ca322472
Binary files /dev/null and b/static/img/2020/freecoffees/cover.webp differ
diff --git a/static/img/2020/freecoffees/defiscore.webp b/static/img/2020/freecoffees/defiscore.webp
new file mode 100644
index 00000000..09f2011a
Binary files /dev/null and b/static/img/2020/freecoffees/defiscore.webp differ
diff --git a/static/img/2020/great-defi-filter/cover.webp b/static/img/2020/great-defi-filter/cover.webp
new file mode 100644
index 00000000..3efea39f
Binary files /dev/null and b/static/img/2020/great-defi-filter/cover.webp differ
diff --git a/static/img/2020/hello-world/infrastructure-fr.webp b/static/img/2020/hello-world/infrastructure-fr.webp
new file mode 100644
index 00000000..5ca4d7fd
Binary files /dev/null and b/static/img/2020/hello-world/infrastructure-fr.webp differ
diff --git a/static/img/2020/hello-world/infrastructure.webp b/static/img/2020/hello-world/infrastructure.webp
new file mode 100644
index 00000000..8940ba4d
Binary files /dev/null and b/static/img/2020/hello-world/infrastructure.webp differ
diff --git a/static/img/2020/hello-world/privacy-badger.webp b/static/img/2020/hello-world/privacy-badger.webp
new file mode 100644
index 00000000..8a3aac9e
Binary files /dev/null and b/static/img/2020/hello-world/privacy-badger.webp differ
diff --git a/static/img/2020/leveraging-ETH/curve-dai-premium.webp b/static/img/2020/leveraging-ETH/curve-dai-premium.webp
new file mode 100644
index 00000000..6456d805
Binary files /dev/null and b/static/img/2020/leveraging-ETH/curve-dai-premium.webp differ
diff --git a/static/img/2020/leveraging-ETH/defisaver-automation.webp b/static/img/2020/leveraging-ETH/defisaver-automation.webp
new file mode 100644
index 00000000..3e110f5d
Binary files /dev/null and b/static/img/2020/leveraging-ETH/defisaver-automation.webp differ
diff --git a/static/img/2020/leveraging-ETH/furucombo.webp b/static/img/2020/leveraging-ETH/furucombo.webp
new file mode 100644
index 00000000..fdc9024a
Binary files /dev/null and b/static/img/2020/leveraging-ETH/furucombo.webp differ
diff --git a/static/img/2020/leveraging-ETH/leveraging-ETH-fr.png b/static/img/2020/leveraging-ETH/leveraging-ETH-fr.png
index 9bdd6b3a..10640f4b 100644
Binary files a/static/img/2020/leveraging-ETH/leveraging-ETH-fr.png and b/static/img/2020/leveraging-ETH/leveraging-ETH-fr.png differ
diff --git a/static/img/2020/leveraging-ETH/leveraging-ETH-fr.webp b/static/img/2020/leveraging-ETH/leveraging-ETH-fr.webp
new file mode 100644
index 00000000..7af9420c
Binary files /dev/null and b/static/img/2020/leveraging-ETH/leveraging-ETH-fr.webp differ
diff --git a/static/img/2020/leveraging-ETH/leveraging-ETH.png b/static/img/2020/leveraging-ETH/leveraging-ETH.png
index 37ecee3d..4af602b6 100644
Binary files a/static/img/2020/leveraging-ETH/leveraging-ETH.png and b/static/img/2020/leveraging-ETH/leveraging-ETH.png differ
diff --git a/static/img/2020/leveraging-ETH/leveraging-ETH.webp b/static/img/2020/leveraging-ETH/leveraging-ETH.webp
new file mode 100644
index 00000000..451106fb
Binary files /dev/null and b/static/img/2020/leveraging-ETH/leveraging-ETH.webp differ
diff --git a/static/img/2020/lien-finance/cover.webp b/static/img/2020/lien-finance/cover.webp
new file mode 100644
index 00000000..42006695
Binary files /dev/null and b/static/img/2020/lien-finance/cover.webp differ
diff --git a/static/img/2020/lien-finance/eth-flow.webp b/static/img/2020/lien-finance/eth-flow.webp
new file mode 100644
index 00000000..d2e3970f
Binary files /dev/null and b/static/img/2020/lien-finance/eth-flow.webp differ
diff --git a/static/img/2020/lien-finance/eth-sbt-lbt.webp b/static/img/2020/lien-finance/eth-sbt-lbt.webp
new file mode 100644
index 00000000..388e2f4b
Binary files /dev/null and b/static/img/2020/lien-finance/eth-sbt-lbt.webp differ
diff --git a/static/img/2020/monolith-metamask-etherscan/1-import.gif b/static/img/2020/monolith-metamask-etherscan/1-import.gif
deleted file mode 100644
index f7c0f673..00000000
Binary files a/static/img/2020/monolith-metamask-etherscan/1-import.gif and /dev/null differ
diff --git a/static/img/2020/monolith-metamask-etherscan/2-owner-address.png b/static/img/2020/monolith-metamask-etherscan/2-owner-address.png
deleted file mode 100644
index 1da76991..00000000
Binary files a/static/img/2020/monolith-metamask-etherscan/2-owner-address.png and /dev/null differ
diff --git a/static/img/2020/monolith-metamask-etherscan/3-trouver-son-owner.jpeg b/static/img/2020/monolith-metamask-etherscan/3-trouver-son-owner.jpeg
deleted file mode 100644
index 2e979231..00000000
Binary files a/static/img/2020/monolith-metamask-etherscan/3-trouver-son-owner.jpeg and /dev/null differ
diff --git a/static/img/2020/monolith-metamask-etherscan/4-authentication.gif b/static/img/2020/monolith-metamask-etherscan/4-authentication.gif
deleted file mode 100644
index 3a0bf168..00000000
Binary files a/static/img/2020/monolith-metamask-etherscan/4-authentication.gif and /dev/null differ
diff --git a/static/img/2020/monolith-metamask-etherscan/5-transaction.gif b/static/img/2020/monolith-metamask-etherscan/5-transaction.gif
deleted file mode 100644
index dd3f332f..00000000
Binary files a/static/img/2020/monolith-metamask-etherscan/5-transaction.gif and /dev/null differ
diff --git a/static/img/2020/monolith-metamask-etherscan/cover.jpeg b/static/img/2020/monolith-metamask-etherscan/cover.jpeg
deleted file mode 100644
index 6f2a129d..00000000
Binary files a/static/img/2020/monolith-metamask-etherscan/cover.jpeg and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/1-welcome.png b/static/img/2020/monolith-prise-en-main/1-welcome.png
deleted file mode 100644
index 7a86faa7..00000000
Binary files a/static/img/2020/monolith-prise-en-main/1-welcome.png and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/2-backup.png b/static/img/2020/monolith-prise-en-main/2-backup.png
deleted file mode 100644
index f9891956..00000000
Binary files a/static/img/2020/monolith-prise-en-main/2-backup.png and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/3-deploy.gif b/static/img/2020/monolith-prise-en-main/3-deploy.gif
deleted file mode 100644
index c9e3f402..00000000
Binary files a/static/img/2020/monolith-prise-en-main/3-deploy.gif and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/4-gas.jpeg b/static/img/2020/monolith-prise-en-main/4-gas.jpeg
deleted file mode 100644
index 45a3fbe2..00000000
Binary files a/static/img/2020/monolith-prise-en-main/4-gas.jpeg and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/5-gas-top-up.gif b/static/img/2020/monolith-prise-en-main/5-gas-top-up.gif
deleted file mode 100644
index c25e925e..00000000
Binary files a/static/img/2020/monolith-prise-en-main/5-gas-top-up.gif and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/6-card-top-up.gif b/static/img/2020/monolith-prise-en-main/6-card-top-up.gif
deleted file mode 100644
index eb1e1e69..00000000
Binary files a/static/img/2020/monolith-prise-en-main/6-card-top-up.gif and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/7-card.jpeg b/static/img/2020/monolith-prise-en-main/7-card.jpeg
deleted file mode 100644
index b6331520..00000000
Binary files a/static/img/2020/monolith-prise-en-main/7-card.jpeg and /dev/null differ
diff --git a/static/img/2020/monolith-prise-en-main/cover.jpeg b/static/img/2020/monolith-prise-en-main/cover.jpeg
deleted file mode 100644
index c4ff8d68..00000000
Binary files a/static/img/2020/monolith-prise-en-main/cover.jpeg and /dev/null differ
diff --git a/static/img/2020/next-steps/df1.webp b/static/img/2020/next-steps/df1.webp
new file mode 100644
index 00000000..e77ed3c0
Binary files /dev/null and b/static/img/2020/next-steps/df1.webp differ
diff --git a/static/img/2020/next-steps/ecocrypto-logo.webp b/static/img/2020/next-steps/ecocrypto-logo.webp
new file mode 100644
index 00000000..81ab2ee6
Binary files /dev/null and b/static/img/2020/next-steps/ecocrypto-logo.webp differ
diff --git a/static/img/2020/next-steps/imageNFTbanklessfr.gif b/static/img/2020/next-steps/imageNFTbanklessfr.gif
deleted file mode 100644
index 138cc5d6..00000000
Binary files a/static/img/2020/next-steps/imageNFTbanklessfr.gif and /dev/null differ
diff --git a/static/img/2020/next-steps/imageNFTbanklessfr.mp4 b/static/img/2020/next-steps/imageNFTbanklessfr.mp4
new file mode 100644
index 00000000..68658b66
Binary files /dev/null and b/static/img/2020/next-steps/imageNFTbanklessfr.mp4 differ
diff --git a/static/img/2020/next-steps/paraswap-edge.webp b/static/img/2020/next-steps/paraswap-edge.webp
new file mode 100644
index 00000000..5a197b44
Binary files /dev/null and b/static/img/2020/next-steps/paraswap-edge.webp differ
diff --git a/static/img/2020/swap-swamps/debank.webp b/static/img/2020/swap-swamps/debank.webp
new file mode 100644
index 00000000..505c8719
Binary files /dev/null and b/static/img/2020/swap-swamps/debank.webp differ
diff --git a/static/img/2020/swap-swamps/paraswap-aave-idle.webp b/static/img/2020/swap-swamps/paraswap-aave-idle.webp
new file mode 100644
index 00000000..dffed374
Binary files /dev/null and b/static/img/2020/swap-swamps/paraswap-aave-idle.webp differ
diff --git a/static/img/2020/swap-swamps/paraswap-october2020-changelog.webp b/static/img/2020/swap-swamps/paraswap-october2020-changelog.webp
new file mode 100644
index 00000000..a2dcce83
Binary files /dev/null and b/static/img/2020/swap-swamps/paraswap-october2020-changelog.webp differ
diff --git a/static/img/2020/swap-swamps/uniswap.webp b/static/img/2020/swap-swamps/uniswap.webp
new file mode 100644
index 00000000..84d616f1
Binary files /dev/null and b/static/img/2020/swap-swamps/uniswap.webp differ
diff --git a/static/img/2020/tipbot/cover.webp b/static/img/2020/tipbot/cover.webp
new file mode 100644
index 00000000..c0a05781
Binary files /dev/null and b/static/img/2020/tipbot/cover.webp differ
diff --git a/static/img/2020/tipbot/image1.webp b/static/img/2020/tipbot/image1.webp
new file mode 100644
index 00000000..80af1a7a
Binary files /dev/null and b/static/img/2020/tipbot/image1.webp differ
diff --git a/static/img/2020/tipbot/image10.webp b/static/img/2020/tipbot/image10.webp
new file mode 100644
index 00000000..bab2a9fd
Binary files /dev/null and b/static/img/2020/tipbot/image10.webp differ
diff --git a/static/img/2020/tipbot/image11.webp b/static/img/2020/tipbot/image11.webp
new file mode 100644
index 00000000..47ab9774
Binary files /dev/null and b/static/img/2020/tipbot/image11.webp differ
diff --git a/static/img/2020/tipbot/image12.webp b/static/img/2020/tipbot/image12.webp
new file mode 100644
index 00000000..705c6a0e
Binary files /dev/null and b/static/img/2020/tipbot/image12.webp differ
diff --git a/static/img/2020/tipbot/image13.webp b/static/img/2020/tipbot/image13.webp
new file mode 100644
index 00000000..e25132bf
Binary files /dev/null and b/static/img/2020/tipbot/image13.webp differ
diff --git a/static/img/2020/tipbot/image14.webp b/static/img/2020/tipbot/image14.webp
new file mode 100644
index 00000000..fa6af624
Binary files /dev/null and b/static/img/2020/tipbot/image14.webp differ
diff --git a/static/img/2020/tipbot/image15.webp b/static/img/2020/tipbot/image15.webp
new file mode 100644
index 00000000..7e342ef7
Binary files /dev/null and b/static/img/2020/tipbot/image15.webp differ
diff --git a/static/img/2020/tipbot/image16.webp b/static/img/2020/tipbot/image16.webp
new file mode 100644
index 00000000..9e3649bf
Binary files /dev/null and b/static/img/2020/tipbot/image16.webp differ
diff --git a/static/img/2020/tipbot/image17.webp b/static/img/2020/tipbot/image17.webp
new file mode 100644
index 00000000..3b1e2264
Binary files /dev/null and b/static/img/2020/tipbot/image17.webp differ
diff --git a/static/img/2020/tipbot/image18.webp b/static/img/2020/tipbot/image18.webp
new file mode 100644
index 00000000..da5af069
Binary files /dev/null and b/static/img/2020/tipbot/image18.webp differ
diff --git a/static/img/2020/tipbot/image19.webp b/static/img/2020/tipbot/image19.webp
new file mode 100644
index 00000000..8e61ffe7
Binary files /dev/null and b/static/img/2020/tipbot/image19.webp differ
diff --git a/static/img/2020/tipbot/image2.webp b/static/img/2020/tipbot/image2.webp
new file mode 100644
index 00000000..5b1b77d1
Binary files /dev/null and b/static/img/2020/tipbot/image2.webp differ
diff --git a/static/img/2020/tipbot/image20.webp b/static/img/2020/tipbot/image20.webp
new file mode 100644
index 00000000..262b9551
Binary files /dev/null and b/static/img/2020/tipbot/image20.webp differ
diff --git a/static/img/2020/tipbot/image21.webp b/static/img/2020/tipbot/image21.webp
new file mode 100644
index 00000000..f7997785
Binary files /dev/null and b/static/img/2020/tipbot/image21.webp differ
diff --git a/static/img/2020/tipbot/image22.webp b/static/img/2020/tipbot/image22.webp
new file mode 100644
index 00000000..d829e1a2
Binary files /dev/null and b/static/img/2020/tipbot/image22.webp differ
diff --git a/static/img/2020/tipbot/image23.webp b/static/img/2020/tipbot/image23.webp
new file mode 100644
index 00000000..9de68f98
Binary files /dev/null and b/static/img/2020/tipbot/image23.webp differ
diff --git a/static/img/2020/tipbot/image24.webp b/static/img/2020/tipbot/image24.webp
new file mode 100644
index 00000000..f47782e5
Binary files /dev/null and b/static/img/2020/tipbot/image24.webp differ
diff --git a/static/img/2020/tipbot/image25.webp b/static/img/2020/tipbot/image25.webp
new file mode 100644
index 00000000..cf1506a3
Binary files /dev/null and b/static/img/2020/tipbot/image25.webp differ
diff --git a/static/img/2020/tipbot/image3.webp b/static/img/2020/tipbot/image3.webp
new file mode 100644
index 00000000..5028bd03
Binary files /dev/null and b/static/img/2020/tipbot/image3.webp differ
diff --git a/static/img/2020/tipbot/image4.webp b/static/img/2020/tipbot/image4.webp
new file mode 100644
index 00000000..4c5cd11c
Binary files /dev/null and b/static/img/2020/tipbot/image4.webp differ
diff --git a/static/img/2020/tipbot/image5.webp b/static/img/2020/tipbot/image5.webp
new file mode 100644
index 00000000..5df7b368
Binary files /dev/null and b/static/img/2020/tipbot/image5.webp differ
diff --git a/static/img/2020/tipbot/image6.webp b/static/img/2020/tipbot/image6.webp
new file mode 100644
index 00000000..2f78641c
Binary files /dev/null and b/static/img/2020/tipbot/image6.webp differ
diff --git a/static/img/2020/tipbot/image7.webp b/static/img/2020/tipbot/image7.webp
new file mode 100644
index 00000000..cdb952ad
Binary files /dev/null and b/static/img/2020/tipbot/image7.webp differ
diff --git a/static/img/2020/tipbot/image8.webp b/static/img/2020/tipbot/image8.webp
new file mode 100644
index 00000000..bb38d10c
Binary files /dev/null and b/static/img/2020/tipbot/image8.webp differ
diff --git a/static/img/2020/tipbot/image9.webp b/static/img/2020/tipbot/image9.webp
new file mode 100644
index 00000000..85ad1acd
Binary files /dev/null and b/static/img/2020/tipbot/image9.webp differ
diff --git a/static/img/2020/tkn-token-communautaire/1-top-up.webp b/static/img/2020/tkn-token-communautaire/1-top-up.webp
new file mode 100644
index 00000000..e217a0ce
Binary files /dev/null and b/static/img/2020/tkn-token-communautaire/1-top-up.webp differ
diff --git a/static/img/2020/tkn-token-communautaire/2-tkn-burn.webp b/static/img/2020/tkn-token-communautaire/2-tkn-burn.webp
new file mode 100644
index 00000000..faf7667a
Binary files /dev/null and b/static/img/2020/tkn-token-communautaire/2-tkn-burn.webp differ
diff --git a/static/img/2020/tkn-token-communautaire/3-burning-tkn.webp b/static/img/2020/tkn-token-communautaire/3-burning-tkn.webp
new file mode 100644
index 00000000..84512782
Binary files /dev/null and b/static/img/2020/tkn-token-communautaire/3-burning-tkn.webp differ
diff --git a/static/img/2020/tkn-token-communautaire/cover.webp b/static/img/2020/tkn-token-communautaire/cover.webp
new file mode 100644
index 00000000..b53b6422
Binary files /dev/null and b/static/img/2020/tkn-token-communautaire/cover.webp differ
diff --git a/static/img/2020/vaults/harvest.gif b/static/img/2020/vaults/harvest.gif
deleted file mode 100644
index 0b77be48..00000000
Binary files a/static/img/2020/vaults/harvest.gif and /dev/null differ
diff --git a/static/img/2020/vaults/harvest.png b/static/img/2020/vaults/harvest.png
new file mode 100644
index 00000000..9f44a51f
Binary files /dev/null and b/static/img/2020/vaults/harvest.png differ
diff --git a/static/img/2020/vaults/harvest.webp b/static/img/2020/vaults/harvest.webp
new file mode 100644
index 00000000..4ac5822d
Binary files /dev/null and b/static/img/2020/vaults/harvest.webp differ
diff --git a/static/img/2020/vaults/pickle-pjar0.webp b/static/img/2020/vaults/pickle-pjar0.webp
new file mode 100644
index 00000000..3b84b987
Binary files /dev/null and b/static/img/2020/vaults/pickle-pjar0.webp differ
diff --git a/static/img/2020/yearn-finance-YFI/wifeys.webp b/static/img/2020/yearn-finance-YFI/wifeys.webp
new file mode 100644
index 00000000..209b8c80
Binary files /dev/null and b/static/img/2020/yearn-finance-YFI/wifeys.webp differ
diff --git a/static/img/2020/yearn-finance-YFI/yCRV-vault.webp b/static/img/2020/yearn-finance-YFI/yCRV-vault.webp
new file mode 100644
index 00000000..9c878ba9
Binary files /dev/null and b/static/img/2020/yearn-finance-YFI/yCRV-vault.webp differ
diff --git a/static/img/2020/yearn-finance-YFI/yearn-swag.webp b/static/img/2020/yearn-finance-YFI/yearn-swag.webp
new file mode 100644
index 00000000..9bfac51a
Binary files /dev/null and b/static/img/2020/yearn-finance-YFI/yearn-swag.webp differ
diff --git a/static/img/2020/yearn-merger/yearn-merger-tvl.webp b/static/img/2020/yearn-merger/yearn-merger-tvl.webp
new file mode 100644
index 00000000..efe5b0a2
Binary files /dev/null and b/static/img/2020/yearn-merger/yearn-merger-tvl.webp differ
diff --git a/static/img/2020/yearn-waifus/Linkswap.webp b/static/img/2020/yearn-waifus/Linkswap.webp
new file mode 100644
index 00000000..c04b68b8
Binary files /dev/null and b/static/img/2020/yearn-waifus/Linkswap.webp differ
diff --git a/static/img/2020/yearn-waifus/cover.webp b/static/img/2020/yearn-waifus/cover.webp
new file mode 100644
index 00000000..f9c7f39a
Binary files /dev/null and b/static/img/2020/yearn-waifus/cover.webp differ
diff --git a/static/img/2020/yearn-waifus/dfi-money.webp b/static/img/2020/yearn-waifus/dfi-money.webp
new file mode 100644
index 00000000..6bc9e21e
Binary files /dev/null and b/static/img/2020/yearn-waifus/dfi-money.webp differ
diff --git a/static/img/2020/yearn-waifus/harvest-finance.webp b/static/img/2020/yearn-waifus/harvest-finance.webp
new file mode 100644
index 00000000..7896704f
Binary files /dev/null and b/static/img/2020/yearn-waifus/harvest-finance.webp differ
diff --git a/static/img/2020/yearn-waifus/yfv.webp b/static/img/2020/yearn-waifus/yfv.webp
new file mode 100644
index 00000000..d8b3c198
Binary files /dev/null and b/static/img/2020/yearn-waifus/yfv.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/ampl-geyser-insurance.webp b/static/img/2020/yield-farmer-tier-list/ampl-geyser-insurance.webp
new file mode 100644
index 00000000..1255199a
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/ampl-geyser-insurance.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/ampl-geyser.webp b/static/img/2020/yield-farmer-tier-list/ampl-geyser.webp
new file mode 100644
index 00000000..dcedd35f
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/ampl-geyser.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/cover.png b/static/img/2020/yield-farmer-tier-list/cover.png
index 40a1d8e8..9d80621c 100644
Binary files a/static/img/2020/yield-farmer-tier-list/cover.png and b/static/img/2020/yield-farmer-tier-list/cover.png differ
diff --git a/static/img/2020/yield-farmer-tier-list/cover.webp b/static/img/2020/yield-farmer-tier-list/cover.webp
new file mode 100644
index 00000000..0a38388f
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/cover.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/curve-btc.webp b/static/img/2020/yield-farmer-tier-list/curve-btc.webp
new file mode 100644
index 00000000..70796559
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/curve-btc.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/mstable.webp b/static/img/2020/yield-farmer-tier-list/mstable.webp
new file mode 100644
index 00000000..4ff38577
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/mstable.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/musd.webp b/static/img/2020/yield-farmer-tier-list/musd.webp
new file mode 100644
index 00000000..e2e12195
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/musd.webp differ
diff --git a/static/img/2020/yield-farmer-tier-list/yield-farmer-tier-list.webp b/static/img/2020/yield-farmer-tier-list/yield-farmer-tier-list.webp
new file mode 100644
index 00000000..7dcc21f7
Binary files /dev/null and b/static/img/2020/yield-farmer-tier-list/yield-farmer-tier-list.webp differ
diff --git a/static/img/2021/aave-governance-platform/aave-sybil.png b/static/img/2021/aave-governance-platform/aave-sybil.png
new file mode 100644
index 00000000..893d986b
Binary files /dev/null and b/static/img/2021/aave-governance-platform/aave-sybil.png differ
diff --git a/static/img/2021/aave-governance-platform/aave-sybil.webp b/static/img/2021/aave-governance-platform/aave-sybil.webp
new file mode 100644
index 00000000..75b602c1
Binary files /dev/null and b/static/img/2021/aave-governance-platform/aave-sybil.webp differ
diff --git a/static/img/2021/aave-governance-platform/cover.png b/static/img/2021/aave-governance-platform/cover.png
new file mode 100644
index 00000000..d5d1bd38
Binary files /dev/null and b/static/img/2021/aave-governance-platform/cover.png differ
diff --git a/static/img/2021/aave-governance-platform/cover.webp b/static/img/2021/aave-governance-platform/cover.webp
new file mode 100644
index 00000000..dcd5937e
Binary files /dev/null and b/static/img/2021/aave-governance-platform/cover.webp differ
diff --git a/static/img/2021/aave-governance-platform/sybil-delegates.png b/static/img/2021/aave-governance-platform/sybil-delegates.png
new file mode 100644
index 00000000..50573883
Binary files /dev/null and b/static/img/2021/aave-governance-platform/sybil-delegates.png differ
diff --git a/static/img/2021/aave-governance-platform/sybil-delegates.webp b/static/img/2021/aave-governance-platform/sybil-delegates.webp
new file mode 100644
index 00000000..12d01956
Binary files /dev/null and b/static/img/2021/aave-governance-platform/sybil-delegates.webp differ
diff --git a/static/img/2021/badger-digg/alchemix.webp b/static/img/2021/badger-digg/alchemix.webp
new file mode 100644
index 00000000..96d91ff6
Binary files /dev/null and b/static/img/2021/badger-digg/alchemix.webp differ
diff --git a/static/img/2021/badger-digg/badger-breakdown.webp b/static/img/2021/badger-digg/badger-breakdown.webp
new file mode 100644
index 00000000..1d5f0aeb
Binary files /dev/null and b/static/img/2021/badger-digg/badger-breakdown.webp differ
diff --git a/static/img/2021/badger-digg/badger-nft-satoshi.gif b/static/img/2021/badger-digg/badger-nft-satoshi.gif
deleted file mode 100644
index 7fed9829..00000000
Binary files a/static/img/2021/badger-digg/badger-nft-satoshi.gif and /dev/null differ
diff --git a/static/img/2021/badger-digg/badger-nft-satoshi.mp4 b/static/img/2021/badger-digg/badger-nft-satoshi.mp4
new file mode 100644
index 00000000..c3e6dc33
Binary files /dev/null and b/static/img/2021/badger-digg/badger-nft-satoshi.mp4 differ
diff --git a/static/img/2021/badger-digg/badger-stats.webp b/static/img/2021/badger-digg/badger-stats.webp
new file mode 100644
index 00000000..2a305f2d
Binary files /dev/null and b/static/img/2021/badger-digg/badger-stats.webp differ
diff --git a/static/img/2021/badger-digg/cover.webp b/static/img/2021/badger-digg/cover.webp
new file mode 100644
index 00000000..364de371
Binary files /dev/null and b/static/img/2021/badger-digg/cover.webp differ
diff --git a/static/img/2021/badger-digg/digg-breakdown.webp b/static/img/2021/badger-digg/digg-breakdown.webp
new file mode 100644
index 00000000..d423bf9b
Binary files /dev/null and b/static/img/2021/badger-digg/digg-breakdown.webp differ
diff --git a/static/img/2021/badger-digg/safety-module-aave.webp b/static/img/2021/badger-digg/safety-module-aave.webp
new file mode 100644
index 00000000..22c1e0f4
Binary files /dev/null and b/static/img/2021/badger-digg/safety-module-aave.webp differ
diff --git a/static/img/2021/badger-digg/sett-vision.webp b/static/img/2021/badger-digg/sett-vision.webp
new file mode 100644
index 00000000..0bf497c5
Binary files /dev/null and b/static/img/2021/badger-digg/sett-vision.webp differ
diff --git a/static/img/2021/badger-digg/wen-digg.webp b/static/img/2021/badger-digg/wen-digg.webp
new file mode 100644
index 00000000..d69b50b9
Binary files /dev/null and b/static/img/2021/badger-digg/wen-digg.webp differ
diff --git a/static/img/2021/crv-wars/bribes-rewards.png b/static/img/2021/crv-wars/bribes-rewards.png
new file mode 100644
index 00000000..fd8debd5
Binary files /dev/null and b/static/img/2021/crv-wars/bribes-rewards.png differ
diff --git a/static/img/2021/crv-wars/bribes-rewards.webp b/static/img/2021/crv-wars/bribes-rewards.webp
new file mode 100644
index 00000000..3b8cda00
Binary files /dev/null and b/static/img/2021/crv-wars/bribes-rewards.webp differ
diff --git a/static/img/2021/crv-wars/crv-pools.png b/static/img/2021/crv-wars/crv-pools.png
new file mode 100644
index 00000000..c7fda068
Binary files /dev/null and b/static/img/2021/crv-wars/crv-pools.png differ
diff --git a/static/img/2021/crv-wars/crv-pools.webp b/static/img/2021/crv-wars/crv-pools.webp
new file mode 100644
index 00000000..cc168485
Binary files /dev/null and b/static/img/2021/crv-wars/crv-pools.webp differ
diff --git a/static/img/2021/crv-wars/curve-wars-cover-tokenbrice.png b/static/img/2021/crv-wars/curve-wars-cover-tokenbrice.png
new file mode 100644
index 00000000..b5c3a1d1
Binary files /dev/null and b/static/img/2021/crv-wars/curve-wars-cover-tokenbrice.png differ
diff --git a/static/img/2021/crv-wars/curve-wars-cover-tokenbrice.webp b/static/img/2021/crv-wars/curve-wars-cover-tokenbrice.webp
new file mode 100644
index 00000000..a32ac1b1
Binary files /dev/null and b/static/img/2021/crv-wars/curve-wars-cover-tokenbrice.webp differ
diff --git a/static/img/2021/crv-wars/cvxcrv-pool.png b/static/img/2021/crv-wars/cvxcrv-pool.png
new file mode 100644
index 00000000..ea6242b8
Binary files /dev/null and b/static/img/2021/crv-wars/cvxcrv-pool.png differ
diff --git a/static/img/2021/crv-wars/cvxcrv-pool.webp b/static/img/2021/crv-wars/cvxcrv-pool.webp
new file mode 100644
index 00000000..2f1b64fa
Binary files /dev/null and b/static/img/2021/crv-wars/cvxcrv-pool.webp differ
diff --git a/static/img/2021/crv-wars/ecosysteme-vecrv-tokenbrice.png b/static/img/2021/crv-wars/ecosysteme-vecrv-tokenbrice.png
new file mode 100644
index 00000000..fd71a866
Binary files /dev/null and b/static/img/2021/crv-wars/ecosysteme-vecrv-tokenbrice.png differ
diff --git a/static/img/2021/crv-wars/ecosysteme-vecrv-tokenbrice.webp b/static/img/2021/crv-wars/ecosysteme-vecrv-tokenbrice.webp
new file mode 100644
index 00000000..52dd6a41
Binary files /dev/null and b/static/img/2021/crv-wars/ecosysteme-vecrv-tokenbrice.webp differ
diff --git a/static/img/2021/crv-wars/sdvecrv-mim-crv-pools.png b/static/img/2021/crv-wars/sdvecrv-mim-crv-pools.png
new file mode 100644
index 00000000..2e984530
Binary files /dev/null and b/static/img/2021/crv-wars/sdvecrv-mim-crv-pools.png differ
diff --git a/static/img/2021/crv-wars/sdvecrv-mim-crv-pools.webp b/static/img/2021/crv-wars/sdvecrv-mim-crv-pools.webp
new file mode 100644
index 00000000..4c28d3e7
Binary files /dev/null and b/static/img/2021/crv-wars/sdvecrv-mim-crv-pools.webp differ
diff --git a/static/img/2021/crv-wars/sdvecrv-peg.png b/static/img/2021/crv-wars/sdvecrv-peg.png
new file mode 100644
index 00000000..800320a0
Binary files /dev/null and b/static/img/2021/crv-wars/sdvecrv-peg.png differ
diff --git a/static/img/2021/crv-wars/sdvecrv-peg.webp b/static/img/2021/crv-wars/sdvecrv-peg.webp
new file mode 100644
index 00000000..97597b52
Binary files /dev/null and b/static/img/2021/crv-wars/sdvecrv-peg.webp differ
diff --git a/static/img/2021/crv-wars/vecrv-ecosystem-tokenbrice.png b/static/img/2021/crv-wars/vecrv-ecosystem-tokenbrice.png
new file mode 100644
index 00000000..42e42479
Binary files /dev/null and b/static/img/2021/crv-wars/vecrv-ecosystem-tokenbrice.png differ
diff --git a/static/img/2021/crv-wars/vecrv-ecosystem-tokenbrice.webp b/static/img/2021/crv-wars/vecrv-ecosystem-tokenbrice.webp
new file mode 100644
index 00000000..9f3d0a3b
Binary files /dev/null and b/static/img/2021/crv-wars/vecrv-ecosystem-tokenbrice.webp differ
diff --git a/static/img/2021/defi-flywheel/convex-curve-stats.png b/static/img/2021/defi-flywheel/convex-curve-stats.png
new file mode 100644
index 00000000..10b57ab4
Binary files /dev/null and b/static/img/2021/defi-flywheel/convex-curve-stats.png differ
diff --git a/static/img/2021/defi-flywheel/convex-curve-stats.webp b/static/img/2021/defi-flywheel/convex-curve-stats.webp
new file mode 100644
index 00000000..7ef1b841
Binary files /dev/null and b/static/img/2021/defi-flywheel/convex-curve-stats.webp differ
diff --git a/static/img/2021/defi-flywheel/convex-synergies-CRV-en.png b/static/img/2021/defi-flywheel/convex-synergies-CRV-en.png
new file mode 100644
index 00000000..eeb22a91
Binary files /dev/null and b/static/img/2021/defi-flywheel/convex-synergies-CRV-en.png differ
diff --git a/static/img/2021/defi-flywheel/convex-synergies-CRV-en.webp b/static/img/2021/defi-flywheel/convex-synergies-CRV-en.webp
new file mode 100644
index 00000000..0178b413
Binary files /dev/null and b/static/img/2021/defi-flywheel/convex-synergies-CRV-en.webp differ
diff --git a/static/img/2021/defi-flywheel/convex-synergies-CRV.png b/static/img/2021/defi-flywheel/convex-synergies-CRV.png
new file mode 100644
index 00000000..709d0136
Binary files /dev/null and b/static/img/2021/defi-flywheel/convex-synergies-CRV.png differ
diff --git a/static/img/2021/defi-flywheel/convex-synergies-CRV.webp b/static/img/2021/defi-flywheel/convex-synergies-CRV.webp
new file mode 100644
index 00000000..0d6ece4b
Binary files /dev/null and b/static/img/2021/defi-flywheel/convex-synergies-CRV.webp differ
diff --git a/static/img/2021/defi-flywheel/crv-tokenomics.png b/static/img/2021/defi-flywheel/crv-tokenomics.png
new file mode 100644
index 00000000..ea4e391c
Binary files /dev/null and b/static/img/2021/defi-flywheel/crv-tokenomics.png differ
diff --git a/static/img/2021/defi-flywheel/crv-tokenomics.webp b/static/img/2021/defi-flywheel/crv-tokenomics.webp
new file mode 100644
index 00000000..de0f8fe8
Binary files /dev/null and b/static/img/2021/defi-flywheel/crv-tokenomics.webp differ
diff --git a/static/img/2021/defi-flywheel/defi-flywheel-cover-en.png b/static/img/2021/defi-flywheel/defi-flywheel-cover-en.png
new file mode 100644
index 00000000..aea851ea
Binary files /dev/null and b/static/img/2021/defi-flywheel/defi-flywheel-cover-en.png differ
diff --git a/static/img/2021/defi-flywheel/defi-flywheel-cover-en.webp b/static/img/2021/defi-flywheel/defi-flywheel-cover-en.webp
new file mode 100644
index 00000000..b2655c56
Binary files /dev/null and b/static/img/2021/defi-flywheel/defi-flywheel-cover-en.webp differ
diff --git a/static/img/2021/defi-flywheel/defi-flywheel-cover.png b/static/img/2021/defi-flywheel/defi-flywheel-cover.png
new file mode 100644
index 00000000..3b84f0ee
Binary files /dev/null and b/static/img/2021/defi-flywheel/defi-flywheel-cover.png differ
diff --git a/static/img/2021/defi-flywheel/defi-flywheel-cover.webp b/static/img/2021/defi-flywheel/defi-flywheel-cover.webp
new file mode 100644
index 00000000..8655c080
Binary files /dev/null and b/static/img/2021/defi-flywheel/defi-flywheel-cover.webp differ
diff --git a/static/img/2021/defi-flywheel/protocole-x-liquity-en.png b/static/img/2021/defi-flywheel/protocole-x-liquity-en.png
new file mode 100644
index 00000000..dc95ce66
Binary files /dev/null and b/static/img/2021/defi-flywheel/protocole-x-liquity-en.png differ
diff --git a/static/img/2021/defi-flywheel/protocole-x-liquity-en.webp b/static/img/2021/defi-flywheel/protocole-x-liquity-en.webp
new file mode 100644
index 00000000..7d70b1b4
Binary files /dev/null and b/static/img/2021/defi-flywheel/protocole-x-liquity-en.webp differ
diff --git a/static/img/2021/defi-flywheel/protocole-x-liquity.png b/static/img/2021/defi-flywheel/protocole-x-liquity.png
new file mode 100644
index 00000000..b02eaa36
Binary files /dev/null and b/static/img/2021/defi-flywheel/protocole-x-liquity.png differ
diff --git a/static/img/2021/defi-flywheel/protocole-x-liquity.webp b/static/img/2021/defi-flywheel/protocole-x-liquity.webp
new file mode 100644
index 00000000..cc51c0f7
Binary files /dev/null and b/static/img/2021/defi-flywheel/protocole-x-liquity.webp differ
diff --git a/static/img/2021/defi-flywheel/veYFI.png b/static/img/2021/defi-flywheel/veYFI.png
new file mode 100644
index 00000000..e250bfe8
Binary files /dev/null and b/static/img/2021/defi-flywheel/veYFI.png differ
diff --git a/static/img/2021/defi-flywheel/veYFI.webp b/static/img/2021/defi-flywheel/veYFI.webp
new file mode 100644
index 00000000..51115a0f
Binary files /dev/null and b/static/img/2021/defi-flywheel/veYFI.webp differ
diff --git a/static/img/2021/defi-janus/defi-asset-manager.jpeg b/static/img/2021/defi-janus/defi-asset-manager.jpeg
new file mode 100644
index 00000000..4b9d46f5
Binary files /dev/null and b/static/img/2021/defi-janus/defi-asset-manager.jpeg differ
diff --git a/static/img/2021/defi-janus/defi-asset-manager.webp b/static/img/2021/defi-janus/defi-asset-manager.webp
new file mode 100644
index 00000000..8fa27123
Binary files /dev/null and b/static/img/2021/defi-janus/defi-asset-manager.webp differ
diff --git a/static/img/2021/defi-janus/defi-janus-cover-en.png b/static/img/2021/defi-janus/defi-janus-cover-en.png
new file mode 100644
index 00000000..e2985a6c
Binary files /dev/null and b/static/img/2021/defi-janus/defi-janus-cover-en.png differ
diff --git a/static/img/2021/defi-janus/defi-janus-cover-en.webp b/static/img/2021/defi-janus/defi-janus-cover-en.webp
new file mode 100644
index 00000000..f88e52ee
Binary files /dev/null and b/static/img/2021/defi-janus/defi-janus-cover-en.webp differ
diff --git a/static/img/2021/defi-janus/defi-janus-cover.png b/static/img/2021/defi-janus/defi-janus-cover.png
new file mode 100644
index 00000000..eebb4fd3
Binary files /dev/null and b/static/img/2021/defi-janus/defi-janus-cover.png differ
diff --git a/static/img/2021/defi-janus/defi-janus-cover.webp b/static/img/2021/defi-janus/defi-janus-cover.webp
new file mode 100644
index 00000000..d011ee94
Binary files /dev/null and b/static/img/2021/defi-janus/defi-janus-cover.webp differ
diff --git a/static/img/2021/defi-janus/influence-governance.png b/static/img/2021/defi-janus/influence-governance.png
new file mode 100644
index 00000000..b425a881
Binary files /dev/null and b/static/img/2021/defi-janus/influence-governance.png differ
diff --git a/static/img/2021/defi-janus/influence-governance.webp b/static/img/2021/defi-janus/influence-governance.webp
new file mode 100644
index 00000000..0323c413
Binary files /dev/null and b/static/img/2021/defi-janus/influence-governance.webp differ
diff --git a/static/img/2021/defi-janus/maker-governance-overhead.png b/static/img/2021/defi-janus/maker-governance-overhead.png
new file mode 100644
index 00000000..e5690eb1
Binary files /dev/null and b/static/img/2021/defi-janus/maker-governance-overhead.png differ
diff --git a/static/img/2021/defi-janus/maker-governance-overhead.webp b/static/img/2021/defi-janus/maker-governance-overhead.webp
new file mode 100644
index 00000000..cca5fdca
Binary files /dev/null and b/static/img/2021/defi-janus/maker-governance-overhead.webp differ
diff --git a/static/img/2021/defi-janus/tokenterminal-tvl-maker-liquity.png b/static/img/2021/defi-janus/tokenterminal-tvl-maker-liquity.png
new file mode 100644
index 00000000..694c7289
Binary files /dev/null and b/static/img/2021/defi-janus/tokenterminal-tvl-maker-liquity.png differ
diff --git a/static/img/2021/defi-janus/tokenterminal-tvl-maker-liquity.webp b/static/img/2021/defi-janus/tokenterminal-tvl-maker-liquity.webp
new file mode 100644
index 00000000..c77f7302
Binary files /dev/null and b/static/img/2021/defi-janus/tokenterminal-tvl-maker-liquity.webp differ
diff --git a/static/img/2021/defi-janus/vecrv-par-dao.png b/static/img/2021/defi-janus/vecrv-par-dao.png
new file mode 100644
index 00000000..ae13bcf5
Binary files /dev/null and b/static/img/2021/defi-janus/vecrv-par-dao.png differ
diff --git a/static/img/2021/defi-janus/vecrv-par-dao.webp b/static/img/2021/defi-janus/vecrv-par-dao.webp
new file mode 100644
index 00000000..9f6fed53
Binary files /dev/null and b/static/img/2021/defi-janus/vecrv-par-dao.webp differ
diff --git a/static/img/2021/defi-janus/yearn-comp.png b/static/img/2021/defi-janus/yearn-comp.png
new file mode 100644
index 00000000..1072d76c
Binary files /dev/null and b/static/img/2021/defi-janus/yearn-comp.png differ
diff --git a/static/img/2021/defi-janus/yearn-comp.webp b/static/img/2021/defi-janus/yearn-comp.webp
new file mode 100644
index 00000000..b0b297d7
Binary files /dev/null and b/static/img/2021/defi-janus/yearn-comp.webp differ
diff --git a/static/img/2021/dex-value-capture/cover-fr.webp b/static/img/2021/dex-value-capture/cover-fr.webp
new file mode 100644
index 00000000..52c4965f
Binary files /dev/null and b/static/img/2021/dex-value-capture/cover-fr.webp differ
diff --git a/static/img/2021/dex-value-capture/cover.webp b/static/img/2021/dex-value-capture/cover.webp
new file mode 100644
index 00000000..028f87cc
Binary files /dev/null and b/static/img/2021/dex-value-capture/cover.webp differ
diff --git a/static/img/2021/dex-value-capture/crv-boost.webp b/static/img/2021/dex-value-capture/crv-boost.webp
new file mode 100644
index 00000000..66ae4734
Binary files /dev/null and b/static/img/2021/dex-value-capture/crv-boost.webp differ
diff --git a/static/img/2021/dex-value-capture/curve-pools.webp b/static/img/2021/dex-value-capture/curve-pools.webp
new file mode 100644
index 00000000..d7c20407
Binary files /dev/null and b/static/img/2021/dex-value-capture/curve-pools.webp differ
diff --git a/static/img/2021/dex-value-capture/defi-france-live-16.webp b/static/img/2021/dex-value-capture/defi-france-live-16.webp
new file mode 100644
index 00000000..9bbfa2e7
Binary files /dev/null and b/static/img/2021/dex-value-capture/defi-france-live-16.webp differ
diff --git a/static/img/2021/dex-value-capture/fees.webp b/static/img/2021/dex-value-capture/fees.webp
new file mode 100644
index 00000000..0e50b295
Binary files /dev/null and b/static/img/2021/dex-value-capture/fees.webp differ
diff --git a/static/img/2021/dex-value-capture/loopring.webp b/static/img/2021/dex-value-capture/loopring.webp
new file mode 100644
index 00000000..f5d56065
Binary files /dev/null and b/static/img/2021/dex-value-capture/loopring.webp differ
diff --git a/static/img/2021/dex-value-capture/sushi-onsen.webp b/static/img/2021/dex-value-capture/sushi-onsen.webp
new file mode 100644
index 00000000..59cec0fd
Binary files /dev/null and b/static/img/2021/dex-value-capture/sushi-onsen.webp differ
diff --git a/static/img/2021/dffv2/dffv2-cover.png b/static/img/2021/dffv2/dffv2-cover.png
new file mode 100644
index 00000000..fd1f70c8
Binary files /dev/null and b/static/img/2021/dffv2/dffv2-cover.png differ
diff --git a/static/img/2021/dffv2/dffv2-cover.webp b/static/img/2021/dffv2/dffv2-cover.webp
new file mode 100644
index 00000000..388db4b9
Binary files /dev/null and b/static/img/2021/dffv2/dffv2-cover.webp differ
diff --git "a/static/img/2021/dffv2/d\303\251m\303\251ter.jpg" "b/static/img/2021/dffv2/d\303\251m\303\251ter.jpg"
new file mode 100644
index 00000000..971ca6ec
Binary files /dev/null and "b/static/img/2021/dffv2/d\303\251m\303\251ter.jpg" differ
diff --git "a/static/img/2021/dffv2/d\303\251m\303\251ter.webp" "b/static/img/2021/dffv2/d\303\251m\303\251ter.webp"
new file mode 100644
index 00000000..a3fd4c89
Binary files /dev/null and "b/static/img/2021/dffv2/d\303\251m\303\251ter.webp" differ
diff --git a/static/img/2021/dffv2/pantheon.png b/static/img/2021/dffv2/pantheon.png
new file mode 100644
index 00000000..0c8ded2b
Binary files /dev/null and b/static/img/2021/dffv2/pantheon.png differ
diff --git a/static/img/2021/dffv2/pantheon.webp b/static/img/2021/dffv2/pantheon.webp
new file mode 100644
index 00000000..b6708e66
Binary files /dev/null and b/static/img/2021/dffv2/pantheon.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-1/cryptonia.png b/static/img/2021/fil-gov-defi-france-1/cryptonia.png
new file mode 100644
index 00000000..9b54a58f
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/cryptonia.png differ
diff --git a/static/img/2021/fil-gov-defi-france-1/cryptonia.webp b/static/img/2021/fil-gov-defi-france-1/cryptonia.webp
new file mode 100644
index 00000000..3d6e8ab6
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/cryptonia.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-1/dffv2-w1-cover.png b/static/img/2021/fil-gov-defi-france-1/dffv2-w1-cover.png
new file mode 100644
index 00000000..f4a76d95
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/dffv2-w1-cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-1/dffv2-w1-cover.webp b/static/img/2021/fil-gov-defi-france-1/dffv2-w1-cover.webp
new file mode 100644
index 00000000..307a595c
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/dffv2-w1-cover.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-1/notifications.png b/static/img/2021/fil-gov-defi-france-1/notifications.png
new file mode 100644
index 00000000..dc517fcd
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/notifications.png differ
diff --git a/static/img/2021/fil-gov-defi-france-1/notifications.webp b/static/img/2021/fil-gov-defi-france-1/notifications.webp
new file mode 100644
index 00000000..8dfad1c6
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/notifications.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-1/pantheon.png b/static/img/2021/fil-gov-defi-france-1/pantheon.png
new file mode 100644
index 00000000..f72e83c4
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/pantheon.png differ
diff --git a/static/img/2021/fil-gov-defi-france-1/pantheon.webp b/static/img/2021/fil-gov-defi-france-1/pantheon.webp
new file mode 100644
index 00000000..c222ffd7
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/pantheon.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-1/proposition-poh.png b/static/img/2021/fil-gov-defi-france-1/proposition-poh.png
new file mode 100644
index 00000000..5af7dfc3
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/proposition-poh.png differ
diff --git a/static/img/2021/fil-gov-defi-france-1/proposition-poh.webp b/static/img/2021/fil-gov-defi-france-1/proposition-poh.webp
new file mode 100644
index 00000000..94fb5c93
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-1/proposition-poh.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-10/cover.png b/static/img/2021/fil-gov-defi-france-10/cover.png
new file mode 100644
index 00000000..758a2765
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-10/cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-10/cover.webp b/static/img/2021/fil-gov-defi-france-10/cover.webp
new file mode 100644
index 00000000..1f9a2c51
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-10/cover.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-2/fil-gov-defi-france-2-cover.png b/static/img/2021/fil-gov-defi-france-2/fil-gov-defi-france-2-cover.png
new file mode 100644
index 00000000..4bed624d
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-2/fil-gov-defi-france-2-cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-2/fil-gov-defi-france-2-cover.webp b/static/img/2021/fil-gov-defi-france-2/fil-gov-defi-france-2-cover.webp
new file mode 100644
index 00000000..4d30f4f5
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-2/fil-gov-defi-france-2-cover.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-2/systeme-poh.png b/static/img/2021/fil-gov-defi-france-2/systeme-poh.png
new file mode 100644
index 00000000..27180e76
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-2/systeme-poh.png differ
diff --git a/static/img/2021/fil-gov-defi-france-2/systeme-poh.webp b/static/img/2021/fil-gov-defi-france-2/systeme-poh.webp
new file mode 100644
index 00000000..680a9ebc
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-2/systeme-poh.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-3/fil-gov-defi-france-3-cover.png b/static/img/2021/fil-gov-defi-france-3/fil-gov-defi-france-3-cover.png
new file mode 100644
index 00000000..10ba40d8
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-3/fil-gov-defi-france-3-cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-3/fil-gov-defi-france-3-cover.webp b/static/img/2021/fil-gov-defi-france-3/fil-gov-defi-france-3-cover.webp
new file mode 100644
index 00000000..72377c2f
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-3/fil-gov-defi-france-3-cover.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-4/fil-gov-defi-france-4-cover.png b/static/img/2021/fil-gov-defi-france-4/fil-gov-defi-france-4-cover.png
new file mode 100644
index 00000000..2ffca600
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-4/fil-gov-defi-france-4-cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-4/fil-gov-defi-france-4-cover.webp b/static/img/2021/fil-gov-defi-france-4/fil-gov-defi-france-4-cover.webp
new file mode 100644
index 00000000..8eb314e0
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-4/fil-gov-defi-france-4-cover.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-5-cover.png b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-5-cover.png
new file mode 100644
index 00000000..01e6d373
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-5-cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-5-cover.webp b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-5-cover.webp
new file mode 100644
index 00000000..f5864255
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-5-cover.webp differ
diff --git a/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-6-cover.png b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-6-cover.png
new file mode 100644
index 00000000..47a24289
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-6-cover.png differ
diff --git a/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-6-cover.webp b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-6-cover.webp
new file mode 100644
index 00000000..07bab1cf
Binary files /dev/null and b/static/img/2021/fil-gov-defi-france-5/fil-gov-defi-france-6-cover.webp differ
diff --git a/static/img/2021/firp-apwine/apwine.webp b/static/img/2021/firp-apwine/apwine.webp
new file mode 100644
index 00000000..79c3f856
Binary files /dev/null and b/static/img/2021/firp-apwine/apwine.webp differ
diff --git a/static/img/2021/firp-apwine/coingecko-report.webp b/static/img/2021/firp-apwine/coingecko-report.webp
new file mode 100644
index 00000000..65f6bad5
Binary files /dev/null and b/static/img/2021/firp-apwine/coingecko-report.webp differ
diff --git a/static/img/2021/firp-apwine/defi-france-live-19.webp b/static/img/2021/firp-apwine/defi-france-live-19.webp
new file mode 100644
index 00000000..b4568d8f
Binary files /dev/null and b/static/img/2021/firp-apwine/defi-france-live-19.webp differ
diff --git a/static/img/2021/firp-apwine/pac-man.webp b/static/img/2021/firp-apwine/pac-man.webp
new file mode 100644
index 00000000..5795ea67
Binary files /dev/null and b/static/img/2021/firp-apwine/pac-man.webp differ
diff --git a/static/img/2021/guide-defian/agora-proposition-structure.png b/static/img/2021/guide-defian/agora-proposition-structure.png
new file mode 100644
index 00000000..968aae4c
Binary files /dev/null and b/static/img/2021/guide-defian/agora-proposition-structure.png differ
diff --git a/static/img/2021/guide-defian/agora-proposition-structure.webp b/static/img/2021/guide-defian/agora-proposition-structure.webp
new file mode 100644
index 00000000..b8c119a5
Binary files /dev/null and b/static/img/2021/guide-defian/agora-proposition-structure.webp differ
diff --git a/static/img/2021/guide-defian/dffv2-curation-communautaire.png b/static/img/2021/guide-defian/dffv2-curation-communautaire.png
new file mode 100644
index 00000000..b8a796d8
Binary files /dev/null and b/static/img/2021/guide-defian/dffv2-curation-communautaire.png differ
diff --git a/static/img/2021/guide-defian/dffv2-curation-communautaire.webp b/static/img/2021/guide-defian/dffv2-curation-communautaire.webp
new file mode 100644
index 00000000..5d43c159
Binary files /dev/null and b/static/img/2021/guide-defian/dffv2-curation-communautaire.webp differ
diff --git a/static/img/2021/guide-defian/dffv2-gouvernance-communautaire.png b/static/img/2021/guide-defian/dffv2-gouvernance-communautaire.png
new file mode 100644
index 00000000..67ab2f86
Binary files /dev/null and b/static/img/2021/guide-defian/dffv2-gouvernance-communautaire.png differ
diff --git a/static/img/2021/guide-defian/dffv2-gouvernance-communautaire.webp b/static/img/2021/guide-defian/dffv2-gouvernance-communautaire.webp
new file mode 100644
index 00000000..2f48cd8f
Binary files /dev/null and b/static/img/2021/guide-defian/dffv2-gouvernance-communautaire.webp differ
diff --git a/static/img/2021/guide-defian/dffv2-moderation-communautaire.png b/static/img/2021/guide-defian/dffv2-moderation-communautaire.png
new file mode 100644
index 00000000..992ac49b
Binary files /dev/null and b/static/img/2021/guide-defian/dffv2-moderation-communautaire.png differ
diff --git a/static/img/2021/guide-defian/dffv2-moderation-communautaire.webp b/static/img/2021/guide-defian/dffv2-moderation-communautaire.webp
new file mode 100644
index 00000000..15ebdf55
Binary files /dev/null and b/static/img/2021/guide-defian/dffv2-moderation-communautaire.webp differ
diff --git a/static/img/2021/guide-defian/guide-defian-cover.png b/static/img/2021/guide-defian/guide-defian-cover.png
new file mode 100644
index 00000000..cff50d8d
Binary files /dev/null and b/static/img/2021/guide-defian/guide-defian-cover.png differ
diff --git a/static/img/2021/guide-defian/guide-defian-cover.webp b/static/img/2021/guide-defian/guide-defian-cover.webp
new file mode 100644
index 00000000..d459c0a5
Binary files /dev/null and b/static/img/2021/guide-defian/guide-defian-cover.webp differ
diff --git a/static/img/2021/guide-defian/message-pantheon.png b/static/img/2021/guide-defian/message-pantheon.png
new file mode 100644
index 00000000..3f4649b0
Binary files /dev/null and b/static/img/2021/guide-defian/message-pantheon.png differ
diff --git a/static/img/2021/guide-defian/message-pantheon.webp b/static/img/2021/guide-defian/message-pantheon.webp
new file mode 100644
index 00000000..c203b8fb
Binary files /dev/null and b/static/img/2021/guide-defian/message-pantheon.webp differ
diff --git a/static/img/2021/guide-defian/reac-delo.png b/static/img/2021/guide-defian/reac-delo.png
new file mode 100644
index 00000000..e14d5f9d
Binary files /dev/null and b/static/img/2021/guide-defian/reac-delo.png differ
diff --git a/static/img/2021/guide-defian/reac-delo.webp b/static/img/2021/guide-defian/reac-delo.webp
new file mode 100644
index 00000000..99009cc7
Binary files /dev/null and b/static/img/2021/guide-defian/reac-delo.webp differ
diff --git a/static/img/2021/guide-defian/reac-dff.png b/static/img/2021/guide-defian/reac-dff.png
new file mode 100644
index 00000000..276bf81e
Binary files /dev/null and b/static/img/2021/guide-defian/reac-dff.png differ
diff --git a/static/img/2021/guide-defian/reac-dff.webp b/static/img/2021/guide-defian/reac-dff.webp
new file mode 100644
index 00000000..6914cda9
Binary files /dev/null and b/static/img/2021/guide-defian/reac-dff.webp differ
diff --git a/static/img/2021/guide-defian/reac-floppy-disk.png b/static/img/2021/guide-defian/reac-floppy-disk.png
new file mode 100644
index 00000000..e5c093a8
Binary files /dev/null and b/static/img/2021/guide-defian/reac-floppy-disk.png differ
diff --git a/static/img/2021/guide-defian/reac-floppy-disk.webp b/static/img/2021/guide-defian/reac-floppy-disk.webp
new file mode 100644
index 00000000..eeb7c033
Binary files /dev/null and b/static/img/2021/guide-defian/reac-floppy-disk.webp differ
diff --git a/static/img/2021/guide-defian/reac-hs.png b/static/img/2021/guide-defian/reac-hs.png
new file mode 100644
index 00000000..29c061b3
Binary files /dev/null and b/static/img/2021/guide-defian/reac-hs.png differ
diff --git a/static/img/2021/guide-defian/reac-hs.webp b/static/img/2021/guide-defian/reac-hs.webp
new file mode 100644
index 00000000..0d2778a8
Binary files /dev/null and b/static/img/2021/guide-defian/reac-hs.webp differ
diff --git a/static/img/2021/guide-defian/reac-prison.png b/static/img/2021/guide-defian/reac-prison.png
new file mode 100644
index 00000000..893c3f78
Binary files /dev/null and b/static/img/2021/guide-defian/reac-prison.png differ
diff --git a/static/img/2021/guide-defian/reac-prison.webp b/static/img/2021/guide-defian/reac-prison.webp
new file mode 100644
index 00000000..5838dce5
Binary files /dev/null and b/static/img/2021/guide-defian/reac-prison.webp differ
diff --git a/static/img/2021/guide-defian/reac-scroll.png b/static/img/2021/guide-defian/reac-scroll.png
new file mode 100644
index 00000000..e8f7dabb
Binary files /dev/null and b/static/img/2021/guide-defian/reac-scroll.png differ
diff --git a/static/img/2021/guide-defian/reac-scroll.webp b/static/img/2021/guide-defian/reac-scroll.webp
new file mode 100644
index 00000000..1b62a08c
Binary files /dev/null and b/static/img/2021/guide-defian/reac-scroll.webp differ
diff --git a/static/img/2021/guide-defian/top-ble.png b/static/img/2021/guide-defian/top-ble.png
new file mode 100644
index 00000000..fac0a645
Binary files /dev/null and b/static/img/2021/guide-defian/top-ble.png differ
diff --git a/static/img/2021/guide-defian/top-ble.webp b/static/img/2021/guide-defian/top-ble.webp
new file mode 100644
index 00000000..984f9701
Binary files /dev/null and b/static/img/2021/guide-defian/top-ble.webp differ
diff --git a/static/img/2021/liquity-protocol/cover-en.png b/static/img/2021/liquity-protocol/cover-en.png
new file mode 100644
index 00000000..6e019ed7
Binary files /dev/null and b/static/img/2021/liquity-protocol/cover-en.png differ
diff --git a/static/img/2021/liquity-protocol/cover-en.webp b/static/img/2021/liquity-protocol/cover-en.webp
new file mode 100644
index 00000000..24ef2d08
Binary files /dev/null and b/static/img/2021/liquity-protocol/cover-en.webp differ
diff --git a/static/img/2021/liquity-protocol/cover.png b/static/img/2021/liquity-protocol/cover.png
new file mode 100644
index 00000000..6a7604af
Binary files /dev/null and b/static/img/2021/liquity-protocol/cover.png differ
diff --git a/static/img/2021/liquity-protocol/cover.webp b/static/img/2021/liquity-protocol/cover.webp
new file mode 100644
index 00000000..938ae4eb
Binary files /dev/null and b/static/img/2021/liquity-protocol/cover.webp differ
diff --git a/static/img/2021/liquity-protocol/lqty-staking-returns.png b/static/img/2021/liquity-protocol/lqty-staking-returns.png
new file mode 100644
index 00000000..6fafcbb2
Binary files /dev/null and b/static/img/2021/liquity-protocol/lqty-staking-returns.png differ
diff --git a/static/img/2021/liquity-protocol/lqty-staking-returns.webp b/static/img/2021/liquity-protocol/lqty-staking-returns.webp
new file mode 100644
index 00000000..e825ac0f
Binary files /dev/null and b/static/img/2021/liquity-protocol/lqty-staking-returns.webp differ
diff --git a/static/img/2021/liquity-protocol/lusd-holders.png b/static/img/2021/liquity-protocol/lusd-holders.png
new file mode 100644
index 00000000..662802fe
Binary files /dev/null and b/static/img/2021/liquity-protocol/lusd-holders.png differ
diff --git a/static/img/2021/liquity-protocol/lusd-holders.webp b/static/img/2021/liquity-protocol/lusd-holders.webp
new file mode 100644
index 00000000..6069c6a9
Binary files /dev/null and b/static/img/2021/liquity-protocol/lusd-holders.webp differ
diff --git a/static/img/2021/liquity-protocol/lusd-price.png b/static/img/2021/liquity-protocol/lusd-price.png
new file mode 100644
index 00000000..59a59744
Binary files /dev/null and b/static/img/2021/liquity-protocol/lusd-price.png differ
diff --git a/static/img/2021/liquity-protocol/lusd-price.webp b/static/img/2021/liquity-protocol/lusd-price.webp
new file mode 100644
index 00000000..a3d29593
Binary files /dev/null and b/static/img/2021/liquity-protocol/lusd-price.webp differ
diff --git a/static/img/2021/liquity-protocol/olympus-lusd.png b/static/img/2021/liquity-protocol/olympus-lusd.png
new file mode 100644
index 00000000..dae2780c
Binary files /dev/null and b/static/img/2021/liquity-protocol/olympus-lusd.png differ
diff --git a/static/img/2021/liquity-protocol/olympus-lusd.webp b/static/img/2021/liquity-protocol/olympus-lusd.webp
new file mode 100644
index 00000000..c03317a4
Binary files /dev/null and b/static/img/2021/liquity-protocol/olympus-lusd.webp differ
diff --git a/static/img/2021/liquity-protocol/pickle-lusd.png b/static/img/2021/liquity-protocol/pickle-lusd.png
new file mode 100644
index 00000000..0c9f6556
Binary files /dev/null and b/static/img/2021/liquity-protocol/pickle-lusd.png differ
diff --git a/static/img/2021/liquity-protocol/pickle-lusd.webp b/static/img/2021/liquity-protocol/pickle-lusd.webp
new file mode 100644
index 00000000..07460341
Binary files /dev/null and b/static/img/2021/liquity-protocol/pickle-lusd.webp differ
diff --git a/static/img/2021/liquity-protocol/recovery-mode.png b/static/img/2021/liquity-protocol/recovery-mode.png
new file mode 100644
index 00000000..9f2beabb
Binary files /dev/null and b/static/img/2021/liquity-protocol/recovery-mode.png differ
diff --git a/static/img/2021/liquity-protocol/recovery-mode.webp b/static/img/2021/liquity-protocol/recovery-mode.webp
new file mode 100644
index 00000000..59bc293a
Binary files /dev/null and b/static/img/2021/liquity-protocol/recovery-mode.webp differ
diff --git a/static/img/2021/liquity-protocol/trove.png b/static/img/2021/liquity-protocol/trove.png
new file mode 100644
index 00000000..3fd6e9ec
Binary files /dev/null and b/static/img/2021/liquity-protocol/trove.png differ
diff --git a/static/img/2021/liquity-protocol/trove.webp b/static/img/2021/liquity-protocol/trove.webp
new file mode 100644
index 00000000..4286268d
Binary files /dev/null and b/static/img/2021/liquity-protocol/trove.webp differ
diff --git a/static/img/2021/liquity-protocol/visor-uni-lqty.png b/static/img/2021/liquity-protocol/visor-uni-lqty.png
new file mode 100644
index 00000000..40e7b1ef
Binary files /dev/null and b/static/img/2021/liquity-protocol/visor-uni-lqty.png differ
diff --git a/static/img/2021/liquity-protocol/visor-uni-lqty.webp b/static/img/2021/liquity-protocol/visor-uni-lqty.webp
new file mode 100644
index 00000000..8ecaec06
Binary files /dev/null and b/static/img/2021/liquity-protocol/visor-uni-lqty.webp differ
diff --git a/static/img/2021/luchadores-nft/AFA-score.png b/static/img/2021/luchadores-nft/AFA-score.png
new file mode 100644
index 00000000..50c7168e
Binary files /dev/null and b/static/img/2021/luchadores-nft/AFA-score.png differ
diff --git a/static/img/2021/luchadores-nft/AFA-score.webp b/static/img/2021/luchadores-nft/AFA-score.webp
new file mode 100644
index 00000000..2e9a23f1
Binary files /dev/null and b/static/img/2021/luchadores-nft/AFA-score.webp differ
diff --git a/static/img/2021/luchadores-nft/final-lucha-arena.png b/static/img/2021/luchadores-nft/final-lucha-arena.png
new file mode 100644
index 00000000..b1fbabc2
Binary files /dev/null and b/static/img/2021/luchadores-nft/final-lucha-arena.png differ
diff --git a/static/img/2021/luchadores-nft/final-lucha-arena.webp b/static/img/2021/luchadores-nft/final-lucha-arena.webp
new file mode 100644
index 00000000..3ca544ba
Binary files /dev/null and b/static/img/2021/luchadores-nft/final-lucha-arena.webp differ
diff --git a/static/img/2021/luchadores-nft/hidden_mustache_difference.png b/static/img/2021/luchadores-nft/hidden_mustache_difference.png
new file mode 100644
index 00000000..a4f615bc
Binary files /dev/null and b/static/img/2021/luchadores-nft/hidden_mustache_difference.png differ
diff --git a/static/img/2021/luchadores-nft/hidden_mustache_difference.webp b/static/img/2021/luchadores-nft/hidden_mustache_difference.webp
new file mode 100644
index 00000000..7515a224
Binary files /dev/null and b/static/img/2021/luchadores-nft/hidden_mustache_difference.webp differ
diff --git a/static/img/2021/luchadores-nft/luchadores-8956.png b/static/img/2021/luchadores-nft/luchadores-8956.png
new file mode 100644
index 00000000..388ee869
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-8956.png differ
diff --git a/static/img/2021/luchadores-nft/luchadores-8956.webp b/static/img/2021/luchadores-nft/luchadores-8956.webp
new file mode 100644
index 00000000..5bc689ee
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-8956.webp differ
diff --git a/static/img/2021/luchadores-nft/luchadores-cover.png b/static/img/2021/luchadores-nft/luchadores-cover.png
new file mode 100644
index 00000000..6673b6d3
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-cover.png differ
diff --git a/static/img/2021/luchadores-nft/luchadores-cover.webp b/static/img/2021/luchadores-nft/luchadores-cover.webp
new file mode 100644
index 00000000..4326ffd0
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-cover.webp differ
diff --git a/static/img/2021/luchadores-nft/luchadores-distribution.png b/static/img/2021/luchadores-nft/luchadores-distribution.png
new file mode 100644
index 00000000..aaf658f9
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-distribution.png differ
diff --git a/static/img/2021/luchadores-nft/luchadores-distribution.webp b/static/img/2021/luchadores-nft/luchadores-distribution.webp
new file mode 100644
index 00000000..7a6b777c
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-distribution.webp differ
diff --git a/static/img/2021/luchadores-nft/luchadores-stats.png b/static/img/2021/luchadores-nft/luchadores-stats.png
new file mode 100644
index 00000000..172293dc
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-stats.png differ
diff --git a/static/img/2021/luchadores-nft/luchadores-stats.webp b/static/img/2021/luchadores-nft/luchadores-stats.webp
new file mode 100644
index 00000000..d0f988ea
Binary files /dev/null and b/static/img/2021/luchadores-nft/luchadores-stats.webp differ
diff --git a/static/img/2021/money-market-innovations/alchemix.png b/static/img/2021/money-market-innovations/alchemix.png
index 9ed64525..cdf90a01 100644
Binary files a/static/img/2021/money-market-innovations/alchemix.png and b/static/img/2021/money-market-innovations/alchemix.png differ
diff --git a/static/img/2021/money-market-innovations/alchemix.webp b/static/img/2021/money-market-innovations/alchemix.webp
new file mode 100644
index 00000000..43df352a
Binary files /dev/null and b/static/img/2021/money-market-innovations/alchemix.webp differ
diff --git a/static/img/2021/money-market-innovations/bprotocolexplainer.png b/static/img/2021/money-market-innovations/bprotocolexplainer.png
index f9f364a3..ab46578d 100644
Binary files a/static/img/2021/money-market-innovations/bprotocolexplainer.png and b/static/img/2021/money-market-innovations/bprotocolexplainer.png differ
diff --git a/static/img/2021/money-market-innovations/bprotocolexplainer.webp b/static/img/2021/money-market-innovations/bprotocolexplainer.webp
new file mode 100644
index 00000000..05aa6bd9
Binary files /dev/null and b/static/img/2021/money-market-innovations/bprotocolexplainer.webp differ
diff --git a/static/img/2021/money-market-innovations/cover-en.png b/static/img/2021/money-market-innovations/cover-en.png
index b9c2aa08..c1031e02 100644
Binary files a/static/img/2021/money-market-innovations/cover-en.png and b/static/img/2021/money-market-innovations/cover-en.png differ
diff --git a/static/img/2021/money-market-innovations/cover-en.webp b/static/img/2021/money-market-innovations/cover-en.webp
new file mode 100644
index 00000000..cce29a55
Binary files /dev/null and b/static/img/2021/money-market-innovations/cover-en.webp differ
diff --git a/static/img/2021/money-market-innovations/cover.png b/static/img/2021/money-market-innovations/cover.png
index 3228b027..27c5cbc6 100644
Binary files a/static/img/2021/money-market-innovations/cover.png and b/static/img/2021/money-market-innovations/cover.png differ
diff --git a/static/img/2021/money-market-innovations/cover.webp b/static/img/2021/money-market-innovations/cover.webp
new file mode 100644
index 00000000..e28f053f
Binary files /dev/null and b/static/img/2021/money-market-innovations/cover.webp differ
diff --git a/static/img/2021/money-market-innovations/liquity.png b/static/img/2021/money-market-innovations/liquity.png
index 5b086bdd..c702b4a9 100644
Binary files a/static/img/2021/money-market-innovations/liquity.png and b/static/img/2021/money-market-innovations/liquity.png differ
diff --git a/static/img/2021/money-market-innovations/liquity.webp b/static/img/2021/money-market-innovations/liquity.webp
new file mode 100644
index 00000000..ff068183
Binary files /dev/null and b/static/img/2021/money-market-innovations/liquity.webp differ
diff --git a/static/img/2021/money-market-innovations/mimo-capital-par.png b/static/img/2021/money-market-innovations/mimo-capital-par.png
index e40e6b93..baa83fd6 100644
Binary files a/static/img/2021/money-market-innovations/mimo-capital-par.png and b/static/img/2021/money-market-innovations/mimo-capital-par.png differ
diff --git a/static/img/2021/money-market-innovations/mimo-capital-par.webp b/static/img/2021/money-market-innovations/mimo-capital-par.webp
new file mode 100644
index 00000000..10a367bf
Binary files /dev/null and b/static/img/2021/money-market-innovations/mimo-capital-par.webp differ
diff --git a/static/img/2021/money-market-innovations/raiprice.png b/static/img/2021/money-market-innovations/raiprice.png
index affd3547..f64365ff 100644
Binary files a/static/img/2021/money-market-innovations/raiprice.png and b/static/img/2021/money-market-innovations/raiprice.png differ
diff --git a/static/img/2021/money-market-innovations/raiprice.webp b/static/img/2021/money-market-innovations/raiprice.webp
new file mode 100644
index 00000000..babb1365
Binary files /dev/null and b/static/img/2021/money-market-innovations/raiprice.webp differ
diff --git a/static/img/2021/money-market-recipes/EURS-farming-tokenbrice-en.png b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice-en.png
new file mode 100644
index 00000000..105d33cd
Binary files /dev/null and b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice-en.png differ
diff --git a/static/img/2021/money-market-recipes/EURS-farming-tokenbrice-en.webp b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice-en.webp
new file mode 100644
index 00000000..3b68c62a
Binary files /dev/null and b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice-en.webp differ
diff --git a/static/img/2021/money-market-recipes/EURS-farming-tokenbrice.png b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice.png
new file mode 100644
index 00000000..38c37055
Binary files /dev/null and b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice.png differ
diff --git a/static/img/2021/money-market-recipes/EURS-farming-tokenbrice.webp b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice.webp
new file mode 100644
index 00000000..a56d4be1
Binary files /dev/null and b/static/img/2021/money-market-recipes/EURS-farming-tokenbrice.webp differ
diff --git a/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice-en.png b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice-en.png
new file mode 100644
index 00000000..98e4fd29
Binary files /dev/null and b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice-en.png differ
diff --git a/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice-en.webp b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice-en.webp
new file mode 100644
index 00000000..6e8c3d4e
Binary files /dev/null and b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice-en.webp differ
diff --git a/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice.png b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice.png
new file mode 100644
index 00000000..4ca2914e
Binary files /dev/null and b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice.png differ
diff --git a/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice.webp b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice.webp
new file mode 100644
index 00000000..009baec6
Binary files /dev/null and b/static/img/2021/money-market-recipes/alchemix-investment-tokenbrice.webp differ
diff --git a/static/img/2021/money-market-recipes/eur-usd-1y.png b/static/img/2021/money-market-recipes/eur-usd-1y.png
new file mode 100644
index 00000000..3ad1e200
Binary files /dev/null and b/static/img/2021/money-market-recipes/eur-usd-1y.png differ
diff --git a/static/img/2021/money-market-recipes/eur-usd-1y.webp b/static/img/2021/money-market-recipes/eur-usd-1y.webp
new file mode 100644
index 00000000..611f9bc4
Binary files /dev/null and b/static/img/2021/money-market-recipes/eur-usd-1y.webp differ
diff --git a/static/img/2021/money-market-recipes/mm-long-token-tokenbrice-en.png b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice-en.png
new file mode 100644
index 00000000..3a85d05d
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice-en.png differ
diff --git a/static/img/2021/money-market-recipes/mm-long-token-tokenbrice-en.webp b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice-en.webp
new file mode 100644
index 00000000..8863865d
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice-en.webp differ
diff --git a/static/img/2021/money-market-recipes/mm-long-token-tokenbrice.png b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice.png
new file mode 100644
index 00000000..e1c2b557
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice.png differ
diff --git a/static/img/2021/money-market-recipes/mm-long-token-tokenbrice.webp b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice.webp
new file mode 100644
index 00000000..a46199b8
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-token-tokenbrice.webp differ
diff --git a/static/img/2021/money-market-recipes/mm-long-tokenbrice-en.png b/static/img/2021/money-market-recipes/mm-long-tokenbrice-en.png
new file mode 100644
index 00000000..abbdfe9e
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-tokenbrice-en.png differ
diff --git a/static/img/2021/money-market-recipes/mm-long-tokenbrice-en.webp b/static/img/2021/money-market-recipes/mm-long-tokenbrice-en.webp
new file mode 100644
index 00000000..3a2a5375
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-tokenbrice-en.webp differ
diff --git a/static/img/2021/money-market-recipes/mm-long-tokenbrice.png b/static/img/2021/money-market-recipes/mm-long-tokenbrice.png
new file mode 100644
index 00000000..e5591a79
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-tokenbrice.png differ
diff --git a/static/img/2021/money-market-recipes/mm-long-tokenbrice.webp b/static/img/2021/money-market-recipes/mm-long-tokenbrice.webp
new file mode 100644
index 00000000..fb5f7c12
Binary files /dev/null and b/static/img/2021/money-market-recipes/mm-long-tokenbrice.webp differ
diff --git a/static/img/2021/money-market-recipes/money-market-recipes-cover.png b/static/img/2021/money-market-recipes/money-market-recipes-cover.png
new file mode 100644
index 00000000..843312cb
Binary files /dev/null and b/static/img/2021/money-market-recipes/money-market-recipes-cover.png differ
diff --git a/static/img/2021/money-market-recipes/money-market-recipes-cover.webp b/static/img/2021/money-market-recipes/money-market-recipes-cover.webp
new file mode 100644
index 00000000..b05ecb9d
Binary files /dev/null and b/static/img/2021/money-market-recipes/money-market-recipes-cover.webp differ
diff --git a/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice-en.png b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice-en.png
new file mode 100644
index 00000000..f0ed9a96
Binary files /dev/null and b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice-en.png differ
diff --git a/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice-en.webp b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice-en.webp
new file mode 100644
index 00000000..0980ba87
Binary files /dev/null and b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice-en.webp differ
diff --git a/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice.png b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice.png
new file mode 100644
index 00000000..fe72c48e
Binary files /dev/null and b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice.png differ
diff --git a/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice.webp b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice.webp
new file mode 100644
index 00000000..f9db18cf
Binary files /dev/null and b/static/img/2021/money-market-recipes/polygon-aave-curve-eth-farming-tokenbrice.webp differ
diff --git "a/static/img/2021/money-market-recipes/recettes-march\303\251-d'actif-cover-tokenbrice.png" "b/static/img/2021/money-market-recipes/recettes-march\303\251-d'actif-cover-tokenbrice.png"
new file mode 100644
index 00000000..54774876
Binary files /dev/null and "b/static/img/2021/money-market-recipes/recettes-march\303\251-d'actif-cover-tokenbrice.png" differ
diff --git "a/static/img/2021/money-market-recipes/recettes-march\303\251-d'actif-cover-tokenbrice.webp" "b/static/img/2021/money-market-recipes/recettes-march\303\251-d'actif-cover-tokenbrice.webp"
new file mode 100644
index 00000000..d758ba06
Binary files /dev/null and "b/static/img/2021/money-market-recipes/recettes-march\303\251-d'actif-cover-tokenbrice.webp" differ
diff --git a/static/img/2021/money-market-risks/aave-safety-module.webp b/static/img/2021/money-market-risks/aave-safety-module.webp
new file mode 100644
index 00000000..67f30fca
Binary files /dev/null and b/static/img/2021/money-market-risks/aave-safety-module.webp differ
diff --git a/static/img/2021/money-market-risks/aave-usdc.webp b/static/img/2021/money-market-risks/aave-usdc.webp
new file mode 100644
index 00000000..e5435526
Binary files /dev/null and b/static/img/2021/money-market-risks/aave-usdc.webp differ
diff --git a/static/img/2021/money-market-risks/chainlink.webp b/static/img/2021/money-market-risks/chainlink.webp
new file mode 100644
index 00000000..d8823ca8
Binary files /dev/null and b/static/img/2021/money-market-risks/chainlink.webp differ
diff --git a/static/img/2021/money-market-risks/cream.webp b/static/img/2021/money-market-risks/cream.webp
new file mode 100644
index 00000000..c3b70ea5
Binary files /dev/null and b/static/img/2021/money-market-risks/cream.webp differ
diff --git a/static/img/2021/money-market-risks/defiprime-insurance.webp b/static/img/2021/money-market-risks/defiprime-insurance.webp
new file mode 100644
index 00000000..bd769e3b
Binary files /dev/null and b/static/img/2021/money-market-risks/defiprime-insurance.webp differ
diff --git a/static/img/2021/money-market-risks/defiscore.webp b/static/img/2021/money-market-risks/defiscore.webp
new file mode 100644
index 00000000..32ee11d4
Binary files /dev/null and b/static/img/2021/money-market-risks/defiscore.webp differ
diff --git a/static/img/2021/money-market-risks/robovc.webp b/static/img/2021/money-market-risks/robovc.webp
new file mode 100644
index 00000000..3337c380
Binary files /dev/null and b/static/img/2021/money-market-risks/robovc.webp differ
diff --git a/static/img/2021/nft-usecases/88DeLo.png b/static/img/2021/nft-usecases/88DeLo.png
index a771e237..b842d2a3 100644
Binary files a/static/img/2021/nft-usecases/88DeLo.png and b/static/img/2021/nft-usecases/88DeLo.png differ
diff --git a/static/img/2021/nft-usecases/88DeLo.webp b/static/img/2021/nft-usecases/88DeLo.webp
new file mode 100644
index 00000000..1da89830
Binary files /dev/null and b/static/img/2021/nft-usecases/88DeLo.webp differ
diff --git a/static/img/2021/nft-usecases/delo-sale.png b/static/img/2021/nft-usecases/delo-sale.png
index e3b78a31..c3407008 100644
Binary files a/static/img/2021/nft-usecases/delo-sale.png and b/static/img/2021/nft-usecases/delo-sale.png differ
diff --git a/static/img/2021/nft-usecases/delo-sale.webp b/static/img/2021/nft-usecases/delo-sale.webp
new file mode 100644
index 00000000..10824776
Binary files /dev/null and b/static/img/2021/nft-usecases/delo-sale.webp differ
diff --git a/static/img/2021/nft-usecases/meuporg.jpg b/static/img/2021/nft-usecases/meuporg.jpg
index 11049509..6cd31ceb 100644
Binary files a/static/img/2021/nft-usecases/meuporg.jpg and b/static/img/2021/nft-usecases/meuporg.jpg differ
diff --git a/static/img/2021/nft-usecases/meuporg.webp b/static/img/2021/nft-usecases/meuporg.webp
new file mode 100644
index 00000000..8e694b18
Binary files /dev/null and b/static/img/2021/nft-usecases/meuporg.webp differ
diff --git a/static/img/2021/nft-usecases/moloch.jpeg b/static/img/2021/nft-usecases/moloch.jpeg
index 58e4ff81..f7b04e17 100644
Binary files a/static/img/2021/nft-usecases/moloch.jpeg and b/static/img/2021/nft-usecases/moloch.jpeg differ
diff --git a/static/img/2021/nft-usecases/moloch.webp b/static/img/2021/nft-usecases/moloch.webp
new file mode 100644
index 00000000..3cb565bc
Binary files /dev/null and b/static/img/2021/nft-usecases/moloch.webp differ
diff --git a/static/img/2021/nft-usecases/punk-attributes-count.png b/static/img/2021/nft-usecases/punk-attributes-count.png
index cc4593ee..8f23832d 100644
Binary files a/static/img/2021/nft-usecases/punk-attributes-count.png and b/static/img/2021/nft-usecases/punk-attributes-count.png differ
diff --git a/static/img/2021/nft-usecases/punk-attributes-count.webp b/static/img/2021/nft-usecases/punk-attributes-count.webp
new file mode 100644
index 00000000..5a017fb6
Binary files /dev/null and b/static/img/2021/nft-usecases/punk-attributes-count.webp differ
diff --git a/static/img/2021/nft-usecases/punk-stats.png b/static/img/2021/nft-usecases/punk-stats.png
index 10402ea6..8c2651cd 100644
Binary files a/static/img/2021/nft-usecases/punk-stats.png and b/static/img/2021/nft-usecases/punk-stats.png differ
diff --git a/static/img/2021/nft-usecases/punk-stats.webp b/static/img/2021/nft-usecases/punk-stats.webp
new file mode 100644
index 00000000..4616d1c4
Binary files /dev/null and b/static/img/2021/nft-usecases/punk-stats.webp differ
diff --git a/static/img/2021/nft-usecases/punk-variety-2x.png b/static/img/2021/nft-usecases/punk-variety-2x.png
index f379d544..bc708149 100644
Binary files a/static/img/2021/nft-usecases/punk-variety-2x.png and b/static/img/2021/nft-usecases/punk-variety-2x.png differ
diff --git a/static/img/2021/nft-usecases/punk-variety-2x.webp b/static/img/2021/nft-usecases/punk-variety-2x.webp
new file mode 100644
index 00000000..93a04d85
Binary files /dev/null and b/static/img/2021/nft-usecases/punk-variety-2x.webp differ
diff --git a/static/img/2021/pegged-assets/bac-90days.webp b/static/img/2021/pegged-assets/bac-90days.webp
new file mode 100644
index 00000000..de2c3262
Binary files /dev/null and b/static/img/2021/pegged-assets/bac-90days.webp differ
diff --git a/static/img/2021/pegged-assets/curve-yield-pool.webp b/static/img/2021/pegged-assets/curve-yield-pool.webp
new file mode 100644
index 00000000..67ff9e4b
Binary files /dev/null and b/static/img/2021/pegged-assets/curve-yield-pool.webp differ
diff --git a/static/img/2021/pegged-assets/frax-price.webp b/static/img/2021/pegged-assets/frax-price.webp
new file mode 100644
index 00000000..9e0aec5b
Binary files /dev/null and b/static/img/2021/pegged-assets/frax-price.webp differ
diff --git a/static/img/2021/pegged-assets/money-god-meme.webp b/static/img/2021/pegged-assets/money-god-meme.webp
new file mode 100644
index 00000000..b50e6afe
Binary files /dev/null and b/static/img/2021/pegged-assets/money-god-meme.webp differ
diff --git a/static/img/2021/pegged-assets/reflexer-spread.webp b/static/img/2021/pegged-assets/reflexer-spread.webp
new file mode 100644
index 00000000..04356329
Binary files /dev/null and b/static/img/2021/pegged-assets/reflexer-spread.webp differ
diff --git a/static/img/2021/pegged-assets/stablecoin-growth.webp b/static/img/2021/pegged-assets/stablecoin-growth.webp
new file mode 100644
index 00000000..ce3fc2a0
Binary files /dev/null and b/static/img/2021/pegged-assets/stablecoin-growth.webp differ
diff --git a/static/img/2021/pool-together/addictions.png b/static/img/2021/pool-together/addictions.png
new file mode 100644
index 00000000..76e29455
Binary files /dev/null and b/static/img/2021/pool-together/addictions.png differ
diff --git a/static/img/2021/pool-together/addictions.webp b/static/img/2021/pool-together/addictions.webp
new file mode 100644
index 00000000..c88e221c
Binary files /dev/null and b/static/img/2021/pool-together/addictions.webp differ
diff --git a/static/img/2021/pool-together/comparaison.png b/static/img/2021/pool-together/comparaison.png
new file mode 100644
index 00000000..e1269bf7
Binary files /dev/null and b/static/img/2021/pool-together/comparaison.png differ
diff --git a/static/img/2021/pool-together/comparaison.webp b/static/img/2021/pool-together/comparaison.webp
new file mode 100644
index 00000000..f9414fc7
Binary files /dev/null and b/static/img/2021/pool-together/comparaison.webp differ
diff --git a/static/img/2021/pool-together/cover-EN.png b/static/img/2021/pool-together/cover-EN.png
new file mode 100644
index 00000000..e62bf397
Binary files /dev/null and b/static/img/2021/pool-together/cover-EN.png differ
diff --git a/static/img/2021/pool-together/cover-EN.webp b/static/img/2021/pool-together/cover-EN.webp
new file mode 100644
index 00000000..8f3a378c
Binary files /dev/null and b/static/img/2021/pool-together/cover-EN.webp differ
diff --git a/static/img/2021/pool-together/cover.png b/static/img/2021/pool-together/cover.png
new file mode 100644
index 00000000..bd58b0bc
Binary files /dev/null and b/static/img/2021/pool-together/cover.png differ
diff --git a/static/img/2021/pool-together/cover.webp b/static/img/2021/pool-together/cover.webp
new file mode 100644
index 00000000..e3103efb
Binary files /dev/null and b/static/img/2021/pool-together/cover.webp differ
diff --git a/static/img/2021/pool-together/evolution-2007-2017.png b/static/img/2021/pool-together/evolution-2007-2017.png
new file mode 100644
index 00000000..ef9680a8
Binary files /dev/null and b/static/img/2021/pool-together/evolution-2007-2017.png differ
diff --git a/static/img/2021/pool-together/evolution-2007-2017.webp b/static/img/2021/pool-together/evolution-2007-2017.webp
new file mode 100644
index 00000000..015a9a49
Binary files /dev/null and b/static/img/2021/pool-together/evolution-2007-2017.webp differ
diff --git a/static/img/2021/pool-together/fdj-distribution.jfif b/static/img/2021/pool-together/fdj-distribution.jfif
new file mode 100644
index 00000000..cc3cd0c9
Binary files /dev/null and b/static/img/2021/pool-together/fdj-distribution.jfif differ
diff --git a/static/img/2021/pool-together/prize-breakdown-old.png b/static/img/2021/pool-together/prize-breakdown-old.png
new file mode 100644
index 00000000..238521ec
Binary files /dev/null and b/static/img/2021/pool-together/prize-breakdown-old.png differ
diff --git a/static/img/2021/pool-together/prize-breakdown-old.webp b/static/img/2021/pool-together/prize-breakdown-old.webp
new file mode 100644
index 00000000..e984cdbe
Binary files /dev/null and b/static/img/2021/pool-together/prize-breakdown-old.webp differ
diff --git a/static/img/2021/pool-together/prize-breakdown.png b/static/img/2021/pool-together/prize-breakdown.png
new file mode 100644
index 00000000..d1e6129d
Binary files /dev/null and b/static/img/2021/pool-together/prize-breakdown.png differ
diff --git a/static/img/2021/pool-together/prize-breakdown.webp b/static/img/2021/pool-together/prize-breakdown.webp
new file mode 100644
index 00000000..f3f3423b
Binary files /dev/null and b/static/img/2021/pool-together/prize-breakdown.webp differ
diff --git a/static/img/2021/pool-together/winamax-pub.jpg b/static/img/2021/pool-together/winamax-pub.jpg
new file mode 100644
index 00000000..b88d09ef
Binary files /dev/null and b/static/img/2021/pool-together/winamax-pub.jpg differ
diff --git a/static/img/2021/pool-together/winamax-pub.webp b/static/img/2021/pool-together/winamax-pub.webp
new file mode 100644
index 00000000..7c86cd96
Binary files /dev/null and b/static/img/2021/pool-together/winamax-pub.webp differ
diff --git a/static/img/2021/pool-together/winning.png b/static/img/2021/pool-together/winning.png
new file mode 100644
index 00000000..919f4fe8
Binary files /dev/null and b/static/img/2021/pool-together/winning.png differ
diff --git a/static/img/2021/pool-together/winning.webp b/static/img/2021/pool-together/winning.webp
new file mode 100644
index 00000000..7d1b9213
Binary files /dev/null and b/static/img/2021/pool-together/winning.webp differ
diff --git a/static/img/2021/reflexer-rai/control-theory.png b/static/img/2021/reflexer-rai/control-theory.png
new file mode 100644
index 00000000..646ffb0d
Binary files /dev/null and b/static/img/2021/reflexer-rai/control-theory.png differ
diff --git a/static/img/2021/reflexer-rai/control-theory.webp b/static/img/2021/reflexer-rai/control-theory.webp
new file mode 100644
index 00000000..de612a36
Binary files /dev/null and b/static/img/2021/reflexer-rai/control-theory.webp differ
diff --git a/static/img/2021/reflexer-rai/cover.png b/static/img/2021/reflexer-rai/cover.png
new file mode 100644
index 00000000..a8f3d799
Binary files /dev/null and b/static/img/2021/reflexer-rai/cover.png differ
diff --git a/static/img/2021/reflexer-rai/cover.webp b/static/img/2021/reflexer-rai/cover.webp
new file mode 100644
index 00000000..5b790c30
Binary files /dev/null and b/static/img/2021/reflexer-rai/cover.webp differ
diff --git a/static/img/2021/reflexer-rai/dai-collateral.png b/static/img/2021/reflexer-rai/dai-collateral.png
new file mode 100644
index 00000000..c4fad902
Binary files /dev/null and b/static/img/2021/reflexer-rai/dai-collateral.png differ
diff --git a/static/img/2021/reflexer-rai/dai-collateral.webp b/static/img/2021/reflexer-rai/dai-collateral.webp
new file mode 100644
index 00000000..e4752931
Binary files /dev/null and b/static/img/2021/reflexer-rai/dai-collateral.webp differ
diff --git a/static/img/2021/reflexer-rai/frax-collateral.png b/static/img/2021/reflexer-rai/frax-collateral.png
new file mode 100644
index 00000000..5f82da40
Binary files /dev/null and b/static/img/2021/reflexer-rai/frax-collateral.png differ
diff --git a/static/img/2021/reflexer-rai/frax-collateral.webp b/static/img/2021/reflexer-rai/frax-collateral.webp
new file mode 100644
index 00000000..18df3f4a
Binary files /dev/null and b/static/img/2021/reflexer-rai/frax-collateral.webp differ
diff --git a/static/img/2021/reflexer-rai/fuse-rai.png b/static/img/2021/reflexer-rai/fuse-rai.png
new file mode 100644
index 00000000..d178a90b
Binary files /dev/null and b/static/img/2021/reflexer-rai/fuse-rai.png differ
diff --git a/static/img/2021/reflexer-rai/fuse-rai.webp b/static/img/2021/reflexer-rai/fuse-rai.webp
new file mode 100644
index 00000000..8916a368
Binary files /dev/null and b/static/img/2021/reflexer-rai/fuse-rai.webp differ
diff --git a/static/img/2021/reflexer-rai/marcheinfredemption-en.png b/static/img/2021/reflexer-rai/marcheinfredemption-en.png
new file mode 100644
index 00000000..ef275eb8
Binary files /dev/null and b/static/img/2021/reflexer-rai/marcheinfredemption-en.png differ
diff --git a/static/img/2021/reflexer-rai/marcheinfredemption-en.webp b/static/img/2021/reflexer-rai/marcheinfredemption-en.webp
new file mode 100644
index 00000000..3ecbf58e
Binary files /dev/null and b/static/img/2021/reflexer-rai/marcheinfredemption-en.webp differ
diff --git a/static/img/2021/reflexer-rai/marcheinfredemption.png b/static/img/2021/reflexer-rai/marcheinfredemption.png
new file mode 100644
index 00000000..e1d1643f
Binary files /dev/null and b/static/img/2021/reflexer-rai/marcheinfredemption.png differ
diff --git a/static/img/2021/reflexer-rai/marcheinfredemption.webp b/static/img/2021/reflexer-rai/marcheinfredemption.webp
new file mode 100644
index 00000000..16705690
Binary files /dev/null and b/static/img/2021/reflexer-rai/marcheinfredemption.webp differ
diff --git a/static/img/2021/reflexer-rai/marchesupredemption-en.PNG b/static/img/2021/reflexer-rai/marchesupredemption-en.PNG
new file mode 100644
index 00000000..3482fab3
Binary files /dev/null and b/static/img/2021/reflexer-rai/marchesupredemption-en.PNG differ
diff --git a/static/img/2021/reflexer-rai/marchesupredemption-en.webp b/static/img/2021/reflexer-rai/marchesupredemption-en.webp
new file mode 100644
index 00000000..9906c438
Binary files /dev/null and b/static/img/2021/reflexer-rai/marchesupredemption-en.webp differ
diff --git a/static/img/2021/reflexer-rai/marchesupredemption.PNG b/static/img/2021/reflexer-rai/marchesupredemption.PNG
new file mode 100644
index 00000000..4a1a6c2d
Binary files /dev/null and b/static/img/2021/reflexer-rai/marchesupredemption.PNG differ
diff --git a/static/img/2021/reflexer-rai/marchesupredemption.webp b/static/img/2021/reflexer-rai/marchesupredemption.webp
new file mode 100644
index 00000000..a4ff3864
Binary files /dev/null and b/static/img/2021/reflexer-rai/marchesupredemption.webp differ
diff --git a/static/img/2021/reflexer-rai/theorie-du-controle.png b/static/img/2021/reflexer-rai/theorie-du-controle.png
new file mode 100644
index 00000000..c8dd841e
Binary files /dev/null and b/static/img/2021/reflexer-rai/theorie-du-controle.png differ
diff --git a/static/img/2021/reflexer-rai/theorie-du-controle.webp b/static/img/2021/reflexer-rai/theorie-du-controle.webp
new file mode 100644
index 00000000..f93e5311
Binary files /dev/null and b/static/img/2021/reflexer-rai/theorie-du-controle.webp differ
diff --git a/static/img/2021/risk-tranching/88mph.webp b/static/img/2021/risk-tranching/88mph.webp
new file mode 100644
index 00000000..f35fab36
Binary files /dev/null and b/static/img/2021/risk-tranching/88mph.webp differ
diff --git a/static/img/2021/risk-tranching/aave-debank.webp b/static/img/2021/risk-tranching/aave-debank.webp
new file mode 100644
index 00000000..fcbf6c11
Binary files /dev/null and b/static/img/2021/risk-tranching/aave-debank.webp differ
diff --git a/static/img/2021/risk-tranching/saffron-debank.webp b/static/img/2021/risk-tranching/saffron-debank.webp
new file mode 100644
index 00000000..4a280b15
Binary files /dev/null and b/static/img/2021/risk-tranching/saffron-debank.webp differ
diff --git a/static/img/2021/risk-tranching/saffron.webp b/static/img/2021/risk-tranching/saffron.webp
new file mode 100644
index 00000000..ae8e67ba
Binary files /dev/null and b/static/img/2021/risk-tranching/saffron.webp differ
diff --git a/static/img/2021/scifidefi/space-bulla.gif b/static/img/2021/scifidefi/space-bulla.gif
deleted file mode 100644
index 9d2a7043..00000000
Binary files a/static/img/2021/scifidefi/space-bulla.gif and /dev/null differ
diff --git a/static/img/2021/scifidefi/space-bulla.mp4 b/static/img/2021/scifidefi/space-bulla.mp4
new file mode 100644
index 00000000..4e73a8fe
Binary files /dev/null and b/static/img/2021/scifidefi/space-bulla.mp4 differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/cover.png b/static/img/2021/seigniorage-basis-vs-esd/cover.png
index da04e2ed..2f2ee210 100644
Binary files a/static/img/2021/seigniorage-basis-vs-esd/cover.png and b/static/img/2021/seigniorage-basis-vs-esd/cover.png differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/cover.webp b/static/img/2021/seigniorage-basis-vs-esd/cover.webp
new file mode 100644
index 00000000..48b2457e
Binary files /dev/null and b/static/img/2021/seigniorage-basis-vs-esd/cover.webp differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.png b/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.png
index 2a1bd283..3930fa0e 100644
Binary files a/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.png and b/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.png differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.webp b/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.webp
new file mode 100644
index 00000000..5f9e084e
Binary files /dev/null and b/static/img/2021/seigniorage-basis-vs-esd/dsd-raindrop.webp differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/harvest.png b/static/img/2021/seigniorage-basis-vs-esd/harvest.png
index da40ee27..bda1a9ee 100644
Binary files a/static/img/2021/seigniorage-basis-vs-esd/harvest.png and b/static/img/2021/seigniorage-basis-vs-esd/harvest.png differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/harvest.webp b/static/img/2021/seigniorage-basis-vs-esd/harvest.webp
new file mode 100644
index 00000000..42593577
Binary files /dev/null and b/static/img/2021/seigniorage-basis-vs-esd/harvest.webp differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.png b/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.png
index 2d1397d9..df553488 100644
Binary files a/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.png and b/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.png differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.webp b/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.webp
new file mode 100644
index 00000000..afc6a38f
Binary files /dev/null and b/static/img/2021/seigniorage-basis-vs-esd/liquidity-esd-bac.webp differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/vfat.png b/static/img/2021/seigniorage-basis-vs-esd/vfat.png
index 13167c91..725d71e3 100644
Binary files a/static/img/2021/seigniorage-basis-vs-esd/vfat.png and b/static/img/2021/seigniorage-basis-vs-esd/vfat.png differ
diff --git a/static/img/2021/seigniorage-basis-vs-esd/vfat.webp b/static/img/2021/seigniorage-basis-vs-esd/vfat.webp
new file mode 100644
index 00000000..fa04d5e6
Binary files /dev/null and b/static/img/2021/seigniorage-basis-vs-esd/vfat.webp differ
diff --git a/static/img/2021/technofeudalism-sovereign-individual/da-vinci-aile.webp b/static/img/2021/technofeudalism-sovereign-individual/da-vinci-aile.webp
new file mode 100644
index 00000000..16960eb1
Binary files /dev/null and b/static/img/2021/technofeudalism-sovereign-individual/da-vinci-aile.webp differ
diff --git a/static/img/2021/technofeudalism-sovereign-individual/francis-bacon.webp b/static/img/2021/technofeudalism-sovereign-individual/francis-bacon.webp
new file mode 100644
index 00000000..c7bfe3d4
Binary files /dev/null and b/static/img/2021/technofeudalism-sovereign-individual/francis-bacon.webp differ
diff --git a/static/img/2021/technofeudalism-sovereign-individual/sovereign-individual-book.webp b/static/img/2021/technofeudalism-sovereign-individual/sovereign-individual-book.webp
new file mode 100644
index 00000000..46d80db8
Binary files /dev/null and b/static/img/2021/technofeudalism-sovereign-individual/sovereign-individual-book.webp differ
diff --git a/static/img/2021/tokenbrice-twitch/buzz.webp b/static/img/2021/tokenbrice-twitch/buzz.webp
new file mode 100644
index 00000000..87d12029
Binary files /dev/null and b/static/img/2021/tokenbrice-twitch/buzz.webp differ
diff --git a/static/img/2021/tokenbrice-twitch/francebaiseouais.webp b/static/img/2021/tokenbrice-twitch/francebaiseouais.webp
new file mode 100644
index 00000000..573b9089
Binary files /dev/null and b/static/img/2021/tokenbrice-twitch/francebaiseouais.webp differ
diff --git a/static/img/2021/tokenbrice-twitch/troll-en.webp b/static/img/2021/tokenbrice-twitch/troll-en.webp
new file mode 100644
index 00000000..dc0bef33
Binary files /dev/null and b/static/img/2021/tokenbrice-twitch/troll-en.webp differ
diff --git a/static/img/2022/aave-gho-stablecoin/aave-collateral.png b/static/img/2022/aave-gho-stablecoin/aave-collateral.png
new file mode 100644
index 00000000..f7f03eb0
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/aave-collateral.png differ
diff --git a/static/img/2022/aave-gho-stablecoin/aave-collateral.webp b/static/img/2022/aave-gho-stablecoin/aave-collateral.webp
new file mode 100644
index 00000000..16cd13ed
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/aave-collateral.webp differ
diff --git a/static/img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.png b/static/img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.png
new file mode 100644
index 00000000..24ce4b3b
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.png differ
diff --git a/static/img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.webp b/static/img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.webp
new file mode 100644
index 00000000..adb58a86
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/aave-gho-stablecoin-cover.webp differ
diff --git a/static/img/2022/aave-gho-stablecoin/aaveDAO-treasury.png b/static/img/2022/aave-gho-stablecoin/aaveDAO-treasury.png
new file mode 100644
index 00000000..e8ba423d
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/aaveDAO-treasury.png differ
diff --git a/static/img/2022/aave-gho-stablecoin/aaveDAO-treasury.webp b/static/img/2022/aave-gho-stablecoin/aaveDAO-treasury.webp
new file mode 100644
index 00000000..62c5b685
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/aaveDAO-treasury.webp differ
diff --git a/static/img/2022/aave-gho-stablecoin/dai-collateral.png b/static/img/2022/aave-gho-stablecoin/dai-collateral.png
new file mode 100644
index 00000000..db6a4881
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/dai-collateral.png differ
diff --git a/static/img/2022/aave-gho-stablecoin/dai-collateral.webp b/static/img/2022/aave-gho-stablecoin/dai-collateral.webp
new file mode 100644
index 00000000..f7fcbfab
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/dai-collateral.webp differ
diff --git a/static/img/2022/aave-gho-stablecoin/gho-facilitators.png b/static/img/2022/aave-gho-stablecoin/gho-facilitators.png
new file mode 100644
index 00000000..23da44d0
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/gho-facilitators.png differ
diff --git a/static/img/2022/aave-gho-stablecoin/gho-facilitators.webp b/static/img/2022/aave-gho-stablecoin/gho-facilitators.webp
new file mode 100644
index 00000000..c6b84dca
Binary files /dev/null and b/static/img/2022/aave-gho-stablecoin/gho-facilitators.webp differ
diff --git a/static/img/2022/balancer-wars/LBP.png b/static/img/2022/balancer-wars/LBP.png
new file mode 100644
index 00000000..dbf90ed5
Binary files /dev/null and b/static/img/2022/balancer-wars/LBP.png differ
diff --git a/static/img/2022/balancer-wars/LBP.webp b/static/img/2022/balancer-wars/LBP.webp
new file mode 100644
index 00000000..ed682403
Binary files /dev/null and b/static/img/2022/balancer-wars/LBP.webp differ
diff --git a/static/img/2022/balancer-wars/balancer-trinity.png b/static/img/2022/balancer-wars/balancer-trinity.png
new file mode 100644
index 00000000..1c8930c7
Binary files /dev/null and b/static/img/2022/balancer-wars/balancer-trinity.png differ
diff --git a/static/img/2022/balancer-wars/balancer-trinity.webp b/static/img/2022/balancer-wars/balancer-trinity.webp
new file mode 100644
index 00000000..77165300
Binary files /dev/null and b/static/img/2022/balancer-wars/balancer-trinity.webp differ
diff --git a/static/img/2022/balancer-wars/balancer-wars-cover.png b/static/img/2022/balancer-wars/balancer-wars-cover.png
new file mode 100644
index 00000000..d500bdd9
Binary files /dev/null and b/static/img/2022/balancer-wars/balancer-wars-cover.png differ
diff --git a/static/img/2022/balancer-wars/balancer-wars-cover.webp b/static/img/2022/balancer-wars/balancer-wars-cover.webp
new file mode 100644
index 00000000..bb5e16bf
Binary files /dev/null and b/static/img/2022/balancer-wars/balancer-wars-cover.webp differ
diff --git a/static/img/2022/balancer-wars/defiwars-balancer.png b/static/img/2022/balancer-wars/defiwars-balancer.png
new file mode 100644
index 00000000..ac84fc04
Binary files /dev/null and b/static/img/2022/balancer-wars/defiwars-balancer.png differ
diff --git a/static/img/2022/balancer-wars/defiwars-balancer.webp b/static/img/2022/balancer-wars/defiwars-balancer.webp
new file mode 100644
index 00000000..c2fa2ec9
Binary files /dev/null and b/static/img/2022/balancer-wars/defiwars-balancer.webp differ
diff --git a/static/img/2022/balancer-wars/dex-overview.png b/static/img/2022/balancer-wars/dex-overview.png
new file mode 100644
index 00000000..f6d1ced3
Binary files /dev/null and b/static/img/2022/balancer-wars/dex-overview.png differ
diff --git a/static/img/2022/balancer-wars/dex-overview.webp b/static/img/2022/balancer-wars/dex-overview.webp
new file mode 100644
index 00000000..fe5ad12b
Binary files /dev/null and b/static/img/2022/balancer-wars/dex-overview.webp differ
diff --git a/static/img/2022/balancer-wars/llama-airforce-aura.png b/static/img/2022/balancer-wars/llama-airforce-aura.png
new file mode 100644
index 00000000..eab8a9e8
Binary files /dev/null and b/static/img/2022/balancer-wars/llama-airforce-aura.png differ
diff --git a/static/img/2022/balancer-wars/llama-airforce-aura.webp b/static/img/2022/balancer-wars/llama-airforce-aura.webp
new file mode 100644
index 00000000..174e8829
Binary files /dev/null and b/static/img/2022/balancer-wars/llama-airforce-aura.webp differ
diff --git a/static/img/2022/curve-wars-l2/bentCVX-lock.png b/static/img/2022/curve-wars-l2/bentCVX-lock.png
new file mode 100644
index 00000000..b5e46a08
Binary files /dev/null and b/static/img/2022/curve-wars-l2/bentCVX-lock.png differ
diff --git a/static/img/2022/curve-wars-l2/bentCVX-lock.webp b/static/img/2022/curve-wars-l2/bentCVX-lock.webp
new file mode 100644
index 00000000..80403472
Binary files /dev/null and b/static/img/2022/curve-wars-l2/bentCVX-lock.webp differ
diff --git a/static/img/2022/curve-wars-l2/bentfinance-fees.png b/static/img/2022/curve-wars-l2/bentfinance-fees.png
new file mode 100644
index 00000000..e10bf5dd
Binary files /dev/null and b/static/img/2022/curve-wars-l2/bentfinance-fees.png differ
diff --git a/static/img/2022/curve-wars-l2/bentfinance-fees.webp b/static/img/2022/curve-wars-l2/bentfinance-fees.webp
new file mode 100644
index 00000000..dd6c2359
Binary files /dev/null and b/static/img/2022/curve-wars-l2/bentfinance-fees.webp differ
diff --git a/static/img/2022/curve-wars-l2/bvecvx.png b/static/img/2022/curve-wars-l2/bvecvx.png
new file mode 100644
index 00000000..172c099e
Binary files /dev/null and b/static/img/2022/curve-wars-l2/bvecvx.png differ
diff --git a/static/img/2022/curve-wars-l2/bvecvx.webp b/static/img/2022/curve-wars-l2/bvecvx.webp
new file mode 100644
index 00000000..272fdd50
Binary files /dev/null and b/static/img/2022/curve-wars-l2/bvecvx.webp differ
diff --git a/static/img/2022/curve-wars-l2/ccrv.png b/static/img/2022/curve-wars-l2/ccrv.png
new file mode 100644
index 00000000..cfddb902
Binary files /dev/null and b/static/img/2022/curve-wars-l2/ccrv.png differ
diff --git a/static/img/2022/curve-wars-l2/ccrv.webp b/static/img/2022/curve-wars-l2/ccrv.webp
new file mode 100644
index 00000000..1503df3c
Binary files /dev/null and b/static/img/2022/curve-wars-l2/ccrv.webp differ
diff --git a/static/img/2022/curve-wars-l2/conic-finance-en.png b/static/img/2022/curve-wars-l2/conic-finance-en.png
new file mode 100644
index 00000000..0a990d76
Binary files /dev/null and b/static/img/2022/curve-wars-l2/conic-finance-en.png differ
diff --git a/static/img/2022/curve-wars-l2/conic-finance-en.webp b/static/img/2022/curve-wars-l2/conic-finance-en.webp
new file mode 100644
index 00000000..412f6680
Binary files /dev/null and b/static/img/2022/curve-wars-l2/conic-finance-en.webp differ
diff --git a/static/img/2022/curve-wars-l2/conic-finance-fr.png b/static/img/2022/curve-wars-l2/conic-finance-fr.png
new file mode 100644
index 00000000..4059e955
Binary files /dev/null and b/static/img/2022/curve-wars-l2/conic-finance-fr.png differ
diff --git a/static/img/2022/curve-wars-l2/conic-finance-fr.webp b/static/img/2022/curve-wars-l2/conic-finance-fr.webp
new file mode 100644
index 00000000..028ce55f
Binary files /dev/null and b/static/img/2022/curve-wars-l2/conic-finance-fr.webp differ
diff --git a/static/img/2022/curve-wars-l2/curve-convex-l2-map-en.png b/static/img/2022/curve-wars-l2/curve-convex-l2-map-en.png
new file mode 100644
index 00000000..c0c9c085
Binary files /dev/null and b/static/img/2022/curve-wars-l2/curve-convex-l2-map-en.png differ
diff --git a/static/img/2022/curve-wars-l2/curve-convex-l2-map-en.webp b/static/img/2022/curve-wars-l2/curve-convex-l2-map-en.webp
new file mode 100644
index 00000000..1f654f3d
Binary files /dev/null and b/static/img/2022/curve-wars-l2/curve-convex-l2-map-en.webp differ
diff --git a/static/img/2022/curve-wars-l2/curve-convex-l2-map-fr.png b/static/img/2022/curve-wars-l2/curve-convex-l2-map-fr.png
new file mode 100644
index 00000000..be0f7c91
Binary files /dev/null and b/static/img/2022/curve-wars-l2/curve-convex-l2-map-fr.png differ
diff --git a/static/img/2022/curve-wars-l2/curve-convex-l2-map-fr.webp b/static/img/2022/curve-wars-l2/curve-convex-l2-map-fr.webp
new file mode 100644
index 00000000..af0b208d
Binary files /dev/null and b/static/img/2022/curve-wars-l2/curve-convex-l2-map-fr.webp differ
diff --git a/static/img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.png b/static/img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.png
new file mode 100644
index 00000000..5b3482d2
Binary files /dev/null and b/static/img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.png differ
diff --git a/static/img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.webp b/static/img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.webp
new file mode 100644
index 00000000..8fb608b0
Binary files /dev/null and b/static/img/2022/curve-wars-l2/curve-wars-l2-cover-tokenbrice.webp differ
diff --git a/static/img/2022/curve-wars-l2/daocvx.png b/static/img/2022/curve-wars-l2/daocvx.png
new file mode 100644
index 00000000..f5fe0197
Binary files /dev/null and b/static/img/2022/curve-wars-l2/daocvx.png differ
diff --git a/static/img/2022/curve-wars-l2/daocvx.webp b/static/img/2022/curve-wars-l2/daocvx.webp
new file mode 100644
index 00000000..6114178f
Binary files /dev/null and b/static/img/2022/curve-wars-l2/daocvx.webp differ
diff --git a/static/img/2022/curve-wars-l2/lendflare.jpeg b/static/img/2022/curve-wars-l2/lendflare.jpeg
new file mode 100644
index 00000000..4e8db4b4
Binary files /dev/null and b/static/img/2022/curve-wars-l2/lendflare.jpeg differ
diff --git a/static/img/2022/curve-wars-l2/lendflare.webp b/static/img/2022/curve-wars-l2/lendflare.webp
new file mode 100644
index 00000000..9db19d4a
Binary files /dev/null and b/static/img/2022/curve-wars-l2/lendflare.webp differ
diff --git a/static/img/2022/curve-wars-l2/llama-airforce-union.png b/static/img/2022/curve-wars-l2/llama-airforce-union.png
new file mode 100644
index 00000000..652f9cd0
Binary files /dev/null and b/static/img/2022/curve-wars-l2/llama-airforce-union.png differ
diff --git a/static/img/2022/curve-wars-l2/llama-airforce-union.webp b/static/img/2022/curve-wars-l2/llama-airforce-union.webp
new file mode 100644
index 00000000..e40a606a
Binary files /dev/null and b/static/img/2022/curve-wars-l2/llama-airforce-union.webp differ
diff --git a/static/img/2022/curve-wars-l2/votium-bribes.png b/static/img/2022/curve-wars-l2/votium-bribes.png
new file mode 100644
index 00000000..6b1abec6
Binary files /dev/null and b/static/img/2022/curve-wars-l2/votium-bribes.png differ
diff --git a/static/img/2022/curve-wars-l2/votium-bribes.webp b/static/img/2022/curve-wars-l2/votium-bribes.webp
new file mode 100644
index 00000000..fb8a2f50
Binary files /dev/null and b/static/img/2022/curve-wars-l2/votium-bribes.webp differ
diff --git a/static/img/2022/curve-wars-l2/warden-calc.mp4 b/static/img/2022/curve-wars-l2/warden-calc.mp4
new file mode 100644
index 00000000..c272e8d5
Binary files /dev/null and b/static/img/2022/curve-wars-l2/warden-calc.mp4 differ
diff --git a/static/img/2022/curve-wars-l2/warden-veboost.png b/static/img/2022/curve-wars-l2/warden-veboost.png
new file mode 100644
index 00000000..b99b7e53
Binary files /dev/null and b/static/img/2022/curve-wars-l2/warden-veboost.png differ
diff --git a/static/img/2022/curve-wars-l2/warden-veboost.webp b/static/img/2022/curve-wars-l2/warden-veboost.webp
new file mode 100644
index 00000000..84017659
Binary files /dev/null and b/static/img/2022/curve-wars-l2/warden-veboost.webp differ
diff --git a/static/img/2022/defi-vs-inflation/USD-m1-supply.png b/static/img/2022/defi-vs-inflation/USD-m1-supply.png
new file mode 100644
index 00000000..990cc412
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/USD-m1-supply.png differ
diff --git a/static/img/2022/defi-vs-inflation/USD-m1-supply.webp b/static/img/2022/defi-vs-inflation/USD-m1-supply.webp
new file mode 100644
index 00000000..60c4a4eb
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/USD-m1-supply.webp differ
diff --git a/static/img/2022/defi-vs-inflation/apw-winelisting3.png b/static/img/2022/defi-vs-inflation/apw-winelisting3.png
new file mode 100644
index 00000000..600a8417
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/apw-winelisting3.png differ
diff --git a/static/img/2022/defi-vs-inflation/apw-winelisting3.webp b/static/img/2022/defi-vs-inflation/apw-winelisting3.webp
new file mode 100644
index 00000000..746fba23
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/apw-winelisting3.webp differ
diff --git a/static/img/2022/defi-vs-inflation/apwine-USDT-en.png b/static/img/2022/defi-vs-inflation/apwine-USDT-en.png
new file mode 100644
index 00000000..7115732a
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/apwine-USDT-en.png differ
diff --git a/static/img/2022/defi-vs-inflation/apwine-USDT-en.webp b/static/img/2022/defi-vs-inflation/apwine-USDT-en.webp
new file mode 100644
index 00000000..efa1e303
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/apwine-USDT-en.webp differ
diff --git a/static/img/2022/defi-vs-inflation/apwine-USDT-fr.png b/static/img/2022/defi-vs-inflation/apwine-USDT-fr.png
new file mode 100644
index 00000000..2e5a0838
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/apwine-USDT-fr.png differ
diff --git a/static/img/2022/defi-vs-inflation/apwine-USDT-fr.webp b/static/img/2022/defi-vs-inflation/apwine-USDT-fr.webp
new file mode 100644
index 00000000..2cb9760c
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/apwine-USDT-fr.webp differ
diff --git a/static/img/2022/defi-vs-inflation/coindix.png b/static/img/2022/defi-vs-inflation/coindix.png
new file mode 100644
index 00000000..f6573e2c
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/coindix.png differ
diff --git a/static/img/2022/defi-vs-inflation/coindix.webp b/static/img/2022/defi-vs-inflation/coindix.webp
new file mode 100644
index 00000000..dcf0f95a
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/coindix.webp differ
diff --git a/static/img/2022/defi-vs-inflation/crv-release-schedule.png b/static/img/2022/defi-vs-inflation/crv-release-schedule.png
new file mode 100644
index 00000000..af189fee
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/crv-release-schedule.png differ
diff --git a/static/img/2022/defi-vs-inflation/crv-release-schedule.webp b/static/img/2022/defi-vs-inflation/crv-release-schedule.webp
new file mode 100644
index 00000000..75d57833
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/crv-release-schedule.webp differ
diff --git a/static/img/2022/defi-vs-inflation/curve-chf.png b/static/img/2022/defi-vs-inflation/curve-chf.png
new file mode 100644
index 00000000..f8ef4a21
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/curve-chf.png differ
diff --git a/static/img/2022/defi-vs-inflation/curve-chf.webp b/static/img/2022/defi-vs-inflation/curve-chf.webp
new file mode 100644
index 00000000..76ae9ce9
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/curve-chf.webp differ
diff --git a/static/img/2022/defi-vs-inflation/defi-vs-inflation-cover-2.jpg b/static/img/2022/defi-vs-inflation/defi-vs-inflation-cover-2.jpg
new file mode 100644
index 00000000..857f78b0
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/defi-vs-inflation-cover-2.jpg differ
diff --git a/static/img/2022/defi-vs-inflation/defi-vs-inflation-cover-2.webp b/static/img/2022/defi-vs-inflation/defi-vs-inflation-cover-2.webp
new file mode 100644
index 00000000..253cb947
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/defi-vs-inflation-cover-2.webp differ
diff --git a/static/img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.jpg b/static/img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.jpg
new file mode 100644
index 00000000..a22ee1ac
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.jpg differ
diff --git a/static/img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.webp b/static/img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.webp
new file mode 100644
index 00000000..f94f89e5
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/defi-vs-inflation-tokenbrice-cover.webp differ
diff --git a/static/img/2022/defi-vs-inflation/frax-dai.png b/static/img/2022/defi-vs-inflation/frax-dai.png
new file mode 100644
index 00000000..5715ebdc
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/frax-dai.png differ
diff --git a/static/img/2022/defi-vs-inflation/frax-dai.webp b/static/img/2022/defi-vs-inflation/frax-dai.webp
new file mode 100644
index 00000000..77d4d1ed
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/frax-dai.webp differ
diff --git a/static/img/2022/defi-vs-inflation/frax-usdc.png b/static/img/2022/defi-vs-inflation/frax-usdc.png
new file mode 100644
index 00000000..89be124a
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/frax-usdc.png differ
diff --git a/static/img/2022/defi-vs-inflation/frax-usdc.webp b/static/img/2022/defi-vs-inflation/frax-usdc.webp
new file mode 100644
index 00000000..f6b2b963
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/frax-usdc.webp differ
diff --git a/static/img/2022/defi-vs-inflation/fuse-pool7.png b/static/img/2022/defi-vs-inflation/fuse-pool7.png
new file mode 100644
index 00000000..208cecda
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/fuse-pool7.png differ
diff --git a/static/img/2022/defi-vs-inflation/fuse-pool7.webp b/static/img/2022/defi-vs-inflation/fuse-pool7.webp
new file mode 100644
index 00000000..66afc7fa
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/fuse-pool7.webp differ
diff --git a/static/img/2022/defi-vs-inflation/harvest-jarvis-2-stables.png b/static/img/2022/defi-vs-inflation/harvest-jarvis-2-stables.png
new file mode 100644
index 00000000..5ced06f5
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/harvest-jarvis-2-stables.png differ
diff --git a/static/img/2022/defi-vs-inflation/harvest-jarvis-2-stables.webp b/static/img/2022/defi-vs-inflation/harvest-jarvis-2-stables.webp
new file mode 100644
index 00000000..c4c71f36
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/harvest-jarvis-2-stables.webp differ
diff --git a/static/img/2022/defi-vs-inflation/looks-eth-farm.jpeg b/static/img/2022/defi-vs-inflation/looks-eth-farm.jpeg
new file mode 100644
index 00000000..149c8bbc
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/looks-eth-farm.jpeg differ
diff --git a/static/img/2022/defi-vs-inflation/looks-eth-farm.webp b/static/img/2022/defi-vs-inflation/looks-eth-farm.webp
new file mode 100644
index 00000000..a6c73a66
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/looks-eth-farm.webp differ
diff --git a/static/img/2022/defi-vs-inflation/rai-idle-0.png b/static/img/2022/defi-vs-inflation/rai-idle-0.png
new file mode 100644
index 00000000..175b0e08
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/rai-idle-0.png differ
diff --git a/static/img/2022/defi-vs-inflation/rai-idle-0.webp b/static/img/2022/defi-vs-inflation/rai-idle-0.webp
new file mode 100644
index 00000000..20a3da46
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/rai-idle-0.webp differ
diff --git a/static/img/2022/defi-vs-inflation/rai-idle.png b/static/img/2022/defi-vs-inflation/rai-idle.png
new file mode 100644
index 00000000..50faa179
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/rai-idle.png differ
diff --git a/static/img/2022/defi-vs-inflation/rai-idle.webp b/static/img/2022/defi-vs-inflation/rai-idle.webp
new file mode 100644
index 00000000..ee495303
Binary files /dev/null and b/static/img/2022/defi-vs-inflation/rai-idle.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/3buckets.png b/static/img/2022/lusd-chicken-bonds/3buckets.png
new file mode 100644
index 00000000..20195503
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/3buckets.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/3buckets.webp b/static/img/2022/lusd-chicken-bonds/3buckets.webp
new file mode 100644
index 00000000..96148ee8
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/3buckets.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/3chickens-static.mp4 b/static/img/2022/lusd-chicken-bonds/3chickens-static.mp4
new file mode 100644
index 00000000..6be9f40b
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/3chickens-static.mp4 differ
diff --git a/static/img/2022/lusd-chicken-bonds/3chickens.mp4 b/static/img/2022/lusd-chicken-bonds/3chickens.mp4
new file mode 100644
index 00000000..1bd43acb
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/3chickens.mp4 differ
diff --git a/static/img/2022/lusd-chicken-bonds/bbaUSD-pool-composition.png b/static/img/2022/lusd-chicken-bonds/bbaUSD-pool-composition.png
new file mode 100644
index 00000000..9077cbf2
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/bbaUSD-pool-composition.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/bbaUSD-pool-composition.webp b/static/img/2022/lusd-chicken-bonds/bbaUSD-pool-composition.webp
new file mode 100644
index 00000000..9552e524
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/bbaUSD-pool-composition.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/blusd.png b/static/img/2022/lusd-chicken-bonds/blusd.png
new file mode 100644
index 00000000..363ded4f
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/blusd.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/blusd.webp b/static/img/2022/lusd-chicken-bonds/blusd.webp
new file mode 100644
index 00000000..a07ba5a2
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/blusd.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/chicken-bonds.png b/static/img/2022/lusd-chicken-bonds/chicken-bonds.png
new file mode 100644
index 00000000..821d2c27
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/chicken-bonds.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/chicken-bonds.webp b/static/img/2022/lusd-chicken-bonds/chicken-bonds.webp
new file mode 100644
index 00000000..5fddb003
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/chicken-bonds.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/chicken-egg.png b/static/img/2022/lusd-chicken-bonds/chicken-egg.png
new file mode 100644
index 00000000..45787f1a
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/chicken-egg.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/chicken-egg.webp b/static/img/2022/lusd-chicken-bonds/chicken-egg.webp
new file mode 100644
index 00000000..506c0084
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/chicken-egg.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/cover1.png b/static/img/2022/lusd-chicken-bonds/cover1.png
new file mode 100644
index 00000000..0b921341
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/cover1.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/cover1.webp b/static/img/2022/lusd-chicken-bonds/cover1.webp
new file mode 100644
index 00000000..bfeac865
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/cover1.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/cover2.png b/static/img/2022/lusd-chicken-bonds/cover2.png
new file mode 100644
index 00000000..1f9bc9bd
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/cover2.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/cover2.webp b/static/img/2022/lusd-chicken-bonds/cover2.webp
new file mode 100644
index 00000000..495d043e
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/cover2.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/egg-variants-overview.png b/static/img/2022/lusd-chicken-bonds/egg-variants-overview.png
new file mode 100644
index 00000000..52b32399
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/egg-variants-overview.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/egg-variants-overview.webp b/static/img/2022/lusd-chicken-bonds/egg-variants-overview.webp
new file mode 100644
index 00000000..72f4a6df
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/egg-variants-overview.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-aave-market.png b/static/img/2022/lusd-chicken-bonds/lusd-aave-market.png
new file mode 100644
index 00000000..ddec969c
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-aave-market.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-aave-market.webp b/static/img/2022/lusd-chicken-bonds/lusd-aave-market.webp
new file mode 100644
index 00000000..28b68855
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-aave-market.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline-fr.png b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline-fr.png
new file mode 100644
index 00000000..f02c8ece
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline-fr.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline-fr.webp b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline-fr.webp
new file mode 100644
index 00000000..01c3cf0b
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline-fr.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline.png b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline.png
new file mode 100644
index 00000000..55e6ff75
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline.webp b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline.webp
new file mode 100644
index 00000000..e4207894
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-cb-user-timeline.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.png b/static/img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.png
new file mode 100644
index 00000000..35831d18
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.webp b/static/img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.webp
new file mode 100644
index 00000000..16c117f9
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-chicken-bonds-cover-tokenbrice.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-peg-incentives.png b/static/img/2022/lusd-chicken-bonds/lusd-peg-incentives.png
new file mode 100644
index 00000000..1edc853e
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-peg-incentives.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-peg-incentives.webp b/static/img/2022/lusd-chicken-bonds/lusd-peg-incentives.webp
new file mode 100644
index 00000000..1c846a50
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-peg-incentives.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-velodrome.png b/static/img/2022/lusd-chicken-bonds/lusd-velodrome.png
new file mode 100644
index 00000000..2d7e6970
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-velodrome.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/lusd-velodrome.webp b/static/img/2022/lusd-chicken-bonds/lusd-velodrome.webp
new file mode 100644
index 00000000..dc0022f0
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/lusd-velodrome.webp differ
diff --git a/static/img/2022/lusd-chicken-bonds/user-flow-overview.png b/static/img/2022/lusd-chicken-bonds/user-flow-overview.png
new file mode 100644
index 00000000..68e1f4b1
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/user-flow-overview.png differ
diff --git a/static/img/2022/lusd-chicken-bonds/user-flow-overview.webp b/static/img/2022/lusd-chicken-bonds/user-flow-overview.webp
new file mode 100644
index 00000000..ffec680e
Binary files /dev/null and b/static/img/2022/lusd-chicken-bonds/user-flow-overview.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/floordao-bond.png b/static/img/2022/nft-defi-infrastructure/floordao-bond.png
new file mode 100644
index 00000000..f97f3ca7
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/floordao-bond.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/floordao-bond.webp b/static/img/2022/nft-defi-infrastructure/floordao-bond.webp
new file mode 100644
index 00000000..417f6911
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/floordao-bond.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/gem-xyz.png b/static/img/2022/nft-defi-infrastructure/gem-xyz.png
new file mode 100644
index 00000000..f211f286
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/gem-xyz.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/gem-xyz.webp b/static/img/2022/nft-defi-infrastructure/gem-xyz.webp
new file mode 100644
index 00000000..9410d72d
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/gem-xyz.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/idol-cycle.png b/static/img/2022/nft-defi-infrastructure/idol-cycle.png
new file mode 100644
index 00000000..ad431f76
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/idol-cycle.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/idol-cycle.webp b/static/img/2022/nft-defi-infrastructure/idol-cycle.webp
new file mode 100644
index 00000000..9e326fc5
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/idol-cycle.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/idol-nfts.png b/static/img/2022/nft-defi-infrastructure/idol-nfts.png
new file mode 100644
index 00000000..d47ed232
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/idol-nfts.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/idol-nfts.webp b/static/img/2022/nft-defi-infrastructure/idol-nfts.webp
new file mode 100644
index 00000000..fe2ad7e2
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/idol-nfts.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/looksrare-pol.png b/static/img/2022/nft-defi-infrastructure/looksrare-pol.png
new file mode 100644
index 00000000..02fd7c72
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/looksrare-pol.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/looksrare-pol.webp b/static/img/2022/nft-defi-infrastructure/looksrare-pol.webp
new file mode 100644
index 00000000..97d41242
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/looksrare-pol.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea-cost.jpeg b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea-cost.jpeg
new file mode 100644
index 00000000..26f7670a
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea-cost.jpeg differ
diff --git a/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea-cost.webp b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea-cost.webp
new file mode 100644
index 00000000..3e44b8f7
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea-cost.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea.png b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea.png
new file mode 100644
index 00000000..3a1a5170
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea.webp b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea.webp
new file mode 100644
index 00000000..85276f9f
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/looksrare-vs-opensea.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/luchadores.png b/static/img/2022/nft-defi-infrastructure/luchadores.png
new file mode 100644
index 00000000..cf4819e8
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/luchadores.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/luchadores.webp b/static/img/2022/nft-defi-infrastructure/luchadores.webp
new file mode 100644
index 00000000..91806be3
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/luchadores.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.png b/static/img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.png
new file mode 100644
index 00000000..62affe49
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.webp b/static/img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.webp
new file mode 100644
index 00000000..6778e7c7
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nft-defi-infrastructure-tokenbrice.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/nftfi-landscape.jpeg b/static/img/2022/nft-defi-infrastructure/nftfi-landscape.jpeg
new file mode 100644
index 00000000..0d4029c5
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nftfi-landscape.jpeg differ
diff --git a/static/img/2022/nft-defi-infrastructure/nftfi-landscape.webp b/static/img/2022/nft-defi-infrastructure/nftfi-landscape.webp
new file mode 100644
index 00000000..8b8e5ed4
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nftfi-landscape.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/nftx-wizard-list.png b/static/img/2022/nft-defi-infrastructure/nftx-wizard-list.png
new file mode 100644
index 00000000..28f90df1
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nftx-wizard-list.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/nftx-wizard-list.webp b/static/img/2022/nft-defi-infrastructure/nftx-wizard-list.webp
new file mode 100644
index 00000000..fdae2be6
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nftx-wizard-list.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/nftx-wizard.png b/static/img/2022/nft-defi-infrastructure/nftx-wizard.png
new file mode 100644
index 00000000..1d520d5a
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nftx-wizard.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/nftx-wizard.webp b/static/img/2022/nft-defi-infrastructure/nftx-wizard.webp
new file mode 100644
index 00000000..cffe4d14
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/nftx-wizard.webp differ
diff --git a/static/img/2022/nft-defi-infrastructure/spectre.png b/static/img/2022/nft-defi-infrastructure/spectre.png
new file mode 100644
index 00000000..c35c4037
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/spectre.png differ
diff --git a/static/img/2022/nft-defi-infrastructure/spectre.webp b/static/img/2022/nft-defi-infrastructure/spectre.webp
new file mode 100644
index 00000000..fe289609
Binary files /dev/null and b/static/img/2022/nft-defi-infrastructure/spectre.webp differ
diff --git a/static/img/2022/tokenbrice-liquity/cover.png b/static/img/2022/tokenbrice-liquity/cover.png
new file mode 100644
index 00000000..faa08545
Binary files /dev/null and b/static/img/2022/tokenbrice-liquity/cover.png differ
diff --git a/static/img/2022/tokenbrice-liquity/cover.webp b/static/img/2022/tokenbrice-liquity/cover.webp
new file mode 100644
index 00000000..dc50b962
Binary files /dev/null and b/static/img/2022/tokenbrice-liquity/cover.webp differ
diff --git a/static/img/2022/unstoppable-defi/UNIv2-migration-tool.png b/static/img/2022/unstoppable-defi/UNIv2-migration-tool.png
new file mode 100644
index 00000000..9aee8bfd
Binary files /dev/null and b/static/img/2022/unstoppable-defi/UNIv2-migration-tool.png differ
diff --git a/static/img/2022/unstoppable-defi/UNIv2-migration-tool.webp b/static/img/2022/unstoppable-defi/UNIv2-migration-tool.webp
new file mode 100644
index 00000000..f56d509a
Binary files /dev/null and b/static/img/2022/unstoppable-defi/UNIv2-migration-tool.webp differ
diff --git a/static/img/2022/unstoppable-defi/chainlink-multisig-updated.png b/static/img/2022/unstoppable-defi/chainlink-multisig-updated.png
new file mode 100644
index 00000000..e4c2b757
Binary files /dev/null and b/static/img/2022/unstoppable-defi/chainlink-multisig-updated.png differ
diff --git a/static/img/2022/unstoppable-defi/chainlink-multisig-updated.webp b/static/img/2022/unstoppable-defi/chainlink-multisig-updated.webp
new file mode 100644
index 00000000..e1646c1a
Binary files /dev/null and b/static/img/2022/unstoppable-defi/chainlink-multisig-updated.webp differ
diff --git a/static/img/2022/unstoppable-defi/liquity-frontend.png b/static/img/2022/unstoppable-defi/liquity-frontend.png
new file mode 100644
index 00000000..fa787d7e
Binary files /dev/null and b/static/img/2022/unstoppable-defi/liquity-frontend.png differ
diff --git a/static/img/2022/unstoppable-defi/liquity-frontend.webp b/static/img/2022/unstoppable-defi/liquity-frontend.webp
new file mode 100644
index 00000000..74e0ee8e
Binary files /dev/null and b/static/img/2022/unstoppable-defi/liquity-frontend.webp differ
diff --git a/static/img/2022/unstoppable-defi/pooltogether.png b/static/img/2022/unstoppable-defi/pooltogether.png
new file mode 100644
index 00000000..807f0e6c
Binary files /dev/null and b/static/img/2022/unstoppable-defi/pooltogether.png differ
diff --git a/static/img/2022/unstoppable-defi/pooltogether.webp b/static/img/2022/unstoppable-defi/pooltogether.webp
new file mode 100644
index 00000000..b07abe55
Binary files /dev/null and b/static/img/2022/unstoppable-defi/pooltogether.webp differ
diff --git a/static/img/2022/unstoppable-defi/resilience-spectrum-en.png b/static/img/2022/unstoppable-defi/resilience-spectrum-en.png
new file mode 100644
index 00000000..43c43829
Binary files /dev/null and b/static/img/2022/unstoppable-defi/resilience-spectrum-en.png differ
diff --git a/static/img/2022/unstoppable-defi/resilience-spectrum-en.webp b/static/img/2022/unstoppable-defi/resilience-spectrum-en.webp
new file mode 100644
index 00000000..00e238ff
Binary files /dev/null and b/static/img/2022/unstoppable-defi/resilience-spectrum-en.webp differ
diff --git a/static/img/2022/unstoppable-defi/resilience-spectrum-fr.png b/static/img/2022/unstoppable-defi/resilience-spectrum-fr.png
new file mode 100644
index 00000000..bccee592
Binary files /dev/null and b/static/img/2022/unstoppable-defi/resilience-spectrum-fr.png differ
diff --git a/static/img/2022/unstoppable-defi/resilience-spectrum-fr.webp b/static/img/2022/unstoppable-defi/resilience-spectrum-fr.webp
new file mode 100644
index 00000000..83b3b5dc
Binary files /dev/null and b/static/img/2022/unstoppable-defi/resilience-spectrum-fr.webp differ
diff --git a/static/img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.png b/static/img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.png
new file mode 100644
index 00000000..48e827b8
Binary files /dev/null and b/static/img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.png differ
diff --git a/static/img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.webp b/static/img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.webp
new file mode 100644
index 00000000..7db43c87
Binary files /dev/null and b/static/img/2022/unstoppable-defi/unstoppable-defi-tokenbrice-cover.webp differ
diff --git a/static/img/2023/defi-collective/tokenbrice-metamorphosis.png b/static/img/2023/defi-collective/tokenbrice-metamorphosis.png
new file mode 100644
index 00000000..9857a1a3
Binary files /dev/null and b/static/img/2023/defi-collective/tokenbrice-metamorphosis.png differ
diff --git a/static/img/2023/defi-collective/tokenbrice-metamorphosis.webp b/static/img/2023/defi-collective/tokenbrice-metamorphosis.webp
new file mode 100644
index 00000000..f35b8e17
Binary files /dev/null and b/static/img/2023/defi-collective/tokenbrice-metamorphosis.webp differ
diff --git a/static/img/2023/defi-collective/twitter_banner.png b/static/img/2023/defi-collective/twitter_banner.png
new file mode 100644
index 00000000..a0856acc
Binary files /dev/null and b/static/img/2023/defi-collective/twitter_banner.png differ
diff --git a/static/img/2023/defi-collective/twitter_banner.webp b/static/img/2023/defi-collective/twitter_banner.webp
new file mode 100644
index 00000000..2026887e
Binary files /dev/null and b/static/img/2023/defi-collective/twitter_banner.webp differ
diff --git a/static/img/2023/glc-report-assets/balancer.png b/static/img/2023/glc-report-assets/balancer.png
new file mode 100644
index 00000000..34aca366
Binary files /dev/null and b/static/img/2023/glc-report-assets/balancer.png differ
diff --git a/static/img/2023/glc-report-assets/balancer.webp b/static/img/2023/glc-report-assets/balancer.webp
new file mode 100644
index 00000000..6f7c046a
Binary files /dev/null and b/static/img/2023/glc-report-assets/balancer.webp differ
diff --git a/static/img/2023/glc-report-assets/bunni.png b/static/img/2023/glc-report-assets/bunni.png
new file mode 100644
index 00000000..2b0fc8ac
Binary files /dev/null and b/static/img/2023/glc-report-assets/bunni.png differ
diff --git a/static/img/2023/glc-report-assets/bunni.webp b/static/img/2023/glc-report-assets/bunni.webp
new file mode 100644
index 00000000..1799c1e8
Binary files /dev/null and b/static/img/2023/glc-report-assets/bunni.webp differ
diff --git a/static/img/2023/glc-report-assets/maverick.png b/static/img/2023/glc-report-assets/maverick.png
new file mode 100644
index 00000000..c7d6bc0a
Binary files /dev/null and b/static/img/2023/glc-report-assets/maverick.png differ
diff --git a/static/img/2023/glc-report-assets/maverick.webp b/static/img/2023/glc-report-assets/maverick.webp
new file mode 100644
index 00000000..aa4c474e
Binary files /dev/null and b/static/img/2023/glc-report-assets/maverick.webp differ
diff --git a/static/img/2023/glc-report-assets/merkl.png b/static/img/2023/glc-report-assets/merkl.png
new file mode 100644
index 00000000..4ba908b3
Binary files /dev/null and b/static/img/2023/glc-report-assets/merkl.png differ
diff --git a/static/img/2023/glc-report-assets/merkl.webp b/static/img/2023/glc-report-assets/merkl.webp
new file mode 100644
index 00000000..5b1f774d
Binary files /dev/null and b/static/img/2023/glc-report-assets/merkl.webp differ
diff --git a/static/img/2023/jr-strategist/jr-strategist-cover.png b/static/img/2023/jr-strategist/jr-strategist-cover.png
new file mode 100644
index 00000000..2b4c515f
Binary files /dev/null and b/static/img/2023/jr-strategist/jr-strategist-cover.png differ
diff --git a/static/img/2023/jr-strategist/jr-strategist-cover.webp b/static/img/2023/jr-strategist/jr-strategist-cover.webp
new file mode 100644
index 00000000..c2b5bfde
Binary files /dev/null and b/static/img/2023/jr-strategist/jr-strategist-cover.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/cover.png b/static/img/2023/liquidity-shaping-maverick/cover.png
new file mode 100644
index 00000000..ad975213
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/cover.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/cover.webp b/static/img/2023/liquidity-shaping-maverick/cover.webp
new file mode 100644
index 00000000..26c33b0b
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/cover.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/curve-cvxcrv-crv.png b/static/img/2023/liquidity-shaping-maverick/curve-cvxcrv-crv.png
new file mode 100644
index 00000000..0b54f53b
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/curve-cvxcrv-crv.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/curve-cvxcrv-crv.webp b/static/img/2023/liquidity-shaping-maverick/curve-cvxcrv-crv.webp
new file mode 100644
index 00000000..2d9c7d7b
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/curve-cvxcrv-crv.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/eth-lp-mav-fr.png b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav-fr.png
new file mode 100644
index 00000000..27b1b7a4
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav-fr.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/eth-lp-mav-fr.webp b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav-fr.webp
new file mode 100644
index 00000000..c49038c8
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav-fr.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/eth-lp-mav.png b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav.png
new file mode 100644
index 00000000..155783c9
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/eth-lp-mav.webp b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav.webp
new file mode 100644
index 00000000..b8997bd5
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/eth-lp-mav.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/eth-lp-univ3.png b/static/img/2023/liquidity-shaping-maverick/eth-lp-univ3.png
new file mode 100644
index 00000000..008e2c2a
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/eth-lp-univ3.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/eth-lp-univ3.webp b/static/img/2023/liquidity-shaping-maverick/eth-lp-univ3.webp
new file mode 100644
index 00000000..e3d129ae
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/eth-lp-univ3.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/mav-both.gif b/static/img/2023/liquidity-shaping-maverick/mav-both.gif
new file mode 100644
index 00000000..852c35cc
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/mav-both.gif differ
diff --git a/static/img/2023/liquidity-shaping-maverick/mav-buy-wall.png b/static/img/2023/liquidity-shaping-maverick/mav-buy-wall.png
new file mode 100644
index 00000000..c828908f
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/mav-buy-wall.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/mav-buy-wall.webp b/static/img/2023/liquidity-shaping-maverick/mav-buy-wall.webp
new file mode 100644
index 00000000..6c5f15fb
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/mav-buy-wall.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/vemav.png b/static/img/2023/liquidity-shaping-maverick/vemav.png
new file mode 100644
index 00000000..c5599a9a
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/vemav.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/vemav.webp b/static/img/2023/liquidity-shaping-maverick/vemav.webp
new file mode 100644
index 00000000..3a75e426
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/vemav.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/zksync-dex-tvl.png b/static/img/2023/liquidity-shaping-maverick/zksync-dex-tvl.png
new file mode 100644
index 00000000..97ebd3b8
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/zksync-dex-tvl.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/zksync-dex-tvl.webp b/static/img/2023/liquidity-shaping-maverick/zksync-dex-tvl.webp
new file mode 100644
index 00000000..2f668604
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/zksync-dex-tvl.webp differ
diff --git a/static/img/2023/liquidity-shaping-maverick/zksync-dex-volume.png b/static/img/2023/liquidity-shaping-maverick/zksync-dex-volume.png
new file mode 100644
index 00000000..945a5756
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/zksync-dex-volume.png differ
diff --git a/static/img/2023/liquidity-shaping-maverick/zksync-dex-volume.webp b/static/img/2023/liquidity-shaping-maverick/zksync-dex-volume.webp
new file mode 100644
index 00000000..45a86f94
Binary files /dev/null and b/static/img/2023/liquidity-shaping-maverick/zksync-dex-volume.webp differ
diff --git a/static/img/2023/maverickxtokenbrice/mav-both.gif b/static/img/2023/maverickxtokenbrice/mav-both.gif
new file mode 100644
index 00000000..852c35cc
Binary files /dev/null and b/static/img/2023/maverickxtokenbrice/mav-both.gif differ
diff --git a/static/img/2023/maverickxtokenbrice/mav-pools.png b/static/img/2023/maverickxtokenbrice/mav-pools.png
new file mode 100644
index 00000000..0b2add2a
Binary files /dev/null and b/static/img/2023/maverickxtokenbrice/mav-pools.png differ
diff --git a/static/img/2023/maverickxtokenbrice/mav-pools.webp b/static/img/2023/maverickxtokenbrice/mav-pools.webp
new file mode 100644
index 00000000..bb6fc507
Binary files /dev/null and b/static/img/2023/maverickxtokenbrice/mav-pools.webp differ
diff --git a/static/img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.png b/static/img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.png
new file mode 100644
index 00000000..63922a7f
Binary files /dev/null and b/static/img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.png differ
diff --git a/static/img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.webp b/static/img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.webp
new file mode 100644
index 00000000..bd96965b
Binary files /dev/null and b/static/img/2023/maverickxtokenbrice/maverick-x-tokenbrice-cover.webp differ
diff --git a/static/img/2023/solidly-velodrome-template/cover.png b/static/img/2023/solidly-velodrome-template/cover.png
new file mode 100644
index 00000000..488b46a2
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/cover.png differ
diff --git a/static/img/2023/solidly-velodrome-template/cover.webp b/static/img/2023/solidly-velodrome-template/cover.webp
new file mode 100644
index 00000000..04ae47e0
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/cover.webp differ
diff --git a/static/img/2023/solidly-velodrome-template/defillama-forks.png b/static/img/2023/solidly-velodrome-template/defillama-forks.png
new file mode 100644
index 00000000..ce6c1b6f
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/defillama-forks.png differ
diff --git a/static/img/2023/solidly-velodrome-template/defillama-forks.webp b/static/img/2023/solidly-velodrome-template/defillama-forks.webp
new file mode 100644
index 00000000..09627090
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/defillama-forks.webp differ
diff --git a/static/img/2023/solidly-velodrome-template/defiwars-velodrome.png b/static/img/2023/solidly-velodrome-template/defiwars-velodrome.png
new file mode 100644
index 00000000..d6547c82
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/defiwars-velodrome.png differ
diff --git a/static/img/2023/solidly-velodrome-template/defiwars-velodrome.webp b/static/img/2023/solidly-velodrome-template/defiwars-velodrome.webp
new file mode 100644
index 00000000..645e3e26
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/defiwars-velodrome.webp differ
diff --git a/static/img/2023/solidly-velodrome-template/optimism-volume.png b/static/img/2023/solidly-velodrome-template/optimism-volume.png
new file mode 100644
index 00000000..d957c9dd
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/optimism-volume.png differ
diff --git a/static/img/2023/solidly-velodrome-template/optimism-volume.webp b/static/img/2023/solidly-velodrome-template/optimism-volume.webp
new file mode 100644
index 00000000..1d2541a8
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/optimism-volume.webp differ
diff --git a/static/img/2023/solidly-velodrome-template/solidly-tvl.png b/static/img/2023/solidly-velodrome-template/solidly-tvl.png
new file mode 100644
index 00000000..bcf22bbc
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/solidly-tvl.png differ
diff --git a/static/img/2023/solidly-velodrome-template/solidly-tvl.webp b/static/img/2023/solidly-velodrome-template/solidly-tvl.webp
new file mode 100644
index 00000000..c948d5d2
Binary files /dev/null and b/static/img/2023/solidly-velodrome-template/solidly-tvl.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/defillama-stablecoins.png b/static/img/2023/stablecoin-marauder-map/defillama-stablecoins.png
new file mode 100644
index 00000000..f28e3baf
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/defillama-stablecoins.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/defillama-stablecoins.webp b/static/img/2023/stablecoin-marauder-map/defillama-stablecoins.webp
new file mode 100644
index 00000000..554050bf
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/defillama-stablecoins.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/gho-balancer-pool.png b/static/img/2023/stablecoin-marauder-map/gho-balancer-pool.png
new file mode 100644
index 00000000..4225d0da
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/gho-balancer-pool.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/gho-balancer-pool.webp b/static/img/2023/stablecoin-marauder-map/gho-balancer-pool.webp
new file mode 100644
index 00000000..accc6988
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/gho-balancer-pool.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/maker-dsr-impact.png b/static/img/2023/stablecoin-marauder-map/maker-dsr-impact.png
new file mode 100644
index 00000000..39eb6737
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/maker-dsr-impact.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/maker-dsr-impact.webp b/static/img/2023/stablecoin-marauder-map/maker-dsr-impact.webp
new file mode 100644
index 00000000..d47c43f6
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/maker-dsr-impact.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/maker-psm.png b/static/img/2023/stablecoin-marauder-map/maker-psm.png
new file mode 100644
index 00000000..dcd8f8d7
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/maker-psm.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/maker-psm.webp b/static/img/2023/stablecoin-marauder-map/maker-psm.webp
new file mode 100644
index 00000000..135667d6
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/maker-psm.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/pegkeeper.png b/static/img/2023/stablecoin-marauder-map/pegkeeper.png
new file mode 100644
index 00000000..f5a19dd3
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/pegkeeper.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/pegkeeper.webp b/static/img/2023/stablecoin-marauder-map/pegkeeper.webp
new file mode 100644
index 00000000..fd31cbb5
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/pegkeeper.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/protocolfx.png b/static/img/2023/stablecoin-marauder-map/protocolfx.png
new file mode 100644
index 00000000..207c7b87
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/protocolfx.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/protocolfx.webp b/static/img/2023/stablecoin-marauder-map/protocolfx.webp
new file mode 100644
index 00000000..0b3e2641
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/protocolfx.webp differ
diff --git a/static/img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.png b/static/img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.png
new file mode 100644
index 00000000..9c9ead71
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.png differ
diff --git a/static/img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.webp b/static/img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.webp
new file mode 100644
index 00000000..f296649b
Binary files /dev/null and b/static/img/2023/stablecoin-marauder-map/stablecoin-marauder-map-cover.webp differ
diff --git a/static/img/2024/crv-vs-velo/aerodrome-revenues.png b/static/img/2024/crv-vs-velo/aerodrome-revenues.png
new file mode 100644
index 00000000..2a1a3231
Binary files /dev/null and b/static/img/2024/crv-vs-velo/aerodrome-revenues.png differ
diff --git a/static/img/2024/crv-vs-velo/aerodrome-revenues.webp b/static/img/2024/crv-vs-velo/aerodrome-revenues.webp
new file mode 100644
index 00000000..cd587c49
Binary files /dev/null and b/static/img/2024/crv-vs-velo/aerodrome-revenues.webp differ
diff --git a/static/img/2024/crv-vs-velo/cover.png b/static/img/2024/crv-vs-velo/cover.png
new file mode 100644
index 00000000..0dc7a622
Binary files /dev/null and b/static/img/2024/crv-vs-velo/cover.png differ
diff --git a/static/img/2024/crv-vs-velo/cover.webp b/static/img/2024/crv-vs-velo/cover.webp
new file mode 100644
index 00000000..d5d3bbf3
Binary files /dev/null and b/static/img/2024/crv-vs-velo/cover.webp differ
diff --git a/static/img/2024/crv-vs-velo/curve-revenues.png b/static/img/2024/crv-vs-velo/curve-revenues.png
new file mode 100644
index 00000000..0168cf08
Binary files /dev/null and b/static/img/2024/crv-vs-velo/curve-revenues.png differ
diff --git a/static/img/2024/crv-vs-velo/curve-revenues.webp b/static/img/2024/crv-vs-velo/curve-revenues.webp
new file mode 100644
index 00000000..29d4397b
Binary files /dev/null and b/static/img/2024/crv-vs-velo/curve-revenues.webp differ
diff --git a/static/img/2024/crv-vs-velo/relay.png b/static/img/2024/crv-vs-velo/relay.png
new file mode 100644
index 00000000..06ff11b6
Binary files /dev/null and b/static/img/2024/crv-vs-velo/relay.png differ
diff --git a/static/img/2024/crv-vs-velo/relay.webp b/static/img/2024/crv-vs-velo/relay.webp
new file mode 100644
index 00000000..46340901
Binary files /dev/null and b/static/img/2024/crv-vs-velo/relay.webp differ
diff --git a/static/img/2024/crv-vs-velo/tour-de-op.png b/static/img/2024/crv-vs-velo/tour-de-op.png
new file mode 100644
index 00000000..b6fdb2e7
Binary files /dev/null and b/static/img/2024/crv-vs-velo/tour-de-op.png differ
diff --git a/static/img/2024/crv-vs-velo/tour-de-op.webp b/static/img/2024/crv-vs-velo/tour-de-op.webp
new file mode 100644
index 00000000..84a05b6f
Binary files /dev/null and b/static/img/2024/crv-vs-velo/tour-de-op.webp differ
diff --git a/static/img/2024/crv-vs-velo/velodrome-revenues.png b/static/img/2024/crv-vs-velo/velodrome-revenues.png
new file mode 100644
index 00000000..c7a6975a
Binary files /dev/null and b/static/img/2024/crv-vs-velo/velodrome-revenues.png differ
diff --git a/static/img/2024/crv-vs-velo/velodrome-revenues.webp b/static/img/2024/crv-vs-velo/velodrome-revenues.webp
new file mode 100644
index 00000000..24700ea3
Binary files /dev/null and b/static/img/2024/crv-vs-velo/velodrome-revenues.webp differ
diff --git a/static/img/2024/farewell-glc/gov-typing.png b/static/img/2024/farewell-glc/gov-typing.png
new file mode 100644
index 00000000..3d11a956
Binary files /dev/null and b/static/img/2024/farewell-glc/gov-typing.png differ
diff --git a/static/img/2024/farewell-glc/gov-typing.webp b/static/img/2024/farewell-glc/gov-typing.webp
new file mode 100644
index 00000000..37a2b89e
Binary files /dev/null and b/static/img/2024/farewell-glc/gov-typing.webp differ
diff --git a/static/img/2024/farewell-glc/top-bribers.png b/static/img/2024/farewell-glc/top-bribers.png
new file mode 100644
index 00000000..3402717e
Binary files /dev/null and b/static/img/2024/farewell-glc/top-bribers.png differ
diff --git a/static/img/2024/farewell-glc/top-bribers.webp b/static/img/2024/farewell-glc/top-bribers.webp
new file mode 100644
index 00000000..1eecb009
Binary files /dev/null and b/static/img/2024/farewell-glc/top-bribers.webp differ
diff --git a/static/img/2024/farewell-glc/votium-round-62.png b/static/img/2024/farewell-glc/votium-round-62.png
new file mode 100644
index 00000000..9a9966ac
Binary files /dev/null and b/static/img/2024/farewell-glc/votium-round-62.png differ
diff --git a/static/img/2024/farewell-glc/votium-round-62.webp b/static/img/2024/farewell-glc/votium-round-62.webp
new file mode 100644
index 00000000..43d09c82
Binary files /dev/null and b/static/img/2024/farewell-glc/votium-round-62.webp differ
diff --git a/static/img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.png b/static/img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.png
new file mode 100644
index 00000000..ecb4e8c8
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.png differ
diff --git a/static/img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.webp b/static/img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.webp
new file mode 100644
index 00000000..3a1a90f8
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/0-lending-protocol-renaissance-cover.webp differ
diff --git a/static/img/2024/lending-protocol-renaissance/1-endogenous-collateral-bluechip.png b/static/img/2024/lending-protocol-renaissance/1-endogenous-collateral-bluechip.png
new file mode 100644
index 00000000..d136894d
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/1-endogenous-collateral-bluechip.png differ
diff --git a/static/img/2024/lending-protocol-renaissance/1-endogenous-collateral-bluechip.webp b/static/img/2024/lending-protocol-renaissance/1-endogenous-collateral-bluechip.webp
new file mode 100644
index 00000000..d2ba9aa8
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/1-endogenous-collateral-bluechip.webp differ
diff --git a/static/img/2024/lending-protocol-renaissance/2-dyad-defillama.png b/static/img/2024/lending-protocol-renaissance/2-dyad-defillama.png
new file mode 100644
index 00000000..bb9192b0
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/2-dyad-defillama.png differ
diff --git a/static/img/2024/lending-protocol-renaissance/2-dyad-defillama.webp b/static/img/2024/lending-protocol-renaissance/2-dyad-defillama.webp
new file mode 100644
index 00000000..de957889
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/2-dyad-defillama.webp differ
diff --git a/static/img/2024/lending-protocol-renaissance/3-bold-stability.png b/static/img/2024/lending-protocol-renaissance/3-bold-stability.png
new file mode 100644
index 00000000..52d3d88e
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/3-bold-stability.png differ
diff --git a/static/img/2024/lending-protocol-renaissance/3-bold-stability.webp b/static/img/2024/lending-protocol-renaissance/3-bold-stability.webp
new file mode 100644
index 00000000..857fa5dc
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/3-bold-stability.webp differ
diff --git a/static/img/2024/lending-protocol-renaissance/4-twTAP.png b/static/img/2024/lending-protocol-renaissance/4-twTAP.png
new file mode 100644
index 00000000..18f65018
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/4-twTAP.png differ
diff --git a/static/img/2024/lending-protocol-renaissance/4-twTAP.webp b/static/img/2024/lending-protocol-renaissance/4-twTAP.webp
new file mode 100644
index 00000000..7a9f96ec
Binary files /dev/null and b/static/img/2024/lending-protocol-renaissance/4-twTAP.webp differ
diff --git a/static/img/2025/defi-ux-disaster/defi-stack.png b/static/img/2025/defi-ux-disaster/defi-stack.png
new file mode 100644
index 00000000..38614174
Binary files /dev/null and b/static/img/2025/defi-ux-disaster/defi-stack.png differ
diff --git a/static/img/2025/defi-ux-disaster/defi-stack.webp b/static/img/2025/defi-ux-disaster/defi-stack.webp
new file mode 100644
index 00000000..82159bec
Binary files /dev/null and b/static/img/2025/defi-ux-disaster/defi-stack.webp differ
diff --git a/static/img/2025/defi-ux-disaster/defi-ux-disaster-cover.png b/static/img/2025/defi-ux-disaster/defi-ux-disaster-cover.png
new file mode 100644
index 00000000..ac02e48e
Binary files /dev/null and b/static/img/2025/defi-ux-disaster/defi-ux-disaster-cover.png differ
diff --git a/static/img/2025/defi-ux-disaster/defi-ux-disaster-cover.webp b/static/img/2025/defi-ux-disaster/defi-ux-disaster-cover.webp
new file mode 100644
index 00000000..f96b5a17
Binary files /dev/null and b/static/img/2025/defi-ux-disaster/defi-ux-disaster-cover.webp differ
diff --git a/static/img/2025/defi-ux-disaster/jumper.png b/static/img/2025/defi-ux-disaster/jumper.png
new file mode 100644
index 00000000..bf5d63db
Binary files /dev/null and b/static/img/2025/defi-ux-disaster/jumper.png differ
diff --git a/static/img/2025/defi-ux-disaster/jumper.webp b/static/img/2025/defi-ux-disaster/jumper.webp
new file mode 100644
index 00000000..5d4885ca
Binary files /dev/null and b/static/img/2025/defi-ux-disaster/jumper.webp differ
diff --git a/static/img/2025/lending-aggregation/aggregration-lending-cover.png b/static/img/2025/lending-aggregation/aggregration-lending-cover.png
new file mode 100644
index 00000000..0188da3b
Binary files /dev/null and b/static/img/2025/lending-aggregation/aggregration-lending-cover.png differ
diff --git a/static/img/2025/lending-aggregation/aggregration-lending-cover.webp b/static/img/2025/lending-aggregation/aggregration-lending-cover.webp
new file mode 100644
index 00000000..da2f3a66
Binary files /dev/null and b/static/img/2025/lending-aggregation/aggregration-lending-cover.webp differ
diff --git a/static/img/2025/lending-aggregation/defillama-borrow-aggregator.png b/static/img/2025/lending-aggregation/defillama-borrow-aggregator.png
new file mode 100644
index 00000000..f7c5309c
Binary files /dev/null and b/static/img/2025/lending-aggregation/defillama-borrow-aggregator.png differ
diff --git a/static/img/2025/lending-aggregation/defillama-borrow-aggregator.webp b/static/img/2025/lending-aggregation/defillama-borrow-aggregator.webp
new file mode 100644
index 00000000..83dacd85
Binary files /dev/null and b/static/img/2025/lending-aggregation/defillama-borrow-aggregator.webp differ
diff --git a/static/img/2025/lending-aggregation/defisaver-discover.png b/static/img/2025/lending-aggregation/defisaver-discover.png
new file mode 100644
index 00000000..a8840563
Binary files /dev/null and b/static/img/2025/lending-aggregation/defisaver-discover.png differ
diff --git a/static/img/2025/lending-aggregation/defisaver-discover.webp b/static/img/2025/lending-aggregation/defisaver-discover.webp
new file mode 100644
index 00000000..b6ba63c5
Binary files /dev/null and b/static/img/2025/lending-aggregation/defisaver-discover.webp differ
diff --git a/static/img/2025/lending-aggregation/lending-customizability-spectrum.png b/static/img/2025/lending-aggregation/lending-customizability-spectrum.png
new file mode 100644
index 00000000..1e00b003
Binary files /dev/null and b/static/img/2025/lending-aggregation/lending-customizability-spectrum.png differ
diff --git a/static/img/2025/lending-aggregation/lending-customizability-spectrum.webp b/static/img/2025/lending-aggregation/lending-customizability-spectrum.webp
new file mode 100644
index 00000000..25b01d53
Binary files /dev/null and b/static/img/2025/lending-aggregation/lending-customizability-spectrum.webp differ
diff --git a/static/img/2025/leverage-sir/leverage-sir-cover.jpg b/static/img/2025/leverage-sir/leverage-sir-cover.jpg
new file mode 100644
index 00000000..07d46a77
Binary files /dev/null and b/static/img/2025/leverage-sir/leverage-sir-cover.jpg differ
diff --git a/static/img/2025/leverage-sir/leverage-sir-cover.webp b/static/img/2025/leverage-sir/leverage-sir-cover.webp
new file mode 100644
index 00000000..040cfcda
Binary files /dev/null and b/static/img/2025/leverage-sir/leverage-sir-cover.webp differ
diff --git a/static/img/2025/leverage-sir/sir-beta-mode.png b/static/img/2025/leverage-sir/sir-beta-mode.png
new file mode 100644
index 00000000..4725c67b
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-beta-mode.png differ
diff --git a/static/img/2025/leverage-sir/sir-beta-mode.webp b/static/img/2025/leverage-sir/sir-beta-mode.webp
new file mode 100644
index 00000000..67839cb6
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-beta-mode.webp differ
diff --git a/static/img/2025/leverage-sir/sir-business-model.png b/static/img/2025/leverage-sir/sir-business-model.png
new file mode 100644
index 00000000..c15f053c
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-business-model.png differ
diff --git a/static/img/2025/leverage-sir/sir-business-model.webp b/static/img/2025/leverage-sir/sir-business-model.webp
new file mode 100644
index 00000000..6c6fc4f3
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-business-model.webp differ
diff --git a/static/img/2025/leverage-sir/sir-calculator.png b/static/img/2025/leverage-sir/sir-calculator.png
new file mode 100644
index 00000000..44e03e8d
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-calculator.png differ
diff --git a/static/img/2025/leverage-sir/sir-calculator.webp b/static/img/2025/leverage-sir/sir-calculator.webp
new file mode 100644
index 00000000..585dfaaf
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-calculator.webp differ
diff --git a/static/img/2025/leverage-sir/sir-diagram.png b/static/img/2025/leverage-sir/sir-diagram.png
new file mode 100644
index 00000000..6f2c02a5
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-diagram.png differ
diff --git a/static/img/2025/leverage-sir/sir-diagram.webp b/static/img/2025/leverage-sir/sir-diagram.webp
new file mode 100644
index 00000000..91cff3b0
Binary files /dev/null and b/static/img/2025/leverage-sir/sir-diagram.webp differ
diff --git a/static/img/2025/pegged-assets-swap/ekubo.png b/static/img/2025/pegged-assets-swap/ekubo.png
new file mode 100644
index 00000000..6f884481
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/ekubo.png differ
diff --git a/static/img/2025/pegged-assets-swap/ekubo.webp b/static/img/2025/pegged-assets-swap/ekubo.webp
new file mode 100644
index 00000000..06580eb8
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/ekubo.webp differ
diff --git a/static/img/2025/pegged-assets-swap/fluid-smart-debt.png b/static/img/2025/pegged-assets-swap/fluid-smart-debt.png
new file mode 100644
index 00000000..eadb5875
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/fluid-smart-debt.png differ
diff --git a/static/img/2025/pegged-assets-swap/fluid-smart-debt.webp b/static/img/2025/pegged-assets-swap/fluid-smart-debt.webp
new file mode 100644
index 00000000..3ea03cf7
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/fluid-smart-debt.webp differ
diff --git a/static/img/2025/pegged-assets-swap/liquidity-structure.png b/static/img/2025/pegged-assets-swap/liquidity-structure.png
new file mode 100644
index 00000000..3d2843b9
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/liquidity-structure.png differ
diff --git a/static/img/2025/pegged-assets-swap/liquidity-structure.webp b/static/img/2025/pegged-assets-swap/liquidity-structure.webp
new file mode 100644
index 00000000..47304c32
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/liquidity-structure.webp differ
diff --git a/static/img/2025/pegged-assets-swap/pegged-assets-swap-cover.png b/static/img/2025/pegged-assets-swap/pegged-assets-swap-cover.png
new file mode 100644
index 00000000..eb5700a7
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/pegged-assets-swap-cover.png differ
diff --git a/static/img/2025/pegged-assets-swap/pegged-assets-swap-cover.webp b/static/img/2025/pegged-assets-swap/pegged-assets-swap-cover.webp
new file mode 100644
index 00000000..7ca0e1a2
Binary files /dev/null and b/static/img/2025/pegged-assets-swap/pegged-assets-swap-cover.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/40acres.png b/static/img/2025/veNFT-infrastructure/40acres.png
new file mode 100644
index 00000000..35aa52a5
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/40acres.png differ
diff --git a/static/img/2025/veNFT-infrastructure/40acres.webp b/static/img/2025/veNFT-infrastructure/40acres.webp
new file mode 100644
index 00000000..0f8436be
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/40acres.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/autopilot.png b/static/img/2025/veNFT-infrastructure/autopilot.png
new file mode 100644
index 00000000..84401e6e
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/autopilot.png differ
diff --git a/static/img/2025/veNFT-infrastructure/autopilot.webp b/static/img/2025/veNFT-infrastructure/autopilot.webp
new file mode 100644
index 00000000..0d2720eb
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/autopilot.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/cover-fr.png b/static/img/2025/veNFT-infrastructure/cover-fr.png
new file mode 100644
index 00000000..68fd4870
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/cover-fr.png differ
diff --git a/static/img/2025/veNFT-infrastructure/cover-fr.webp b/static/img/2025/veNFT-infrastructure/cover-fr.webp
new file mode 100644
index 00000000..6d72555a
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/cover-fr.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/cover.png b/static/img/2025/veNFT-infrastructure/cover.png
new file mode 100644
index 00000000..e3182950
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/cover.png differ
diff --git a/static/img/2025/veNFT-infrastructure/cover.webp b/static/img/2025/veNFT-infrastructure/cover.webp
new file mode 100644
index 00000000..aeb3fb06
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/cover.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/haiVELO.jpeg b/static/img/2025/veNFT-infrastructure/haiVELO.jpeg
new file mode 100644
index 00000000..d099b208
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/haiVELO.jpeg differ
diff --git a/static/img/2025/veNFT-infrastructure/haiVELO.webp b/static/img/2025/veNFT-infrastructure/haiVELO.webp
new file mode 100644
index 00000000..16ed914d
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/haiVELO.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/luchadores-strategy-fr.png b/static/img/2025/veNFT-infrastructure/luchadores-strategy-fr.png
new file mode 100644
index 00000000..e0742618
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/luchadores-strategy-fr.png differ
diff --git a/static/img/2025/veNFT-infrastructure/luchadores-strategy-fr.webp b/static/img/2025/veNFT-infrastructure/luchadores-strategy-fr.webp
new file mode 100644
index 00000000..eed14e4c
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/luchadores-strategy-fr.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/luchadores-strategy.png b/static/img/2025/veNFT-infrastructure/luchadores-strategy.png
new file mode 100644
index 00000000..d031404e
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/luchadores-strategy.png differ
diff --git a/static/img/2025/veNFT-infrastructure/luchadores-strategy.webp b/static/img/2025/veNFT-infrastructure/luchadores-strategy.webp
new file mode 100644
index 00000000..2ef8648b
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/luchadores-strategy.webp differ
diff --git a/static/img/2025/veNFT-infrastructure/relay.png b/static/img/2025/veNFT-infrastructure/relay.png
new file mode 100644
index 00000000..2f190034
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/relay.png differ
diff --git a/static/img/2025/veNFT-infrastructure/relay.webp b/static/img/2025/veNFT-infrastructure/relay.webp
new file mode 100644
index 00000000..0e30bf32
Binary files /dev/null and b/static/img/2025/veNFT-infrastructure/relay.webp differ
diff --git a/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.png b/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.png
new file mode 100644
index 00000000..a38db97d
Binary files /dev/null and b/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.png differ
diff --git a/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.svg b/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.svg
new file mode 100644
index 00000000..aaa330fc
--- /dev/null
+++ b/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.svg
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ALERT ACTIVE
+
+
+
+
+ PROTOCOL ANALYSIS SYSTEM v2.6
+
+
+ DeFi BULLSHIT DETECTOR
+
+
+
+
+ CLAUDE AI
+
+
+ ONCHAIN MODE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LEGIT
+ MEH
+ SUSPICIOUS
+ SKETCHY
+ FULL OF BS
+
+
+ BS DETECTOR
+ ONCHAIN TRUTH INDEX
+
+
+
+
+ 94.7
+
+
+ BS DETECTED
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RED FLAGS
+
+
+
+
+
+
+
+ ANON TEAM
+
+ CONFIRMED
+
+
+
+
+
+ NO AUDIT
+
+ SELF-CERT
+
+
+
+ FAKE TVL
+
+ RECURSIVE
+
+
+
+ TOKENOMICS
+
+ 90% INSIDER
+
+
+
+ GOVERNANCE
+
+ 3/5 MULTISIG
+
+
+
+
+
+ YIELD SRC
+
+ UNDEFINED
+
+
+
+ TIMELOCK
+
+ 48H
+
+
+
+ MARKETING
+
+ HYPE > CODE
+
+
+
+
+
+
+
+ PROTOCOL SCAN
+
+
+
+ RWA EXPOSURE
+
+ 97.3%
+
+
+ TEAM DOXXED
+
+ NO
+
+
+ AUDIT STATUS
+
+ SELF-CERTIFIED
+
+
+ TVL (REAL)
+
+ $2.1M
+
+
+ TVL (CLAIMED)
+
+ $847M
+
+
+ YIELD APY
+
+ 42,069%
+
+
+ CONTRACT
+
+ VERIFIED
+
+
+ CHAIN MATCH
+
+ MISMATCH
+
+
+
+
+
+
+
+
+ > ANALYSIS: Marketing claims diverge from on-chain reality by 403x
+
+
+ > WARNING: Yield source unidentifiable -- likely recursive or ponzi-derived
+
+
+ > VERDICT: DO NOT APE. Repeat: DO NOT APE.
+
+
+
+
+
+ TRUST SOURCE
+
+ ONCHAIN ONLY
+
+
+
+
+
+
+ DECENTRALIZATION
+
+
+
+ 8%
+ CRITICAL
+
+
+
+
+
+ CODE QUALITY
+
+
+ 41%
+ POOR
+
+
+
+
+
+
+ LIQ. DEPTH
+
+
+ 16%
+ SHALLOW
+
+
+
+
+
+ RUG RISK
+
+
+
+
+ 91%
+ EXTREME
+
+
+
+
+
+
+
+
+ !
+
+
+
+
+
+
+ !
+
+
+
+
+
+ !
+
+
+
+ !
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.webp b/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.webp
new file mode 100644
index 00000000..7c9b477a
Binary files /dev/null and b/static/img/2026/defi-bullshit-detector/defi-bullshit-detector-cover.webp differ
diff --git a/static/img/2026/defi-bullshit-detector/information-hierarchy.png b/static/img/2026/defi-bullshit-detector/information-hierarchy.png
new file mode 100644
index 00000000..d3233d31
Binary files /dev/null and b/static/img/2026/defi-bullshit-detector/information-hierarchy.png differ
diff --git a/static/img/2026/defi-bullshit-detector/information-hierarchy.webp b/static/img/2026/defi-bullshit-detector/information-hierarchy.webp
new file mode 100644
index 00000000..e5b964eb
Binary files /dev/null and b/static/img/2026/defi-bullshit-detector/information-hierarchy.webp differ
diff --git a/static/img/2026/pharos/pharos-compare.png b/static/img/2026/pharos/pharos-compare.png
new file mode 100644
index 00000000..ac52af77
Binary files /dev/null and b/static/img/2026/pharos/pharos-compare.png differ
diff --git a/static/img/2026/pharos/pharos-cover.png b/static/img/2026/pharos/pharos-cover.png
new file mode 100644
index 00000000..cac39a49
Binary files /dev/null and b/static/img/2026/pharos/pharos-cover.png differ
diff --git a/static/img/2026/pharos/pharos-dependency-map.png b/static/img/2026/pharos/pharos-dependency-map.png
new file mode 100644
index 00000000..2d4000aa
Binary files /dev/null and b/static/img/2026/pharos/pharos-dependency-map.png differ
diff --git a/static/img/2026/pharos/pharos-homepage.png b/static/img/2026/pharos/pharos-homepage.png
new file mode 100644
index 00000000..57290303
Binary files /dev/null and b/static/img/2026/pharos/pharos-homepage.png differ
diff --git a/static/img/2026/pharos/pharos-peg-tracker.png b/static/img/2026/pharos/pharos-peg-tracker.png
new file mode 100644
index 00000000..f79a481c
Binary files /dev/null and b/static/img/2026/pharos/pharos-peg-tracker.png differ
diff --git a/static/img/2026/pharos/pharos-safety-scores.png b/static/img/2026/pharos/pharos-safety-scores.png
new file mode 100644
index 00000000..d840096a
Binary files /dev/null and b/static/img/2026/pharos/pharos-safety-scores.png differ
diff --git a/static/img/2026/pharos/pharos-stability-index.png b/static/img/2026/pharos/pharos-stability-index.png
new file mode 100644
index 00000000..68fe7d80
Binary files /dev/null and b/static/img/2026/pharos/pharos-stability-index.png differ
diff --git a/static/img/2026/why-polaris-cover.png.jpg b/static/img/2026/why-polaris-cover.png.jpg
new file mode 100644
index 00000000..2aaf5922
Binary files /dev/null and b/static/img/2026/why-polaris-cover.png.jpg differ
diff --git a/static/img/2026/why-polaris-cover.png.webp b/static/img/2026/why-polaris-cover.png.webp
new file mode 100644
index 00000000..1dcfbf82
Binary files /dev/null and b/static/img/2026/why-polaris-cover.png.webp differ
diff --git a/static/img/2026/why-polaris/forever-pigeon.png b/static/img/2026/why-polaris/forever-pigeon.png
new file mode 100644
index 00000000..2818f4e0
Binary files /dev/null and b/static/img/2026/why-polaris/forever-pigeon.png differ
diff --git a/static/img/2026/why-polaris/forever-pigeon.webp b/static/img/2026/why-polaris/forever-pigeon.webp
new file mode 100644
index 00000000..b35ff0db
Binary files /dev/null and b/static/img/2026/why-polaris/forever-pigeon.webp differ
diff --git a/static/img/2026/why-polaris/why-polaris-cover.jpg b/static/img/2026/why-polaris/why-polaris-cover.jpg
new file mode 100644
index 00000000..2aaf5922
Binary files /dev/null and b/static/img/2026/why-polaris/why-polaris-cover.jpg differ
diff --git a/static/img/2026/why-polaris/why-polaris-cover.png.jpg b/static/img/2026/why-polaris/why-polaris-cover.png.jpg
new file mode 100644
index 00000000..2aaf5922
Binary files /dev/null and b/static/img/2026/why-polaris/why-polaris-cover.png.jpg differ
diff --git a/static/img/2026/why-polaris/why-polaris-cover.png.webp b/static/img/2026/why-polaris/why-polaris-cover.png.webp
new file mode 100644
index 00000000..1dcfbf82
Binary files /dev/null and b/static/img/2026/why-polaris/why-polaris-cover.png.webp differ
diff --git a/static/img/2026/why-polaris/why-polaris-cover.webp b/static/img/2026/why-polaris/why-polaris-cover.webp
new file mode 100644
index 00000000..1dcfbf82
Binary files /dev/null and b/static/img/2026/why-polaris/why-polaris-cover.webp differ
diff --git a/static/img/main/anthereum-knight-150.png b/static/img/main/anthereum-knight-150.png
new file mode 100644
index 00000000..c2ed1c59
Binary files /dev/null and b/static/img/main/anthereum-knight-150.png differ
diff --git a/static/img/main/anthereum-knight-150.webp b/static/img/main/anthereum-knight-150.webp
new file mode 100644
index 00000000..cc1aaabf
Binary files /dev/null and b/static/img/main/anthereum-knight-150.webp differ
diff --git a/static/img/main/banner-1000x4000.webp b/static/img/main/banner-1000x4000.webp
new file mode 100644
index 00000000..33204640
Binary files /dev/null and b/static/img/main/banner-1000x4000.webp differ
diff --git a/static/img/main/banner.webp b/static/img/main/banner.webp
new file mode 100644
index 00000000..efce4244
Binary files /dev/null and b/static/img/main/banner.webp differ
diff --git a/static/img/main/brice.jpg b/static/img/main/brice.jpg
deleted file mode 100644
index db707b22..00000000
Binary files a/static/img/main/brice.jpg and /dev/null differ
diff --git a/static/img/main/emblem-color-square-150.png b/static/img/main/emblem-color-square-150.png
new file mode 100644
index 00000000..fbc51890
Binary files /dev/null and b/static/img/main/emblem-color-square-150.png differ
diff --git a/static/img/main/emblem-color-square-150.webp b/static/img/main/emblem-color-square-150.webp
new file mode 100644
index 00000000..1f7d33c3
Binary files /dev/null and b/static/img/main/emblem-color-square-150.webp differ
diff --git a/static/img/main/emblem-color-square-250.webp b/static/img/main/emblem-color-square-250.webp
new file mode 100644
index 00000000..9d40ad66
Binary files /dev/null and b/static/img/main/emblem-color-square-250.webp differ
diff --git a/static/img/main/emblem-color-square.webp b/static/img/main/emblem-color-square.webp
new file mode 100644
index 00000000..4c8dbc95
Binary files /dev/null and b/static/img/main/emblem-color-square.webp differ
diff --git a/static/img/main/logo-h.webp b/static/img/main/logo-h.webp
new file mode 100644
index 00000000..e07ec15a
Binary files /dev/null and b/static/img/main/logo-h.webp differ
diff --git a/static/img/main/logo.webp b/static/img/main/logo.webp
new file mode 100644
index 00000000..406a74ee
Binary files /dev/null and b/static/img/main/logo.webp differ
diff --git a/static/img/main/tokenbrice-avatar-150.png b/static/img/main/tokenbrice-avatar-150.png
new file mode 100644
index 00000000..074f5464
Binary files /dev/null and b/static/img/main/tokenbrice-avatar-150.png differ
diff --git a/static/img/main/tokenbrice-avatar-150.webp b/static/img/main/tokenbrice-avatar-150.webp
new file mode 100644
index 00000000..c1bf5c2e
Binary files /dev/null and b/static/img/main/tokenbrice-avatar-150.webp differ
diff --git a/static/img/others/128-lqty-icon.svg b/static/img/others/128-lqty-icon.svg
new file mode 100644
index 00000000..0dcd1a66
--- /dev/null
+++ b/static/img/others/128-lqty-icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/others/128-lusd-icon.svg b/static/img/others/128-lusd-icon.svg
new file mode 100644
index 00000000..9944ca81
--- /dev/null
+++ b/static/img/others/128-lusd-icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/others/abel-abstracts.webp b/static/img/others/abel-abstracts.webp
new file mode 100644
index 00000000..279404ac
Binary files /dev/null and b/static/img/others/abel-abstracts.webp differ
diff --git a/static/img/others/all-hail-ants.jpeg b/static/img/others/all-hail-ants.jpeg
new file mode 100644
index 00000000..f3fffc2e
Binary files /dev/null and b/static/img/others/all-hail-ants.jpeg differ
diff --git a/static/img/others/all-hail-ants.webp b/static/img/others/all-hail-ants.webp
new file mode 100644
index 00000000..55cd2a11
Binary files /dev/null and b/static/img/others/all-hail-ants.webp differ
diff --git a/static/img/others/bankless.webp b/static/img/others/bankless.webp
new file mode 100644
index 00000000..1ef5a2fc
Binary files /dev/null and b/static/img/others/bankless.webp differ
diff --git a/static/img/others/defi-france/banner-centered.webp b/static/img/others/defi-france/banner-centered.webp
new file mode 100644
index 00000000..71e25a8e
Binary files /dev/null and b/static/img/others/defi-france/banner-centered.webp differ
diff --git a/static/img/others/defi-france/blapening1.webp b/static/img/others/defi-france/blapening1.webp
new file mode 100644
index 00000000..be91ad28
Binary files /dev/null and b/static/img/others/defi-france/blapening1.webp differ
diff --git a/static/img/others/defi-france/blapening2.webp b/static/img/others/defi-france/blapening2.webp
new file mode 100644
index 00000000..8b8fa0e7
Binary files /dev/null and b/static/img/others/defi-france/blapening2.webp differ
diff --git a/static/img/others/defi-france/defifranceX.webp b/static/img/others/defi-france/defifranceX.webp
new file mode 100644
index 00000000..c94a0cb4
Binary files /dev/null and b/static/img/others/defi-france/defifranceX.webp differ
diff --git a/static/img/others/defi-france/projet.gif b/static/img/others/defi-france/projet.gif
deleted file mode 100644
index 52d98a5f..00000000
Binary files a/static/img/others/defi-france/projet.gif and /dev/null differ
diff --git a/static/img/others/defi-france/projet.mp4 b/static/img/others/defi-france/projet.mp4
new file mode 100644
index 00000000..3be87665
Binary files /dev/null and b/static/img/others/defi-france/projet.mp4 differ
diff --git a/static/img/others/defi.png b/static/img/others/defi.png
new file mode 100644
index 00000000..25d29bf1
Binary files /dev/null and b/static/img/others/defi.png differ
diff --git a/static/img/others/defi.webp b/static/img/others/defi.webp
new file mode 100644
index 00000000..950df5bc
Binary files /dev/null and b/static/img/others/defi.webp differ
diff --git a/static/img/others/defifrance-logo.png b/static/img/others/defifrance-logo.png
index 49428853..cd2b5a5b 100644
Binary files a/static/img/others/defifrance-logo.png and b/static/img/others/defifrance-logo.png differ
diff --git a/static/img/others/defifrance-logo.webp b/static/img/others/defifrance-logo.webp
new file mode 100644
index 00000000..e50963b7
Binary files /dev/null and b/static/img/others/defifrance-logo.webp differ
diff --git a/static/img/others/defifrance.webp b/static/img/others/defifrance.webp
new file mode 100644
index 00000000..71d38cfa
Binary files /dev/null and b/static/img/others/defifrance.webp differ
diff --git a/static/img/others/defifrance2.webp b/static/img/others/defifrance2.webp
new file mode 100644
index 00000000..283de12b
Binary files /dev/null and b/static/img/others/defifrance2.webp differ
diff --git a/static/img/others/defiscan-preview-ratings.png b/static/img/others/defiscan-preview-ratings.png
new file mode 100644
index 00000000..d2e95da3
Binary files /dev/null and b/static/img/others/defiscan-preview-ratings.png differ
diff --git a/static/img/others/defiscan-preview-ratings.webp b/static/img/others/defiscan-preview-ratings.webp
new file mode 100644
index 00000000..bae507f3
Binary files /dev/null and b/static/img/others/defiscan-preview-ratings.webp differ
diff --git a/static/img/others/defiscan-preview-stats.png b/static/img/others/defiscan-preview-stats.png
new file mode 100644
index 00000000..9c5f9c56
Binary files /dev/null and b/static/img/others/defiscan-preview-stats.png differ
diff --git a/static/img/others/defiscan-preview-stats.webp b/static/img/others/defiscan-preview-stats.webp
new file mode 100644
index 00000000..4f00e38d
Binary files /dev/null and b/static/img/others/defiscan-preview-stats.webp differ
diff --git a/static/img/others/defiscan-preview.png b/static/img/others/defiscan-preview.png
new file mode 100644
index 00000000..d6e125d7
Binary files /dev/null and b/static/img/others/defiscan-preview.png differ
diff --git a/static/img/others/defiscan-preview.webp b/static/img/others/defiscan-preview.webp
new file mode 100644
index 00000000..4d53bd5e
Binary files /dev/null and b/static/img/others/defiscan-preview.webp differ
diff --git a/static/img/others/defiscan.png b/static/img/others/defiscan.png
new file mode 100644
index 00000000..08d8c372
Binary files /dev/null and b/static/img/others/defiscan.png differ
diff --git a/static/img/others/defiscan.webp b/static/img/others/defiscan.webp
new file mode 100644
index 00000000..a745df82
Binary files /dev/null and b/static/img/others/defiscan.webp differ
diff --git a/static/img/others/dffplayscryptonia.png b/static/img/others/dffplayscryptonia.png
new file mode 100644
index 00000000..529a2d83
Binary files /dev/null and b/static/img/others/dffplayscryptonia.png differ
diff --git a/static/img/others/dffplayscryptonia.resized.png b/static/img/others/dffplayscryptonia.resized.png
new file mode 100644
index 00000000..05ea95f9
Binary files /dev/null and b/static/img/others/dffplayscryptonia.resized.png differ
diff --git a/static/img/others/dffplayscryptonia.resized.webp b/static/img/others/dffplayscryptonia.resized.webp
new file mode 100644
index 00000000..ea38ca77
Binary files /dev/null and b/static/img/others/dffplayscryptonia.resized.webp differ
diff --git a/static/img/others/dffplayscryptonia.webp b/static/img/others/dffplayscryptonia.webp
new file mode 100644
index 00000000..86dd4e5a
Binary files /dev/null and b/static/img/others/dffplayscryptonia.webp differ
diff --git a/static/img/others/dyed/DYED.webp b/static/img/others/dyed/DYED.webp
new file mode 100644
index 00000000..38759fc7
Binary files /dev/null and b/static/img/others/dyed/DYED.webp differ
diff --git a/static/img/others/dyed/DYED0.webp b/static/img/others/dyed/DYED0.webp
new file mode 100644
index 00000000..289c006a
Binary files /dev/null and b/static/img/others/dyed/DYED0.webp differ
diff --git a/static/img/others/dyed/DYED1-report.webp b/static/img/others/dyed/DYED1-report.webp
new file mode 100644
index 00000000..3e097979
Binary files /dev/null and b/static/img/others/dyed/DYED1-report.webp differ
diff --git a/static/img/others/dyed/DYED1.webp b/static/img/others/dyed/DYED1.webp
new file mode 100644
index 00000000..dfd9dfd4
Binary files /dev/null and b/static/img/others/dyed/DYED1.webp differ
diff --git a/static/img/others/dyed/DYED2.webp b/static/img/others/dyed/DYED2.webp
new file mode 100644
index 00000000..faef2035
Binary files /dev/null and b/static/img/others/dyed/DYED2.webp differ
diff --git a/static/img/others/ether-sky.webp b/static/img/others/ether-sky.webp
new file mode 100644
index 00000000..54f03d82
Binary files /dev/null and b/static/img/others/ether-sky.webp differ
diff --git a/static/img/others/farcaster.jpg b/static/img/others/farcaster.jpg
new file mode 100644
index 00000000..c0703853
Binary files /dev/null and b/static/img/others/farcaster.jpg differ
diff --git a/static/img/others/farcaster.webp b/static/img/others/farcaster.webp
new file mode 100644
index 00000000..8dcdebb1
Binary files /dev/null and b/static/img/others/farcaster.webp differ
diff --git a/static/img/others/gallerie-nft.png b/static/img/others/gallerie-nft.png
new file mode 100644
index 00000000..181637de
Binary files /dev/null and b/static/img/others/gallerie-nft.png differ
diff --git a/static/img/others/gallerie-nft.webp b/static/img/others/gallerie-nft.webp
new file mode 100644
index 00000000..5e6c855c
Binary files /dev/null and b/static/img/others/gallerie-nft.webp differ
diff --git a/static/img/others/isotile-mooncats.png b/static/img/others/isotile-mooncats.png
new file mode 100644
index 00000000..b333c4ed
Binary files /dev/null and b/static/img/others/isotile-mooncats.png differ
diff --git a/static/img/others/isotile-mooncats.webp b/static/img/others/isotile-mooncats.webp
new file mode 100644
index 00000000..08143e1c
Binary files /dev/null and b/static/img/others/isotile-mooncats.webp differ
diff --git a/static/img/others/leverage-sir.jpg b/static/img/others/leverage-sir.jpg
new file mode 100644
index 00000000..070cb363
Binary files /dev/null and b/static/img/others/leverage-sir.jpg differ
diff --git a/static/img/others/leverage-sir.webp b/static/img/others/leverage-sir.webp
new file mode 100644
index 00000000..38188ec6
Binary files /dev/null and b/static/img/others/leverage-sir.webp differ
diff --git a/static/img/others/liquity.png b/static/img/others/liquity.png
new file mode 100644
index 00000000..e2435719
Binary files /dev/null and b/static/img/others/liquity.png differ
diff --git a/static/img/others/liquity.webp b/static/img/others/liquity.webp
new file mode 100644
index 00000000..d17fc927
Binary files /dev/null and b/static/img/others/liquity.webp differ
diff --git a/static/img/others/luchadores.png b/static/img/others/luchadores.png
new file mode 100644
index 00000000..30d1efdd
Binary files /dev/null and b/static/img/others/luchadores.png differ
diff --git a/static/img/others/luchadores.webp b/static/img/others/luchadores.webp
new file mode 100644
index 00000000..559891ed
Binary files /dev/null and b/static/img/others/luchadores.webp differ
diff --git a/static/img/others/mav-symbol-color.png b/static/img/others/mav-symbol-color.png
new file mode 100644
index 00000000..097c503f
Binary files /dev/null and b/static/img/others/mav-symbol-color.png differ
diff --git a/static/img/others/mav-symbol-color.webp b/static/img/others/mav-symbol-color.webp
new file mode 100644
index 00000000..b04bc892
Binary files /dev/null and b/static/img/others/mav-symbol-color.webp differ
diff --git a/static/img/others/monolith-h.webp b/static/img/others/monolith-h.webp
new file mode 100644
index 00000000..b9253a35
Binary files /dev/null and b/static/img/others/monolith-h.webp differ
diff --git a/static/img/others/paraswap.webp b/static/img/others/paraswap.webp
new file mode 100644
index 00000000..fc01bee8
Binary files /dev/null and b/static/img/others/paraswap.webp differ
diff --git a/static/img/others/pharos.png b/static/img/others/pharos.png
new file mode 100644
index 00000000..7d3233b7
Binary files /dev/null and b/static/img/others/pharos.png differ
diff --git a/static/img/others/polaris-emblem.png b/static/img/others/polaris-emblem.png
new file mode 100644
index 00000000..c52bdb36
Binary files /dev/null and b/static/img/others/polaris-emblem.png differ
diff --git a/static/img/others/polaris-emblem.webp b/static/img/others/polaris-emblem.webp
new file mode 100644
index 00000000..7e3cbae3
Binary files /dev/null and b/static/img/others/polaris-emblem.webp differ
diff --git a/static/img/2020/defi-beyond-finance/banklessfr-nft.gif b/static/img/others/star-sky-mountain.png
similarity index 52%
rename from static/img/2020/defi-beyond-finance/banklessfr-nft.gif
rename to static/img/others/star-sky-mountain.png
index 138cc5d6..f19561e7 100644
Binary files a/static/img/2020/defi-beyond-finance/banklessfr-nft.gif and b/static/img/others/star-sky-mountain.png differ
diff --git a/static/img/others/symbol_tdc_color.png b/static/img/others/symbol_tdc_color.png
new file mode 100644
index 00000000..9d787517
Binary files /dev/null and b/static/img/others/symbol_tdc_color.png differ
diff --git a/static/img/others/symbol_tdc_color.webp b/static/img/others/symbol_tdc_color.webp
new file mode 100644
index 00000000..ea719734
Binary files /dev/null and b/static/img/others/symbol_tdc_color.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc-dec-report.png b/static/img/others/tdc/tdc-dec-report/tdc-dec-report.png
new file mode 100644
index 00000000..90d353e4
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc-dec-report.png differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc-dec-report.webp b/static/img/others/tdc/tdc-dec-report/tdc-dec-report.webp
new file mode 100644
index 00000000..f65e4160
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc-dec-report.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc-report-dec.pdf b/static/img/others/tdc/tdc-dec-report/tdc-report-dec.pdf
new file mode 100644
index 00000000..6e190846
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc-report-dec.pdf differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Expenses.jpg b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Expenses.jpg
new file mode 100644
index 00000000..d122ac69
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Expenses.jpg differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Expenses.webp b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Expenses.webp
new file mode 100644
index 00000000..ce6e5ca2
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Expenses.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_GasCosts.jpg b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_GasCosts.jpg
new file mode 100644
index 00000000..c4efac66
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_GasCosts.jpg differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_GasCosts.webp b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_GasCosts.webp
new file mode 100644
index 00000000..f0bcf702
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_GasCosts.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_NetWorth.jpg b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_NetWorth.jpg
new file mode 100644
index 00000000..5e99dbf9
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_NetWorth.jpg differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_NetWorth.webp b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_NetWorth.webp
new file mode 100644
index 00000000..b891cf7f
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_NetWorth.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Revenues.jpg b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Revenues.jpg
new file mode 100644
index 00000000..a01f1f14
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Revenues.jpg differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Revenues.webp b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Revenues.webp
new file mode 100644
index 00000000..e51369b2
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_Revenues.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_veVELO.jpg b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_veVELO.jpg
new file mode 100644
index 00000000..90fed145
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_veVELO.jpg differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_Report_December_veVELO.webp b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_veVELO.webp
new file mode 100644
index 00000000..3c633e0e
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_Report_December_veVELO.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_asset-details.png b/static/img/others/tdc/tdc-dec-report/tdc_asset-details.png
new file mode 100644
index 00000000..09da634b
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_asset-details.png differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_asset-details.webp b/static/img/others/tdc/tdc-dec-report/tdc_asset-details.webp
new file mode 100644
index 00000000..e7e8a50f
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_asset-details.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_base-lusd-usdc.png b/static/img/others/tdc/tdc-dec-report/tdc_base-lusd-usdc.png
new file mode 100644
index 00000000..9b5dee1d
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_base-lusd-usdc.png differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_base-lusd-usdc.webp b/static/img/others/tdc/tdc-dec-report/tdc_base-lusd-usdc.webp
new file mode 100644
index 00000000..83516f0f
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_base-lusd-usdc.webp differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_consolidated-report.png b/static/img/others/tdc/tdc-dec-report/tdc_consolidated-report.png
new file mode 100644
index 00000000..47058c0a
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_consolidated-report.png differ
diff --git a/static/img/others/tdc/tdc-dec-report/tdc_consolidated-report.webp b/static/img/others/tdc/tdc-dec-report/tdc_consolidated-report.webp
new file mode 100644
index 00000000..9f3d6116
Binary files /dev/null and b/static/img/others/tdc/tdc-dec-report/tdc_consolidated-report.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/aero-lusd-usdc.png b/static/img/others/tdc/tdc-nov-report/aero-lusd-usdc.png
new file mode 100644
index 00000000..0a3dfee2
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/aero-lusd-usdc.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/aero-lusd-usdc.webp b/static/img/others/tdc/tdc-nov-report/aero-lusd-usdc.webp
new file mode 100644
index 00000000..b8760646
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/aero-lusd-usdc.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/camelot-lusd-usdc.png b/static/img/others/tdc/tdc-nov-report/camelot-lusd-usdc.png
new file mode 100644
index 00000000..816fe201
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/camelot-lusd-usdc.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/camelot-lusd-usdc.webp b/static/img/others/tdc/tdc-nov-report/camelot-lusd-usdc.webp
new file mode 100644
index 00000000..3aef29f8
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/camelot-lusd-usdc.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/consolidated-report.png b/static/img/others/tdc/tdc-nov-report/consolidated-report.png
new file mode 100644
index 00000000..8db6d7f3
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/consolidated-report.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/consolidated-report.webp b/static/img/others/tdc/tdc-nov-report/consolidated-report.webp
new file mode 100644
index 00000000..0d1778e3
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/consolidated-report.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/cover.png b/static/img/others/tdc/tdc-nov-report/cover.png
new file mode 100644
index 00000000..16e5ff17
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/cover.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/cover.webp b/static/img/others/tdc/tdc-nov-report/cover.webp
new file mode 100644
index 00000000..af4d2016
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/cover.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/gas-expenses.png b/static/img/others/tdc/tdc-nov-report/gas-expenses.png
new file mode 100644
index 00000000..c9288c76
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/gas-expenses.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/gas-expenses.webp b/static/img/others/tdc/tdc-nov-report/gas-expenses.webp
new file mode 100644
index 00000000..5f0af4e4
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/gas-expenses.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/l2-revenues.png b/static/img/others/tdc/tdc-nov-report/l2-revenues.png
new file mode 100644
index 00000000..69856b41
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/l2-revenues.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/l2-revenues.webp b/static/img/others/tdc/tdc-nov-report/l2-revenues.webp
new file mode 100644
index 00000000..79366cc6
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/l2-revenues.webp differ
diff --git a/static/img/others/tdc/tdc-nov-report/ramses-lqty-eth.png b/static/img/others/tdc/tdc-nov-report/ramses-lqty-eth.png
new file mode 100644
index 00000000..47941834
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/ramses-lqty-eth.png differ
diff --git a/static/img/others/tdc/tdc-nov-report/ramses-lqty-eth.webp b/static/img/others/tdc/tdc-nov-report/ramses-lqty-eth.webp
new file mode 100644
index 00000000..35384284
Binary files /dev/null and b/static/img/others/tdc/tdc-nov-report/ramses-lqty-eth.webp differ
diff --git a/static/img/others/tdc/tdc-oct-report/consolidated-revenues.png b/static/img/others/tdc/tdc-oct-report/consolidated-revenues.png
new file mode 100644
index 00000000..6ebf75b8
Binary files /dev/null and b/static/img/others/tdc/tdc-oct-report/consolidated-revenues.png differ
diff --git a/static/img/others/tdc/tdc-oct-report/consolidated-revenues.webp b/static/img/others/tdc/tdc-oct-report/consolidated-revenues.webp
new file mode 100644
index 00000000..d68a9b96
Binary files /dev/null and b/static/img/others/tdc/tdc-oct-report/consolidated-revenues.webp differ
diff --git a/static/img/others/tdc/tdc-oct-report/gas-expenses.png b/static/img/others/tdc/tdc-oct-report/gas-expenses.png
new file mode 100644
index 00000000..9fc61c45
Binary files /dev/null and b/static/img/others/tdc/tdc-oct-report/gas-expenses.png differ
diff --git a/static/img/others/tdc/tdc-oct-report/gas-expenses.webp b/static/img/others/tdc/tdc-oct-report/gas-expenses.webp
new file mode 100644
index 00000000..3b86a519
Binary files /dev/null and b/static/img/others/tdc/tdc-oct-report/gas-expenses.webp differ
diff --git a/static/img/others/tdc/tdc-oct-report/l2-revenues.png b/static/img/others/tdc/tdc-oct-report/l2-revenues.png
new file mode 100644
index 00000000..4039ae23
Binary files /dev/null and b/static/img/others/tdc/tdc-oct-report/l2-revenues.png differ
diff --git a/static/img/others/tdc/tdc-oct-report/l2-revenues.webp b/static/img/others/tdc/tdc-oct-report/l2-revenues.webp
new file mode 100644
index 00000000..0a3ac6ff
Binary files /dev/null and b/static/img/others/tdc/tdc-oct-report/l2-revenues.webp differ
diff --git a/static/img/others/tdc/tdc-q1-report/q1-rev-sources-weekly.png b/static/img/others/tdc/tdc-q1-report/q1-rev-sources-weekly.png
new file mode 100644
index 00000000..69f6a5e1
Binary files /dev/null and b/static/img/others/tdc/tdc-q1-report/q1-rev-sources-weekly.png differ
diff --git a/static/img/others/tdc/tdc-q1-report/q1-rev-sources-weekly.webp b/static/img/others/tdc/tdc-q1-report/q1-rev-sources-weekly.webp
new file mode 100644
index 00000000..1df81f42
Binary files /dev/null and b/static/img/others/tdc/tdc-q1-report/q1-rev-sources-weekly.webp differ
diff --git a/static/img/others/tdc/tdc-q1-report/q1-total-stats.png b/static/img/others/tdc/tdc-q1-report/q1-total-stats.png
new file mode 100644
index 00000000..4a7285bf
Binary files /dev/null and b/static/img/others/tdc/tdc-q1-report/q1-total-stats.png differ
diff --git a/static/img/others/tdc/tdc-q1-report/q1-total-stats.webp b/static/img/others/tdc/tdc-q1-report/q1-total-stats.webp
new file mode 100644
index 00000000..d75ae085
Binary files /dev/null and b/static/img/others/tdc/tdc-q1-report/q1-total-stats.webp differ
diff --git a/static/img/others/tdc/tdc-q1-report/tdc-Q1-report.jpg b/static/img/others/tdc/tdc-q1-report/tdc-Q1-report.jpg
new file mode 100644
index 00000000..a7a8db29
Binary files /dev/null and b/static/img/others/tdc/tdc-q1-report/tdc-Q1-report.jpg differ
diff --git a/static/img/others/tdc/tdc-q1-report/tdc-Q1-report.webp b/static/img/others/tdc/tdc-q1-report/tdc-Q1-report.webp
new file mode 100644
index 00000000..347158fa
Binary files /dev/null and b/static/img/others/tdc/tdc-q1-report/tdc-Q1-report.webp differ
diff --git a/static/img/others/telegram.jpg b/static/img/others/telegram.jpg
new file mode 100644
index 00000000..7d383ab6
Binary files /dev/null and b/static/img/others/telegram.jpg differ
diff --git a/static/img/others/telegram.webp b/static/img/others/telegram.webp
new file mode 100644
index 00000000..6fd793d0
Binary files /dev/null and b/static/img/others/telegram.webp differ
diff --git a/static/img/others/x.png b/static/img/others/x.png
new file mode 100644
index 00000000..6e1a15be
Binary files /dev/null and b/static/img/others/x.png differ
diff --git a/static/img/others/x.webp b/static/img/others/x.webp
new file mode 100644
index 00000000..8048566b
Binary files /dev/null and b/static/img/others/x.webp differ
diff --git a/static/img/others/youtube.jpg b/static/img/others/youtube.jpg
new file mode 100644
index 00000000..d4b66358
Binary files /dev/null and b/static/img/others/youtube.jpg differ
diff --git a/static/img/others/youtube.webp b/static/img/others/youtube.webp
new file mode 100644
index 00000000..1d080348
Binary files /dev/null and b/static/img/others/youtube.webp differ
diff --git a/static/js/main.js b/static/js/main.js
deleted file mode 100644
index 608a8345..00000000
--- a/static/js/main.js
+++ /dev/null
@@ -1,366 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./src/js/main.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./data/filters.json":
-/*!***************************!*\
- !*** ./data/filters.json ***!
- \***************************/
-/*! exports provided: fr, en, default */
-/***/ (function(module) {
-
-eval("module.exports = JSON.parse(\"{\\\"fr\\\":{\\\"tags\\\":{\\\"name\\\":\\\"Tags\\\",\\\"class\\\":\\\"tags\\\",\\\"values\\\":[{\\\"key\\\":\\\"interview\\\",\\\"name\\\":\\\"Interview\\\"},{\\\"key\\\":\\\"discussion\\\",\\\"name\\\":\\\"Discussion\\\"},{\\\"key\\\":\\\"meetup\\\",\\\"name\\\":\\\"Meetup\\\"},{\\\"key\\\":\\\"commentary\\\",\\\"name\\\":\\\"Commentaire\\\"},{\\\"key\\\":\\\"mention\\\",\\\"name\\\":\\\"Mention\\\"}]},\\\"lang\\\":{\\\"name\\\":\\\"Langues\\\",\\\"class\\\":\\\"lang\\\",\\\"values\\\":[{\\\"key\\\":\\\"fr\\\",\\\"name\\\":\\\"🇫🇷 Français\\\",\\\"active\\\":true},{\\\"key\\\":\\\"en\\\",\\\"name\\\":\\\"🇬🇧 Anglais\\\"}]},\\\"date\\\":{\\\"name\\\":\\\"Date\\\",\\\"class\\\":\\\"date\\\",\\\"values\\\":[{\\\"key\\\":\\\"2021\\\",\\\"name\\\":\\\"2021\\\",\\\"active\\\":true},{\\\"key\\\":\\\"2020\\\",\\\"name\\\":\\\"2020\\\",\\\"active\\\":true},{\\\"key\\\":\\\"2019\\\",\\\"name\\\":\\\"2019\\\",\\\"active\\\":true}]},\\\"types\\\":{\\\"name\\\":\\\"Type\\\",\\\"class\\\":\\\"type\\\",\\\"values\\\":[{\\\"key\\\":\\\"audio\\\",\\\"name\\\":\\\"🎙 Audio\\\",\\\"active\\\":true},{\\\"key\\\":\\\"video\\\",\\\"name\\\":\\\"📹 Video\\\",\\\"active\\\":true},{\\\"key\\\":\\\"post\\\",\\\"name\\\":\\\"📰 Article\\\",\\\"active\\\":true}]}},\\\"en\\\":{\\\"tags\\\":{\\\"name\\\":\\\"Tags\\\",\\\"class\\\":\\\"tags\\\",\\\"values\\\":[{\\\"key\\\":\\\"interview\\\",\\\"name\\\":\\\"Interview\\\"},{\\\"key\\\":\\\"discussion\\\",\\\"name\\\":\\\"Discussion\\\"},{\\\"key\\\":\\\"meetup\\\",\\\"name\\\":\\\"Meetup\\\"},{\\\"key\\\":\\\"commentary\\\",\\\"name\\\":\\\"Commentary\\\"},{\\\"key\\\":\\\"mention\\\",\\\"name\\\":\\\"Mention\\\"}]},\\\"lang\\\":{\\\"name\\\":\\\"Langues\\\",\\\"class\\\":\\\"lang\\\",\\\"values\\\":[{\\\"key\\\":\\\"fr\\\",\\\"name\\\":\\\"🇫🇷 French\\\"},{\\\"key\\\":\\\"en\\\",\\\"name\\\":\\\"🇬🇧 English\\\",\\\"active\\\":true}]},\\\"date\\\":{\\\"name\\\":\\\"Date\\\",\\\"class\\\":\\\"date\\\",\\\"values\\\":[{\\\"key\\\":\\\"2021\\\",\\\"name\\\":\\\"2021\\\",\\\"active\\\":true},{\\\"key\\\":\\\"2020\\\",\\\"name\\\":\\\"2020\\\",\\\"active\\\":true},{\\\"key\\\":\\\"2019\\\",\\\"name\\\":\\\"2019\\\",\\\"active\\\":true}]},\\\"types\\\":{\\\"name\\\":\\\"Type\\\",\\\"class\\\":\\\"type\\\",\\\"values\\\":[{\\\"key\\\":\\\"audio\\\",\\\"name\\\":\\\"🎙 Audio\\\",\\\"active\\\":true},{\\\"key\\\":\\\"video\\\",\\\"name\\\":\\\"📹 Video\\\",\\\"active\\\":true},{\\\"key\\\":\\\"post\\\",\\\"name\\\":\\\"📰 Post\\\",\\\"active\\\":true}]}}}\");\n\n//# sourceURL=webpack:///./data/filters.json?");
-
-/***/ }),
-
-/***/ "./data/media.json":
-/*!*************************!*\
- !*** ./data/media.json ***!
- \*************************/
-/*! exports provided: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, default */
-/***/ (function(module) {
-
-eval("module.exports = JSON.parse(\"[{\\\"tags\\\":[\\\"post\\\",\\\"discussion\\\",\\\"fr\\\"],\\\"name\\\":\\\"Projection - Et si… l'effondrement de l'USDT était une bonne nouvelle pour la DeFi ?\\\",\\\"host\\\":\\\"Cryptoast\\\",\\\"link\\\":\\\"https://cryptoast.fr/effondrement-usdt-bonne-nouvelle-defi/\\\",\\\"date\\\":\\\"2021\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"fr\\\"],\\\"name\\\":\\\"La finance décentralisée (DeFi), la banque sans banquiers (avec Brice Berdah)\\\",\\\"host\\\":\\\"21 Millions - Capital\\\",\\\"link\\\":\\\"https://art19.com/shows/21-millions/episodes/4e69e1fc-74a5-49c8-9b1f-cc5dd5281d78\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"post\\\",\\\"fr\\\",\\\"interview\\\"],\\\"name\\\":\\\"Les français qui font Ethereum #1 : Brice Berdah de Monolith\\\",\\\"host\\\":\\\"Ethereum France\\\",\\\"link\\\":\\\"https://www.ethereum-france.com/les-francais-qui-font-ethereum-1-brice-berdah-de-monolith/\\\",\\\"date\\\":\\\"2019\\\"},{\\\"tags\\\":[\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"Live Bankless FR #1 - Quelle stratégie adopter dans un monde à 100 gwei / transaction rapide ?\\\",\\\"host\\\":\\\"BanklessFR\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=3GwKBTG8zXU\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"post\\\",\\\"fr\\\"],\\\"name\\\":\\\"Finance Décentralisée (DeFi) : enjeux et avenir par Alyra et The Garage\\\",\\\"host\\\":\\\"The Coin Tribune\\\",\\\"link\\\":\\\"https://www.thecointribune.com/actualites/finance-decentralisee-defi-enjeux-et-avenir-par-alyra-et-the-garage/\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"interview\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"Les nouveautés de Monolith\\\",\\\"host\\\":\\\"Dici\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=CNoWtFz1kJ0&feature=youtu.be\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"DeFi France #1 - Vers un système financier plus ouvert et transparent\\\",\\\"host\\\":\\\"DeFi France\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=6rgt-bygKNo&feature=youtu.be\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"DeFi France #2 - Echanges et gestion d'actifs décentralisés sans intermédiaires\\\",\\\"host\\\":\\\"DeFi France\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=jzrWxAOoh44&list=PLreQl_vxgtPhhwkYbTHiec_dyG9XqKtT9&index=2\\\",\\\"date\\\":\\\"2019\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"DeFi France #4 - Blockchain, un monde sans loi ?\\\",\\\"host\\\":\\\"DeFi France\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=lym5thBJVrY&list=PLreQl_vxgtPhhwkYbTHiec_dyG9XqKtT9&index=4\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"DeFi France #5 DeFi et Revenu Passif prêts, immobilier et réserves de liquidité\\\",\\\"host\\\":\\\"DeFi France\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=RLKvpIMSerI&list=PLreQl_vxgtPhhwkYbTHiec_dyG9XqKtT9&index=5\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"DeFi France #6 : French Track - La finance décentralisée : vers une nouvelle finance\\\",\\\"host\\\":\\\"DeFi France\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=vF-7T5EtcQo&list=PLreQl_vxgtPhhwkYbTHiec_dyG9XqKtT9&index=6\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"meetup\\\",\\\"video\\\",\\\"fr\\\"],\\\"name\\\":\\\"DeFi France #9 - Les Arcanes de la DeFi : mise à jour avec l'Ether\\\",\\\"host\\\":\\\"DeFi France\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=i7f6ZBOTiXo&t=1s\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"mention\\\",\\\"post\\\",\\\"fr\\\"],\\\"name\\\":\\\"Hebdo Crypto #87 – les actualités de la semaine des cryptomonnaies\\\",\\\"host\\\":\\\"Le Journal Du Coin\\\",\\\"link\\\":\\\"https://journalducoin.com/bitcoin/hebdo-crypto-87-les-actualites-de-la-semaine-des-cryptomonnaies/\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"mention\\\",\\\"post\\\",\\\"fr\\\"],\\\"name\\\":\\\"Monolith, la Carte de paiement Crypto et Bitcoin Boostée à la DeFi\\\",\\\"host\\\":\\\"The Coin Tribune\\\",\\\"link\\\":\\\"https://www.thecointribune.com/actualites/monolith-la-carte-de-paiement-crypto-et-bitcoin-boostee-a-la-defi/\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"fr\\\"],\\\"name\\\":\\\"Univers Bitcoin Podcast #8 : DeFi et Francophonie : où s'informer ? Interview de TokenBrice\\\",\\\"host\\\":\\\"Univers Bitcoin Podcast\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=4zClsm-KTpM&feature=youtu.be\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"video\\\",\\\"en\\\",\\\"meetup\\\",\\\"discussion\\\"],\\\"name\\\":\\\"#mDeFi 5 - The next generation of stablecoins\\\",\\\"host\\\":\\\"Monolith\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=jPrwinPvwv4\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"en\\\"],\\\"name\\\":\\\"Zerion launches DeFi SDK 🧱, Another DeFi attack 🤦♂️ & Balancer Labs raises $3M 🚀\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://open.spotify.com/episode/2M3BQqfBSFP8NvgM5Mrafb\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"en\\\"],\\\"name\\\":\\\"HegicOptions Bug ⛔, Pool Together Pods 🤑 & The 10k Audit 💸 - Your Weekly Dose of DeFi 🥳\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://open.spotify.com/episode/1KoNWhpN5iB1H3jqBOJEqs\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"en\\\"],\\\"name\\\":\\\"Aave Is Growing Fast 🚀, Why You Need Gastoken ⛽, DeFi Events Recap ✨\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://open.spotify.com/episode/55XxDDmleayBCDutgO0Z8v\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"en\\\"],\\\"name\\\":\\\"How Argent Is Going to Onboard 1 Billion Users to DeFi 🚀\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://open.spotify.com/episode/6jm9Oi7sLQ9se2bLwom3Zo\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"en\\\"],\\\"name\\\":\\\"Trustless Stablecoins💰, BTC on Ethereum & DeRisking DeFi 🛡️\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://abelsabstracts.substack.com/p/trustless-stablecoins-btc-on-ethereum\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"en\\\"],\\\"name\\\":\\\"Compound Token Distribution 📈, Curve.fi APR & Volumes Exploding 🚀, Smart Wallet Market Analysis 🔎\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://abelsabstracts.substack.com/p/compound-token-distribution-curvefi\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"discussion\\\",\\\"post\\\",\\\"en\\\"],\\\"name\\\":\\\"Tokenised Ownership Is the Best Coordination Tool Since Equity 🤝, CurveDAO 💰 & Ampleforth Geyser 🌊\\\",\\\"host\\\":\\\"Abel Abstracts\\\",\\\"link\\\":\\\"https://abelsabstracts.substack.com/p/tokenised-ownership-is-the-best-coordination\\\",\\\"date\\\":\\\"2020\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"interview\\\",\\\"en\\\"],\\\"name\\\":\\\"Charge it! Putting Crypto on Debit Cards - Featuring Brice Berdah of Monolith\\\",\\\"host\\\":\\\"The DeFi Podcast\\\",\\\"link\\\":\\\"https://the-defi-podcast.simplecast.com/episodes/charge-it-putting-crypto-on-debit-cards-featuring-brice-berdah-of-monolith\\\",\\\"date\\\":\\\"2019\\\"},{\\\"tags\\\":[\\\"video\\\",\\\"interview\\\",\\\"en\\\"],\\\"name\\\":\\\"Building the world’s first self-sovereign consumer finance service, Brice Berdah :Monolith [BULL.IO]\\\",\\\"host\\\":\\\"Bull io - Blockchain Media\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=ljnAsmOe7NA\\\",\\\"date\\\":\\\"2019\\\"},{\\\"tags\\\":[\\\"audio\\\",\\\"interview\\\",\\\"en\\\"],\\\"name\\\":\\\"The growth and impact of Defi & User Adoption - Token Brice - Episode 14\\\",\\\"host\\\":\\\"TheBlockExperience\\\",\\\"link\\\":\\\"https://www.youtube.com/watch?v=DDtcMElQ0iY\\\",\\\"date\\\":\\\"2019\\\"},{\\\"tags\\\":[\\\"post\\\",\\\"en\\\"],\\\"name\\\":\\\"How DeFi can pay for your lunches\\\",\\\"host\\\":\\\"Bankless\\\",\\\"link\\\":\\\"https://bankless.substack.com/p/how-defi-can-pay-for-your-lunches\\\",\\\"date\\\":\\\"2019\\\"},{\\\"tags\\\":[\\\"mention\\\",\\\"post\\\",\\\"en\\\"],\\\"name\\\":\\\"Boom or bust? Welcome to the freewheeling world of crypto lending\\\",\\\"host\\\":\\\"Reuters UK\\\",\\\"link\\\":\\\"https://uk.reuters.com/article/uk-crypto-currencies-lending-insight/boom-or-bust-welcome-to-the-freewheeling-world-of-crypto-lending-idUKKBN25M0GQ\\\",\\\"date\\\":\\\"2020\\\"}]\");\n\n//# sourceURL=webpack:///./data/media.json?");
-
-/***/ }),
-
-/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js?!./src/js/App.vue?vue&type=style&index=1&lang=css&":
-/*!**********************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib??vue-loader-options!./src/js/App.vue?vue&type=style&index=1&lang=css& ***!
- \**********************************************************************************************************************************************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n.multiselect__tags, .multiselect__input, .multiselect__content-wrapper {\\n background: var(--color-bg);\\n}\\n.post ul.multiselect__content {\\n padding-left: 0;\\n}\\n.multiselect__option--highlight, .multiselect__tag, .multiselect__option--selected {\\n background: var(--color-primary);\\n opacity: 0.8;\\n}\\n.multiselect__option.multiselect__option--highlight {\\n color: #fff;\\n}\\n.multiselect__option--selected.multiselect__option--highlight {\\n opacity: 0.7;\\n}\\n.multiselect__option {\\n color: var(--color-contrast-high);\\n}\\n.multiselect__tag-icon:after {\\n color: var(--color-primary-l);\\n}\\n.multiselect__tag-icon:focus, .multiselect__tag-icon:hover {\\n background: var(--color-primary-h);\\n}\\n.filters {\\n display: flex;\\n align-items: flex-start;\\n flex-wrap: wrap;\\n}\\n.tags {\\n width: 100%;\\n}\\n.type, .lang, .tags, .date {\\n margin: 10px 10px 0 0;\\n}\\n.type, .lang, .date {\\n margin: 10px 10px 10px 0;\\n flex: 1;\\n}\\n\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./src/js/App.vue?./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib??vue-loader-options");
-
-/***/ }),
-
-/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-multiselect/dist/vue-multiselect.min.css?vue&type=style&index=0&lang=css&":
-/*!***************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-multiselect/dist/vue-multiselect.min.css?vue&type=style&index=0&lang=css& ***!
- \***************************************************************************************************************************************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"fieldset[disabled] .multiselect{pointer-events:none}.multiselect__spinner{position:absolute;right:1px;top:1px;width:48px;height:35px;background:#fff;display:block}.multiselect__spinner:after,.multiselect__spinner:before{position:absolute;content:\\\"\\\";top:50%;left:50%;margin:-8px 0 0 -8px;width:16px;height:16px;border-radius:100%;border:2px solid transparent;border-top-color:#41b883;box-shadow:0 0 0 1px transparent}.multiselect__spinner:before{animation:spinning 2.4s cubic-bezier(.41,.26,.2,.62);animation-iteration-count:infinite}.multiselect__spinner:after{animation:spinning 2.4s cubic-bezier(.51,.09,.21,.8);animation-iteration-count:infinite}.multiselect__loading-enter-active,.multiselect__loading-leave-active{transition:opacity .4s ease-in-out;opacity:1}.multiselect__loading-enter,.multiselect__loading-leave-active{opacity:0}.multiselect,.multiselect__input,.multiselect__single{font-family:inherit;font-size:16px;-ms-touch-action:manipulation;touch-action:manipulation}.multiselect{box-sizing:content-box;display:block;position:relative;width:100%;min-height:40px;text-align:left;color:#35495e}.multiselect *{box-sizing:border-box}.multiselect:focus{outline:none}.multiselect--disabled{background:#ededed;pointer-events:none;opacity:.6}.multiselect--active{z-index:50}.multiselect--active:not(.multiselect--above) .multiselect__current,.multiselect--active:not(.multiselect--above) .multiselect__input,.multiselect--active:not(.multiselect--above) .multiselect__tags{border-bottom-left-radius:0;border-bottom-right-radius:0}.multiselect--active .multiselect__select{transform:rotate(180deg)}.multiselect--above.multiselect--active .multiselect__current,.multiselect--above.multiselect--active .multiselect__input,.multiselect--above.multiselect--active .multiselect__tags{border-top-left-radius:0;border-top-right-radius:0}.multiselect__input,.multiselect__single{position:relative;display:inline-block;min-height:20px;line-height:20px;border:none;border-radius:5px;background:#fff;padding:0 0 0 5px;width:100%;transition:border .1s ease;box-sizing:border-box;margin-bottom:8px;vertical-align:top}.multiselect__input:-ms-input-placeholder{color:#35495e}.multiselect__input::placeholder{color:#35495e}.multiselect__tag~.multiselect__input,.multiselect__tag~.multiselect__single{width:auto}.multiselect__input:hover,.multiselect__single:hover{border-color:#cfcfcf}.multiselect__input:focus,.multiselect__single:focus{border-color:#a8a8a8;outline:none}.multiselect__single{padding-left:5px;margin-bottom:8px}.multiselect__tags-wrap{display:inline}.multiselect__tags{min-height:40px;display:block;padding:8px 40px 0 8px;border-radius:5px;border:1px solid #e8e8e8;background:#fff;font-size:14px}.multiselect__tag{position:relative;display:inline-block;padding:4px 26px 4px 10px;border-radius:5px;margin-right:10px;color:#fff;line-height:1;background:#41b883;margin-bottom:5px;white-space:nowrap;overflow:hidden;max-width:100%;text-overflow:ellipsis}.multiselect__tag-icon{cursor:pointer;margin-left:7px;position:absolute;right:0;top:0;bottom:0;font-weight:700;font-style:normal;width:22px;text-align:center;line-height:22px;transition:all .2s ease;border-radius:5px}.multiselect__tag-icon:after{content:\\\"\\\\D7\\\";color:#266d4d;font-size:14px}.multiselect__tag-icon:focus,.multiselect__tag-icon:hover{background:#369a6e}.multiselect__tag-icon:focus:after,.multiselect__tag-icon:hover:after{color:#fff}.multiselect__current{min-height:40px;overflow:hidden;padding:8px 30px 0 12px;white-space:nowrap;border-radius:5px;border:1px solid #e8e8e8}.multiselect__current,.multiselect__select{line-height:16px;box-sizing:border-box;display:block;margin:0;text-decoration:none;cursor:pointer}.multiselect__select{position:absolute;width:40px;height:38px;right:1px;top:1px;padding:4px 8px;text-align:center;transition:transform .2s ease}.multiselect__select:before{position:relative;right:0;top:65%;color:#999;margin-top:4px;border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 0;content:\\\"\\\"}.multiselect__placeholder{color:#adadad;display:inline-block;margin-bottom:10px;padding-top:2px}.multiselect--active .multiselect__placeholder{display:none}.multiselect__content-wrapper{position:absolute;display:block;background:#fff;width:100%;max-height:240px;overflow:auto;border:1px solid #e8e8e8;border-top:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;z-index:50;-webkit-overflow-scrolling:touch}.multiselect__content{list-style:none;display:inline-block;padding:0;margin:0;min-width:100%;vertical-align:top}.multiselect--above .multiselect__content-wrapper{bottom:100%;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom:none;border-top:1px solid #e8e8e8}.multiselect__content::webkit-scrollbar{display:none}.multiselect__element{display:block}.multiselect__option{display:block;padding:12px;min-height:40px;line-height:16px;text-decoration:none;text-transform:none;vertical-align:middle;position:relative;cursor:pointer;white-space:nowrap}.multiselect__option:after{top:0;right:0;position:absolute;line-height:40px;padding-right:12px;padding-left:20px;font-size:13px}.multiselect__option--highlight{background:#41b883;outline:none;color:#fff}.multiselect__option--highlight:after{content:attr(data-select);background:#41b883;color:#fff}.multiselect__option--selected{background:#f3f3f3;color:#35495e;font-weight:700}.multiselect__option--selected:after{content:attr(data-selected);color:silver}.multiselect__option--selected.multiselect__option--highlight{background:#ff6a6a;color:#fff}.multiselect__option--selected.multiselect__option--highlight:after{background:#ff6a6a;content:attr(data-deselect);color:#fff}.multiselect--disabled .multiselect__current,.multiselect--disabled .multiselect__select{background:#ededed;color:#a6a6a6}.multiselect__option--disabled{background:#ededed!important;color:#a6a6a6!important;cursor:text;pointer-events:none}.multiselect__option--group{background:#ededed;color:#35495e}.multiselect__option--group.multiselect__option--highlight{background:#35495e;color:#fff}.multiselect__option--group.multiselect__option--highlight:after{background:#35495e}.multiselect__option--disabled.multiselect__option--highlight{background:#dedede}.multiselect__option--group-selected.multiselect__option--highlight{background:#ff6a6a;color:#fff}.multiselect__option--group-selected.multiselect__option--highlight:after{background:#ff6a6a;content:attr(data-deselect);color:#fff}.multiselect-enter-active,.multiselect-leave-active{transition:all .15s ease}.multiselect-enter,.multiselect-leave-active{opacity:0}.multiselect__strong{margin-bottom:8px;line-height:20px;display:inline-block;vertical-align:top}[dir=rtl] .multiselect{text-align:right}[dir=rtl] .multiselect__select{right:auto;left:1px}[dir=rtl] .multiselect__tags{padding:8px 8px 0 40px}[dir=rtl] .multiselect__content{text-align:right}[dir=rtl] .multiselect__option:after{right:auto;left:0}[dir=rtl] .multiselect__clear{right:auto;left:12px}[dir=rtl] .multiselect__spinner{right:auto;left:1px}@keyframes spinning{0%{transform:rotate(0)}to{transform:rotate(2turn)}}\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./node_modules/vue-multiselect/dist/vue-multiselect.min.css?./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js");
-
-/***/ }),
-
-/***/ "./node_modules/css-loader/dist/runtime/api.js":
-/*!*****************************************************!*\
- !*** ./node_modules/css-loader/dist/runtime/api.js ***!
- \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}\n\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?");
-
-/***/ }),
-
-/***/ "./node_modules/process/browser.js":
-/*!*****************************************!*\
- !*** ./node_modules/process/browser.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?");
-
-/***/ }),
-
-/***/ "./node_modules/setimmediate/setImmediate.js":
-/*!***************************************************!*\
- !*** ./node_modules/setimmediate/setImmediate.js ***!
- \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a
+
+{{ end }}
+{{ math.inline >}}
+
+### Examples
+
+Inline math: $\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…$
+
+Block math:
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
+$$
diff --git a/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/index.ar.md b/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/index.ar.md
new file mode 100644
index 00000000..b0328f4d
--- /dev/null
+++ b/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/index.ar.md
@@ -0,0 +1,32 @@
++++
+author = "Hugo Authors"
+title = "مثال نص"
+date = "2019-03-09"
+description = "هذا النص هو مثال لنص يمكن أن يستبدل في نفس المساحة"
+categories = [
+ "تجربة",
+ "تجربة مع فراغات"
+]
+tags = [
+ "ماركداون",
+ "نص",
+ "وسم مع فراغات"
+]
+image = "matt-le-SJSpo9hQf7s-unsplash.jpg"
++++
+## فقرة 1
+
+هذا النص هو مثال لنص يمكن أن يستبدل في نفس المساحة، لقد تم توليد هذا النص من [مولد النص العربى](https://colorslab.com/textgator/)، حيث يمكنك أن تولد مثل هذا النص أو العديد من النصوص الأخرى إضافة إلى زيادة عدد الحروف التى يولدها التطبيق.
+إذا كنت تحتاج إلى عدد أكبر من الفقرات يتيح لك مولد النص العربى زيادة عدد الفقرات كما تريد، النص لن يبدو مقسما ولا يحوي أخطاء لغوية، مولد النص العربى مفيد لمصممي المواقع على وجه الخصوص، حيث يحتاج العميل فى كثير من الأحيان أن يطلع على صورة حقيقية لتصميم الموقع.
+ومن هنا وجب على المصمم أن يضع نصوصا مؤقتة على التصميم ليظهر للعميل الشكل كاملاً،دور مولد النص العربى أن يوفر على المصمم عناء البحث عن نص بديل لا علاقة له بالموضوع الذى يتحدث عنه التصميم فيظهر بشكل لا يليق.
+هذا النص يمكن أن يتم تركيبه على أي تصميم دون مشكلة فلن يبدو وكأنه نص منسوخ، غير منظم، غير منسق، أو حتى غير مفهوم. لأنه مازال نصاً بديلاً ومؤقتاً.
+
+## فقرة 2
+
+هذا النص هو مثال لنص يمكن أن يستبدل في نفس المساحة، لقد تم توليد هذا النص من [مولد النص العربى](https://colorslab.com/textgator/)، حيث يمكنك أن تولد مثل هذا النص أو العديد من النصوص الأخرى إضافة إلى زيادة عدد الحروف التى يولدها التطبيق.
+إذا كنت تحتاج إلى عدد أكبر من الفقرات يتيح لك مولد النص العربى زيادة عدد الفقرات كما تريد، النص لن يبدو مقسما ولا يحوي أخطاء لغوية، مولد النص العربى مفيد لمصممي المواقع على وجه الخصوص، حيث يحتاج العميل فى كثير من الأحيان أن يطلع على صورة حقيقية لتصميم الموقع.
+ومن هنا وجب على المصمم أن يضع نصوصا مؤقتة على التصميم ليظهر للعميل الشكل كاملاً،دور مولد النص العربى أن يوفر على المصمم عناء البحث عن نص بديل لا علاقة له بالموضوع الذى يتحدث عنه التصميم فيظهر بشكل لا يليق.
+هذا النص يمكن أن يتم تركيبه على أي تصميم دون مشكلة فلن يبدو وكأنه نص منسوخ، غير منظم، غير منسق، أو حتى غير مفهوم. لأنه مازال نصاً بديلاً ومؤقتاً.
+
+## تجربة RTL
+كلمة 1 Text كلمة 2
diff --git a/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/index.md b/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/index.md
new file mode 100644
index 00000000..280197ea
--- /dev/null
+++ b/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/index.md
@@ -0,0 +1,51 @@
++++
+author = "Hugo Authors"
+title = "Placeholder Text"
+date = "2019-03-09"
+description = "Lorem Ipsum Dolor Si Amet"
+categories = [
+ "Test",
+ "Test with whitespaces"
+]
+tags = [
+ "markdown",
+ "text",
+ "tag with whitespaces"
+]
+image = "matt-le-SJSpo9hQf7s-unsplash.jpg"
++++
+
+Lorem est tota propiore conpellat pectoribus de pectora summo. Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
+
+1. Exierant elisi ambit vivere dedere
+2. Duce pollice
+3. Eris modo
+4. Spargitque ferrea quos palude
+
+Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
+
+1. Comas hunc haec pietate fetum procerum dixit
+2. Post torum vates letum Tiresia
+3. Flumen querellas
+4. Arcanaque montibus omnes
+5. Quidem et
+
+# Vagus elidunt
+
+
+
+[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
+
+## Mane refeci capiebant unda mulcebat
+
+Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
+
+Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
+
+Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.
+
+{{< css.inline >}}
+
+{{< /css.inline >}}
diff --git a/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/matt-le-SJSpo9hQf7s-unsplash.jpg b/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/matt-le-SJSpo9hQf7s-unsplash.jpg
new file mode 100644
index 00000000..3b287900
Binary files /dev/null and b/themes/hugo-theme-stack/exampleSite/content/post/placeholder-text/matt-le-SJSpo9hQf7s-unsplash.jpg differ
diff --git a/themes/hugo-theme-stack/exampleSite/content/post/rich-content/index.md b/themes/hugo-theme-stack/exampleSite/content/post/rich-content/index.md
new file mode 100644
index 00000000..1ebb564f
--- /dev/null
+++ b/themes/hugo-theme-stack/exampleSite/content/post/rich-content/index.md
@@ -0,0 +1,67 @@
++++
+author = "Hugo Authors"
+title = "Rich Content"
+date = "2019-03-10"
+description = "A brief description of Hugo Shortcodes"
+tags = [
+ "shortcodes",
+ "privacy",
+]
++++
+
+Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
+
+---
+
+## YouTube Privacy Enhanced Shortcode
+
+{{< youtube ZJthWmvUzzc >}}
+
+
+
+---
+
+## Twitter Simple Shortcode
+
+{{< twitter_simple user="DesignReviewed" id="1085870671291310081" >}}
+
+
+
+---
+
+## Vimeo Simple Shortcode
+
+{{< vimeo_simple 48912912 >}}
+
+## bilibilibi Shortcode
+
+{{< bilibili av498363026 >}}
+
+## Gist Shortcode
+
+{{< gist spf13 7896402 >}}
+
+## Gitlab Snippets Shortcode
+
+{{< gitlab 2349278 >}}
+
+## Quote Shortcode
+
+Stack adds a `quote` shortcode. For example:
+
+{{< quote author="A famous person" source="The book they wrote" url="https://en.wikipedia.org/wiki/Book">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+{{< /quote >}}
+
+{{< quote source="Anonymous book" url="https://en.wikipedia.org/wiki/Book">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+{{< /quote >}}
+
+{{< quote source="Some book">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+{{< /quote >}}
+
+{{< quote author="Somebody">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+{{< /quote >}}
+
diff --git a/themes/hugo-theme-stack/exampleSite/hugo.yaml b/themes/hugo-theme-stack/exampleSite/hugo.yaml
new file mode 100644
index 00000000..7cda528c
--- /dev/null
+++ b/themes/hugo-theme-stack/exampleSite/hugo.yaml
@@ -0,0 +1,269 @@
+baseurl: https://example.com/
+languageCode: en-us
+theme: hugo-theme-stack
+title: Example Site
+copyright: Example Person
+
+# Theme i18n support
+# Available values: ar, bn, ca, de, el, en, es, fr, hu, id, it, ja, ko, nl, pt-br, th, uk, zh-cn, zh-hk, zh-tw
+DefaultContentLanguage: en
+
+# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
+# This will make .Summary and .WordCount behave correctly for CJK languages.
+hasCJKLanguage: false
+
+languages:
+ en:
+ languageName: English
+ title: Example Site
+ weight: 1
+ params:
+ sidebar:
+ subtitle: Example description
+ zh-cn:
+ languageName: 中文
+ title: 演示站点
+ weight: 2
+ params:
+ sidebar:
+ subtitle: 演示说明
+ ar:
+ languageName: عربي
+ languagedirection: rtl
+ title: موقع تجريبي
+ weight: 3
+ params:
+ sidebar:
+ subtitle: وصف تجريبي
+
+services:
+ # Change it to your Disqus shortname before using
+ disqus:
+ shortname: "hugo-theme-stack"
+ # GA Tracking ID
+ googleAnalytics:
+ id:
+
+pagination:
+ pagerSize: 3
+
+permalinks:
+ post: /p/:slug/
+ page: /:slug/
+
+params:
+ mainSections:
+ - post
+ featuredImageField: image
+ rssFullContent: true
+ favicon: # e.g.: favicon placed in `static/favicon.ico` of your site folder, then set this field to `/favicon.ico` (`/` is necessary)
+
+ footer:
+ since: 2020
+ customText:
+
+ dateFormat:
+ published: Jan 02, 2006
+ lastUpdated: Jan 02, 2006 15:04 MST
+
+ sidebar:
+ emoji: 🍥
+ subtitle: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ avatar:
+ enabled: true
+ local: true
+ src: img/avatar.png
+
+ article:
+ math: false
+ toc: true
+ readingTime: true
+ license:
+ enabled: true
+ default: Licensed under CC BY-NC-SA 4.0
+
+ comments:
+ enabled: true
+ provider: disqus
+
+ disqusjs:
+ shortname:
+ apiUrl:
+ apiKey:
+ admin:
+ adminLabel:
+
+ utterances:
+ repo:
+ issueTerm: pathname
+ label:
+
+ beaudar:
+ repo:
+ issueTerm: pathname
+ label:
+ theme:
+
+ remark42:
+ host:
+ site:
+ locale:
+
+ vssue:
+ platform:
+ owner:
+ repo:
+ clientId:
+ clientSecret:
+ autoCreateIssue: false
+
+ # Waline client configuration see: https://waline.js.org/en/reference/component.html
+ waline:
+ serverURL:
+ lang:
+ pageview:
+ emoji:
+ - https://unpkg.com/@waline/emojis@1.0.1/weibo
+ requiredMeta:
+ - name
+ - email
+ - url
+ locale:
+ admin: Admin
+ placeholder:
+
+ twikoo:
+ envId:
+ region:
+ path:
+ lang:
+
+ # See https://cactus.chat/docs/reference/web-client/#configuration for description of the various options
+ cactus:
+ defaultHomeserverUrl: "https://matrix.cactus.chat:8448"
+ serverName: "cactus.chat"
+ siteName: "" # You must insert a unique identifier here matching the one you registered (See https://cactus.chat/docs/getting-started/quick-start/#register-your-site)
+
+ giscus:
+ repo:
+ repoID:
+ category:
+ categoryID:
+ mapping:
+ lightTheme:
+ darkTheme:
+ reactionsEnabled: 1
+ emitMetadata: 0
+
+ gitalk:
+ owner:
+ admin:
+ repo:
+ clientID:
+ clientSecret:
+ proxy:
+
+ cusdis:
+ host:
+ id:
+ widgets:
+ homepage:
+ - type: search
+ - type: archives
+ params:
+ limit: 5
+ - type: categories
+ params:
+ limit: 10
+ - type: tag-cloud
+ params:
+ limit: 10
+ page:
+ - type: toc
+
+ opengraph:
+ twitter:
+ # Your Twitter username
+ site:
+
+ # Available values: summary, summary_large_image
+ card: summary_large_image
+
+ defaultImage:
+ opengraph:
+ enabled: false
+ local: false
+ src:
+
+ colorScheme:
+ # Display toggle
+ toggle: true
+
+ # Available values: auto, light, dark
+ default: auto
+
+ imageProcessing:
+ cover:
+ enabled: true
+ content:
+ enabled: true
+
+### Custom menu
+### See https://stack.jimmycai.com/config/menu
+### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
+menu:
+ main: []
+
+ social:
+ - identifier: github
+ name: GitHub
+ url: https://github.com/CaiJimmy/hugo-theme-stack
+ params:
+ icon: brand-github
+
+ - identifier: twitter
+ name: Twitter
+ url: https://twitter.com
+ params:
+ icon: brand-twitter
+
+related:
+ includeNewer: true
+ threshold: 60
+ toLower: false
+ indices:
+ - name: tags
+ weight: 100
+
+ - name: categories
+ weight: 200
+
+markup:
+ goldmark:
+ extensions:
+ passthrough:
+ enable: true
+ delimiters:
+ block:
+ - - \[
+ - \]
+ - - $$
+ - $$
+ inline:
+ - - \(
+ - \)
+ renderer:
+ ## Set to true if you have HTML content inside Markdown
+ unsafe: true
+ tableOfContents:
+ endLevel: 4
+ ordered: true
+ startLevel: 2
+ highlight:
+ noClasses: false
+ codeFences: true
+ guessSyntax: true
+ lineNoStart: 1
+ lineNos: true
+ lineNumbersInTable: true
+ tabWidth: 4
diff --git a/themes/hugo-theme-stack/go.mod b/themes/hugo-theme-stack/go.mod
new file mode 100644
index 00000000..63df6350
--- /dev/null
+++ b/themes/hugo-theme-stack/go.mod
@@ -0,0 +1,3 @@
+module github.com/CaiJimmy/hugo-theme-stack/v3
+
+go 1.17
diff --git a/themes/hugo-theme-stack/i18n/ar.yaml b/themes/hugo-theme-stack/i18n/ar.yaml
new file mode 100644
index 00000000..45fd7498
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/ar.yaml
@@ -0,0 +1,74 @@
+toggleMenu:
+ other: اخفي القائمة
+
+darkMode:
+ other: الوضع الداكن
+
+list:
+ page:
+ one: "{{ .Count }} صفحه"
+ other: "{{ .Count }} صفحات"
+
+ section:
+ other: قسم
+
+ subsection:
+ one: قسم فرعي
+ other: اقسام فرعية
+
+article:
+ back:
+ other: خلف
+
+ tableOfContents:
+ other: جدول المحتويات
+
+ relatedContent:
+ other: محتوى مشابهه
+
+ lastUpdatedOn:
+ other: التعديل الاخير
+
+ readingTime:
+ one: "تُقرأ خلال دقيقة"
+ other: "تُقرأ خلال {{ .Count }} دقائق"
+
+notFound:
+ title:
+ other: غير موجود
+
+ subtitle:
+ other: تعذر العثور على الصفحة المطلوبة.
+
+widget:
+ archives:
+ title:
+ other: الارشيفات
+
+ more:
+ other: اكثر
+
+ tagCloud:
+ title:
+ other: وسوم
+
+ categoriesCloud:
+ title:
+ other: التصنيفات
+
+search:
+ title:
+ other: بحث
+
+ placeholder:
+ other: اكتب...
+
+ resultTitle:
+ other: "#PAGES_COUNT نتيجة (#TIME_SECONDS ثواني)"
+
+footer:
+ builtWith:
+ other: "مبني باستخدام {{ .Generator }}"
+
+ designedBy:
+ other: "قالب {{ .Theme }} مصمم من {{ .DesignedBy }}"
diff --git a/themes/hugo-theme-stack/i18n/be.yaml b/themes/hugo-theme-stack/i18n/be.yaml
new file mode 100644
index 00000000..605cd086
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/be.yaml
@@ -0,0 +1,72 @@
+toggleMenu:
+ other: Паказаць/схаваць меню
+
+darkMode:
+ other: Цёмны рэжым
+
+list:
+ page:
+ one: "{{ .Count }} старонка"
+ few: "{{ .Count }} старонкі"
+ many: "{{ .Count }} старонак"
+ other: "{{ .Count }} старонкі"
+
+ section:
+ other: Раздзел
+
+ subsection:
+ one: Падраздзел
+ few: Падраздзелы
+ many: Падраздзелы
+ other: Падраздзелы
+
+article:
+ back:
+ other: Назад
+
+ relatedContent:
+ other: Таксама рэкамендуем
+
+ lastUpdatedOn:
+ other: Абноўлена
+
+ tableOfContents:
+ other: Змест
+
+ readingTime:
+ other: "Час чытання: {{ .Count }} хв."
+
+notFound:
+ title:
+ other: Не знойдзена
+
+ subtitle:
+ other: Запытваемая старонка не існуе
+
+widget:
+ archives:
+ title:
+ other: Архівы
+ more:
+ other: Яшчэ
+
+ tagCloud:
+ title:
+ other: Тэгі
+
+search:
+ title:
+ other: Пошук
+
+ placeholder:
+ other: Увядзіце нешта...
+
+ resultTitle:
+ other: "Знайдзена #PAGES_COUNT старонак (за #TIME_SECONDS с.)"
+
+footer:
+ builtWith:
+ other: Створана пры дапамозе {{ .Generator }}
+
+ designedBy:
+ other: Тэма {{ .Theme }}, дызайн {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/bg.yaml b/themes/hugo-theme-stack/i18n/bg.yaml
new file mode 100644
index 00000000..cf64a565
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/bg.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Покажи Меню
+
+darkMode:
+ other: Тъмен Режим
+
+list:
+ page:
+ one: "{{ .Count }} страница"
+ other: "{{ .Count }} страници"
+
+ section:
+ other: Секция
+
+ subsection:
+ one: Подсекция
+ other: Подсекции
+
+article:
+ back:
+ other: Назад
+
+ tableOfContents:
+ other: Съдържание
+
+ relatedContent:
+ other: Свързано Съдържание
+
+ lastUpdatedOn:
+ other: Последна промяна на
+
+ readingTime:
+ one: "{{ .Count }} minute read"
+ other: "{{ .Count }} minute read"
+
+notFound:
+ title:
+ other: Не е намерено
+
+ subtitle:
+ other: Страницата която търсите не е открита
+
+widget:
+ archives:
+ title:
+ other: Архиви
+
+ more:
+ other: Повече
+
+ tagCloud:
+ title:
+ other: Тагове
+ categoriesCloud:
+ title:
+ other: Категории
+
+search:
+ title:
+ other: Търсене
+
+ placeholder:
+ other: Напишете нещо...
+
+ resultTitle:
+ other: "#PAGES_COUNT страници (#TIME_SECONDS секунди)"
+
+footer:
+ builtWith:
+ other: Създадено с {{ .Generator }}
+
+ designedBy:
+ other: Тема {{ .Theme }} създадена от {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/bn.yaml b/themes/hugo-theme-stack/i18n/bn.yaml
new file mode 100644
index 00000000..36f25a3d
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/bn.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: টগল মেনু
+
+darkMode:
+ other: ডার্ক মোড
+
+list:
+ page:
+ one: "{{ .Count }} পাতা"
+ other: "{{ .Count }} পাতা"
+
+ section:
+ other: অনুচ্ছেদ
+
+ subsection:
+ one: উপ-অনুচ্ছেদ
+ other: উপ-অনুচ্ছেদ
+
+article:
+ back:
+ other: পেছনে
+
+ tableOfContents:
+ other: সূচিপত্র
+
+ relatedContent:
+ other: সম্পর্কিত বিষয়বস্তু
+
+ lastUpdatedOn:
+ other: সর্বশেষ আপডেট করা হয়েছে
+
+ readingTime:
+ one: "{{ .Count }} মিনিটে পড়া যাবে"
+ other: "{{ .Count }} মিনিটে পড়া যাবে"
+
+notFound:
+ title:
+ other: পাওয়া যায়নি
+
+ subtitle:
+ other: এই পাতাটি বিদ্যমান নেই
+
+widget:
+ archives:
+ title:
+ other: আর্কাইভ
+
+ more:
+ other: আরও
+
+ tagCloud:
+ title:
+ other: ট্যাগ
+ categoriesCloud:
+ title:
+ other: বিভাগ
+
+search:
+ title:
+ other: অনুসন্ধান
+
+ placeholder:
+ other: কিছু টাইপ করুন...
+
+ resultTitle:
+ other: "#PAGES_COUNT পাতা (#TIME_SECONDS সেকেন্ড)"
+
+footer:
+ builtWith:
+ other: "{{ .Generator }} দিয়ে নির্মিত"
+
+ designedBy:
+ other: "থিম {{ .Theme }} ডিজাইন করেছেন {{ .DesignedBy }}"
diff --git a/themes/hugo-theme-stack/i18n/ca.yaml b/themes/hugo-theme-stack/i18n/ca.yaml
new file mode 100644
index 00000000..af4167ee
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/ca.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Toggle Menu
+
+darkMode:
+ other: Mode fosc
+
+list:
+ page:
+ one: "{{ .Count }} pàgina"
+ other: "{{ .Count }} pàgines"
+
+ section:
+ other: Secció
+
+ subsection:
+ one: Subsecció
+ other: Subseccions
+
+article:
+ back:
+ other: Tornar
+
+ tableOfContents:
+ other: Taula de contingut
+
+ relatedContent:
+ other: Continguts relacionats
+
+ lastUpdatedOn:
+ other: Última vegada actualitzat
+
+ readingTime:
+ one: "{{ .Count }} minut a llegir"
+ other: "{{ .Count }} minuts a llegir"
+
+notFound:
+ title:
+ other: No Trobat
+
+ subtitle:
+ other: Aquesta pàgina no existeix
+
+widget:
+ archives:
+ title:
+ other: Arxiu
+
+ more:
+ other: Més
+
+ tagCloud:
+ title:
+ other: Etiquetes
+ categoriesCloud:
+ title:
+ other: Categories
+
+search:
+ title:
+ other: Cerca
+
+ placeholder:
+ other: Tecleja alguna cosa...
+
+ resultTitle:
+ other: "#PAGES_COUNT pàgines en (#TIME_SECONDS segons)"
+
+footer:
+ builtWith:
+ other: Creat amb {{ .Generator }}
+
+ designedBy:
+ other: Tema {{ .Theme }} dissenyat per {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/cs.yaml b/themes/hugo-theme-stack/i18n/cs.yaml
new file mode 100644
index 00000000..7b9b5193
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/cs.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Skrýt menu
+
+darkMode:
+ other: Tmavý režim
+
+list:
+ page:
+ one: "{{ .Count }} stránka"
+ other: "{{ .Count }} stránek"
+
+ section:
+ other: Kategorie
+
+ subsection:
+ one: Podkategorie
+ other: Podkategorie
+
+article:
+ back:
+ other: Zpět
+
+ tableOfContents:
+ other: Obsah
+
+ relatedContent:
+ other: Související
+
+ lastUpdatedOn:
+ other: Naposledy aktualizováno
+
+ readingTime:
+ one: "{{ .Count }} minuta"
+ other: "{{ .Count }} minut"
+
+notFound:
+ title:
+ other: Nenalezeno
+
+ subtitle:
+ other: Tato stránka neexistuje
+
+widget:
+ archives:
+ title:
+ other: Archivy
+
+ more:
+ other: Více
+
+ tagCloud:
+ title:
+ other: Štítky
+ categoriesCloud:
+ title:
+ other: Kategorie
+
+search:
+ title:
+ other: Hledat
+
+ placeholder:
+ other: Zadejte něco...
+
+ resultTitle:
+ other: "#PAGES_COUNT stránek (#TIME_SECONDS sekund)"
+
+footer:
+ builtWith:
+ other: Vytvořeno pomocí {{ .Generator }}
+
+ designedBy:
+ other: Šablona {{ .Theme }} od {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/de.yaml b/themes/hugo-theme-stack/i18n/de.yaml
new file mode 100644
index 00000000..7ab5b56e
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/de.yaml
@@ -0,0 +1,74 @@
+toggleMenu:
+ other: Menü umschalten
+
+darkMode:
+ other: Dunkler Modus
+
+list:
+ page:
+ one: "{{ .Count }} Seite"
+ other: "{{ .Count }} Seiten"
+
+ section:
+ other: Abschnitt
+
+ subsection:
+ one: Unterabschnitt
+ other: Unterabschnitte
+
+article:
+ back:
+ other: Zurück
+
+ tableOfContents:
+ other: Inhaltsverzeichnis
+
+ relatedContent:
+ other: Verwandte Inhalte
+
+ lastUpdatedOn:
+ other: Zuletzt aktualisiert am
+
+ readingTime:
+ one: "{{ .Count }} Minute Lesezeit"
+ other: "{{ .Count }} Minuten Lesezeit"
+
+notFound:
+ title:
+ other: Seite nicht gefunden
+
+ subtitle:
+ other: Diese Seite existiert nicht
+
+widget:
+ archives:
+ title:
+ other: Archiv
+
+ more:
+ other: Weitere
+
+ tagCloud:
+ title:
+ other: Schlagwörter
+
+ categoriesCloud:
+ title:
+ other: Kategorien
+
+search:
+ title:
+ other: Suche
+
+ placeholder:
+ other: Etwas tippen...
+
+ resultTitle:
+ other: "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
+
+footer:
+ builtWith:
+ other: Erstellt mit {{ .Generator }}
+
+ designedBy:
+ other: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/el.yaml b/themes/hugo-theme-stack/i18n/el.yaml
new file mode 100644
index 00000000..27a147d7
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/el.yaml
@@ -0,0 +1,70 @@
+toggleMenu:
+ other: Εναλλαγή Μενού
+
+darkMode:
+ other: Σκοτεινό θέμα
+
+list:
+ page:
+ one: "{{ .Count }} σελιδα"
+ other: "{{ .Count }} σελιδες"
+
+ section:
+ other: Ενότητα
+
+ subsection:
+ one: Υποενότητα
+ other: Υποενότητες
+
+article:
+ back:
+ other: Πισω
+
+ tableOfContents:
+ other: Πινακας περιεχομενων
+
+ relatedContent:
+ other: Σχετικο περιεχομενο
+
+ lastUpdatedOn:
+ other: Τελευταια τροποποιηση στις
+
+ readingTime:
+ one: "{{ .Count }} λεπτό ανάγνωσης"
+ ### Seems that there's no need to add 's' even if it's plural in English
+ other: "{{ .Count }} λεπτά ανάγνωσης"
+
+notFound:
+ title:
+ other: Δε βρέθηκε
+ subtitle:
+ other: Η σελίδα δε βρέθηκε.
+
+widget:
+ archives:
+ title:
+ other: Αρχειο
+
+ more:
+ other: Περισσότερα
+
+ tagCloud:
+ title:
+ other: Tags
+
+search:
+ title:
+ other: Αναζήτηση
+
+ placeholder:
+ other: Πληκτρολογήστε κάτι...
+
+ resultTitle:
+ other: "#PAGES_COUNT σελιδες (#TIME_SECONDS δευτερολεπτα)"
+
+footer:
+ builtWith:
+ other: Δημιουργήθηκε με τη χρήση {{ .Generator }}
+
+ designedBy:
+ other: Το θέμα {{ .Theme }} σχεδιάστηκε από το {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/en.yaml b/themes/hugo-theme-stack/i18n/en.yaml
new file mode 100644
index 00000000..8ed5f58f
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/en.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Toggle Menu
+
+darkMode:
+ other: Dark Mode
+
+list:
+ page:
+ one: "{{ .Count }} page"
+ other: "{{ .Count }} pages"
+
+ section:
+ other: Section
+
+ subsection:
+ one: Subsection
+ other: Subsections
+
+article:
+ back:
+ other: Back
+
+ tableOfContents:
+ other: Table of contents
+
+ relatedContent:
+ other: Related content
+
+ lastUpdatedOn:
+ other: Last updated on
+
+ readingTime:
+ one: "{{ .Count }} minute read"
+ other: "{{ .Count }} minute read"
+
+notFound:
+ title:
+ other: Not Found
+
+ subtitle:
+ other: This page does not exist
+
+widget:
+ archives:
+ title:
+ other: Archives
+
+ more:
+ other: Older archives
+
+ tagCloud:
+ title:
+ other: Tags
+ categoriesCloud:
+ title:
+ other: Categories
+
+search:
+ title:
+ other: Search
+
+ placeholder:
+ other: Type something...
+
+ resultTitle:
+ other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+
+footer:
+ builtWith:
+ other: Built with {{ .Generator }}
+
+ designedBy:
+ other: Theme {{ .Theme }} designed by {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/es.yaml b/themes/hugo-theme-stack/i18n/es.yaml
new file mode 100644
index 00000000..6b4b3af0
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/es.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Ocultar menú
+
+darkMode:
+ other: Modo oscuro
+
+list:
+ page:
+ one: "{{ .Count }} página"
+ other: "{{ .Count }} páginas"
+
+ section:
+ other: Sección
+
+ subsection:
+ one: Subsección
+ other: Subsecciones
+
+article:
+ back:
+ other: Volver
+
+ tableOfContents:
+ other: Tabla de contenido
+
+ relatedContent:
+ other: Contenidos relacionados
+
+ lastUpdatedOn:
+ other: Última actualización
+
+ readingTime:
+ one: "Tiempo de lectura {{ .Count }} minuto"
+ other: "Tiempo de lectura {{ .Count }} minutos"
+
+notFound:
+ title:
+ other: No Encontrado
+
+ subtitle:
+ other: Esta página no existe
+
+widget:
+ archives:
+ title:
+ other: Archivo
+
+ more:
+ other: Más
+
+ tagCloud:
+ title:
+ other: Etiquetas
+ categoriesCloud:
+ title:
+ other: Categorías
+
+search:
+ title:
+ other: Búsqueda
+
+ placeholder:
+ other: Escribe algo...
+
+ resultTitle:
+ other: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
+
+footer:
+ builtWith:
+ other: Creado con {{ .Generator }}
+
+ designedBy:
+ other: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/fa.yaml b/themes/hugo-theme-stack/i18n/fa.yaml
new file mode 100644
index 00000000..36557578
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/fa.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: منو
+
+darkMode:
+ other: حالت شب
+
+list:
+ page:
+ one: "{{ .Count }} صفحه"
+ other: "{{ .Count }} صفحه"
+
+ section:
+ other: بخش
+
+ subsection:
+ one: زیربخش
+ other: زیربخش
+
+article:
+ back:
+ other: قبلی
+
+ tableOfContents:
+ other: فهرست
+
+ relatedContent:
+ other: مطالب مرتبط
+
+ lastUpdatedOn:
+ other: آخرین بروزرسانی در
+
+ readingTime:
+ one: "مطالعه در {{ .Count }} دقیقه"
+ other: "مطالعه در {{ .Count }} دقیقه"
+
+notFound:
+ title:
+ other: یافت نشد
+
+ subtitle:
+ other: این صحه وجود ندارد
+
+widget:
+ archives:
+ title:
+ other: آرشیو
+
+ more:
+ other: بیشتر
+
+ tagCloud:
+ title:
+ other: تگ ها
+ categoriesCloud:
+ title:
+ other: دسته بندی
+
+search:
+ title:
+ other: جستجو
+
+ placeholder:
+ other: تایپ کنید ...
+
+ resultTitle:
+ other: "#PAGES_COUNT صفحه (#TIME_SECONDS ثانیه)"
+
+footer:
+ builtWith:
+ other: قدرت گرفته از {{ .Generator }}
+
+ designedBy:
+ other: قالب {{ .Theme }} ساخته شده توسط {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/fr.yaml b/themes/hugo-theme-stack/i18n/fr.yaml
new file mode 100644
index 00000000..945d3b0e
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/fr.yaml
@@ -0,0 +1,72 @@
+toggleMenu:
+ other: Afficher le menu
+
+darkMode:
+ other: Mode sombre
+
+list:
+ page:
+ one: "{{ .Count }} page"
+ other: "{{ .Count }} pages"
+
+ section:
+ other: Section
+
+ subsection:
+ one: Sous-section
+ other: Sous-sections
+
+article:
+ back:
+ other: Retour
+
+ tableOfContents:
+ other: Table des matières
+
+ relatedContent:
+ other: Contenus liés
+
+ lastUpdatedOn:
+ other: Dernière mise à jour le
+
+ readingTime:
+ one: "{{ .Count }} minute de lecture"
+ other: "{{ .Count }} minutes de lecture"
+
+notFound:
+ title:
+ other: Page non trouvée
+ subtitle:
+ other: Cette page n'existe pas.
+
+widget:
+ archives:
+ title:
+ other: Archives
+
+ more:
+ other: Archives précédentes
+
+ tagCloud:
+ title:
+ other: Mots clés
+ categoriesCloud:
+ title:
+ other: Catégories
+
+search:
+ title:
+ other: Rechercher
+
+ placeholder:
+ other: Cherchez un article, une publication, etc.
+
+ resultTitle:
+ other: "#PAGES_COUNT pages (#TIME_SECONDS secondes)"
+
+footer:
+ builtWith:
+ other: Généré avec {{ .Generator }}
+
+ designedBy:
+ other: Thème {{ .Theme }} conçu par {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/hi.yaml b/themes/hugo-theme-stack/i18n/hi.yaml
new file mode 100644
index 00000000..27316fe2
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/hi.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: मेनू टॉगल करें
+
+darkMode:
+ other: डार्क मोड
+
+list:
+ page:
+ one: "{{ .Count }} पेज"
+ other: "{{ .Count }} पेज"
+
+ section:
+ other: अनुभाग
+
+ subsection:
+ one: उपधारा
+ other: उपखंड
+
+article:
+ back:
+ other: पीछे
+
+ tableOfContents:
+ other: विषयसूची
+
+ relatedContent:
+ other: संबंधित सामग्री
+
+ lastUpdatedOn:
+ other: अंतिम बार अपडेट किया गया
+
+ readingTime:
+ one: "{{ .Count }} मिनट पढ़ें"
+ other: "{{ .Count }} मिनट पढ़ें"
+
+notFound:
+ title:
+ other: 404 नहीं मिला।
+
+ subtitle:
+ other: यह पृष्ठ मौजूद नहीं है।
+
+widget:
+ archives:
+ title:
+ other: अभिलेखागार
+
+ more:
+ other: अधिक
+
+ tagCloud:
+ title:
+ other: टैग
+ categoriesCloud:
+ title:
+ other: श्रेणियाँ
+
+search:
+ title:
+ other: खोज
+
+ placeholder:
+ other: कुछ लिखें...
+
+ resultTitle:
+ other: "#PAGES_COUNT पेज (#TIME_SECONDS सेकंड)"
+
+footer:
+ builtWith:
+ other: निर्मित {{ .Generator }} के साथ
+
+ designedBy:
+ other: थीम {{ .Theme }} द्वारा डिज़ाइन किया गया {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/hu.yaml b/themes/hugo-theme-stack/i18n/hu.yaml
new file mode 100644
index 00000000..5e5af92e
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/hu.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Menü Kapcsolása
+
+darkMode:
+ other: Sötét Mód
+
+list:
+ page:
+ one: "{{ .Count }} oldal"
+ other: "{{ .Count }} oldalak"
+
+ section:
+ other: Szekció
+
+ subsection:
+ one: Alszekció
+ other: Alszekciók
+
+article:
+ back:
+ other: Vissza
+
+ tableOfContents:
+ other: Tartalomjegyzék
+
+ relatedContent:
+ other: Kapcsolódó tartalom
+
+ lastUpdatedOn:
+ other: Utolsó frissítés időpontja
+
+ readingTime:
+ one: "{{ .Count }} percnyi olvasmány"
+ other: "{{ .Count }} percnyi olvasmány"
+
+notFound:
+ title:
+ other: Nem található
+
+ subtitle:
+ other: Ez az oldal nem létezik
+
+widget:
+ archives:
+ title:
+ other: Archívum
+
+ more:
+ other: Több
+
+ tagCloud:
+ title:
+ other: Cimkék
+ categoriesCloud:
+ title:
+ other: Kategóriák
+
+search:
+ title:
+ other: Keresés
+
+ placeholder:
+ other: Írj valamit...
+
+ resultTitle:
+ other: "#PAGES_COUNT oldal (#TIME_SECONDS másodperc alatt)"
+
+footer:
+ builtWith:
+ other: "{{ .Generator }} használatával készült"
+
+ designedBy:
+ other: A {{ .Theme }} dizájnt {{ .DesignedBy }} tervezte
diff --git a/themes/hugo-theme-stack/i18n/id.yaml b/themes/hugo-theme-stack/i18n/id.yaml
new file mode 100644
index 00000000..8104351c
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/id.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Tampilkan Menu
+
+darkMode:
+ other: Mode Gelap
+
+list:
+ page:
+ one: "{{ .Count }} halaman"
+ other: "{{ .Count }} halaman"
+
+ section:
+ other: Bagian
+
+ subsection:
+ one: Subbagian
+ other: Subbagian
+
+article:
+ back:
+ other: Kembali
+
+ tableOfContents:
+ other: Daftar Isi
+
+ relatedContent:
+ other: Konten terkait
+
+ lastUpdatedOn:
+ other: Terakhir diperbarui pada
+
+ readingTime:
+ one: "Waktu Membaca: {{ .Count }} menit"
+ other: "Waktu Membaca: {{ .Count }} menit"
+
+notFound:
+ title:
+ other: Tidak ditemukan
+ subtitle:
+ other: Halaman yang Anda akses tidak ditemukan.
+
+widget:
+ archives:
+ title:
+ other: Arsip
+
+ more:
+ other: Lebih
+
+ tagCloud:
+ title:
+ other: Tag
+
+ categoriesCloud:
+ title:
+ other: Kategori
+
+search:
+ title:
+ other: Cari
+
+ placeholder:
+ other: Ketik sesuatu...
+
+ resultTitle:
+ other: "#PAGES_COUNT halaman (#TIME_SECONDS detik)"
+
+footer:
+ builtWith:
+ other: Dibangun dengan {{ .Generator }}
+
+ designedBy:
+ other: Tema {{ .Theme }} dirancang oleh {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/it.yaml b/themes/hugo-theme-stack/i18n/it.yaml
new file mode 100644
index 00000000..0cbeeabd
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/it.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: Toggle Menu
+
+darkMode:
+ other: Dark Mode
+
+list:
+ page:
+ one: "{{ .Count }} pagina"
+ other: "{{ .Count }} pagine"
+
+ section:
+ other: Sezione
+
+ subsection:
+ one: Sottosezione
+ other: Sottosezioni
+
+article:
+ back:
+ other: Indietro
+
+ tableOfContents:
+ other: Indice
+
+ relatedContent:
+ other: Contenuti correlati
+
+ lastUpdatedOn:
+ other: Aggiornato il
+
+ readingTime:
+ one: "{{ .Count }} min per leggere"
+ other: "{{ .Count }} min per leggere"
+
+notFound:
+ title:
+ other: Non trovato
+ subtitle:
+ other: Questa pagina non esiste.
+
+widget:
+ archives:
+ title:
+ other: Archivi
+
+ more:
+ other: Di più
+
+ tagCloud:
+ title:
+ other: Tags
+
+ categoriesCloud:
+ title:
+ other: Categorie
+
+search:
+ title:
+ other: Cerca
+
+ placeholder:
+ other: Scrivi qualcosa...
+
+ resultTitle:
+ other: "#PAGES_COUNT pagine (#TIME_SECONDS secondi)"
+
+footer:
+ builtWith:
+ other: Realizzato con {{ .Generator }}
+
+ designedBy:
+ other: Tema {{ .Theme }} realizzato da {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/ja.yaml b/themes/hugo-theme-stack/i18n/ja.yaml
new file mode 100644
index 00000000..12352ee3
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/ja.yaml
@@ -0,0 +1,70 @@
+toggleMenu:
+ other: メニューを開く・閉じる
+
+darkMode:
+ other: ダークモード
+
+list:
+ page:
+ other: "{{ .Count }} ページ目"
+
+ section:
+ other: セクション
+
+ subsection:
+ other: サブセクション
+
+article:
+ back:
+ other: 前のページ
+
+ tableOfContents:
+ other: 目次
+
+ relatedContent:
+ other: 関連するコンテンツ
+
+ lastUpdatedOn:
+ other: 最終更新
+
+ readingTime:
+ other: "読了時間: {{ .Count }}分"
+
+notFound:
+ title:
+ other: 404 Not Found
+ subtitle:
+ other: 指定されたページは存在しません。
+
+widget:
+ archives:
+ title:
+ other: アーカイブ
+
+ more:
+ other: さらに見る
+
+ tagCloud:
+ title:
+ other: タグ
+
+ categoriesCloud:
+ title:
+ other: カテゴリ
+
+search:
+ title:
+ other: 検索
+
+ placeholder:
+ other: 入力...
+
+ resultTitle:
+ other: "#PAGES_COUNT 件 (#TIME_SECONDS 秒)"
+
+footer:
+ builtWith:
+ other: "{{ .Generator }} で構築されています。"
+
+ designedBy:
+ other: テーマ {{ .Theme }} は {{ .DesignedBy }} によって設計されています。
diff --git a/themes/hugo-theme-stack/i18n/ko.yaml b/themes/hugo-theme-stack/i18n/ko.yaml
new file mode 100644
index 00000000..11cdc4a2
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/ko.yaml
@@ -0,0 +1,72 @@
+toggleMenu:
+ other: 메뉴 여닫기
+
+darkMode:
+ other: 다크 모드
+
+list:
+ page:
+ one: "{{ .Count }} 페이지"
+ other: "{{ .Count }} 페이지"
+
+ section:
+ other: 섹션
+
+ subsection:
+ one: 서브섹션
+ other: 서브섹션
+
+article:
+ back:
+ other: 뒤로가기
+
+ tableOfContents:
+ other: 목차
+
+ relatedContent:
+ other: 관련 글
+
+ lastUpdatedOn:
+ other: "마지막 수정: "
+
+ readingTime:
+ one: "{{ .Count }} 분 정도"
+ other: "{{ .Count }} 분 정도"
+
+notFound:
+ title:
+ other: 찾을 수 없음
+
+ subtitle:
+ other: 페이지를 찾을 수 없습니다.
+
+widget:
+ archives:
+ title:
+ other: 보관함
+ more:
+ other: 더보기
+
+ categoriesCloud:
+ title:
+ other: 카테고리
+
+ tagCloud:
+ title:
+ other: 태그
+
+search:
+ title:
+ other: 검색
+
+ placeholder:
+ other: 검색어를 입력하세요...
+
+ resultTitle:
+ other: "#PAGES_COUNT 페이지 (#TIME_SECONDS 초)"
+
+footer:
+ builtWith:
+ other: "{{ .Generator }}로 만듦"
+ designedBy:
+ other: "{{ .DesignedBy }}의 {{ .Theme }} 테마 사용 중"
diff --git a/themes/hugo-theme-stack/i18n/nl.yaml b/themes/hugo-theme-stack/i18n/nl.yaml
new file mode 100644
index 00000000..b5bf264d
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/nl.yaml
@@ -0,0 +1,59 @@
+toggleMenu:
+ other: Open Menu
+
+darkMode:
+ other: Donkere modus
+
+list:
+ page:
+ one: "{{ .Count }} pagina"
+ other: "{{ .Count }} pagina's"
+
+ section:
+ other: Sectie
+
+ subsection:
+ one: Subsectie
+ other: Subsecties
+
+article:
+ relatedContent:
+ other: Gerelateerde inhoud
+ lastUpdatedOn:
+ other: Laatst bijgewerkt op
+ readingTime:
+ other: "{{ .Count }} leestijd"
+
+notFound:
+ title:
+ other: Niet gevonden
+ subtitle:
+ other: Deze pagina bestaat niet.
+
+widget:
+ archives:
+ title:
+ other: Archief
+ more:
+ other: Meer
+ tagCloud:
+ title:
+ other: Tags
+
+ categoriesCloud:
+ title:
+ other: Categorie
+
+search:
+ title:
+ other: Zoeken
+ placeholder:
+ other: Typ iets
+ resultTitle:
+ other: "#PAGES_COUNT pagina's (#TIME_SECONDS seconden)"
+
+footer:
+ builtWith:
+ other: Gemaakt met {{ .Generator }}
+ designedBy:
+ other: Theme {{ .Theme }} ontworpen door {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/oc.yaml b/themes/hugo-theme-stack/i18n/oc.yaml
new file mode 100644
index 00000000..14153506
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/oc.yaml
@@ -0,0 +1,72 @@
+toggleMenu:
+ other: Alternar menú
+
+darkMode:
+ other: Mòde fosc
+
+list:
+ page:
+ one: "{{ .Count }} pagina"
+ other: "{{ .Count }} paginas"
+
+ section:
+ other: Seccion
+
+ subsection:
+ one: Josseccion
+ other: Josseccions
+
+article:
+ back:
+ other: Tornar
+
+ tableOfContents:
+ other: Taula de contengut
+
+ relatedContent:
+ other: Contenguts relacionats
+
+ lastUpdatedOn:
+ other: Darrièra actualizacion
+ readingTime:
+ one: "{{ .Count }} minuta de lectura"
+ other: "{{ .Count }} minutas de lectura"
+
+notFound:
+ title:
+ other: Non trobat
+
+ subtitle:
+ other: Aquesta pagina existís pas
+
+widget:
+ archives:
+ title:
+ other: Archiu
+
+ more:
+ other: Mai
+
+ tagCloud:
+ title:
+ other: Etiquetas
+ categoriesCloud:
+ title:
+ other: Categorias
+
+search:
+ title:
+ other: Cercar
+
+ placeholder:
+ other: Picatz quicòm...
+
+ resultTitle:
+ other: "#PAGES_COUNT paginas dins (#TIME_SECONDS segons)"
+
+footer:
+ builtWith:
+ other: Creat amb {{ .Generator }}
+
+ designedBy:
+ other: Tàma {{ .Theme }} concebut per {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/pl.yaml b/themes/hugo-theme-stack/i18n/pl.yaml
new file mode 100644
index 00000000..9f2982fc
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/pl.yaml
@@ -0,0 +1,82 @@
+toggleMenu:
+ other: Przełącz Menu
+
+darkMode:
+ other: Tryb ciemny
+
+list:
+ page:
+ one: "{{ .Count }} strona"
+ few: "{{ .Count }} strony"
+ many: "{{ .Count }} stron"
+ other: "{{ .Count }} stron"
+
+ section:
+ other: Sekcja
+
+ subsection:
+ one: Podsekcja
+ few: Podsekcje
+ many: Podsekcji
+ other: Podsekcji
+
+article:
+ back:
+ other: Wróć
+
+ tableOfContents:
+ other: Spis treści
+
+ relatedContent:
+ other: Powiązane artykuły
+
+ lastUpdatedOn:
+ other: Ostatnio zaktualizowany
+
+ readingTime:
+ one: "Przeczytasz w {{ .Count }} minutę"
+ few: "Przeczytasz w {{ .Count }} minuty"
+ many: "Przeczytasz w {{ .Count }} minut"
+ other: "Przeczytasz w {{ .Count }} minut"
+
+notFound:
+ title:
+ other: Nie znaleziono
+ subtitle:
+ other: Ta strona nie istnieje
+
+widget:
+ archives:
+ title:
+ other: Archiwum
+
+ more:
+ other: Więcej
+
+ tagCloud:
+ title:
+ other: Tagi
+
+ categoriesCloud:
+ title:
+ other: Kategorie
+
+search:
+ title:
+ other: Szukaj
+
+ placeholder:
+ other: Wpisz coś...
+
+ resultTitle:
+ one: "#PAGES_COUNT strona (#TIME_SECONDS sekund)"
+ few: "#PAGES_COUNT strony (#TIME_SECONDS sekund)"
+ many: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
+ other: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
+
+footer:
+ builtWith:
+ other: Zbudowano z {{ .Generator }}
+
+ designedBy:
+ other: Motyw {{ .Theme }} zaprojektowany przez {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/pt-br.yaml b/themes/hugo-theme-stack/i18n/pt-br.yaml
new file mode 100644
index 00000000..2784f3d9
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/pt-br.yaml
@@ -0,0 +1,67 @@
+toggleMenu:
+ other: Alternar Menu
+
+darkMode:
+ other: Modo Escuro
+
+list:
+ page:
+ one: "{{ .Count }} página"
+ other: "{{ .Count }} páginas"
+
+ section:
+ other: Seção
+
+ subsection:
+ one: Subseção
+ other: Subseções
+
+article:
+ back:
+ other: Voltar
+
+ tableOfContents:
+ other: Índice
+
+ relatedContent:
+ other: Conteúdo relacionado
+
+ lastUpdatedOn:
+ other: Última atualização em
+
+ readingTime:
+ one: "{{ .Count }} minuto de leitura"
+ other: "{{ .Count }} minutos de leitura"
+
+notFound:
+ title:
+ other: Não Encontrado
+ subtitle:
+ other: Esta página não existe.
+
+widget:
+ archives:
+ title:
+ other: Arquivos
+ more:
+ other: Mais
+ tagCloud:
+ title:
+ other: Tags
+ categoriesCloud:
+ title:
+ other: Categorias
+
+search:
+ title:
+ other: Busca
+ placeholder:
+ other: Digite algo...
+ resultTitle:
+ other: "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
+
+footer:
+ builtWith:
+ other: Criado com {{ .Generator }}
+ designedBy:
+ other: Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/pt-pt.yaml b/themes/hugo-theme-stack/i18n/pt-pt.yaml
new file mode 100644
index 00000000..f524969c
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/pt-pt.yaml
@@ -0,0 +1,67 @@
+toggleMenu:
+ other: Alternar Menu
+
+darkMode:
+ other: Modo Escuro
+
+list:
+ page:
+ one: "{{ .Count }} página"
+ other: "{{ .Count }} páginas"
+
+ section:
+ other: Secção
+
+ subsection:
+ one: Subsecção
+ other: Subsecções
+
+article:
+ back:
+ other: Voltar
+
+ tableOfContents:
+ other: Índice
+
+ relatedContent:
+ other: Conteúdo relacionado
+
+ lastUpdatedOn:
+ other: Última atualização a
+
+ readingTime:
+ one: "{{ .Count }} minuto de leitura"
+ other: "{{ .Count }} minutos de leitura"
+
+notFound:
+ title:
+ other: Não Encontrado
+ subtitle:
+ other: Esta página não existe.
+
+widget:
+ archives:
+ title:
+ other: Arquivos
+ more:
+ other: Mais
+ tagCloud:
+ title:
+ other: Tags
+ categoriesCloud:
+ title:
+ other: Categorias
+
+search:
+ title:
+ other: Pesquisa
+ placeholder:
+ other: Escreva algo...
+ resultTitle:
+ other: "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
+
+footer:
+ builtWith:
+ other: Criado com {{ .Generator }}
+ designedBy:
+ other: Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/ru.yaml b/themes/hugo-theme-stack/i18n/ru.yaml
new file mode 100644
index 00000000..b1f1e510
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/ru.yaml
@@ -0,0 +1,63 @@
+toggleMenu:
+ other: Показать/скрыть меню
+
+darkMode:
+ other: Тёмный режим
+
+list:
+ page:
+ one: "{{ .Count }} страница"
+ few: "{{ .Count }} страницы"
+ many: "{{ .Count }} страниц"
+ other: "{{ .Count }} страниц"
+
+ section:
+ other: Раздел
+
+ subsection:
+ one: Подраздел
+ few: Подразделы
+ many: Подразделы
+ other: Подразделы
+
+article:
+ back:
+ other: Назад
+ relatedContent:
+ other: Также рекомендуем
+ lastUpdatedOn:
+ other: Обновлено
+ tableOfContents:
+ other: Содержание
+ readingTime:
+ other: "Время чтения: {{ .Count }} мин."
+
+notFound:
+ title:
+ other: Не найдено
+ subtitle:
+ other: Запрашиваемая страница не существует
+
+widget:
+ archives:
+ title:
+ other: Архивы
+ more:
+ other: Ещё
+ tagCloud:
+ title:
+ other: Теги
+
+search:
+ title:
+ other: Поиск
+ placeholder:
+ other: Введите что-нибудь...
+ resultTitle:
+ other: "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
+
+footer:
+ builtWith:
+ other: Создано при помощи {{ .Generator }}
+ designedBy:
+ other: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/sk.yaml b/themes/hugo-theme-stack/i18n/sk.yaml
new file mode 100644
index 00000000..59c680ef
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/sk.yaml
@@ -0,0 +1,71 @@
+toggleMenu:
+ other: Skryť menu
+
+darkMode:
+ other: Tmavý režim
+
+list:
+ page:
+ one: "{{ .Count }} stránka"
+ other: "{{ .Count }} stránok"
+
+ section:
+ other: Kategórie
+
+ subsection:
+ one: Podkategória
+ other: Podkategórie
+
+article:
+ back:
+ other: Späť
+
+ tableOfContents:
+ other: Obsah
+
+ relatedContent:
+ other: Súvisiace
+
+ lastUpdatedOn:
+ other: Naposledy aktualizované
+
+ readingTime:
+ one: "{{ .Count }} minúta"
+ other: "{{ .Count }} minút"
+
+notFound:
+ title:
+ other: Nenájdené
+
+ subtitle:
+ other: Tato stránka neexistuje
+
+widget:
+ archives:
+ title:
+ other: Archívy
+ more:
+ other: Viac
+ tagCloud:
+ title:
+ other: Štítky
+ categoriesCloud:
+ title:
+ other: Kategórie
+
+search:
+ title:
+ other: Hladať
+
+ placeholder:
+ other: Zadajte niečo...
+
+ resultTitle:
+ other: "#PAGES_COUNT stránok (#TIME_SECONDS sekúnd)"
+
+footer:
+ builtWith:
+ other: Vytvorené pomocou {{ .Generator }}
+
+ designedBy:
+ other: Šablóna {{ .Theme }} od {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/th.yaml b/themes/hugo-theme-stack/i18n/th.yaml
new file mode 100644
index 00000000..9982c06a
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/th.yaml
@@ -0,0 +1,70 @@
+toggleMenu:
+ other: สลับเมนู
+
+darkMode:
+ other: ธีมมืด
+
+list:
+ page:
+ one: "{{ .Count }} หน้า"
+ other: "{{ .Count }} หน้า"
+
+ section:
+ other: หมวดหมู่
+
+ subsection:
+ one: หมวดหมู่ย่อย
+ other: หมวดหมู่ย่อยอื่นๆ
+
+article:
+ back:
+ other: กลับไป
+
+ tableOfContents:
+ other: สารบัญ
+
+ relatedContent:
+ other: เนื้อหาคล้ายคลึงกัน
+
+ lastUpdatedOn:
+ other: อัปเดตล่าสุดเมื่อ
+
+ readingTime:
+ one: "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
+ other: "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
+
+notFound:
+ title:
+ other: ไม่พบหัวข้อ
+
+ subtitle:
+ other: ไม่พบหน้านี้ในระบบ
+
+widget:
+ archives:
+ title:
+ other: เนื้อหาที่เก็บถาวรแล้ว
+
+ more:
+ other: อื่นๆ นอกจากนี้
+
+ tagCloud:
+ title:
+ other: แท็ก
+
+search:
+ title:
+ other: ค้นหา
+
+ placeholder:
+ other: พิมพ์เพื่อค้นหา ...
+
+ resultTitle:
+ other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+
+footer:
+ builtWith:
+ other: ถูกสร้างด้วย {{ .Generator }}
+
+ designedBy:
+ other: ธีม {{ .Theme }} ออกแบบโดย {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/tr.yaml b/themes/hugo-theme-stack/i18n/tr.yaml
new file mode 100644
index 00000000..2dbb9d52
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/tr.yaml
@@ -0,0 +1,53 @@
+toggleMenu:
+ other: Menüyü Gizle
+
+darkMode:
+ other: Koyu Mod
+
+list:
+ page:
+ one: "{{ .Count }} makale"
+ other: "{{ .Count }} makale"
+
+ section:
+ other: Bölüm
+
+ subsection:
+ one: Alt bölüm
+ other: Alt bölümler
+
+article:
+ relatedContent:
+ other: Alakalı içerikler
+ lastUpdatedOn:
+ other: Son güncelleme
+
+notFound:
+ title:
+ other: Bulunamadı
+ subtitle:
+ other: Aradığınız sayfa mevcut değil.
+
+widget:
+ archives:
+ title:
+ other: Arşiv
+ more:
+ other: Daha fazla
+ tagCloud:
+ title:
+ other: Etiketler
+
+search:
+ title:
+ other: Arama
+ placeholder:
+ other: Birşeyler yazın...
+ resultTitle:
+ other: "#PAGES_COUNT sayfa (#TIME_SECONDS saniye)"
+
+footer:
+ builtWith:
+ other: "{{ .Generator }} ile oluşturuldu."
+ designedBy:
+ other: "{{ .Theme }} teması {{ .DesignedBy }} tarafından tasarlandı"
diff --git a/themes/hugo-theme-stack/i18n/uk.yaml b/themes/hugo-theme-stack/i18n/uk.yaml
new file mode 100644
index 00000000..3bd4f716
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/uk.yaml
@@ -0,0 +1,71 @@
+toggleMenu:
+ other: Показати меню
+
+darkMode:
+ other: Темна тема
+
+list:
+ page:
+ one: "{{ .Count }} сторінка"
+ few: "{{ .Count }} сторінки"
+ other: "{{ .Count }} сторінок"
+
+ section:
+ other: Секція
+
+ subsection:
+ one: Підсекція
+ other: Підсекції
+
+article:
+ back:
+ other: Назад
+
+ tableOfContents:
+ other: Зміст
+
+ relatedContent:
+ other: Схожі матеріали
+
+ lastUpdatedOn:
+ other: Востаннє оновлено
+
+ readingTime:
+ one: "Час читання: {{ .Count }} хв"
+ other: "Час читання: {{ .Count }} хв"
+
+notFound:
+ title:
+ other: Не знайдено
+
+ subtitle:
+ other: Ця сторінка не існує
+
+widget:
+ archives:
+ title:
+ other: Архіви
+
+ more:
+ other: Більше
+
+ tagCloud:
+ title:
+ other: Теґи
+
+search:
+ title:
+ other: Пошук
+
+ placeholder:
+ other: Напишіть що-небудь...
+
+ resultTitle:
+ other: "#PAGES_COUNT сторінок (#TIME_SECONDS секунд)"
+
+footer:
+ builtWith:
+ other: Створено з {{ .Generator }}
+
+ designedBy:
+ other: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/vi.yaml b/themes/hugo-theme-stack/i18n/vi.yaml
new file mode 100644
index 00000000..13dc624a
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/vi.yaml
@@ -0,0 +1,74 @@
+toggleMenu:
+ other: Hiển thị Menu
+
+darkMode:
+ other: Chế độ nền tối
+
+list:
+ page:
+ one: "{{ .Count }} trang"
+ other: "{{ .Count }} trang"
+
+ section:
+ other: Section
+
+ subsection:
+ one: Subsection
+ other: Subsections
+
+article:
+ back:
+ other: Trở lại
+
+ tableOfContents:
+ other: Mục lục
+
+ relatedContent:
+ other: Bài viết liên quan
+
+ lastUpdatedOn:
+ other: Cập nhật lần cuối
+
+ readingTime:
+ one: "{{ .Count }} phút đọc"
+ other: "{{ .Count }} phút đọc"
+
+notFound:
+ title:
+ other: Không tìm thấy
+
+ subtitle:
+ other: Trang này không tồn tại
+
+widget:
+ archives:
+ title:
+ other: Lưu trữ
+
+ more:
+ other: Còn nữa
+
+ tagCloud:
+ title:
+ other: Nhãn dán
+
+ categoriesCloud:
+ title:
+ other: Chuỗi bài
+
+search:
+ title:
+ other: Tìm kiếm
+
+ placeholder:
+ other: Nhập từ khoá ...
+
+ resultTitle:
+ other: "#PAGES_COUNT trang (#TIME_SECONDS giây)"
+
+footer:
+ builtWith:
+ other: Built with {{ .Generator }}
+
+ designedBy:
+ other: Theme {{ .Theme }} thiết kế bởi {{ .DesignedBy }}
diff --git a/themes/hugo-theme-stack/i18n/zh-cn.yaml b/themes/hugo-theme-stack/i18n/zh-cn.yaml
new file mode 100644
index 00000000..da39c8fd
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/zh-cn.yaml
@@ -0,0 +1,67 @@
+toggleMenu:
+ other: 切换菜单
+
+darkMode:
+ other: 暗色模式
+
+list:
+ page: "{{ .Count }} 个页面"
+
+ section: 章节
+
+ subsection: 子章节
+
+article:
+ back:
+ other: 返回
+
+ tableOfContents:
+ other: 目录
+
+ relatedContent:
+ other: 相关文章
+
+ lastUpdatedOn:
+ other: 最后更新于
+
+ readingTime:
+ other: "阅读时长: {{ .Count }} 分钟"
+
+notFound:
+ title:
+ other: 404 错误
+ subtitle:
+ other: 页面不存在
+
+widget:
+ archives:
+ title:
+ other: 归档
+
+ more:
+ other: 更多
+
+ tagCloud:
+ title:
+ other: 标签云
+
+ categoriesCloud:
+ title:
+ other: 分类
+
+search:
+ title:
+ other: 搜索
+
+ placeholder:
+ other: 输入关键词...
+
+ resultTitle:
+ other: "#PAGES_COUNT 个结果 (用时 #TIME_SECONDS 秒)"
+
+footer:
+ builtWith:
+ other: 使用 {{ .Generator }} 构建
+
+ designedBy:
+ other: 主题 {{ .Theme }} 由 {{ .DesignedBy }} 设计
diff --git a/themes/hugo-theme-stack/i18n/zh-hk.yaml b/themes/hugo-theme-stack/i18n/zh-hk.yaml
new file mode 100644
index 00000000..9e3c246b
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/zh-hk.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: 切換選單
+
+darkMode:
+ other: 深色模式
+
+list:
+ page:
+ one: "第 {{ .Count }} 頁"
+ other: "第 {{ .Count }} 頁"
+
+ section:
+ other: Section
+
+ subsection:
+ one: Subsection
+ other: Subsections
+
+article:
+ back:
+ other: 返回
+
+ tableOfContents:
+ other: 目錄
+
+ relatedContent:
+ other: 相關內容
+
+ lastUpdatedOn:
+ other: 上次改過於
+
+ readingTime:
+ one: "需要 {{ .Count }} 分鐘閱讀"
+ other: "需要 {{ .Count }} 分鐘閱讀"
+
+notFound:
+ title:
+ other: Not Found
+
+ subtitle:
+ other: 頁面不存在
+
+widget:
+ archives:
+ title:
+ other: Archives
+
+ more:
+ other: 更多
+
+ tagCloud:
+ title:
+ other: Tags
+ categoriesCloud:
+ title:
+ other: Categories
+
+search:
+ title:
+ other: 搜尋
+
+ placeholder:
+ other: Type 關鍵字...
+
+ resultTitle:
+ other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+
+footer:
+ builtWith:
+ other: Built with {{ .Generator }}
+
+ designedBy:
+ other: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計
diff --git a/themes/hugo-theme-stack/i18n/zh-tw.yaml b/themes/hugo-theme-stack/i18n/zh-tw.yaml
new file mode 100644
index 00000000..4b71572e
--- /dev/null
+++ b/themes/hugo-theme-stack/i18n/zh-tw.yaml
@@ -0,0 +1,73 @@
+toggleMenu:
+ other: 切換選單
+
+darkMode:
+ other: 夜晚模式
+
+list:
+ page:
+ one: "第 {{ .Count }} 頁"
+ other: "第 {{ .Count }} 頁"
+
+ section:
+ other: 段落
+
+ subsection:
+ one: 小節
+ other: 小節
+
+article:
+ back:
+ other: 返回
+
+ tableOfContents:
+ other: 目錄
+
+ relatedContent:
+ other: 相關文章
+
+ lastUpdatedOn:
+ other: 最後更新
+
+ readingTime:
+ one: "閱讀時間: {{ .Count }} 分鐘"
+ other: "閱讀時間: {{ .Count }} 分鐘"
+
+notFound:
+ title:
+ other: 404 錯誤
+
+ subtitle:
+ other: 頁面不存在
+
+widget:
+ archives:
+ title:
+ other: 紀錄
+
+ more:
+ other: 更多
+
+ tagCloud:
+ title:
+ other: 標籤雲
+ categoriesCloud:
+ title:
+ other: 分類
+
+search:
+ title:
+ other: 搜尋
+
+ placeholder:
+ other: 輸入關鍵字...
+
+ resultTitle:
+ other: "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
+
+footer:
+ builtWith:
+ other: 使用 {{ .Generator }} 建立
+
+ designedBy:
+ other: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計
diff --git a/themes/hugo-theme-stack/images/screenshot.png b/themes/hugo-theme-stack/images/screenshot.png
new file mode 100644
index 00000000..efcfd8a7
Binary files /dev/null and b/themes/hugo-theme-stack/images/screenshot.png differ
diff --git a/themes/hugo-theme-stack/images/tn.png b/themes/hugo-theme-stack/images/tn.png
new file mode 100644
index 00000000..f85fd754
Binary files /dev/null and b/themes/hugo-theme-stack/images/tn.png differ
diff --git a/themes/hugo-theme-stack/layouts/404.html b/themes/hugo-theme-stack/layouts/404.html
new file mode 100644
index 00000000..98f4a67a
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/404.html
@@ -0,0 +1,45 @@
+{{ define "main" }}
+
+
{{ T "notFound.title" }}
+ {{ T "notFound.subtitle" }}
+
+
+ {{- $query := first 1 (where .Site.Pages "Layout" "==" "search") -}}
+ {{- $searchPage := index $query 0 -}}
+
+ {{- with $searchPage -}}
+
+
+
+
+
+
+ {{- $opts := dict "minify" hugo.IsProduction "JSXFactory" "createElement" -}}
+ {{- $searchScript := resources.Get "ts/search.tsx" | js.Build $opts -}}
+
+
+
+ {{- end -}}
+ {{ partialCached "footer/footer" . }}
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/_default/_markup/render-heading.html b/themes/hugo-theme-stack/layouts/_default/_markup/render-heading.html
new file mode 100644
index 00000000..f79308ab
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/_markup/render-heading.html
@@ -0,0 +1,6 @@
+
+ {{- if site.Params.Article.HeadingAnchor -}}
+
+ {{- end -}}
+ {{ .Text | safeHTML }}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/_default/_markup/render-image.html b/themes/hugo-theme-stack/layouts/_default/_markup/render-image.html
new file mode 100644
index 00000000..37490a55
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/_markup/render-image.html
@@ -0,0 +1,43 @@
+{{- $image := .Page.Resources.GetMatch (printf "%s" (.Destination | safeURL)) -}}
+{{- $Permalink := .Destination | relURL | safeURL -}}
+{{- $alt := .PlainText | safeHTML -}}
+{{- $Width := 0 -}}
+{{- $Height := 0 -}}
+{{- $Srcset := "" -}}
+
+{{/* SVG and external images won't work with gallery layout, because their width and height attributes are unknown */}}
+{{- $galleryImage := false -}}
+
+{{- if $image -}}
+ {{- $notSVG := ne (path.Ext .Destination) ".svg" -}}
+ {{- $Permalink = $image.RelPermalink -}}
+
+ {{- if $notSVG -}}
+ {{- $Width = $image.Width -}}
+ {{- $Height = $image.Height -}}
+ {{- $galleryImage = true -}}
+
+ {{- if (default true .Page.Site.Params.imageProcessing.content.enabled) -}}
+ {{- $small := $image.Resize `480x` -}}
+ {{- $medium := $image.Resize `768x` -}}
+ {{- $big := $image.Resize `1024x` -}}
+ {{- $Srcset = printf `%s 480w, %s 768w, %s 1024w` $small.RelPermalink $medium.RelPermalink $big.RelPermalink -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+
diff --git a/themes/hugo-theme-stack/layouts/_default/_markup/render-link.html b/themes/hugo-theme-stack/layouts/_default/_markup/render-link.html
new file mode 100644
index 00000000..843854d7
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/_markup/render-link.html
@@ -0,0 +1,3 @@
+{{ .Text | safeHTML }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/_default/archives.html b/themes/hugo-theme-stack/layouts/_default/archives.html
new file mode 100644
index 00000000..5d5243c2
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/archives.html
@@ -0,0 +1,35 @@
+{{ define "body-class" }}template-archives{{ end }}
+{{ define "main" }}
+
+
+ {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
+ {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
+ {{ $filtered := ($pages | intersect $notHidden) }}
+
+ {{ range $filtered.GroupByDate "2006" }}
+ {{ $id := lower (replace .Key " " "-") }}
+
+
+
+ {{ range .Pages }}
+ {{ partial "article-list/compact" . }}
+ {{ end }}
+
+
+ {{ end }}
+
+ {{ partialCached "footer/footer" . }}
+{{ end }}
diff --git a/themes/hugo-theme-stack/layouts/_default/baseof.html b/themes/hugo-theme-stack/layouts/_default/baseof.html
new file mode 100644
index 00000000..83fdaa32
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/baseof.html
@@ -0,0 +1,28 @@
+
+
+
+ {{- partial "head/head.html" . -}}
+ {{- block "head" . -}}{{ end }}
+
+
+ {{- partial "head/colorScheme" . -}}
+
+ {{/* The container is wider when there's any activated widget */}}
+ {{- $hasWidget := false -}}
+ {{- range .Site.Params.widgets -}}
+ {{- if gt (len .) 0 -}}
+ {{- $hasWidget = true -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- block "left-sidebar" . -}}
+ {{ partial "sidebar/left.html" . }}
+ {{- end -}}
+ {{- block "right-sidebar" . -}}{{ end }}
+
+ {{- block "main" . }}{{- end }}
+
+
+ {{ partial "footer/include.html" . }}
+
+
diff --git a/themes/hugo-theme-stack/layouts/_default/list.html b/themes/hugo-theme-stack/layouts/_default/list.html
new file mode 100644
index 00000000..9bc618d9
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/list.html
@@ -0,0 +1,85 @@
+{{ define "main" }}
+
+
+ {{- $subsections := .Sections -}}
+ {{- $pages := .Pages | complement $subsections -}}
+
+ {{- if eq (len $pages) 0 -}}
+ {{/* If there are no normal pages, display subsections in list style, with pagination */}}
+ {{/* This happens with taxonomies like categories or tags */}}
+ {{- $pages = $subsections -}}
+ {{- $subsections = slice -}}
+ {{- end -}}
+
+ {{- with $subsections -}}
+
+ {{- end -}}
+
+ {{/* List only pages that are not a subsection */}}
+ {{ $paginator := .Paginate $pages }}
+
+ {{ range $paginator.Pages }}
+ {{ partial "article-list/compact" . }}
+ {{ end }}
+
+
+ {{- partial "pagination.html" . -}}
+
+ {{ partialCached "footer/footer" . }}
+{{ end }}
+
+{{ define "right-sidebar" }}
+ {{ partial "sidebar/right.html" (dict "Context" . "Scope" "homepage") }}
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/_default/rss.xml b/themes/hugo-theme-stack/layouts/_default/rss.xml
new file mode 100644
index 00000000..3d2e5920
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/rss.xml
@@ -0,0 +1,48 @@
+{{- $pctx := . -}}
+{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
+{{- $pages := slice -}}
+{{- if or $.IsHome $.IsSection -}}
+{{- $pages = $pctx.RegularPages -}}
+{{- else -}}
+{{- $pages = $pctx.Pages -}}
+{{- end -}}
+{{- $pages := where $pages "Params.hidden" "!=" true -}}
+{{- $limit := .Site.Config.Services.RSS.Limit -}}
+{{- if ge $limit 1 -}}
+{{- $pages = $pages | first $limit -}}
+{{- end -}}
+{{- printf "" | safeHTML }}
+
+
+ {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}
+ {{ .Permalink }}
+ Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}
+ Hugo -- gohugo.io {{ with .Site.LanguageCode }}
+ {{.}} {{end}}{{ with .Site.Params.Author.email }}
+ {{.}}{{ with $.Site.Params.Author.name }} ({{.}}){{end}} {{end}}{{ with .Site.Params.Author.email }}
+ {{.}}{{ with $.Site.Params.Author.name }} ({{.}}){{end}} {{end}}{{ with .Site.Copyright }}
+ {{.}} {{end}}{{ if not .Date.IsZero }}
+ {{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} {{ end }}
+ {{- with .OutputFormats.Get "RSS" -}}
+ {{ printf " " .Permalink .MediaType | safeHTML }}
+ {{- end -}}
+ {{ range $pages }}
+ {{- $content := safeHTML (.Summary | html) -}}
+ {{- if .Site.Params.rssFullContent -}}
+ {{- $content = safeHTML (.Content | html) -}}
+ {{- end -}}
+ -
+
{{ .Title }}
+ {{ .Permalink }}
+ {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+ {{ with .Site.Params.Author.email }}{{.}}{{ with $.Site.Params.Author.name }} ({{.}}){{end}} {{end}}
+ {{ .Permalink }}
+
+ {{- $image := partial "helper/image" (dict "Context" . "Type" "rss") -}}
+ {{- if $image.exists -}}
+ {{ "<" | html }}img src="{{ $image.permalink | absURL }}" alt="Featured image of post {{ .Title }}" {{ "/>" | html}}
+ {{- end -}}{{ $content }}
+
+ {{ end }}
+
+
diff --git a/themes/hugo-theme-stack/layouts/_default/single.html b/themes/hugo-theme-stack/layouts/_default/single.html
new file mode 100644
index 00000000..5f300bf3
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/_default/single.html
@@ -0,0 +1,46 @@
+{{ define "body-class" }}
+ article-page
+ {{/*
+ Enable the right sidebar if
+ - Widget different from 'TOC' is enabled
+ - TOC is enabled and not empty
+ */}}
+ {{- $HasWidgetNotTOC := false -}}
+ {{- $TOCWidgetEnabled := false -}}
+ {{- range .Site.Params.widgets.page -}}
+ {{- if ne .type "toc" -}}
+ {{ $HasWidgetNotTOC = true -}}
+ {{- else -}}
+ {{ $TOCWidgetEnabled = true -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- $TOCManuallyDisabled := eq .Params.toc false -}}
+ {{- $TOCEnabled := and (not $TOCManuallyDisabled) $TOCWidgetEnabled -}}
+ {{- $hasTOC := ge (len .TableOfContents) 100 -}}
+ {{- .Scratch.Set "TOCEnabled" (and $TOCEnabled $hasTOC) -}}
+
+ {{- .Scratch.Set "hasWidget" (or $HasWidgetNotTOC (and $TOCEnabled $hasTOC)) -}}
+{{ end }}
+
+{{ define "main" }}
+ {{ partial "article/article.html" . }}
+
+ {{ if .Params.links }}
+ {{ partial "article/components/links" . }}
+ {{ end }}
+
+ {{ partial "article/components/related-content" . }}
+
+ {{ if not (eq .Params.comments false) }}
+ {{ partial "comments/include" . }}
+ {{ end }}
+
+ {{ partialCached "footer/footer" . }}
+
+ {{ partialCached "article/components/photoswipe" . }}
+{{ end }}
+
+{{ define "right-sidebar" }}
+ {{ if .Scratch.Get "hasWidget" }}{{ partial "sidebar/right.html" (dict "Context" . "Scope" "page") }}{{ end}}
+{{ end }}
diff --git a/themes/hugo-theme-stack/layouts/index.html b/themes/hugo-theme-stack/layouts/index.html
new file mode 100644
index 00000000..0cd0b88c
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/index.html
@@ -0,0 +1,19 @@
+{{ define "main" }}
+ {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
+ {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
+ {{ $filtered := ($pages | intersect $notHidden) }}
+ {{ $pag := .Paginate ($filtered) }}
+
+
+ {{ range $index, $element := $pag.Pages }}
+ {{ partial "article-list/default" . }}
+ {{ end }}
+
+
+ {{- partial "pagination.html" . -}}
+ {{- partial "footer/footer" . -}}
+{{ end }}
+
+{{ define "right-sidebar" }}
+ {{ partial "sidebar/right.html" (dict "Context" . "Scope" "homepage") }}
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/page/search.html b/themes/hugo-theme-stack/layouts/page/search.html
new file mode 100644
index 00000000..fbfb74d4
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/page/search.html
@@ -0,0 +1,33 @@
+{{ define "body-class" }}template-search{{ end }}
+{{ define "head" }}
+ {{- with .OutputFormats.Get "json" -}}
+
+ {{- end -}}
+{{ end }}
+{{ define "main" }}
+
+
+
+
+
+
+{{- $opts := dict "minify" hugo.IsProduction "JSXFactory" "createElement" -}}
+{{- $searchScript := resources.Get "ts/search.tsx" | js.Build $opts -}}
+
+
+{{ partialCached "footer/footer" . }}
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/page/search.json b/themes/hugo-theme-stack/layouts/page/search.json
new file mode 100644
index 00000000..5d4e6278
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/page/search.json
@@ -0,0 +1,26 @@
+{{- $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections -}}
+{{- $notHidden := where .Site.RegularPages "Params.hidden" "!=" true -}}
+{{- $filtered := ($pages | intersect $notHidden) -}}
+
+{{- $result := slice -}}
+
+{{- range $filtered -}}
+ {{- $data := dict "title" .Title "date" .Date "permalink" .Permalink "content" (.Plain) -}}
+
+ {{- $image := partialCached "helper/image" (dict "Context" . "Type" "articleList") .RelPermalink "articleList" -}}
+ {{- if $image.exists -}}
+ {{- $imagePermalink := "" -}}
+ {{- if and $image.resource (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+ {{- $thumbnail := $image.resource.Fill "120x120" -}}
+ {{- $imagePermalink = (absURL $thumbnail.Permalink) -}}
+ {{- else -}}
+ {{- $imagePermalink = $image.permalink -}}
+ {{- end -}}
+
+ {{- $data = merge $data (dict "image" (absURL $imagePermalink)) -}}
+ {{- end -}}
+
+ {{- $result = $result | append $data -}}
+{{- end -}}
+
+{{ jsonify $result }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article-list/compact.html b/themes/hugo-theme-stack/layouts/partials/article-list/compact.html
new file mode 100644
index 00000000..f2784d6d
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article-list/compact.html
@@ -0,0 +1,40 @@
+
+
+
+
+ {{- .Title -}}
+
+
+
+ {{- .Date | time.Format (or .Site.Params.dateFormat.published "Jan 02, 2006") -}}
+
+
+
+
+ {{- $image := partialCached "helper/image" (dict "Context" . "Type" "articleList") .RelPermalink "articleList" -}}
+ {{ if $image.exists }}
+
+ {{ if $image.resource }}
+ {{- $Permalink := $image.resource.RelPermalink -}}
+ {{- $Width := $image.resource.Width -}}
+ {{- $Height := $image.resource.Height -}}
+
+ {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+ {{- $thumbnail := $image.resource.Fill "120x120" -}}
+ {{- $Permalink = $thumbnail.RelPermalink -}}
+ {{- $Width = $thumbnail.Width -}}
+ {{- $Height = $thumbnail.Height -}}
+ {{- end -}}
+
+
+ {{ else }}
+
+ {{ end }}
+
+ {{ end }}
+
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article-list/default.html b/themes/hugo-theme-stack/layouts/partials/article-list/default.html
new file mode 100644
index 00000000..02e0b30d
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article-list/default.html
@@ -0,0 +1,4 @@
+{{ $image := partialCached "helper/image" (dict "Context" . "Type" "articleList") .RelPermalink "articleList" }}
+
+ {{ partial "article/components/header" . }}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article-list/tile.html b/themes/hugo-theme-stack/layouts/partials/article-list/tile.html
new file mode 100644
index 00000000..be5744b2
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article-list/tile.html
@@ -0,0 +1,39 @@
+{{ $image := partialCached "helper/image" (dict "Context" .context "Type" .Type) .context.RelPermalink .Type }}
+
+
+
+ {{ if $image.exists }}
+
+ {{ if $image.resource }}
+ {{- $imageRaw := $image.resource | resources.Fingerprint "md5" -}}
+ {{- $Permalink := $imageRaw.RelPermalink -}}
+ {{- $Width := $imageRaw.Width -}}
+ {{- $Height := $imageRaw.Height -}}
+
+ {{- if .context.Site.Params.imageProcessing.cover.enabled -}}
+ {{- $thumbnail := $imageRaw.Fill .size -}}
+ {{- $Permalink = $thumbnail.RelPermalink -}}
+ {{- $Width = $thumbnail.Width -}}
+ {{- $Height = $thumbnail.Height -}}
+ {{- end -}}
+
+
+ {{ else }}
+
+ {{ end }}
+
+ {{ end }}
+
+
+
+ {{- .context.Title -}}
+
+
+
+
diff --git a/themes/hugo-theme-stack/layouts/partials/article/article.html b/themes/hugo-theme-stack/layouts/partials/article/article.html
new file mode 100644
index 00000000..f3f7e903
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/article.html
@@ -0,0 +1,11 @@
+
+ {{ partial "article/components/header" . }}
+
+ {{ partial "article/components/content" . }}
+
+ {{ partial "article/components/footer" . }}
+
+ {{ if or .Params.math .Site.Params.article.math }}
+ {{ partialCached "article/components/math.html" . }}
+ {{ end }}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/content.html b/themes/hugo-theme-stack/layouts/partials/article/components/content.html
new file mode 100644
index 00000000..61e536cd
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/content.html
@@ -0,0 +1,5 @@
+
+
+ {{ $wrappedTable := printf "${1}
" }}
+ {{ .Content | replaceRE "()" $wrappedTable | safeHTML }}
+
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/details.html b/themes/hugo-theme-stack/layouts/partials/article/components/details.html
new file mode 100644
index 00000000..7c273022
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/details.html
@@ -0,0 +1,61 @@
+
+ {{ if .Params.categories }}
+
+ {{ range (.GetTerms "categories") }}
+
+ {{ .LinkTitle }}
+
+ {{ end }}
+
+ {{ end }}
+
+
+
+
+ {{ with .Params.description }}
+
+ {{ . }}
+
+ {{ end }}
+
+
+ {{ $showReadingTime := .Params.readingTime | default (.Site.Params.article.readingTime) }}
+ {{ $showDate := not .Date.IsZero }}
+ {{ $showFooter := or $showDate $showReadingTime }}
+ {{ if $showFooter }}
+
+ {{ if $showDate }}
+
+ {{ partial "helper/icon" "date" }}
+
+ {{- .Date | time.Format (or .Site.Params.dateFormat.published "Jan 02, 2006") -}}
+
+
+ {{ end }}
+
+ {{ if $showReadingTime }}
+
+ {{ partial "helper/icon" "clock" }}
+
+ {{ T "article.readingTime" .ReadingTime }}
+
+
+ {{ end }}
+
+ {{ end }}
+
+ {{ if .IsTranslated }}
+
+ {{ partial "helper/icon" "language" }}
+
+
+ {{ end }}
+
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/footer.html b/themes/hugo-theme-stack/layouts/partials/article/components/footer.html
new file mode 100644
index 00000000..9795880a
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/footer.html
@@ -0,0 +1,19 @@
+
+ {{ partial "article/components/tags" . }}
+
+ {{ if and (.Site.Params.article.license.enabled) (not (eq .Params.license false)) }}
+
+ {{ partial "helper/icon" "copyright" }}
+ {{ default .Site.Params.article.license.default .Params.license | markdownify }}
+
+ {{ end }}
+
+ {{- if ne .Lastmod .Date -}}
+
+ {{ partial "helper/icon" "clock" }}
+
+ {{ T "article.lastUpdatedOn" }} {{ .Lastmod | time.Format ( or .Site.Params.dateFormat.lastUpdated "Jan 02, 2006 15:04 MST" ) }}
+
+
+ {{- end -}}
+
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/header.html b/themes/hugo-theme-stack/layouts/partials/article/components/header.html
new file mode 100644
index 00000000..cda70aa9
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/header.html
@@ -0,0 +1,36 @@
+
+ {{- $image := partialCached "helper/image" (dict "Context" . "Type" "article") .RelPermalink "article" -}}
+ {{ if $image.exists }}
+
+ {{ end }}
+
+ {{ partialCached "article/components/details" . .RelPermalink }}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/links.html b/themes/hugo-theme-stack/layouts/partials/article/components/links.html
new file mode 100644
index 00000000..a2ac26ca
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/links.html
@@ -0,0 +1,30 @@
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/math.html b/themes/hugo-theme-stack/layouts/partials/article/components/math.html
new file mode 100644
index 00000000..b41e4c9e
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/math.html
@@ -0,0 +1,14 @@
+{{- partial "helper/external" (dict "Context" . "Namespace" "KaTeX") -}}
+
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/photoswipe.html b/themes/hugo-theme-stack/layouts/partials/article/components/photoswipe.html
new file mode 100644
index 00000000..c7509342
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/photoswipe.html
@@ -0,0 +1 @@
+{{- partial "helper/external" (dict "Context" . "Namespace" "PhotoSwipe") -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/related-content.html b/themes/hugo-theme-stack/layouts/partials/article/components/related-content.html
new file mode 100644
index 00000000..aba88e33
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/related-content.html
@@ -0,0 +1,13 @@
+{{ $related := (where (.Site.RegularPages.Related .) "Params.hidden" "!=" true) | first 5 }}
+{{ with $related }}
+
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/article/components/tags.html b/themes/hugo-theme-stack/layouts/partials/article/components/tags.html
new file mode 100644
index 00000000..aae38b4e
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/article/components/tags.html
@@ -0,0 +1,7 @@
+{{ if .Params.Tags }}
+
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/include.html b/themes/hugo-theme-stack/layouts/partials/comments/include.html
new file mode 100644
index 00000000..a3d0618f
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/include.html
@@ -0,0 +1,3 @@
+{{ if .Site.Params.comments.enabled }}
+ {{ partial (printf "comments/provider/%s" .Site.Params.comments.provider) . }}
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/beaudar.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/beaudar.html
new file mode 100644
index 00000000..761801fa
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/beaudar.html
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/cactus.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/cactus.html
new file mode 100644
index 00000000..ae172d3c
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/cactus.html
@@ -0,0 +1,29 @@
+{{- with .Site.Params.comments.cactus -}}
+{{- partial "helper/external" (dict "Context" $ "Namespace" "Cactus") -}}
+
+
+
+
+
+
+{{- end -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/cusdis.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/cusdis.html
new file mode 100644
index 00000000..a89746c6
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/cusdis.html
@@ -0,0 +1,21 @@
+{{- $host := default "https://cusdis.com" .Site.Params.comments.cusdis.host -}}
+
+
+
+
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/disqus.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/disqus.html
new file mode 100644
index 00000000..fb17b772
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/disqus.html
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/disqusjs.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/disqusjs.html
new file mode 100644
index 00000000..f4f4c037
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/disqusjs.html
@@ -0,0 +1,65 @@
+{{- $pc := .Site.Config.Privacy.Disqus -}}
+{{- $disqusjs := .Site.Params.Comments.disqusjs -}}
+{{- if and (not $pc.Disable) (and $disqusjs.Shortname $disqusjs.ApiKey) -}}
+
+{{- $style := resources.Get "scss/partials/comments/disqusjs.scss" | toCSS | minify -}}
+
+
+
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/giscus.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/giscus.html
new file mode 100644
index 00000000..fa355b77
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/giscus.html
@@ -0,0 +1,52 @@
+{{- with .Site.Params.comments.giscus -}}
+
+
+{{- end -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/gitalk.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/gitalk.html
new file mode 100644
index 00000000..ac77fc67
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/gitalk.html
@@ -0,0 +1,32 @@
+{{- with .Site.Params.comments.gitalk -}}
+
+
+
+
+
+{{ end }}
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/remark42.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/remark42.html
new file mode 100644
index 00000000..18acf1b5
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/remark42.html
@@ -0,0 +1,29 @@
+{{- with .Site.Params.comments.remark42 -}}
+
+
+{{- end -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/twikoo.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/twikoo.html
new file mode 100644
index 00000000..8c225075
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/twikoo.html
@@ -0,0 +1,58 @@
+
+
+
+
+{{- with .Site.Params.comments.twikoo -}}
+
+{{- end -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/utterances.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/utterances.html
new file mode 100644
index 00000000..b1e370bb
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/utterances.html
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/vssue.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/vssue.html
new file mode 100644
index 00000000..79ac381d
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/vssue.html
@@ -0,0 +1,27 @@
+{{- with .Site.Params.comments.vssue -}}
+
+
+
+
+
+
+
+
+{{- end -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/comments/provider/waline.html b/themes/hugo-theme-stack/layouts/partials/comments/provider/waline.html
new file mode 100644
index 00000000..30a09eb2
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/comments/provider/waline.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+{{- with .Site.Params.comments.waline -}}
+{{- $config := dict "el" "#waline" "dark" `html[data-scheme="dark"]` -}}
+{{- $replaceKeys := dict "serverurl" "serverURL" "requiredmeta" "requiredMeta" "wordlimit" "wordLimit" "pagesize" "pageSize" "imageuploader" "imageUploader" "texrenderer" "texRenderer" "turnstilekey" "turnstileKey" -}}
+
+{{- range $key, $val := . -}}
+ {{- if ne $val nil -}}
+ {{- $replaceKey := index $replaceKeys $key -}}
+ {{- $k := default $key $replaceKey -}}
+
+ {{- $config = merge $config (dict $k $val) -}}
+ {{- end -}}
+{{- end -}}
+
+
+{{- end -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/data/description.html b/themes/hugo-theme-stack/layouts/partials/data/description.html
new file mode 100644
index 00000000..7f6cc32a
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/data/description.html
@@ -0,0 +1,17 @@
+
+{{ $description := .Site.Params.sidebar.subtitle }}
+
+
+{{ if .Site.Params.description }}
+ {{ $description = .Site.Params.description }}
+{{ end }}
+
+{{ if .Description }}
+
+ {{ $description = .Description }}
+{{ else if .IsPage }}
+
+ {{ $description = .Summary }}
+{{ end }}
+
+{{ return (replaceRE "\n" " " $description | plainify) }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/data/title.html b/themes/hugo-theme-stack/layouts/partials/data/title.html
new file mode 100644
index 00000000..85a7bc74
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/data/title.html
@@ -0,0 +1,38 @@
+{{- $title := .Title -}}
+{{- $siteTitle := .Site.Title -}}
+
+{{- if .IsHome -}}
+
+
+
+ {{ $pages := where .Site.RegularPages "Section" "in" .Site.Params.mainSections }}
+ {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
+ {{ $filtered := ($pages | intersect $notHidden) }}
+ {{ $pag := .Paginate ($filtered) }}
+
+ {{ if .Paginator.HasPrev }}
+
+ {{ $title = printf "%s - %s" .Paginator $siteTitle }}
+ {{ else }}
+ {{ $title = $siteTitle}}
+ {{ end }}
+{{- else if eq .Kind "term" -}}
+
+
+
+ {{ $notHidden := where .Pages "Params.hidden" "!=" true }}
+ {{ $pag := .Paginate ($notHidden) }}
+
+
+ {{ $title = slice (title .Data.Singular) ": " $title }}
+
+ {{ if .Paginator.HasPrev }}
+
+ {{ $title = $title | append " - " .Paginator }}
+ {{ end }}
+
+ {{ $title = $title | append " - " $siteTitle }}
+ {{ $title = delimit $title "" }}
+{{- end -}}
+
+{{ return $title }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/footer/components/custom-font.html b/themes/hugo-theme-stack/layouts/partials/footer/components/custom-font.html
new file mode 100644
index 00000000..ac4d98b9
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/footer/components/custom-font.html
@@ -0,0 +1 @@
+
diff --git a/themes/hugo-theme-stack/layouts/partials/footer/components/script.html b/themes/hugo-theme-stack/layouts/partials/footer/components/script.html
new file mode 100644
index 00000000..0820245b
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/footer/components/script.html
@@ -0,0 +1,12 @@
+{{- partial "helper/external" (dict "Context" . "Namespace" "Vibrant") -}}
+
+{{- $opts := dict "minify" hugo.IsProduction -}}
+{{- $script := resources.Get "ts/main.ts" | js.Build $opts | fingerprint -}}
+
+
+
+{{- with resources.Get "ts/custom.ts" -}}
+ {{/* Place your custom script in HUGO_SITE_FOLDER/assets/ts/custom.ts */}}
+ {{- $customScript := . | js.Build $opts | fingerprint -}}
+
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/footer/custom.html b/themes/hugo-theme-stack/layouts/partials/footer/custom.html
new file mode 100644
index 00000000..e69de29b
diff --git a/themes/hugo-theme-stack/layouts/partials/footer/footer.html b/themes/hugo-theme-stack/layouts/partials/footer/footer.html
new file mode 100644
index 00000000..179357bb
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/footer/footer.html
@@ -0,0 +1,23 @@
+{{- $ThemeVersion := "3.30.0" -}}
+
diff --git a/themes/hugo-theme-stack/layouts/partials/footer/include.html b/themes/hugo-theme-stack/layouts/partials/footer/include.html
new file mode 100644
index 00000000..4b50a888
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/footer/include.html
@@ -0,0 +1,3 @@
+{{ partialCached "footer/components/script.html" . }}
+{{ partialCached "footer/components/custom-font.html" . }}
+{{ partial "footer/custom.html" . }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/head/colorScheme.html b/themes/hugo-theme-stack/layouts/partials/head/colorScheme.html
new file mode 100644
index 00000000..42f4dd8f
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/head/colorScheme.html
@@ -0,0 +1,39 @@
+{{- $defaultColorScheme := default "auto" .Site.Params.colorScheme.default -}}
+{{- if not (default false .Site.Params.colorScheme.toggle) -}}
+ {{/* If toggle is disabled, force default scheme */}}
+
+{{- else -}}
+ {{/* Otherwise set to default scheme only if no preference is set by user */}}
+
+{{- end -}}
+
+
diff --git a/themes/hugo-theme-stack/layouts/partials/head/custom.html b/themes/hugo-theme-stack/layouts/partials/head/custom.html
new file mode 100644
index 00000000..e69de29b
diff --git a/themes/hugo-theme-stack/layouts/partials/head/head.html b/themes/hugo-theme-stack/layouts/partials/head/head.html
new file mode 100644
index 00000000..a7991c19
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/head/head.html
@@ -0,0 +1,26 @@
+
+
+
+{{- $description := partialCached "data/description" . .RelPermalink -}}
+
+{{ with .Params.Keywords }} {{ end }}
+
+{{- $title := partial "data/title" . -}}
+{{ $title }}
+
+
+
+{{- partial "head/style.html" . -}}
+{{- partial "head/script.html" . -}}
+{{- partial "head/opengraph/include.html" . -}}
+
+{{- range .AlternativeOutputFormats -}}
+
+{{- end -}}
+
+{{ with .Site.Params.favicon }}
+
+{{ end }}
+
+{{- template "_internal/google_analytics.html" . -}}
+{{- partial "head/custom.html" . -}}
diff --git a/themes/hugo-theme-stack/layouts/partials/head/opengraph/include.html b/themes/hugo-theme-stack/layouts/partials/head/opengraph/include.html
new file mode 100644
index 00000000..3a43f483
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/head/opengraph/include.html
@@ -0,0 +1,2 @@
+{{ partial "head/opengraph/provider/base" . }}
+{{ partial "head/opengraph/provider/twitter" . }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/base.html b/themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/base.html
new file mode 100644
index 00000000..1f6338a0
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/base.html
@@ -0,0 +1,53 @@
+{{- $title := partialCached "data/title" . .RelPermalink -}}
+{{- $description := partialCached "data/description" . .RelPermalink -}}
+
+
+
+
+
+
+
+{{- $locale := .Params.locale -}}
+{{- if not $locale -}}
+ {{- if eq .Language.Lang "fr" -}}
+ {{- $locale = "fr_FR" -}}
+ {{- else -}}
+ {{- $locale = "en_US" -}}
+ {{- end -}}
+{{- end -}}
+
+
+{{- if .IsPage -}}
+
+ {{- range .Params.tags -}}
+
+ {{- end -}}
+{{- end -}}
+
+{{- if .IsPage -}}
+ {{- if not .Date.IsZero -}}
+
+ {{- end -}}
+ {{- if not .Lastmod.IsZero -}}
+
+ {{- end -}}
+{{- else -}}
+ {{- if not .Site.Lastmod.IsZero -}}
+
+ {{- end -}}
+{{- end -}}
+
+{{ $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" }}
+{{- if $image.exists -}}
+
+ {{- if $image.resource -}}
+
+
+ {{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/twitter.html b/themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/twitter.html
new file mode 100644
index 00000000..c39eba30
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/head/opengraph/provider/twitter.html
@@ -0,0 +1,16 @@
+{{- with .Site.Params.opengraph.twitter.site -}}
+
+
+{{- end -}}
+
+{{- $title := partialCached "data/title" . .RelPermalink -}}
+{{- $description := partialCached "data/description" . .RelPermalink -}}
+
+
+
+
+{{- $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" -}}
+{{- if $image.exists -}}
+
+
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/head/script.html b/themes/hugo-theme-stack/layouts/partials/head/script.html
new file mode 100644
index 00000000..e69de29b
diff --git a/themes/hugo-theme-stack/layouts/partials/head/style.html b/themes/hugo-theme-stack/layouts/partials/head/style.html
new file mode 100644
index 00000000..6dfa77db
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/head/style.html
@@ -0,0 +1,3 @@
+{{ $sass := resources.Get "scss/style.scss" }}
+{{ $style := $sass | toCSS | minify | resources.Fingerprint "sha256" }}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/helper/external.html b/themes/hugo-theme-stack/layouts/partials/helper/external.html
new file mode 100644
index 00000000..88d95254
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/helper/external.html
@@ -0,0 +1,29 @@
+{{- $List := index .Context.Site.Data.external .Namespace -}}
+{{- with $List -}}
+ {{- range . -}}
+ {{- if eq .type "script" -}}
+
+ {{- else if eq .type "style" -}}
+
+ {{- else -}}
+ {{- errorf "Error: unknown external resource type: %s" .type -}}
+ {{- end -}}
+ {{- end -}}
+{{- else -}}
+ {{- errorf "Error: external resource '%s' is not found" .Namespace -}}
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/helper/icon.html b/themes/hugo-theme-stack/layouts/partials/helper/icon.html
new file mode 100644
index 00000000..72162e89
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/helper/icon.html
@@ -0,0 +1,6 @@
+{{- $iconFile := resources.GetMatch (printf "icons/%s.svg" .) -}}
+{{- if $iconFile -}}
+ {{- $iconFile.Content | safeHTML -}}
+{{- else -}}
+ {{- errorf "Error: icon '%s.svg' is not found under 'assets/icons' folder" . -}}
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/helper/image.html b/themes/hugo-theme-stack/layouts/partials/helper/image.html
new file mode 100644
index 00000000..11fc3b6a
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/helper/image.html
@@ -0,0 +1,61 @@
+{{ $result := dict "exists" false "permalink" nil "resource" nil "isDefault" false }}
+{{ $imageField := default "image" .Context.Site.Params.featuredImageField }}
+{{ $imageValue := index .Context.Params $imageField }}
+
+{{ if $imageValue }}
+
+ {{ $result = merge $result (dict "exists" true) }}
+ {{ $url := urls.Parse $imageValue }}
+
+ {{ if or (eq $url.Scheme "http") (eq $url.Scheme "https") }}
+
+ {{ $result = merge $result (dict "permalink" $imageValue) }}
+ {{ else }}
+ {{ $pageResourceImage := .Context.Resources.GetMatch (printf "%s" ($imageValue | safeURL)) }}
+
+ {{ if $pageResourceImage }}
+
+ {{ $result = merge $result (dict "permalink" $pageResourceImage.RelPermalink) }}
+
+
+ {{ if ne (path.Ext $imageValue) ".svg" }}
+ {{ $result = merge $result (dict "resource" $pageResourceImage) }}
+ {{ end }}
+ {{ else }}
+
+ {{ $result = merge $result (dict "permalink" (relURL $imageValue)) }}
+ {{ end }}
+
+ {{ end }}
+
+{{ else if and (ne .Type nil) (index .Context.Site.Params.defaultImage .Type) }}
+
+ {{ $defaultImageSetting := index .Context.Site.Params.defaultImage .Type }}
+
+ {{ if $defaultImageSetting.enabled }}
+ {{ $result = merge $result (dict "isDefault" true) }}
+ {{ $result = merge $result (dict "exists" true) }}
+
+ {{ if $defaultImageSetting.local }}
+ {{ $siteResourceImage := resources.GetMatch (printf "%s" ($defaultImageSetting.src | safeURL)) }}
+
+ {{ if $siteResourceImage }}
+
+ {{ $result = merge $result (dict "permalink" $siteResourceImage.RelPermalink) }}
+ {{ $result = merge $result (dict "resource" $siteResourceImage) }}
+ {{ else }}
+
+ {{ errorf "Failed loading image: %q" $defaultImageSetting.src }}
+ {{ $result = merge $result (dict "exists" false) }}
+ {{ end }}
+
+ {{ else }}
+
+ {{ $result = merge $result (dict "permalink" (relURL $defaultImageSetting.src)) }}
+ {{ end }}
+
+ {{ end }}
+
+{{ end }}
+
+{{ return $result }}
diff --git a/themes/hugo-theme-stack/layouts/partials/pagination.html b/themes/hugo-theme-stack/layouts/partials/pagination.html
new file mode 100644
index 00000000..77560503
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/pagination.html
@@ -0,0 +1,26 @@
+{{ if gt .Paginator.TotalPages 1 }}
+
+{{ end }}
diff --git a/themes/hugo-theme-stack/layouts/partials/sidebar/left.html b/themes/hugo-theme-stack/layouts/partials/sidebar/left.html
new file mode 100644
index 00000000..f18216db
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/sidebar/left.html
@@ -0,0 +1,104 @@
+
diff --git a/themes/hugo-theme-stack/layouts/partials/sidebar/right.html b/themes/hugo-theme-stack/layouts/partials/sidebar/right.html
new file mode 100644
index 00000000..6333f10d
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/sidebar/right.html
@@ -0,0 +1,16 @@
+{{- $scope := default "homepage" .Scope -}}
+{{- $context := .Context -}}
+{{- with (index .Context.Site.Params.widgets $scope) -}}
+
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/widget/archives.html b/themes/hugo-theme-stack/layouts/partials/widget/archives.html
new file mode 100644
index 00000000..1f2abc5f
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/widget/archives.html
@@ -0,0 +1,35 @@
+{{- $query := first 1 (where .Context.Site.Pages "Layout" "==" "archives") -}}
+{{- $context := .Context -}}
+{{- $limit := default 5 .Params.limit -}}
+{{- if $query -}}
+ {{- $archivesPage := index $query 0 -}}
+
+{{- else -}}
+ {{- warnf "Archives page not found. Create a page with layout: archives." -}}
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/widget/categories.html b/themes/hugo-theme-stack/layouts/partials/widget/categories.html
new file mode 100644
index 00000000..10c8a35e
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/widget/categories.html
@@ -0,0 +1,16 @@
+{{- $context := .Context -}}
+{{- $limit := default 10 .Params.limit -}}
+
diff --git a/themes/hugo-theme-stack/layouts/partials/widget/search.html b/themes/hugo-theme-stack/layouts/partials/widget/search.html
new file mode 100644
index 00000000..7b0fc73e
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/widget/search.html
@@ -0,0 +1,16 @@
+{{- $query := first 1 (where .Context.Site.Pages "Layout" "==" "search") -}}
+{{- if $query -}}
+ {{- $searchPage := index $query 0 -}}
+
+{{- else -}}
+ {{- warnf "Search page not found. Create a page with layout: search." -}}
+{{- end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/widget/tag-cloud.html b/themes/hugo-theme-stack/layouts/partials/widget/tag-cloud.html
new file mode 100644
index 00000000..e64e5e2f
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/widget/tag-cloud.html
@@ -0,0 +1,16 @@
+{{- $context := .Context -}}
+{{- $limit := default 10 .Params.limit -}}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/partials/widget/toc.html b/themes/hugo-theme-stack/layouts/partials/widget/toc.html
new file mode 100644
index 00000000..e311de34
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/partials/widget/toc.html
@@ -0,0 +1,12 @@
+{{ if (.Context.Scratch.Get "TOCEnabled") }}
+
+{{ end }}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/shortcodes/bilibili.html b/themes/hugo-theme-stack/layouts/shortcodes/bilibili.html
new file mode 100644
index 00000000..cb72e438
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/shortcodes/bilibili.html
@@ -0,0 +1,23 @@
+{{ $vid := (.Get 0) }}
+{{ $videopage := default 1 (.Get 1) }}
+{{ $basicQuery := querify "page" $videopage "high_quality" 1 "as_wide" 1 }}
+{{ $videoQuery := "" }}
+
+{{ if strings.HasPrefix (lower $vid) "av" }}
+ {{ $videoQuery = querify "aid" (strings.TrimPrefix "av" (lower $vid)) }}
+{{ else if strings.HasPrefix (lower $vid) "bv" }}
+ {{ $videoQuery = querify "bvid" $vid }}
+{{ else }}
+ Bilibili 视频av号或BV号错误!请检查视频av号或BV号是否正确
+ 当前视频av或BV号:{{ $vid }},视频分P:{{ $videopage }}
+{{ end }}
+
+
+
+
diff --git a/themes/hugo-theme-stack/layouts/shortcodes/gitlab.html b/themes/hugo-theme-stack/layouts/shortcodes/gitlab.html
new file mode 100644
index 00000000..b5a16cf5
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/shortcodes/gitlab.html
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/shortcodes/quote.html b/themes/hugo-theme-stack/layouts/shortcodes/quote.html
new file mode 100644
index 00000000..09bb07cd
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/shortcodes/quote.html
@@ -0,0 +1,15 @@
+
+ {{ .Inner | markdownify }}
+ {{- if or (.Get "author") (.Get "source") -}}
+ ―
+ {{- if .Get "author" -}}
+
+ {{- .Get "author" -}}{{- if .Get "source" -}}, {{ end -}}
+
+ {{- end -}}
+ {{- with .Get "url" -}}{{- end -}}
+ {{ .Get "source" }}
+ {{- if .Get "url" -}} {{- end -}}
+
+ {{- end -}}
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/shortcodes/tencent.html b/themes/hugo-theme-stack/layouts/shortcodes/tencent.html
new file mode 100644
index 00000000..463dec52
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/shortcodes/tencent.html
@@ -0,0 +1,10 @@
+{{ $vid := .Get 0 }}
+
+
+
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/layouts/shortcodes/video.html b/themes/hugo-theme-stack/layouts/shortcodes/video.html
new file mode 100644
index 00000000..53247548
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/shortcodes/video.html
@@ -0,0 +1,14 @@
+{{- $src := .Get "src" | default (.Get 0) -}}
+
+
+
+ Your browser doesn't support HTML5 video. Here is a
+ link to the video instead.
+
+
+
diff --git a/themes/hugo-theme-stack/layouts/shortcodes/youtube.html b/themes/hugo-theme-stack/layouts/shortcodes/youtube.html
new file mode 100644
index 00000000..2f859315
--- /dev/null
+++ b/themes/hugo-theme-stack/layouts/shortcodes/youtube.html
@@ -0,0 +1,13 @@
+{{- $pc := .Page.Site.Config.Privacy.YouTube -}}
+{{- if not $pc.Disable -}}
+{{- $ytHost := cond $pc.PrivacyEnhanced "www.youtube-nocookie.com" "www.youtube.com" -}}
+{{- $id := .Get "id" | default (.Get 0) -}}
+
+
+
+{{ end -}}
\ No newline at end of file
diff --git a/themes/hugo-theme-stack/netlify.toml b/themes/hugo-theme-stack/netlify.toml
new file mode 100644
index 00000000..b7cd29f2
--- /dev/null
+++ b/themes/hugo-theme-stack/netlify.toml
@@ -0,0 +1,26 @@
+[build]
+ publish = "exampleSite/public"
+
+[build.environment]
+ HUGO_VERSION = "0.124.0"
+ HUGO_THEME = "repo"
+
+[context.production]
+ command = "cd exampleSite && hugo --gc --themesDir ../.. -b ${URL}"
+ [context.production.environment]
+ HUGO_ENV = "production"
+
+[context.branch-deploy]
+ command = "cd exampleSite && hugo --gc --themesDir ../.. -b ${DEPLOY_PRIME_URL}"
+
+[context.deploy-preview]
+ command = "cd exampleSite && hugo --gc --themesDir ../.. -b ${DEPLOY_PRIME_URL}"
+
+[[plugins]]
+ package = "netlify-plugin-hugo-cache-resources"
+
+ [plugins.inputs]
+ # If it should show more verbose logs (optional, default = true)
+ debug = true
+ # Relative path to source directory in case you use Hugo's "--s" option
+ srcdir = "exampleSite"
diff --git a/themes/hugo-theme-stack/theme.toml b/themes/hugo-theme-stack/theme.toml
new file mode 100644
index 00000000..6c5ea620
--- /dev/null
+++ b/themes/hugo-theme-stack/theme.toml
@@ -0,0 +1,27 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name = "Stack"
+license = "GPL-3.0-only"
+licenselink = "https://github.com/CaiJimmy/hugo-theme-stack/blob/master/LICENSE"
+description = "Card-style Hugo theme designed for bloggers"
+homepage = "https://github.com/CaiJimmy/hugo-theme-stack"
+demosite = "https://demo.stack.jimmycai.com"
+
+tags = ["blog", "responsive", "clean", "light", "dark", "personal"]
+
+features = [
+ "disqus",
+ "photoswipe",
+ "opengraph",
+ "widgets",
+ "darkmode",
+ "table of contents",
+ "search",
+]
+
+min_version = "0.123.0"
+
+[author]
+name = "Jimmy Cai"
+homepage = "https://jimmycai.com"
diff --git a/themes/meme b/themes/meme
deleted file mode 160000
index 2f57a2c6..00000000
--- a/themes/meme
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2f57a2c629c7c1bd5f7fd6cf3640db0d449b52d9
diff --git a/yarn.lock b/yarn.lock
index ffac4dfd..fd3184e8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6824 +2,1400 @@
# yarn lockfile v1
-"@types/color-name@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
- integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
-
-"@vue/component-compiler-utils@^3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3"
- integrity sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==
- dependencies:
- consolidate "^0.15.1"
- hash-sum "^1.0.2"
- lru-cache "^4.1.2"
- merge-source-map "^1.1.0"
- postcss "^7.0.14"
- postcss-selector-parser "^6.0.2"
- source-map "~0.6.1"
- vue-template-es2015-compiler "^1.9.0"
- optionalDependencies:
- prettier "^1.18.2"
-
-"@webassemblyjs/ast@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
- integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
- dependencies:
- "@webassemblyjs/helper-module-context" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/wast-parser" "1.9.0"
-
-"@webassemblyjs/floating-point-hex-parser@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
- integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
-
-"@webassemblyjs/helper-api-error@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
- integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
-
-"@webassemblyjs/helper-buffer@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
- integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
-
-"@webassemblyjs/helper-code-frame@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
- integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
- dependencies:
- "@webassemblyjs/wast-printer" "1.9.0"
-
-"@webassemblyjs/helper-fsm@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
- integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
-
-"@webassemblyjs/helper-module-context@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
- integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+"@formatjs/ecma402-abstract@2.3.6":
+ version "2.3.6"
+ resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz"
+ integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==
dependencies:
- "@webassemblyjs/ast" "1.9.0"
-
-"@webassemblyjs/helper-wasm-bytecode@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
- integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+ "@formatjs/fast-memoize" "2.2.7"
+ "@formatjs/intl-localematcher" "0.6.2"
+ decimal.js "^10.4.3"
+ tslib "^2.8.0"
-"@webassemblyjs/helper-wasm-section@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
- integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+"@formatjs/fast-memoize@2.2.7":
+ version "2.2.7"
+ resolved "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz"
+ integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==
dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-buffer" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/wasm-gen" "1.9.0"
+ tslib "^2.8.0"
-"@webassemblyjs/ieee754@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
- integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+"@formatjs/icu-messageformat-parser@2.11.4":
+ version "2.11.4"
+ resolved "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz"
+ integrity sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==
dependencies:
- "@xtuc/ieee754" "^1.2.0"
+ "@formatjs/ecma402-abstract" "2.3.6"
+ "@formatjs/icu-skeleton-parser" "1.8.16"
+ tslib "^2.8.0"
-"@webassemblyjs/leb128@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
- integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+"@formatjs/icu-skeleton-parser@1.8.16":
+ version "1.8.16"
+ resolved "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz"
+ integrity sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==
dependencies:
- "@xtuc/long" "4.2.2"
+ "@formatjs/ecma402-abstract" "2.3.6"
+ tslib "^2.8.0"
-"@webassemblyjs/utf8@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
- integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
-
-"@webassemblyjs/wasm-edit@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
- integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-buffer" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/helper-wasm-section" "1.9.0"
- "@webassemblyjs/wasm-gen" "1.9.0"
- "@webassemblyjs/wasm-opt" "1.9.0"
- "@webassemblyjs/wasm-parser" "1.9.0"
- "@webassemblyjs/wast-printer" "1.9.0"
-
-"@webassemblyjs/wasm-gen@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
- integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+"@formatjs/intl-localematcher@0.6.2":
+ version "0.6.2"
+ resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz"
+ integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==
dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/ieee754" "1.9.0"
- "@webassemblyjs/leb128" "1.9.0"
- "@webassemblyjs/utf8" "1.9.0"
+ tslib "^2.8.0"
-"@webassemblyjs/wasm-opt@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
- integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+"@opentelemetry/api-logs@0.57.2":
+ version "0.57.2"
+ resolved "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz"
+ integrity sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==
dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-buffer" "1.9.0"
- "@webassemblyjs/wasm-gen" "1.9.0"
- "@webassemblyjs/wasm-parser" "1.9.0"
+ "@opentelemetry/api" "^1.3.0"
-"@webassemblyjs/wasm-parser@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
- integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-api-error" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/ieee754" "1.9.0"
- "@webassemblyjs/leb128" "1.9.0"
- "@webassemblyjs/utf8" "1.9.0"
-
-"@webassemblyjs/wast-parser@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
- integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/floating-point-hex-parser" "1.9.0"
- "@webassemblyjs/helper-api-error" "1.9.0"
- "@webassemblyjs/helper-code-frame" "1.9.0"
- "@webassemblyjs/helper-fsm" "1.9.0"
- "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/wast-printer@1.9.0":
+"@opentelemetry/api@^1.1.0", "@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.7.0", "@opentelemetry/api@^1.8", "@opentelemetry/api@^1.9.0", "@opentelemetry/api@>=1.0.0 <1.10.0":
version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
- integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/wast-parser" "1.9.0"
- "@xtuc/long" "4.2.2"
-
-"@xtuc/ieee754@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
- integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
-
-"@xtuc/long@4.2.2":
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
- integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-
-acorn-jsx@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
- dependencies:
- acorn "^3.0.4"
-
-acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
- integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
-
-acorn@^5.5.0:
- version "5.7.4"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
- integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
-
-acorn@^6.4.1:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
- integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
-
-ajv-errors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
- integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
-
-ajv-keywords@^1.0.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
- integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw=
-
-ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
- integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
-
-ajv@^4.7.0:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
- integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5:
- version "6.12.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
- integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ansi-escapes@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
- integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
-
-ansi-gray@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
- integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE=
- dependencies:
- ansi-wrap "0.1.0"
-
-ansi-regex@^0.2.0, ansi-regex@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
- integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
- integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-ansi-regex@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
- integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-regex@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
- integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
-
-ansi-styles@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
- integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
- integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
- dependencies:
- "@types/color-name" "^1.1.1"
- color-convert "^2.0.1"
-
-ansi-wrap@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
- integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
-
-anymatch@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
- dependencies:
- micromatch "^3.1.4"
- normalize-path "^2.1.1"
-
-anymatch@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
- integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-aproba@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
- integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-archive-type@^3.0.0, archive-type@^3.0.1:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-3.2.0.tgz#9cd9c006957ebe95fadad5bd6098942a813737f6"
- integrity sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=
- dependencies:
- file-type "^3.1.0"
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
- integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.0.1, arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
- integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-differ@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
- integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=
-
-array-find-index@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
- integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
-
-array-includes@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
- integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.0"
- is-string "^1.0.5"
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.0, array-uniq@^1.0.1, array-uniq@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
- integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
- integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
- integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
-array.prototype.flat@^1.2.1:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
- integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.0-next.1"
-
-asn1.js@^4.0.0:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
- integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-asn1@~0.2.3:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
- integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
- dependencies:
- safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
- integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-assert@^1.1.1:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
- integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
- dependencies:
- object-assign "^4.1.1"
- util "0.10.3"
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
- integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-async-each-series@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-1.1.0.tgz#f42fd8155d38f21a5b8ea07c28e063ed1700b138"
- integrity sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=
-
-async-each@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
- integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
-
-async@^0.9.0:
- version "0.9.2"
- resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
- integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
-
-async@^1.2.1, async@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
- integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-
-async@^2.1.4:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
- integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
- dependencies:
- lodash "^4.17.14"
+ resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz"
+ integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
+
+"@opentelemetry/context-async-hooks@^1.30.1", "@opentelemetry/context-async-hooks@^1.30.1 || ^2.0.0":
+ version "1.30.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz"
+ integrity sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==
+
+"@opentelemetry/core@^1.1.0", "@opentelemetry/core@^1.26.0", "@opentelemetry/core@^1.30.1", "@opentelemetry/core@^1.30.1 || ^2.0.0", "@opentelemetry/core@^1.8.0", "@opentelemetry/core@1.30.1":
+ version "1.30.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz"
+ integrity sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==
+ dependencies:
+ "@opentelemetry/semantic-conventions" "1.28.0"
+
+"@opentelemetry/instrumentation-amqplib@^0.46.1":
+ version "0.46.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz"
+ integrity sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-connect@0.43.1":
+ version "0.43.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz"
+ integrity sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+ "@types/connect" "3.4.38"
+
+"@opentelemetry/instrumentation-dataloader@0.16.1":
+ version "0.16.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz"
+ integrity sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+
+"@opentelemetry/instrumentation-express@0.47.1":
+ version "0.47.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz"
+ integrity sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-fs@0.19.1":
+ version "0.19.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz"
+ integrity sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+
+"@opentelemetry/instrumentation-generic-pool@0.43.1":
+ version "0.43.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz"
+ integrity sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+
+"@opentelemetry/instrumentation-graphql@0.47.1":
+ version "0.47.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz"
+ integrity sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+
+"@opentelemetry/instrumentation-hapi@0.45.2":
+ version "0.45.2"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz"
+ integrity sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-http@0.57.2":
+ version "0.57.2"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz"
+ integrity sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==
+ dependencies:
+ "@opentelemetry/core" "1.30.1"
+ "@opentelemetry/instrumentation" "0.57.2"
+ "@opentelemetry/semantic-conventions" "1.28.0"
+ forwarded-parse "2.1.2"
+ semver "^7.5.2"
+
+"@opentelemetry/instrumentation-ioredis@0.47.1":
+ version "0.47.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz"
+ integrity sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/redis-common" "^0.36.2"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-kafkajs@0.7.1":
+ version "0.7.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz"
+ integrity sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-knex@0.44.1":
+ version "0.44.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz"
+ integrity sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-koa@0.47.1":
+ version "0.47.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz"
+ integrity sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-lru-memoizer@0.44.1":
+ version "0.44.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz"
+ integrity sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+
+"@opentelemetry/instrumentation-mongodb@0.52.0":
+ version "0.52.0"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz"
+ integrity sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-mongoose@0.46.1":
+ version "0.46.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz"
+ integrity sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-mysql@0.45.1":
+ version "0.45.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz"
+ integrity sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+ "@types/mysql" "2.15.26"
+
+"@opentelemetry/instrumentation-mysql2@0.45.2":
+ version "0.45.2"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz"
+ integrity sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+ "@opentelemetry/sql-common" "^0.40.1"
+
+"@opentelemetry/instrumentation-pg@0.51.1":
+ version "0.51.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz"
+ integrity sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==
+ dependencies:
+ "@opentelemetry/core" "^1.26.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+ "@opentelemetry/sql-common" "^0.40.1"
+ "@types/pg" "8.6.1"
+ "@types/pg-pool" "2.0.6"
+
+"@opentelemetry/instrumentation-redis-4@0.46.1":
+ version "0.46.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz"
+ integrity sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/redis-common" "^0.36.2"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+
+"@opentelemetry/instrumentation-tedious@0.18.1":
+ version "0.18.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz"
+ integrity sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.57.1"
+ "@opentelemetry/semantic-conventions" "^1.27.0"
+ "@types/tedious" "^4.0.14"
+
+"@opentelemetry/instrumentation-undici@0.10.1":
+ version "0.10.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz"
+ integrity sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==
+ dependencies:
+ "@opentelemetry/core" "^1.8.0"
+ "@opentelemetry/instrumentation" "^0.57.1"
+
+"@opentelemetry/instrumentation@^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0", "@opentelemetry/instrumentation@^0.57.1", "@opentelemetry/instrumentation@^0.57.2", "@opentelemetry/instrumentation@>=0.57.1 <1", "@opentelemetry/instrumentation@0.57.2":
+ version "0.57.2"
+ resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz"
+ integrity sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==
+ dependencies:
+ "@opentelemetry/api-logs" "0.57.2"
+ "@types/shimmer" "^1.2.0"
+ import-in-the-middle "^1.8.1"
+ require-in-the-middle "^7.1.1"
+ semver "^7.5.2"
+ shimmer "^1.2.1"
+
+"@opentelemetry/redis-common@^0.36.2":
+ version "0.36.2"
+ resolved "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz"
+ integrity sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==
+
+"@opentelemetry/resources@^1.30.1", "@opentelemetry/resources@^1.30.1 || ^2.0.0", "@opentelemetry/resources@1.30.1":
+ version "1.30.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz"
+ integrity sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==
+ dependencies:
+ "@opentelemetry/core" "1.30.1"
+ "@opentelemetry/semantic-conventions" "1.28.0"
+
+"@opentelemetry/sdk-trace-base@^1.30.1", "@opentelemetry/sdk-trace-base@^1.30.1 || ^2.0.0":
+ version "1.30.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz"
+ integrity sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==
+ dependencies:
+ "@opentelemetry/core" "1.30.1"
+ "@opentelemetry/resources" "1.30.1"
+ "@opentelemetry/semantic-conventions" "1.28.0"
+
+"@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.34.0":
+ version "1.39.0"
+ resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz"
+ integrity sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==
+
+"@opentelemetry/semantic-conventions@1.28.0":
+ version "1.28.0"
+ resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz"
+ integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==
+
+"@opentelemetry/sql-common@^0.40.1":
+ version "0.40.1"
+ resolved "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz"
+ integrity sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==
+ dependencies:
+ "@opentelemetry/core" "^1.1.0"
+
+"@paulirish/trace_engine@0.0.61":
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.61.tgz"
+ integrity sha512-/O08DwmUqIlJjUSPSZbNF8lWnlxaMsIOV6sS+uDKCxBd5i1psAmjEoG3JAqR6+nHD8X+YY474NW7SxUH/K+/kQ==
+ dependencies:
+ legacy-javascript latest
+ third-party-web latest
+
+"@prisma/instrumentation@6.11.1":
+ version "6.11.1"
+ resolved "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz"
+ integrity sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==
+ dependencies:
+ "@opentelemetry/instrumentation" "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0"
+
+"@puppeteer/browsers@2.12.0":
+ version "2.12.0"
+ resolved "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.12.0.tgz"
+ integrity sha512-Xuq42yxcQJ54ti8ZHNzF5snFvtpgXzNToJ1bXUGQRaiO8t+B6UM8sTUJfvV+AJnqtkJU/7hdy6nbKyA12aHtRw==
+ dependencies:
+ debug "^4.4.3"
+ extract-zip "^2.0.1"
+ progress "^2.0.3"
+ proxy-agent "^6.5.0"
+ semver "^7.7.3"
+ tar-fs "^3.1.1"
+ yargs "^17.7.2"
+
+"@sentry/core@9.47.1":
+ version "9.47.1"
+ resolved "https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz"
+ integrity sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==
+
+"@sentry/node-core@9.47.1":
+ version "9.47.1"
+ resolved "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.47.1.tgz"
+ integrity sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==
+ dependencies:
+ "@sentry/core" "9.47.1"
+ "@sentry/opentelemetry" "9.47.1"
+ import-in-the-middle "^1.14.2"
+
+"@sentry/node@^9.28.1":
+ version "9.47.1"
+ resolved "https://registry.npmjs.org/@sentry/node/-/node-9.47.1.tgz"
+ integrity sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==
+ dependencies:
+ "@opentelemetry/api" "^1.9.0"
+ "@opentelemetry/context-async-hooks" "^1.30.1"
+ "@opentelemetry/core" "^1.30.1"
+ "@opentelemetry/instrumentation" "^0.57.2"
+ "@opentelemetry/instrumentation-amqplib" "^0.46.1"
+ "@opentelemetry/instrumentation-connect" "0.43.1"
+ "@opentelemetry/instrumentation-dataloader" "0.16.1"
+ "@opentelemetry/instrumentation-express" "0.47.1"
+ "@opentelemetry/instrumentation-fs" "0.19.1"
+ "@opentelemetry/instrumentation-generic-pool" "0.43.1"
+ "@opentelemetry/instrumentation-graphql" "0.47.1"
+ "@opentelemetry/instrumentation-hapi" "0.45.2"
+ "@opentelemetry/instrumentation-http" "0.57.2"
+ "@opentelemetry/instrumentation-ioredis" "0.47.1"
+ "@opentelemetry/instrumentation-kafkajs" "0.7.1"
+ "@opentelemetry/instrumentation-knex" "0.44.1"
+ "@opentelemetry/instrumentation-koa" "0.47.1"
+ "@opentelemetry/instrumentation-lru-memoizer" "0.44.1"
+ "@opentelemetry/instrumentation-mongodb" "0.52.0"
+ "@opentelemetry/instrumentation-mongoose" "0.46.1"
+ "@opentelemetry/instrumentation-mysql" "0.45.1"
+ "@opentelemetry/instrumentation-mysql2" "0.45.2"
+ "@opentelemetry/instrumentation-pg" "0.51.1"
+ "@opentelemetry/instrumentation-redis-4" "0.46.1"
+ "@opentelemetry/instrumentation-tedious" "0.18.1"
+ "@opentelemetry/instrumentation-undici" "0.10.1"
+ "@opentelemetry/resources" "^1.30.1"
+ "@opentelemetry/sdk-trace-base" "^1.30.1"
+ "@opentelemetry/semantic-conventions" "^1.34.0"
+ "@prisma/instrumentation" "6.11.1"
+ "@sentry/core" "9.47.1"
+ "@sentry/node-core" "9.47.1"
+ "@sentry/opentelemetry" "9.47.1"
+ import-in-the-middle "^1.14.2"
+ minimatch "^9.0.0"
+
+"@sentry/opentelemetry@9.47.1":
+ version "9.47.1"
+ resolved "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.47.1.tgz"
+ integrity sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==
+ dependencies:
+ "@sentry/core" "9.47.1"
+
+"@tootallnate/quickjs-emscripten@^0.23.0":
+ version "0.23.0"
+ resolved "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz"
+ integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
- integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
- integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
-
-babel-code-frame@^6.16.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
- integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-base64-js@^1.0.2:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
- integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
- integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
- dependencies:
- tweetnacl "^0.14.3"
-
-beeper@^1.0.0:
+"@types/color-name@^1.1.1":
version "1.1.1"
- resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
- integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=
-
-big.js@^5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
- integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-
-bin-build@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-2.2.0.tgz#11f8dd61f70ffcfa2bdcaa5b46f5e8fedd4221cc"
- integrity sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=
- dependencies:
- archive-type "^3.0.1"
- decompress "^3.0.0"
- download "^4.1.2"
- exec-series "^1.0.0"
- rimraf "^2.2.6"
- tempfile "^1.0.0"
- url-regex "^3.0.0"
-
-bin-check@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-1.1.0.tgz#df20b2721fe4d9029df370236ee6036ddcd78d0c"
- integrity sha1-3yCych/k2QKd83AjbuYDbdzXjQw=
- dependencies:
- executable "^1.0.0"
- spawn-sync "^1.0.6"
-
-bin-check@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-2.0.0.tgz#86f8e6f4253893df60dc316957f5af02acb05930"
- integrity sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=
- dependencies:
- executable "^1.0.0"
-
-bin-version-check@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-2.1.0.tgz#e4e5df290b9069f7d111324031efc13fdd11a5b0"
- integrity sha1-5OXfKQuQaffRETJAMe/BP90RpbA=
- dependencies:
- bin-version "^1.0.0"
- minimist "^1.1.0"
- semver "^4.0.3"
- semver-truncate "^1.0.0"
-
-bin-version@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-1.0.4.tgz#9eb498ee6fd76f7ab9a7c160436f89579435d78e"
- integrity sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=
- dependencies:
- find-versions "^1.0.0"
-
-bin-wrapper@^2.0.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-2.1.3.tgz#26f8535174ea4df7552fa919c0ac552db8d8e5f7"
- integrity sha1-JvhTUXTqTfdVL6kZwKxVLbjY5fc=
- dependencies:
- bin-check "^1.0.0"
- bin-version-check "^2.1.0"
- download "^3.3.0"
- download-status "^2.0.0"
- globby "^1.0.0"
- is-path-global "^1.0.0"
- lnfs "^1.0.0"
- npm-installed "^1.0.0"
- os-filter-obj "^1.0.0"
-
-bin-wrapper@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-3.0.2.tgz#67d3306262e4b1a5f2f88ee23464f6a655677aeb"
- integrity sha1-Z9MwYmLksaXy+I7iNGT2plVneus=
- dependencies:
- bin-check "^2.0.0"
- bin-version-check "^2.1.0"
- download "^4.0.0"
- each-async "^1.1.1"
- lazy-req "^1.0.0"
- os-filter-obj "^1.0.0"
-
-binary-extensions@^1.0.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
- integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
-
-binary-extensions@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
- integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
-
-bindings@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
- integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
- dependencies:
- file-uri-to-path "1.0.0"
-
-bl@^0.9.0:
- version "0.9.5"
- resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054"
- integrity sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=
- dependencies:
- readable-stream "~1.0.26"
-
-bl@^1.0.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
- integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
- dependencies:
- readable-stream "^2.3.5"
- safe-buffer "^5.1.1"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
- dependencies:
- inherits "~2.0.0"
-
-bluebird@^3.1.1, bluebird@^3.5.5:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
- version "4.11.9"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
- integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
-
-bn.js@^5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0"
- integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==
-
-brace-expansion@^1.0.0, brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-braces@^2.3.1, braces@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-brorand@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
- integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
- integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
- integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
- integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
- integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
- dependencies:
- bn.js "^4.1.0"
- randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"
- integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==
- dependencies:
- bn.js "^5.1.1"
- browserify-rsa "^4.0.1"
- create-hash "^1.2.0"
- create-hmac "^1.1.7"
- elliptic "^6.5.2"
- inherits "^2.0.4"
- parse-asn1 "^5.1.5"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-browserify-zlib@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
- integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
- dependencies:
- pako "~1.0.5"
-
-buffer-alloc-unsafe@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
- integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+ resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz"
+ integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
-buffer-alloc@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
- integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+"@types/connect@3.4.38":
+ version "3.4.38"
+ resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz"
+ integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
dependencies:
- buffer-alloc-unsafe "^1.1.0"
- buffer-fill "^1.0.0"
-
-buffer-crc32@~0.2.3:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
- integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
-
-buffer-fill@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
- integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+ "@types/node" "*"
-buffer-from@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-buffer-to-vinyl@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz#00f15faee3ab7a1dda2cde6d9121bffdd07b2262"
- integrity sha1-APFfruOreh3aLN5tkSG//dB7ImI=
- dependencies:
- file-type "^3.1.0"
- readable-stream "^2.0.2"
- uuid "^2.0.1"
- vinyl "^1.0.0"
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
- integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
-
-buffer@^4.3.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
- integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+"@types/mysql@2.15.26":
+ version "2.15.26"
+ resolved "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz"
+ integrity sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==
dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
+ "@types/node" "*"
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
- integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
-
-cacache@^12.0.2:
- version "12.0.4"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
- integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
- dependencies:
- bluebird "^3.5.5"
- chownr "^1.1.1"
- figgy-pudding "^3.5.1"
- glob "^7.1.4"
- graceful-fs "^4.1.15"
- infer-owner "^1.0.3"
- lru-cache "^5.1.1"
- mississippi "^3.0.0"
- mkdirp "^0.5.1"
- move-concurrently "^1.0.1"
- promise-inflight "^1.0.1"
- rimraf "^2.6.3"
- ssri "^6.0.1"
- unique-filename "^1.1.1"
- y18n "^4.0.0"
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+"@types/node@*":
+ version "25.2.1"
+ resolved "https://registry.npmjs.org/@types/node/-/node-25.2.1.tgz"
+ integrity sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg==
dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-caller-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
- dependencies:
- callsites "^0.2.0"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
- integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+ undici-types "~7.16.0"
-camelcase-keys@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-1.0.0.tgz#bd1a11bf9b31a1ce493493a930de1a0baf4ad7ec"
- integrity sha1-vRoRv5sxoc5JNJOpMN4aC69K1+w=
+"@types/pg-pool@2.0.6":
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz"
+ integrity sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==
dependencies:
- camelcase "^1.0.1"
- map-obj "^1.0.0"
+ "@types/pg" "*"
-camelcase-keys@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
- integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+"@types/pg@*", "@types/pg@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz"
+ integrity sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==
dependencies:
- camelcase "^2.0.0"
- map-obj "^1.0.0"
-
-camelcase@^1.0.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
- integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
-
-camelcase@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
- integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-
-camelcase@^5.0.0, camelcase@^5.3.1:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-capture-stack-trace@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
- integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
- integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+ "@types/node" "*"
+ pg-protocol "*"
+ pg-types "^2.2.0"
-caw@^1.0.1:
+"@types/shimmer@^1.2.0":
version "1.2.0"
- resolved "https://registry.yarnpkg.com/caw/-/caw-1.2.0.tgz#ffb226fe7efc547288dc62ee3e97073c212d1034"
- integrity sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=
- dependencies:
- get-proxy "^1.0.1"
- is-obj "^1.0.0"
- object-assign "^3.0.0"
- tunnel-agent "^0.4.0"
-
-caw@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95"
- integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==
- dependencies:
- get-proxy "^2.0.0"
- isurl "^1.0.0-alpha5"
- tunnel-agent "^0.6.0"
- url-to-options "^1.0.1"
-
-chalk@2.4.2, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
- integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=
- dependencies:
- ansi-styles "^1.1.0"
- escape-string-regexp "^1.0.0"
- has-ansi "^0.1.0"
- strip-ansi "^0.3.0"
- supports-color "^0.2.0"
-
-chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chokidar@^2.1.8:
- version "2.1.8"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
- integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.1"
- braces "^2.3.2"
- glob-parent "^3.1.0"
- inherits "^2.0.3"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- normalize-path "^3.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.2.1"
- upath "^1.1.1"
- optionalDependencies:
- fsevents "^1.2.7"
-
-chokidar@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
- integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
- dependencies:
- anymatch "~3.1.1"
- braces "~3.0.2"
- glob-parent "~5.1.0"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.4.0"
- optionalDependencies:
- fsevents "~2.1.2"
-
-chownr@^1.1.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-
-chrome-trace-event@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
- integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
- dependencies:
- tslib "^1.9.0"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-circular-json@^0.3.1:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
- integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-cli-cursor@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
- integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
- dependencies:
- restore-cursor "^1.0.1"
-
-cli-width@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
- integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
-
-cliui@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
- integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
- dependencies:
- string-width "^3.1.0"
- strip-ansi "^5.2.0"
- wrap-ansi "^5.1.0"
-
-cliui@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
- integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.0"
- wrap-ansi "^6.2.0"
-
-clone-stats@^0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
- integrity sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=
-
-clone@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
- integrity sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=
-
-clone@^1.0.0, clone@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
- integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-
-co@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
- integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
- integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
- integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.0"
-
-color-convert@^1.8.2, color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-color-name@^1.0.0, color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-color-string@^1.4.0:
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
- integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
- dependencies:
- color-name "^1.0.0"
- simple-swizzle "^0.2.2"
-
-color-support@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
- integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
-
-color@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/color/-/color-1.0.3.tgz#e48e832d85f14ef694fb468811c2d5cfe729b55d"
- integrity sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=
- dependencies:
- color-convert "^1.8.2"
- color-string "^1.4.0"
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@2.x.x, commander@^2.2.0, commander@^2.20.0, commander@^2.7.1, commander@~2.20.3:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commander@~2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
- integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
- integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-
-component-emitter@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
- integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
- integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-config-chain@^1.1.11:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
- integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
- dependencies:
- ini "^1.3.4"
- proto-list "~1.2.1"
-
-console-browserify@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
- integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
-
-console-stream@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
- integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=
-
-consolidate@^0.15.1:
- version "0.15.1"
- resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
- integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
- dependencies:
- bluebird "^3.1.1"
-
-constants-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
- integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-
-contains-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
- integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
-
-convert-source-map@^1.1.1:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
- integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
- dependencies:
- safe-buffer "~5.1.1"
-
-copy-concurrently@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
- integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
- dependencies:
- aproba "^1.1.1"
- fs-write-stream-atomic "^1.0.8"
- iferr "^0.1.5"
- mkdirp "^0.5.1"
- rimraf "^2.5.4"
- run-queue "^1.0.0"
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
- integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-core-js@^2.5.7:
- version "2.6.11"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
- integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-create-ecdh@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
- integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.0.0"
-
-create-error-class@^3.0.0, create-error-class@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
- integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
- dependencies:
- capture-stack-trace "^1.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
- integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- md5.js "^1.3.4"
- ripemd160 "^2.0.1"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
- integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-spawn@6.0.5, cross-spawn@^6.0.0:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-crypto-browserify@^3.11.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-css-loader@^3.5.3:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf"
- integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==
- dependencies:
- camelcase "^5.3.1"
- cssesc "^3.0.0"
- icss-utils "^4.1.1"
- loader-utils "^1.2.3"
- normalize-path "^3.0.0"
- postcss "^7.0.27"
- postcss-modules-extract-imports "^2.0.0"
- postcss-modules-local-by-default "^3.0.2"
- postcss-modules-scope "^2.2.0"
- postcss-modules-values "^3.0.0"
- postcss-value-parser "^4.0.3"
- schema-utils "^2.6.6"
- semver "^6.3.0"
-
-cssesc@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
- integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-
-currently-unhandled@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
- integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
- dependencies:
- array-find-index "^1.0.1"
-
-cyclist@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
- integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-
-d@1, d@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
- integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
- dependencies:
- es5-ext "^0.10.50"
- type "^1.0.1"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
- dependencies:
- assert-plus "^1.0.0"
-
-dateformat@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
- integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=
-
-de-indent@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
- integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
-
-debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-decamelize@^1.1.2, decamelize@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
- integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
- integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-decompress-tar@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-2.0.2.tgz#c37848e6cd3e053f0a982cb7c225f2a528c37908"
- integrity sha1-w3hI5s0+BT8KmCy3wiXypSjDeQg=
- dependencies:
- is-tar "^1.0.0"
- strip-dirs "^0.1.1"
- tar-stream "^0.4.5"
- through2 "^0.6.1"
- vinyl "^0.4.3"
-
-decompress-tar@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-3.1.0.tgz#217c789f9b94450efaadc5c5e537978fc333c466"
- integrity sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=
- dependencies:
- is-tar "^1.0.0"
- object-assign "^2.0.0"
- strip-dirs "^1.0.0"
- tar-stream "^1.1.1"
- through2 "^0.6.1"
- vinyl "^0.4.3"
-
-decompress-tarbz2@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-2.0.2.tgz#7b0652046824618ce691f748314133ab705aed6d"
- integrity sha1-ewZSBGgkYYzmkfdIMUEzq3Ba7W0=
- dependencies:
- is-bzip2 "^1.0.0"
- seek-bzip "^1.0.3"
- strip-dirs "^0.1.1"
- tar-stream "^0.4.5"
- through2 "^0.6.1"
- vinyl "^0.4.3"
-
-decompress-tarbz2@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz#8b23935681355f9f189d87256a0f8bdd96d9666d"
- integrity sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=
- dependencies:
- is-bzip2 "^1.0.0"
- object-assign "^2.0.0"
- seek-bzip "^1.0.3"
- strip-dirs "^1.0.0"
- tar-stream "^1.1.1"
- through2 "^0.6.1"
- vinyl "^0.4.3"
-
-decompress-targz@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-2.1.0.tgz#b93e74db7e7a8a0a30cf019f031b460f2707734a"
- integrity sha1-uT502356igowzwGfAxtGDycHc0o=
- dependencies:
- is-gzip "^1.0.0"
- strip-dirs "^1.0.0"
- tar-stream "^1.1.1"
- through2 "^0.6.1"
- vinyl "^0.4.3"
-
-decompress-targz@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-3.1.0.tgz#b2c13df98166268991b715d6447f642e9696f5a0"
- integrity sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=
- dependencies:
- is-gzip "^1.0.0"
- object-assign "^2.0.0"
- strip-dirs "^1.0.0"
- tar-stream "^1.1.1"
- through2 "^0.6.1"
- vinyl "^0.4.3"
-
-decompress-unzip@^2.0.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-2.1.2.tgz#6500ff04c2a992dea922996b480e60bc1455e452"
- integrity sha1-ZQD/BMKpkt6pIplrSA5gvBRV5FI=
- dependencies:
- is-zip "^1.0.0"
- strip-dirs "^1.0.0"
- through2 "^0.6.1"
- vinyl "^0.4.3"
- yauzl "^2.2.1"
-
-decompress-unzip@^3.0.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-3.4.0.tgz#61475b4152066bbe3fee12f9d629d15fe6478eeb"
- integrity sha1-YUdbQVIGa74/7hL51inRX+ZHjus=
- dependencies:
- is-zip "^1.0.0"
- read-all-stream "^3.0.0"
- stat-mode "^0.2.0"
- strip-dirs "^1.0.0"
- through2 "^2.0.0"
- vinyl "^1.0.0"
- yauzl "^2.2.1"
-
-decompress@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/decompress/-/decompress-3.0.0.tgz#af1dd50d06e3bfc432461d37de11b38c0d991bed"
- integrity sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=
- dependencies:
- buffer-to-vinyl "^1.0.0"
- concat-stream "^1.4.6"
- decompress-tar "^3.0.0"
- decompress-tarbz2 "^3.0.0"
- decompress-targz "^3.0.0"
- decompress-unzip "^3.0.0"
- stream-combiner2 "^1.1.1"
- vinyl-assign "^1.0.1"
- vinyl-fs "^2.2.0"
-
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-deep-extend@~0.2.5:
- version "0.2.11"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.2.11.tgz#7a16ba69729132340506170494bc83f7076fe08f"
- integrity sha1-eha6aXKRMjQFBhcElLyD9wdv4I8=
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
- integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-
-defaults@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
- integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
- dependencies:
- clone "^1.0.2"
-
-define-properties@^1.1.2, define-properties@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
- integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
- dependencies:
- object-keys "^1.0.12"
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
- dependencies:
- is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
- dependencies:
- is-descriptor "^1.0.2"
- isobject "^3.0.1"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-des.js@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
- integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-detect-file@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
- integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
-
-diffie-hellman@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
- integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-doctrine@1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
- integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
- dependencies:
- esutils "^2.0.2"
- isarray "^1.0.0"
-
-doctrine@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
- integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
- dependencies:
- esutils "^2.0.2"
-
-domain-browser@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
- integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
-
-download-status@^2.0.0, download-status@^2.0.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/download-status/-/download-status-2.2.1.tgz#28f3c5bcdb00d74ab00602f50888aa66b77ccaf9"
- integrity sha1-KPPFvNsA10qwBgL1CIiqZrd8yvk=
- dependencies:
- chalk "^0.5.1"
- lpad-align "^1.0.0"
- object-assign "^2.0.0"
- progress "^1.1.8"
-
-download@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/download/-/download-3.3.0.tgz#2a280dc5941709d6af02c21f97462c568921336c"
- integrity sha1-KigNxZQXCdavAsIfl0YsVokhM2w=
- dependencies:
- concat-stream "^1.4.6"
- decompress-tar "^2.0.1"
- decompress-tarbz2 "^2.0.1"
- decompress-targz "^2.0.1"
- decompress-unzip "^2.0.0"
- download-status "^2.0.1"
- each-async "^1.0.0"
- get-stdin "^3.0.0"
- gulp-rename "^1.2.0"
- meow "^2.0.0"
- rc "^0.5.1"
- request "^2.34.0"
- stream-combiner "^0.2.1"
- through2 "^0.6.1"
- url-regex "^2.0.2"
- vinyl "^0.4.3"
- vinyl-fs "^0.3.7"
- ware "^1.0.1"
-
-download@^4.0.0, download@^4.1.2:
- version "4.4.3"
- resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac"
- integrity sha1-qlX9rTktldS2jowr4D4MKqIbqaw=
- dependencies:
- caw "^1.0.1"
- concat-stream "^1.4.7"
- each-async "^1.0.0"
- filenamify "^1.0.1"
- got "^5.0.0"
- gulp-decompress "^1.2.0"
- gulp-rename "^1.2.0"
- is-url "^1.2.0"
- object-assign "^4.0.1"
- read-all-stream "^3.0.0"
- readable-stream "^2.0.2"
- stream-combiner2 "^1.1.1"
- vinyl "^1.0.0"
- vinyl-fs "^2.2.0"
- ware "^1.2.0"
-
-duplexer2@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
- integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=
- dependencies:
- readable-stream "~1.1.9"
-
-duplexer2@^0.1.4, duplexer2@~0.1.0:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
- integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=
- dependencies:
- readable-stream "^2.0.2"
-
-duplexer3@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
- integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
-
-duplexer@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
- integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
-
-duplexify@^3.2.0, duplexify@^3.4.2, duplexify@^3.6.0:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
- integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
- dependencies:
- end-of-stream "^1.0.0"
- inherits "^2.0.1"
- readable-stream "^2.0.0"
- stream-shift "^1.0.0"
-
-each-async@^1.0.0, each-async@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473"
- integrity sha1-3uUim98KtrogEqOV4bhpq/iBNHM=
- dependencies:
- onetime "^1.0.0"
- set-immediate-shim "^1.0.0"
-
-ecc-jsbn@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
- integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
- dependencies:
- jsbn "~0.1.0"
- safer-buffer "^2.1.0"
-
-elliptic@^6.0.0, elliptic@^6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
- integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
- dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.0"
-
-emoji-regex@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
- integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
- integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-
-emojis-list@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
- integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-enhanced-resolve@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
- integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.4.0"
- tapable "^1.0.0"
-
-enhanced-resolve@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
- integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.5.0"
- tapable "^1.0.0"
-
-errno@^0.1.3, errno@~0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
- integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
- dependencies:
- prr "~1.0.1"
-
-error-ex@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
- dependencies:
- is-arrayish "^0.2.1"
-
-es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
- version "1.17.5"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
- integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
- dependencies:
- es-to-primitive "^1.2.1"
- function-bind "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.1"
- is-callable "^1.1.5"
- is-regex "^1.0.5"
- object-inspect "^1.7.0"
- object-keys "^1.1.1"
- object.assign "^4.1.0"
- string.prototype.trimleft "^2.1.1"
- string.prototype.trimright "^2.1.1"
-
-es-to-primitive@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
- integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
- dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
-
-es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14:
- version "0.10.53"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
- integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
- dependencies:
- es6-iterator "~2.0.3"
- es6-symbol "~3.1.3"
- next-tick "~1.0.0"
-
-es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
- integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
- dependencies:
- d "1"
- es5-ext "^0.10.35"
- es6-symbol "^3.1.1"
-
-es6-map@^0.1.3:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
- integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-set "~0.1.5"
- es6-symbol "~3.1.1"
- event-emitter "~0.3.5"
-
-es6-set@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
- integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-symbol "3.1.1"
- event-emitter "~0.3.5"
-
-es6-symbol@3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
- integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
- integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
- dependencies:
- d "^1.0.1"
- ext "^1.1.2"
-
-es6-weak-map@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
- integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
- dependencies:
- d "1"
- es5-ext "^0.10.46"
- es6-iterator "^2.0.3"
- es6-symbol "^3.1.1"
-
-escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-config-airbnb-base@^11.2.0:
- version "11.3.2"
- resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a"
- integrity sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==
- dependencies:
- eslint-restricted-globals "^0.1.1"
-
-eslint-import-resolver-node@^0.3.2:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
- integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
- dependencies:
- debug "^2.6.9"
- resolve "^1.13.1"
-
-eslint-module-utils@^2.4.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
- integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
- dependencies:
- debug "^2.6.9"
- pkg-dir "^2.0.0"
-
-eslint-plugin-import@^2.3.0:
- version "2.20.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
- integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
- dependencies:
- array-includes "^3.0.3"
- array.prototype.flat "^1.2.1"
- contains-path "^0.1.0"
- debug "^2.6.9"
- doctrine "1.5.0"
- eslint-import-resolver-node "^0.3.2"
- eslint-module-utils "^2.4.1"
- has "^1.0.3"
- minimatch "^3.0.4"
- object.values "^1.1.0"
- read-pkg-up "^2.0.0"
- resolve "^1.12.0"
-
-eslint-restricted-globals@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
- integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=
-
-eslint-scope@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
- integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint@^3.19.0:
- version "3.19.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
- integrity sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=
- dependencies:
- babel-code-frame "^6.16.0"
- chalk "^1.1.3"
- concat-stream "^1.5.2"
- debug "^2.1.1"
- doctrine "^2.0.0"
- escope "^3.6.0"
- espree "^3.4.0"
- esquery "^1.0.0"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- file-entry-cache "^2.0.0"
- glob "^7.0.3"
- globals "^9.14.0"
- ignore "^3.2.0"
- imurmurhash "^0.1.4"
- inquirer "^0.12.0"
- is-my-json-valid "^2.10.0"
- is-resolvable "^1.0.0"
- js-yaml "^3.5.1"
- json-stable-stringify "^1.0.0"
- levn "^0.3.0"
- lodash "^4.0.0"
- mkdirp "^0.5.0"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.1"
- pluralize "^1.2.1"
- progress "^1.1.8"
- require-uncached "^1.0.2"
- shelljs "^0.7.5"
- strip-bom "^3.0.0"
- strip-json-comments "~2.0.1"
- table "^3.7.8"
- text-table "~0.2.0"
- user-home "^2.0.0"
-
-espree@^3.4.0:
- version "3.5.4"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
- integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
- dependencies:
- acorn "^5.5.0"
- acorn-jsx "^3.0.0"
-
-esprima@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-esquery@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
- integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
- dependencies:
- estraverse "^5.1.0"
-
-esrecurse@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
- integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
- dependencies:
- estraverse "^4.1.0"
-
-estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
- integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
-estraverse@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
- integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
-
-esutils@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
- integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-
-event-emitter@~0.3.5:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
- integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-events@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
- integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-exec-series@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/exec-series/-/exec-series-1.0.3.tgz#6d257a9beac482a872c7783bc8615839fc77143a"
- integrity sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=
- dependencies:
- async-each-series "^1.1.0"
- object-assign "^4.1.0"
-
-execa@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^4.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-executable@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/executable/-/executable-1.1.0.tgz#877980e9112f3391066da37265de7ad8434ab4d9"
- integrity sha1-h3mA6REvM5EGbaNyZd562ENKtNk=
- dependencies:
- meow "^3.1.0"
-
-exit-hook@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
- integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
- dependencies:
- fill-range "^2.1.0"
-
-expand-tilde@^2.0.0, expand-tilde@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
- integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
- dependencies:
- homedir-polyfill "^1.0.1"
-
-ext@^1.1.2:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
- integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
- dependencies:
- type "^2.0.0"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extend@^3.0.0, extend@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
- dependencies:
- is-extglob "^1.0.0"
-
-extglob@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
- integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
- integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-
-fancy-log@^1.1.0:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
- integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
- dependencies:
- ansi-gray "^0.1.1"
- color-support "^1.1.3"
- parse-node-version "^1.0.0"
- time-stamp "^1.0.0"
-
-fast-deep-equal@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
- integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
-
-fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-fast-levenshtein@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
- integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
-
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
- dependencies:
- pend "~1.2.0"
-
-figgy-pudding@^3.5.1:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
- integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
-
-figures@^1.3.5:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
- integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
- dependencies:
- escape-string-regexp "^1.0.5"
- object-assign "^4.1.0"
-
-file-entry-cache@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
- integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
- dependencies:
- flat-cache "^1.2.1"
- object-assign "^4.0.1"
-
-file-type@^3.1.0:
- version "3.9.0"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
- integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
-
-file-uri-to-path@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
- integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
-
-filename-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
- integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
-
-filename-reserved-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4"
- integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=
-
-filenamify@^1.0.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5"
- integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=
- dependencies:
- filename-reserved-regex "^1.0.0"
- strip-outer "^1.0.0"
- trim-repeated "^1.0.0"
-
-fill-range@^2.1.0:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
- integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^3.0.0"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-find-cache-dir@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
- integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
- dependencies:
- commondir "^1.0.1"
- make-dir "^2.0.0"
- pkg-dir "^3.0.0"
-
-find-index@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
- integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=
-
-find-up@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
- integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
- dependencies:
- path-exists "^2.0.0"
- pinkie-promise "^2.0.0"
-
-find-up@^2.0.0, find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-find-up@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
- dependencies:
- locate-path "^5.0.0"
- path-exists "^4.0.0"
-
-find-versions@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62"
- integrity sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=
- dependencies:
- array-uniq "^1.0.0"
- get-stdin "^4.0.1"
- meow "^3.5.0"
- semver-regex "^1.0.0"
-
-findup-sync@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
- integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
- dependencies:
- detect-file "^1.0.0"
- is-glob "^4.0.0"
- micromatch "^3.0.4"
- resolve-dir "^1.0.1"
-
-first-chunk-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
- integrity sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=
-
-flat-cache@^1.2.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
- integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
- dependencies:
- circular-json "^0.3.1"
- graceful-fs "^4.1.2"
- rimraf "~2.6.2"
- write "^0.2.1"
-
-flush-write-stream@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
- integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.3.6"
-
-for-in@^1.0.1, for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
- integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
- dependencies:
- for-in "^1.0.1"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
- integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
-
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
- dependencies:
- map-cache "^0.2.2"
-
-from2@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
- integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.0.0"
-
-fs-constants@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
- integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-
-fs-write-stream-atomic@^1.0.8:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
- integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
- dependencies:
- graceful-fs "^4.1.2"
- iferr "^0.1.5"
- imurmurhash "^0.1.4"
- readable-stream "1 || 2"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@^1.2.7:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
- integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
- dependencies:
- bindings "^1.5.0"
- nan "^2.12.1"
-
-fsevents@~2.1.2:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
- integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
-
-fstream@^1.0.12:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
- integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-gaze@^0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
- integrity sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=
- dependencies:
- globule "~0.1.0"
-
-generate-function@^2.0.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
- integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
- dependencies:
- is-property "^1.0.2"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
- dependencies:
- is-property "^1.0.0"
-
-get-caller-file@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-proxy@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-1.1.0.tgz#894854491bc591b0f147d7ae570f5c678b7256eb"
- integrity sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=
- dependencies:
- rc "^1.1.2"
-
-get-proxy@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93"
- integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==
- dependencies:
- npm-conf "^1.1.0"
-
-get-stdin@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-3.0.2.tgz#c1ced24b9039b38ded85bdf161e57713b6dd4abe"
- integrity sha1-wc7SS5A5s43thb3xYeV3E7bdSr4=
-
-get-stdin@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
- integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
- integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
-
-get-stream@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
- dependencies:
- pump "^3.0.0"
-
-get-value@^2.0.3, get-value@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
- integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
- dependencies:
- assert-plus "^1.0.0"
-
-glob-all@^3.0.3:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.2.1.tgz#082ca81afd2247cbd3ed2149bb2630f4dc877d95"
- integrity sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==
- dependencies:
- glob "^7.1.2"
- yargs "^15.3.1"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
- dependencies:
- is-glob "^2.0.0"
-
-glob-parent@^3.0.0, glob-parent@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
- integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
- dependencies:
- is-glob "^3.1.0"
- path-dirname "^1.0.0"
-
-glob-parent@~5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
- integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
- dependencies:
- is-glob "^4.0.1"
-
-glob-stream@^3.1.5:
- version "3.1.18"
- resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
- integrity sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=
- dependencies:
- glob "^4.3.1"
- glob2base "^0.0.12"
- minimatch "^2.0.1"
- ordered-read-streams "^0.1.0"
- through2 "^0.6.1"
- unique-stream "^1.0.0"
-
-glob-stream@^5.3.2:
- version "5.3.5"
- resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22"
- integrity sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=
- dependencies:
- extend "^3.0.0"
- glob "^5.0.3"
- glob-parent "^3.0.0"
- micromatch "^2.3.7"
- ordered-read-streams "^0.3.0"
- through2 "^0.6.0"
- to-absolute-glob "^0.1.1"
- unique-stream "^2.0.2"
-
-glob-watcher@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
- integrity sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=
- dependencies:
- gaze "^0.5.1"
-
-glob2base@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
- integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=
- dependencies:
- find-index "^0.1.1"
-
-glob@^4.3.1, glob@^4.4.0:
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
- integrity sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "^2.0.1"
- once "^1.3.0"
-
-glob@^5.0.3:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@~3.1.21:
- version "3.1.21"
- resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
- integrity sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=
- dependencies:
- graceful-fs "~1.2.0"
- inherits "1"
- minimatch "~0.2.11"
-
-global-modules@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
- integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
- dependencies:
- global-prefix "^3.0.0"
-
-global-modules@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
- integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
- dependencies:
- global-prefix "^1.0.1"
- is-windows "^1.0.1"
- resolve-dir "^1.0.0"
-
-global-prefix@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
- integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
- dependencies:
- expand-tilde "^2.0.2"
- homedir-polyfill "^1.0.1"
- ini "^1.3.4"
- is-windows "^1.0.1"
- which "^1.2.14"
-
-global-prefix@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
- integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
- dependencies:
- ini "^1.3.5"
- kind-of "^6.0.2"
- which "^1.3.1"
-
-globals@^9.14.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
- integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
-
-globby@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-1.2.0.tgz#c7c97ad1cc6f8594811da1eb82906a852ba47da4"
- integrity sha1-x8l60cxvhZSBHaHrgpBqhSukfaQ=
- dependencies:
- array-union "^1.0.1"
- async "^0.9.0"
- glob "^4.4.0"
- object-assign "^2.0.0"
-
-globule@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
- integrity sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=
- dependencies:
- glob "~3.1.21"
- lodash "~1.0.1"
- minimatch "~0.2.11"
-
-glogg@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f"
- integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==
- dependencies:
- sparkles "^1.0.0"
-
-got@^5.0.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
- integrity sha1-X4FjWmHkplifGAVp6k44FoClHzU=
- dependencies:
- create-error-class "^3.0.1"
- duplexer2 "^0.1.4"
- is-redirect "^1.0.0"
- is-retry-allowed "^1.0.0"
- is-stream "^1.0.0"
- lowercase-keys "^1.0.0"
- node-status-codes "^1.0.0"
- object-assign "^4.0.1"
- parse-json "^2.1.0"
- pinkie-promise "^2.0.0"
- read-all-stream "^3.0.0"
- readable-stream "^2.0.5"
- timed-out "^3.0.0"
- unzip-response "^1.0.2"
- url-parse-lax "^1.0.0"
-
-got@^6.7.1:
- version "6.7.1"
- resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
- integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
- dependencies:
- create-error-class "^3.0.0"
- duplexer3 "^0.1.4"
- get-stream "^3.0.0"
- is-redirect "^1.0.0"
- is-retry-allowed "^1.0.0"
- is-stream "^1.0.0"
- lowercase-keys "^1.0.0"
- safe-buffer "^5.0.1"
- timed-out "^4.0.0"
- unzip-response "^2.0.1"
- url-parse-lax "^1.0.0"
-
-graceful-fs@^3.0.0:
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.12.tgz#0034947ce9ed695ec8ab0b854bc919e82b1ffaef"
- integrity sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==
- dependencies:
- natives "^1.1.3"
-
-graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
- integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
-
-graceful-fs@~1.2.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
- integrity sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=
-
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
- integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
-
-gulp-decompress@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/gulp-decompress/-/gulp-decompress-1.2.0.tgz#8eeb65a5e015f8ed8532cafe28454960626f0dc7"
- integrity sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=
- dependencies:
- archive-type "^3.0.0"
- decompress "^3.0.0"
- gulp-util "^3.0.1"
- readable-stream "^2.0.2"
-
-gulp-rename@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd"
- integrity sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==
-
-gulp-sourcemaps@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c"
- integrity sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=
- dependencies:
- convert-source-map "^1.1.1"
- graceful-fs "^4.1.2"
- strip-bom "^2.0.0"
- through2 "^2.0.0"
- vinyl "^1.0.0"
-
-gulp-util@^3.0.1:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
- integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08=
- dependencies:
- array-differ "^1.0.0"
- array-uniq "^1.0.2"
- beeper "^1.0.0"
- chalk "^1.0.0"
- dateformat "^2.0.0"
- fancy-log "^1.1.0"
- gulplog "^1.0.0"
- has-gulplog "^0.1.0"
- lodash._reescape "^3.0.0"
- lodash._reevaluate "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.template "^3.0.0"
- minimist "^1.1.0"
- multipipe "^0.1.2"
- object-assign "^3.0.0"
- replace-ext "0.0.1"
- through2 "^2.0.0"
- vinyl "^0.5.0"
-
-gulplog@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
- integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U=
- dependencies:
- glogg "^1.0.0"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
- integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.3:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
- dependencies:
- ajv "^6.5.5"
- har-schema "^2.0.0"
-
-has-ansi@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
- integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=
- dependencies:
- ansi-regex "^0.2.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-gulplog@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
- integrity sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=
- dependencies:
- sparkles "^1.0.0"
-
-has-symbol-support-x@^1.4.1:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
- integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
-
-has-symbols@^1.0.0, has-symbols@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
- integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
-
-has-to-string-tag-x@^1.2.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
- integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
- dependencies:
- has-symbol-support-x "^1.4.1"
-
-has-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
- integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-hash-base@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
- integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
- dependencies:
- inherits "^2.0.4"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-hash-files@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/hash-files/-/hash-files-1.1.1.tgz#5f89c64ef21ece69c8261254b7659bd40e91d8de"
- integrity sha1-X4nGTvIezmnIJhJUt2Wb1A6R2N4=
- dependencies:
- async "^1.5.2"
- glob-all "^3.0.3"
- opter "^1.1.0"
- read-files "^0.1.0"
- underscore "^1.8.3"
-
-hash-sum@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
- integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
- integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.1"
-
-he@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
- integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
-hmac-drbg@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-homedir-polyfill@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
- integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
- dependencies:
- parse-passwd "^1.0.0"
-
-hosted-git-info@^2.1.4:
- version "2.8.8"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
- integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-https-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
- integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-
-icss-utils@^4.0.0, icss-utils@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
- integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
- dependencies:
- postcss "^7.0.14"
-
-ieee754@^1.1.4:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
- integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
-
-iferr@^0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
- integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
-
-ignore@^3.2.0:
- version "3.3.10"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
- integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
-
-image-optimizer@^0.4.0-pre2:
- version "0.4.0-pre2"
- resolved "https://registry.yarnpkg.com/image-optimizer/-/image-optimizer-0.4.0-pre2.tgz#3db81238e170aae7479c03c2ddc3e4cc129f359f"
- integrity sha1-PbgSOOFwqudHnAPC3cPkzBKfNZ8=
- dependencies:
- async "^1.2.1"
- tempfile "^1.1.1"
- optionalDependencies:
- jpegoptim-bin "^2.0.1"
- mozjpeg "^4.0.1"
- optipng-bin "^2.0.4"
- pngquant-bin "^3.0.0"
-
-imagemin-log@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/imagemin-log/-/imagemin-log-2.0.0.tgz#007b841b204887444214c685b717398b9ce1fe92"
- integrity sha1-AHuEGyBIh0RCFMaFtxc5i5zh/pI=
- dependencies:
- figures "^1.3.5"
- squeak "^1.0.0"
-
-img-loader@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/img-loader/-/img-loader-3.0.1.tgz#c279691c0a9e6b94fa7d8318d2a6596d98bcee78"
- integrity sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==
- dependencies:
- loader-utils "^1.1.0"
-
-import-local@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
- integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
- dependencies:
- pkg-dir "^3.0.0"
- resolve-cwd "^2.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-
-indent-string@^1.1.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b"
- integrity sha1-25m8xYPrarux5I3LsZmamGBBy2s=
- dependencies:
- get-stdin "^4.0.1"
- minimist "^1.1.0"
- repeating "^1.1.0"
-
-indent-string@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
- integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
- dependencies:
- repeating "^2.0.0"
-
-indexes-of@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
- integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
-
-infer-owner@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
- integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
- integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
- integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
-
-inherits@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
- integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-
-inquirer@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
- integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=
- dependencies:
- ansi-escapes "^1.1.0"
- ansi-regex "^2.0.0"
- chalk "^1.0.0"
- cli-cursor "^1.0.1"
- cli-width "^2.0.0"
- figures "^1.3.5"
- lodash "^4.3.0"
- readline2 "^1.0.1"
- run-async "^0.1.0"
- rx-lite "^3.1.2"
- string-width "^1.0.1"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
-interpret@1.2.0, interpret@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
- integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
-
-invert-kv@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
- integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
-
-ip-regex@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
- integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=
-
-is-absolute@^0.1.4, is-absolute@^0.1.5:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f"
- integrity sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=
- dependencies:
- is-relative "^0.1.0"
-
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
- integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
- dependencies:
- kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-
-is-arrayish@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
- integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
- dependencies:
- binary-extensions "^1.0.0"
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-bzip2@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc"
- integrity sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=
-
-is-callable@^1.1.4, is-callable@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
- integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
-
-is-data-descriptor@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
- integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
- dependencies:
- kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-date-object@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
- integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
-
-is-descriptor@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
- dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
- dependencies:
- is-accessor-descriptor "^1.0.0"
- is-data-descriptor "^1.0.0"
- kind-of "^6.0.2"
-
-is-dotfile@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
- integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
- integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
- dependencies:
- is-plain-object "^2.0.4"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
- integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-finite@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
- integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
- dependencies:
- is-extglob "^1.0.0"
-
-is-glob@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
- integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
- dependencies:
- is-extglob "^2.1.0"
-
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-gzip@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
- integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=
-
-is-integer@^1.0.3:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c"
- integrity sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=
- dependencies:
- is-finite "^1.0.0"
-
-is-my-ip-valid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
- integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==
-
-is-my-json-valid@^2.10.0:
- version "2.20.0"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a"
- integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- is-my-ip-valid "^1.0.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
-is-natural-number@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-2.1.1.tgz#7d4c5728377ef386c3e194a9911bf57c6dc335e7"
- integrity sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=
-
-is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
- integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
- integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-
-is-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
- integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
-
-is-path-global@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-path-global/-/is-path-global-1.0.2.tgz#9b36621f4f83fc1cd886d071db84326555587c83"
- integrity sha1-mzZiH0+D/BzYhtBx24QyZVVYfIM=
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
- integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
- dependencies:
- path-is-inside "^1.0.1"
-
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
- integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
- integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-
-is-property@^1.0.0, is-property@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
- integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
-
-is-redirect@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
- integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
-
-is-regex@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
- integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
- dependencies:
- has "^1.0.3"
-
-is-relative@^0.1.0:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82"
- integrity sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=
-
-is-resolvable@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
- integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
-
-is-retry-allowed@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
- integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
-
-is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-
-is-string@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
- integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
-
-is-symbol@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
- integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
- dependencies:
- has-symbols "^1.0.1"
-
-is-tar@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d"
- integrity sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
- integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-is-url@^1.2.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
- integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
-
-is-utf8@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
- integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-
-is-valid-glob@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe"
- integrity sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=
-
-is-windows@^1.0.1, is-windows@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
- integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
- integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
-
-is-zip@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325"
- integrity sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
- integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
- integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-isurl@^1.0.0-alpha5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
- integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
- dependencies:
- has-to-string-tag-x "^1.2.0"
- is-object "^1.0.1"
-
-jpegoptim-bin@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/jpegoptim-bin/-/jpegoptim-bin-2.0.1.tgz#dc06f646159bb86e62031a403d49afa077563e16"
- integrity sha1-3Ab2RhWbuG5iAxpAPUmvoHdWPhY=
- dependencies:
- bin-build "^2.0.0"
- bin-wrapper "^2.0.1"
- imagemin-log "^2.0.0"
-
-js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
- integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-
-js-yaml@3.x.x, js-yaml@^3.5.1:
- version "3.13.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
- integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
- integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-json-parse-better-errors@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
- integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
-json-stable-stringify-without-jsonify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
- integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
-
-json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-json5@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
- integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
- dependencies:
- minimist "^1.2.0"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
- integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
-
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
- integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
- integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-lazy-req@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
- integrity sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=
-
-lazystream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
- integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
- dependencies:
- readable-stream "^2.0.5"
-
-lcid@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
- integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
- dependencies:
- invert-kv "^2.0.0"
-
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-lnfs@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/lnfs/-/lnfs-1.1.0.tgz#9f4df9e0f178cf626fe9575ff12a3af401bc88bc"
- integrity sha1-n0354PF4z2Jv6Vdf8So69AG8iLw=
- dependencies:
- meow "^3.3.0"
- mkdirp "^0.5.0"
- rimraf "^2.2.8"
-
-load-json-file@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
- integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
-
-load-json-file@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
- integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- strip-bom "^3.0.0"
-
-loader-runner@^2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
- integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
-
-loader-utils@1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
- integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^2.0.0"
- json5 "^1.0.1"
-
-loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
- integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^3.0.0"
- json5 "^1.0.1"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-locate-path@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
- dependencies:
- p-locate "^4.1.0"
-
-lodash._basecopy@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
- integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
-
-lodash._basetostring@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
- integrity sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=
-
-lodash._basevalues@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
- integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=
-
-lodash._getnative@^3.0.0:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
- integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
-
-lodash._isiterateecall@^3.0.0:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
- integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
-
-lodash._reescape@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
- integrity sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=
-
-lodash._reevaluate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
- integrity sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=
-
-lodash._reinterpolate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
- integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
-
-lodash._root@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
- integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=
-
-lodash.escape@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
- integrity sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=
- dependencies:
- lodash._root "^3.0.0"
-
-lodash.get@^4.0.0:
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
- integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
-
-lodash.isarguments@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
- integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
-
-lodash.isarray@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
- integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
-
-lodash.isequal@^4.0.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
- integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
-
-lodash.keys@^3.0.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
- integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
- dependencies:
- lodash._getnative "^3.0.0"
- lodash.isarguments "^3.0.0"
- lodash.isarray "^3.0.0"
-
-lodash.restparam@^3.0.0:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
- integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
-
-lodash.template@^3.0.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
- integrity sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=
- dependencies:
- lodash._basecopy "^3.0.0"
- lodash._basetostring "^3.0.0"
- lodash._basevalues "^3.0.0"
- lodash._isiterateecall "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.escape "^3.0.0"
- lodash.keys "^3.0.0"
- lodash.restparam "^3.0.0"
- lodash.templatesettings "^3.0.0"
-
-lodash.templatesettings@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
- integrity sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=
- dependencies:
- lodash._reinterpolate "^3.0.0"
- lodash.escape "^3.0.0"
-
-lodash@^4.0.0, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0:
- version "4.17.15"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
- integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
-
-lodash@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
- integrity sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=
-
-logalot@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552"
- integrity sha1-X46MkNME7fElMJUaVVSruMXj9VI=
- dependencies:
- figures "^1.3.5"
- squeak "^1.0.0"
-
-longest@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
- integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
-
-loud-rejection@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
- integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
- dependencies:
- currently-unhandled "^0.4.1"
- signal-exit "^3.0.0"
-
-lowercase-keys@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
- integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-
-lpad-align@^1.0.0, lpad-align@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e"
- integrity sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=
- dependencies:
- get-stdin "^4.0.1"
- indent-string "^2.1.0"
- longest "^1.0.0"
- meow "^3.3.0"
-
-lru-cache@2:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
- integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=
-
-lru-cache@^4.1.2:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
- integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
- dependencies:
- pseudomap "^1.0.2"
- yallist "^2.1.2"
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
-make-dir@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
- integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
- dependencies:
- pify "^4.0.1"
- semver "^5.6.0"
-
-map-age-cleaner@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
- integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
- dependencies:
- p-defer "^1.0.0"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
- integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
-map-obj@^1.0.0, map-obj@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
- integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
- dependencies:
- object-visit "^1.0.0"
-
-math-random@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
- integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
-
-md5.js@^1.3.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
- integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-mem@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
- integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
- dependencies:
- map-age-cleaner "^0.1.1"
- mimic-fn "^2.0.0"
- p-is-promise "^2.0.0"
-
-memory-fs@^0.4.0, memory-fs@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
- integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-memory-fs@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
- integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-meow@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-2.1.0.tgz#3a63f77977c150c16fd84484d0cef677c4182799"
- integrity sha1-OmP3eXfBUMFv2ESE0M72d8QYJ5k=
- dependencies:
- camelcase-keys "^1.0.0"
- indent-string "^1.1.0"
- minimist "^1.1.0"
- object-assign "^2.0.0"
-
-meow@^3.1.0, meow@^3.3.0, meow@^3.5.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
- integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
- dependencies:
- camelcase-keys "^2.0.0"
- decamelize "^1.1.2"
- loud-rejection "^1.0.0"
- map-obj "^1.0.1"
- minimist "^1.1.3"
- normalize-package-data "^2.3.4"
- object-assign "^4.0.1"
- read-pkg-up "^1.0.1"
- redent "^1.0.0"
- trim-newlines "^1.0.0"
-
-merge-source-map@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
- integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
- dependencies:
- source-map "^0.6.1"
-
-merge-stream@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
- integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
- dependencies:
- readable-stream "^2.0.1"
-
-micromatch@^2.3.7:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.1"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- extglob "^2.0.4"
- fragment-cache "^0.2.1"
- kind-of "^6.0.2"
- nanomatch "^1.2.9"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.2"
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
-mime-db@1.44.0:
- version "1.44.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
- integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
-
-mime-types@^2.1.12, mime-types@~2.1.19:
- version "2.1.27"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
- integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
- dependencies:
- mime-db "1.44.0"
-
-mimic-fn@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
- integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-
-"minimatch@2 || 3", minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@^2.0.1:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
- integrity sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=
- dependencies:
- brace-expansion "^1.0.0"
-
-minimatch@~0.2.11:
- version "0.2.14"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
- integrity sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=
- dependencies:
- lru-cache "2"
- sigmund "~1.0.0"
-
-minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
-minimist@~0.0.7:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
- integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-
-mississippi@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
- integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
- dependencies:
- concat-stream "^1.5.0"
- duplexify "^3.4.2"
- end-of-stream "^1.1.0"
- flush-write-stream "^1.0.0"
- from2 "^2.1.0"
- parallel-transform "^1.1.0"
- pump "^3.0.0"
- pumpify "^1.3.3"
- stream-each "^1.1.0"
- through2 "^2.0.0"
-
-mixin-deep@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
- integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
-
-move-concurrently@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
- integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
- dependencies:
- aproba "^1.1.1"
- copy-concurrently "^1.0.0"
- fs-write-stream-atomic "^1.0.8"
- mkdirp "^0.5.1"
- rimraf "^2.5.4"
- run-queue "^1.0.3"
-
-mozjpeg@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/mozjpeg/-/mozjpeg-4.1.1.tgz#859030b24f689a53db9b40f0160d89195b88fd50"
- integrity sha1-hZAwsk9omlPbm0DwFg2JGVuI/VA=
- dependencies:
- bin-build "^2.0.0"
- bin-wrapper "^3.0.0"
- logalot "^2.0.0"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-multipipe@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
- integrity sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=
- dependencies:
- duplexer2 "0.0.2"
-
-mute-stream@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
- integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=
-
-nan@^2.12.1, nan@^2.5.1:
- version "2.14.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
- integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
-
-nanomatch@^1.2.9:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
- integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- fragment-cache "^0.2.1"
- is-windows "^1.0.2"
- kind-of "^6.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-natives@^1.1.3:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb"
- integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
- integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-
-neo-async@^2.5.0, neo-async@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
- integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-
-next-tick@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
- integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
-
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-node-libs-browser@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
- integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.2.0"
- buffer "^4.3.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "^3.11.0"
- domain-browser "^1.1.1"
- events "^3.0.0"
- https-browserify "^1.0.0"
- os-browserify "^0.3.0"
- path-browserify "0.0.1"
- process "^0.11.10"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.3.3"
- stream-browserify "^2.0.1"
- stream-http "^2.7.2"
- string_decoder "^1.0.0"
- timers-browserify "^2.0.4"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.11.0"
- vm-browserify "^1.0.1"
-
-node-status-codes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
- integrity sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
- integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
- dependencies:
- hosted-git-info "^2.1.4"
- resolve "^1.10.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.1, normalize-path@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-npm-conf@^1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
- integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
- dependencies:
- config-chain "^1.1.11"
- pify "^3.0.0"
-
-npm-installed@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/npm-installed/-/npm-installed-1.0.0.tgz#2961d977f93fd0d371dab371e989120cffa64018"
- integrity sha1-KWHZd/k/0NNx2rNx6YkSDP+mQBg=
- dependencies:
- npm-which "^1.0.1"
- rc "^0.5.1"
-
-npm-path@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-1.1.0.tgz#0474ae00419c327d54701b7cf2cd05dc88be1140"
- integrity sha1-BHSuAEGcMn1UcBt88s0F3Ii+EUA=
- dependencies:
- which "^1.2.4"
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
- dependencies:
- path-key "^2.0.0"
-
-npm-which@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-1.0.2.tgz#132d209b7f73abfafd4f3f555fd1066d8d8ec202"
- integrity sha1-Ey0gm39zq/r9Tz9VX9EGbY2OwgI=
- dependencies:
- commander "^2.2.0"
- npm-path "^1.0.0"
- which "^1.0.5"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
- integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-oauth-sign@~0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
- integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-object-assign@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
- integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=
-
-object-assign@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
- integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=
-
-object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-inspect@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
- integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
-
-object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object-path@0.x.x:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
- integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
- dependencies:
- isobject "^3.0.0"
-
-object.assign@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
- integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
- dependencies:
- define-properties "^1.1.2"
- function-bind "^1.1.1"
- has-symbols "^1.0.0"
- object-keys "^1.0.11"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
- dependencies:
- isobject "^3.0.1"
-
-object.values@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
- integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.0-next.1"
- function-bind "^1.1.1"
- has "^1.0.3"
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-onetime@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
- integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
-
-opter@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/opter/-/opter-1.1.0.tgz#2598aebb60b3f1a7322af1097086f4e798c84a76"
- integrity sha1-JZiuu2Cz8acyKvEJcIb055jISnY=
- dependencies:
- commander "2.x.x"
- js-yaml "3.x.x"
- object-path "0.x.x"
- underscore "1.x.x"
- z-schema "^3.0.1"
- z-schema-errors "0.0.1"
-
-optionator@^0.8.2:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
- integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.6"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- word-wrap "~1.2.3"
-
-optipng-bin@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/optipng-bin/-/optipng-bin-2.0.4.tgz#1f0ad9307951deb5f93038629e781b1997ad0527"
- integrity sha1-HwrZMHlR3rX5MDhinngbGZetBSc=
- dependencies:
- bin-build "^2.0.0"
- bin-wrapper "^2.0.1"
- logalot "^2.0.0"
-
-ordered-read-streams@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
- integrity sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=
-
-ordered-read-streams@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b"
- integrity sha1-cTfmmzKYuzQiR6G77jiByA4v14s=
- dependencies:
- is-stream "^1.0.1"
- readable-stream "^2.0.1"
-
-os-browserify@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
- integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-
-os-filter-obj@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-1.0.3.tgz#5915330d90eced557d2d938a31c6dd214d9c63ad"
- integrity sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=
-
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
- integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
-os-locale@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
- integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
- dependencies:
- execa "^1.0.0"
- lcid "^2.0.0"
- mem "^4.0.0"
-
-os-shim@^0.1.2:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
- integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=
-
-os-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-p-defer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
- integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
- integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-
-p-is-promise@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
- integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
-
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
-p-limit@^2.0.0, p-limit@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-locate@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
- dependencies:
- p-limit "^2.2.0"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-pako@~1.0.5:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
- integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
-
-parallel-transform@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
- integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
- dependencies:
- cyclist "^1.0.1"
- inherits "^2.0.3"
- readable-stream "^2.1.5"
-
-parse-asn1@^5.0.0, parse-asn1@^5.1.5:
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
- integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
- dependencies:
- asn1.js "^4.0.0"
- browserify-aes "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
- safe-buffer "^5.1.1"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-parse-json@^2.1.0, parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
- dependencies:
- error-ex "^1.2.0"
-
-parse-node-version@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
- integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
-
-parse-passwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
- integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
- integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
-path-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
- integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
-
-path-dirname@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
- integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
-
-path-exists@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
- integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
- dependencies:
- pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-is-inside@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
- integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
-
-path-key@^2.0.0, path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
-path-parse@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-
-path-type@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
- integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-path-type@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
- integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
- dependencies:
- pify "^2.0.0"
-
-pbkdf2@^3.0.3:
- version "3.0.17"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
- integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
- integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
-picomatch@^2.0.4, picomatch@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
- integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
-pify@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
- integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
- integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-
-pkg-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
- integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
- dependencies:
- find-up "^2.1.0"
-
-pkg-dir@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
- integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
- dependencies:
- find-up "^3.0.0"
-
-pluralize@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
- integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=
-
-pngquant-bin@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/pngquant-bin/-/pngquant-bin-3.1.1.tgz#d124d98a75a9487f40c1640b4dbfcbb2bd5a1fd1"
- integrity sha1-0STZinWpSH9AwWQLTb/Lsr1aH9E=
- dependencies:
- bin-build "^2.0.0"
- bin-wrapper "^3.0.0"
- logalot "^2.0.0"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
- integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
-postcss-modules-extract-imports@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
- integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
- dependencies:
- postcss "^7.0.5"
-
-postcss-modules-local-by-default@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915"
- integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==
- dependencies:
- icss-utils "^4.1.1"
- postcss "^7.0.16"
- postcss-selector-parser "^6.0.2"
- postcss-value-parser "^4.0.0"
-
-postcss-modules-scope@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
- integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
- dependencies:
- postcss "^7.0.6"
- postcss-selector-parser "^6.0.0"
-
-postcss-modules-values@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10"
- integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==
- dependencies:
- icss-utils "^4.0.0"
- postcss "^7.0.6"
-
-postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
- integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
- dependencies:
- cssesc "^3.0.0"
- indexes-of "^1.0.1"
- uniq "^1.0.1"
-
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.3:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
- integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
-
-postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6:
- version "7.0.30"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.30.tgz#cc9378beffe46a02cbc4506a0477d05fcea9a8e2"
- integrity sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==
- dependencies:
- chalk "^2.4.2"
- source-map "^0.6.1"
- supports-color "^6.1.0"
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
- integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
-prepend-http@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
- integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
- integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
-
-prettier@^1.18.2:
- version "1.19.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
- integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-
-progress@^1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
- integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
-
-promise-inflight@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
- integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-
-proto-list@~1.2.1:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
- integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
-
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
- integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-pseudomap@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
- integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-
-psl@^1.1.28:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
- integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
-
-public-encrypt@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
- integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
- safe-buffer "^5.1.2"
-
-pump@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
- integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-pumpify@^1.3.3:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
- integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
- dependencies:
- duplexify "^3.6.0"
- inherits "^2.0.3"
- pump "^2.0.0"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
- integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-
-punycode@^1.2.4:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0, punycode@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-qs@~6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-querystring-es3@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
- integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
- integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-
-randomatic@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
- integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
- dependencies:
- is-number "^4.0.0"
- kind-of "^6.0.0"
- math-random "^1.0.1"
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
- integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
- integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-rc@^0.5.1:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/rc/-/rc-0.5.5.tgz#541cc3300f464b6dfe6432d756f0f2dd3e9eb199"
- integrity sha1-VBzDMA9GS23+ZDLXVvDy3T6esZk=
- dependencies:
- deep-extend "~0.2.5"
- ini "~1.3.0"
- minimist "~0.0.7"
- strip-json-comments "0.1.x"
-
-rc@^1.1.2:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-read-all-stream@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
- integrity sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=
- dependencies:
- pinkie-promise "^2.0.0"
- readable-stream "^2.0.0"
-
-read-files@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/read-files/-/read-files-0.1.0.tgz#606bb7a0177952d6a2f983d598096094314d321e"
- integrity sha1-YGu3oBd5Utai+YPVmAlglDFNMh4=
-
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
-read-pkg-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
- integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
- dependencies:
- find-up "^2.0.0"
- read-pkg "^2.0.0"
-
-read-pkg@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
- integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
- dependencies:
- load-json-file "^1.0.0"
- normalize-package-data "^2.3.2"
- path-type "^1.0.0"
-
-read-pkg@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
- integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
- dependencies:
- load-json-file "^2.0.0"
- normalize-package-data "^2.3.2"
- path-type "^2.0.0"
-
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.26:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@^1.0.27-1, readable-stream@~1.1.9:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readdirp@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
- integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
- dependencies:
- graceful-fs "^4.1.11"
- micromatch "^3.1.10"
- readable-stream "^2.0.2"
-
-readdirp@~3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
- integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
- dependencies:
- picomatch "^2.2.1"
-
-readline2@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
- integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- mute-stream "0.0.5"
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
- dependencies:
- resolve "^1.1.6"
-
-redent@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
- integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
- dependencies:
- indent-string "^2.1.0"
- strip-indent "^1.0.1"
-
-regex-cache@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
- integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
- dependencies:
- is-equal-shallow "^0.1.3"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
- dependencies:
- extend-shallow "^3.0.2"
- safe-regex "^1.1.0"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
- integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-repeat-element@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
- integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-
-repeat-string@^1.5.2, repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-repeating@^1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac"
- integrity sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=
- dependencies:
- is-finite "^1.0.0"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
- dependencies:
- is-finite "^1.0.0"
-
-replace-ext@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
- integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=
-
-request@^2.34.0:
- version "2.88.2"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
- integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.3"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.5.0"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-
-require-main-filename@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
- integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-require-uncached@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
- integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
- dependencies:
- caller-path "^0.1.0"
- resolve-from "^1.0.0"
-
-resolve-cwd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
- integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
- dependencies:
- resolve-from "^3.0.0"
-
-resolve-dir@^1.0.0, resolve-dir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
- integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
- dependencies:
- expand-tilde "^2.0.0"
- global-modules "^1.0.0"
-
-resolve-from@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
- integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
- integrity sha1-six699nWiBvItuZTM17rywoYh0g=
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
- integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1:
- version "1.17.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
- integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
- dependencies:
- path-parse "^1.0.6"
-
-restore-cursor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
- integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
- dependencies:
- exit-hook "^1.0.0"
- onetime "^1.0.0"
-
-ret@~0.1.10:
- version "0.1.15"
- resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
- integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-rimraf@2, rimraf@^2.2.6, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
- integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
- dependencies:
- glob "^7.1.3"
-
-rimraf@~2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
- integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-run-async@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
- integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=
- dependencies:
- once "^1.3.0"
-
-run-queue@^1.0.0, run-queue@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
- integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
- dependencies:
- aproba "^1.1.1"
-
-rx-lite@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
- integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-regex@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
- integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
- dependencies:
- ret "~0.1.10"
-
-safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-schema-utils@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
- integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
- dependencies:
- ajv "^6.1.0"
- ajv-errors "^1.0.0"
- ajv-keywords "^3.1.0"
-
-schema-utils@^2.6.6:
- version "2.6.6"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c"
- integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==
- dependencies:
- ajv "^6.12.0"
- ajv-keywords "^3.4.1"
-
-seek-bzip@^1.0.3:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
- integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
- dependencies:
- commander "~2.8.1"
-
-semver-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9"
- integrity sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=
-
-semver-truncate@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
- integrity sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=
- dependencies:
- semver "^5.3.0"
-
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@^4.0.3:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
- integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=
-
-semver@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-serialize-javascript@^1.7.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb"
- integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==
-
-serialize-javascript@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
- integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
-
-set-blocking@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-set-immediate-shim@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
- integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
-
-set-value@^2.0.0, set-value@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
- integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-setimmediate@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.11"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
- integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-sharp@^0.17.1:
- version "0.17.3"
- resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.17.3.tgz#484cd2a70c900370948dcc43e165f78306bff48a"
- integrity sha1-SEzSpwyQA3CUjcxD4WX3gwa/9Io=
- dependencies:
- caw "^2.0.0"
- color "^1.0.3"
- got "^6.7.1"
- nan "^2.5.1"
- semver "^5.3.0"
- tar "^2.2.1"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-
-shelljs@^0.7.5:
- version "0.7.8"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
- integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM=
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-sigmund@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
- integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
-
-signal-exit@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
- integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
-
-simple-swizzle@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
- integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
- dependencies:
- is-arrayish "^0.3.1"
-
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
- integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
-
-snapdragon-node@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^3.1.0"
-
-source-list-map@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
- integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
-
-source-map-resolve@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
- dependencies:
- atob "^2.1.2"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@~0.5.12:
- version "0.5.19"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
- integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
- integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
-
-source-map@^0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-sparkles@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c"
- integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==
-
-spawn-sync@^1.0.6:
- version "1.0.15"
- resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
- integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY=
- dependencies:
- concat-stream "^1.4.7"
- os-shim "^0.1.2"
-
-spdx-correct@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
- integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
- integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
- integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
- dependencies:
- extend-shallow "^3.0.0"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-squeak@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3"
- integrity sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=
- dependencies:
- chalk "^1.0.0"
- console-stream "^0.1.1"
- lpad-align "^1.0.1"
-
-sshpk@^1.7.0:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
- integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- bcrypt-pbkdf "^1.0.0"
- dashdash "^1.12.0"
- ecc-jsbn "~0.1.1"
- getpass "^0.1.1"
- jsbn "~0.1.0"
- safer-buffer "^2.0.2"
- tweetnacl "~0.14.0"
-
-ssri@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
- integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
- dependencies:
- figgy-pudding "^3.5.1"
-
-stat-mode@^0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502"
- integrity sha1-5sgLYjEj19gM8TLOU480YokHJQI=
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.0"
-
-stream-browserify@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
- integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-combiner2@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
- integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4=
- dependencies:
- duplexer2 "~0.1.0"
- readable-stream "^2.0.2"
-
-stream-combiner@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858"
- integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=
- dependencies:
- duplexer "~0.1.1"
- through "~2.3.4"
-
-stream-each@^1.1.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
- integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
- dependencies:
- end-of-stream "^1.1.0"
- stream-shift "^1.0.0"
-
-stream-http@^2.7.2:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
- integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
- dependencies:
- builtin-status-codes "^3.0.0"
- inherits "^2.0.1"
- readable-stream "^2.3.6"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-stream-shift@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
- integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
-
-string-width@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string-width@^3.0.0, string-width@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
- integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
- dependencies:
- emoji-regex "^7.0.1"
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.1.0"
-
-string-width@^4.1.0, string-width@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
- integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.0"
-
-string.prototype.trimend@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
- integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.5"
-
-string.prototype.trimleft@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
- integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.5"
- string.prototype.trimstart "^1.0.0"
-
-string.prototype.trimright@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
- integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.5"
- string.prototype.trimend "^1.0.0"
+ resolved "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz"
+ integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==
-string.prototype.trimstart@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
- integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+"@types/tedious@^4.0.14":
+ version "4.0.14"
+ resolved "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz"
+ integrity sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==
dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.5"
+ "@types/node" "*"
-string_decoder@^1.0.0, string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+"@types/yauzl@^2.9.1":
+ version "2.10.3"
+ resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz"
+ integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==
dependencies:
- safe-buffer "~5.2.0"
+ "@types/node" "*"
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
- integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+acorn-import-attributes@^1.9.5:
+ version "1.9.5"
+ resolved "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz"
+ integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
+acorn@^8, acorn@^8.14.0:
+ version "8.15.0"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
-strip-ansi@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
- integrity sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=
- dependencies:
- ansi-regex "^0.2.1"
+agent-base@^7.1.0, agent-base@^7.1.2:
+ version "7.1.4"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz"
+ integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
-strip-ansi@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
+ansi-colors@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
- dependencies:
- ansi-regex "^3.0.0"
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ansi-styles@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz"
+ integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
dependencies:
- ansi-regex "^4.1.0"
+ "@types/color-name" "^1.1.1"
+ color-convert "^2.0.1"
-strip-ansi@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
- integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ast-types@^0.13.4:
+ version "0.13.4"
+ resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz"
+ integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
dependencies:
- ansi-regex "^5.0.0"
+ tslib "^2.0.1"
-strip-bom-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee"
- integrity sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=
+atomically@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz"
+ integrity sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==
dependencies:
- first-chunk-stream "^1.0.0"
- strip-bom "^2.0.0"
+ stubborn-fs "^2.0.0"
+ when-exit "^2.1.4"
+
+axe-core@^4.11.0:
+ version "4.11.1"
+ resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz"
+ integrity sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==
+
+b4a@^1.6.4:
+ version "1.7.3"
+ resolved "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz"
+ integrity sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==
-strip-bom@^1.0.0:
+balanced-match@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
- integrity sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=
- dependencies:
- first-chunk-stream "^1.0.0"
- is-utf8 "^0.2.0"
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==
-strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+bare-events@*, bare-events@^2.5.4, bare-events@^2.7.0:
+ version "2.8.2"
+ resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz"
+ integrity sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==
+
+bare-fs@^4.0.1:
+ version "4.5.3"
+ resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz"
+ integrity sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==
dependencies:
- is-utf8 "^0.2.0"
+ bare-events "^2.5.4"
+ bare-path "^3.0.0"
+ bare-stream "^2.6.4"
+ bare-url "^2.2.2"
+ fast-fifo "^1.3.2"
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
- integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+bare-os@^3.0.1:
+ version "3.6.2"
+ resolved "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz"
+ integrity sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==
-strip-dirs@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-0.1.1.tgz#5524b3a50231e015d0814ec42b89a76427df62e8"
- integrity sha1-VSSzpQIx4BXQgU7EK4mnZCffYug=
+bare-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz"
+ integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==
dependencies:
- chalk "^0.5.1"
- get-stdin "^3.0.0"
- is-absolute "^0.1.4"
- is-integer "^1.0.3"
- minimist "^1.1.0"
+ bare-os "^3.0.1"
-strip-dirs@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0"
- integrity sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=
+bare-stream@^2.6.4:
+ version "2.7.0"
+ resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz"
+ integrity sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==
dependencies:
- chalk "^1.0.0"
- get-stdin "^4.0.1"
- is-absolute "^0.1.5"
- is-natural-number "^2.0.0"
- minimist "^1.1.0"
- sum-up "^1.0.1"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
- integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+ streamx "^2.21.0"
-strip-indent@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
- integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+bare-url@^2.2.2:
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz"
+ integrity sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==
dependencies:
- get-stdin "^4.0.1"
+ bare-path "^3.0.0"
-strip-json-comments@0.1.x:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-0.1.3.tgz#164c64e370a8a3cc00c9e01b539e569823f0ee54"
- integrity sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+basic-ftp@^5.0.2:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz"
+ integrity sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==
-strip-outer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
- integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
+brace-expansion@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz"
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
dependencies:
- escape-string-regexp "^1.0.2"
+ balanced-match "^1.0.0"
-sum-up@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e"
- integrity sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=
- dependencies:
- chalk "^1.0.0"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
-supports-color@6.1.0, supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+chrome-launcher@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz"
+ integrity sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==
dependencies:
- has-flag "^3.0.0"
+ "@types/node" "*"
+ escape-string-regexp "^4.0.0"
+ is-wsl "^2.2.0"
+ lighthouse-logger "^2.0.1"
-supports-color@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
- integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+chromium-bidi@13.1.1:
+ version "13.1.1"
+ resolved "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.1.1.tgz"
+ integrity sha512-zB9MpoPd7VJwjowQqiW3FKOvQwffFMjQ8Iejp5ZW+sJaKLRhZX1sTxzl3Zt22TDB4zP0OOqs8lRoY7eAW5geyQ==
+ dependencies:
+ mitt "^3.0.1"
+ zod "^3.24.1"
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+cjs-module-lexer@^1.2.2:
+ version "1.4.3"
+ resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz"
+ integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
dependencies:
- has-flag "^3.0.0"
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
-table@^3.7.8:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
- integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
dependencies:
- ajv "^4.7.0"
- ajv-keywords "^1.0.0"
- chalk "^1.1.1"
- lodash "^4.0.0"
- slice-ansi "0.0.4"
- string-width "^2.0.0"
-
-tapable@^1.0.0, tapable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
- integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+ color-name "~1.1.4"
-tar-stream@^0.4.5:
- version "0.4.7"
- resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-0.4.7.tgz#1f1d2ce9ebc7b42765243ca0e8f1b7bfda0aadcd"
- integrity sha1-Hx0s6evHtCdlJDyg6PG3v9oKrc0=
- dependencies:
- bl "^0.9.0"
- end-of-stream "^1.0.0"
- readable-stream "^1.0.27-1"
- xtend "^4.0.0"
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-tar-stream@^1.1.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
- integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+configstore@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz"
+ integrity sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==
dependencies:
- bl "^1.0.0"
- buffer-alloc "^1.2.0"
- end-of-stream "^1.0.0"
- fs-constants "^1.0.0"
- readable-stream "^2.3.0"
- to-buffer "^1.1.1"
- xtend "^4.0.0"
+ atomically "^2.0.3"
+ dot-prop "^9.0.0"
+ graceful-fs "^4.2.11"
+ xdg-basedir "^5.1.0"
-tar@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
- integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
- dependencies:
- block-stream "*"
- fstream "^1.0.12"
- inherits "2"
+csp_evaluator@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz"
+ integrity sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==
-tempfile@^1.0.0, tempfile@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
- integrity sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=
- dependencies:
- os-tmpdir "^1.0.0"
- uuid "^2.0.1"
+data-uri-to-buffer@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz"
+ integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==
-terser-webpack-plugin@^1.4.3:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
- integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==
- dependencies:
- cacache "^12.0.2"
- find-cache-dir "^2.1.0"
- is-wsl "^1.1.0"
- schema-utils "^1.0.0"
- serialize-javascript "^2.1.2"
- source-map "^0.6.1"
- terser "^4.1.2"
- webpack-sources "^1.4.0"
- worker-farm "^1.7.0"
-
-terser@^4.1.2:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006"
- integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==
+debug@^4.1.1, debug@^4.3.4, debug@^4.3.5, debug@^4.4.1, debug@^4.4.3, debug@4:
+ version "4.4.3"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
dependencies:
- commander "^2.20.0"
- source-map "~0.6.1"
- source-map-support "~0.5.12"
+ ms "^2.1.3"
-text-table@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
- integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+decimal.js@^10.4.3:
+ version "10.6.0"
+ resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz"
+ integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==
-through2-filter@^2.0.0:
+define-lazy-prop@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec"
- integrity sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=
+ resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"
+ integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+degenerator@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz"
+ integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==
dependencies:
- through2 "~2.0.0"
- xtend "~4.0.0"
+ ast-types "^0.13.4"
+ escodegen "^2.1.0"
+ esprima "^4.0.1"
-through2-filter@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"
- integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==
+devtools-protocol@*, devtools-protocol@0.0.1527314:
+ version "0.0.1527314"
+ resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1527314.tgz"
+ integrity sha512-UohCFOlzpPPD/IcsxM0k4lVZp/GfhPVJ6l2No5XX+LknpGisPWJe17oOHQhZTHf6ThUFIMwHO6bSEZUq/6oP7w==
+
+devtools-protocol@0.0.1566079:
+ version "0.0.1566079"
+ resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz"
+ integrity sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==
+
+dot-prop@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz"
+ integrity sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==
dependencies:
- through2 "~2.0.0"
- xtend "~4.0.0"
+ type-fest "^4.18.2"
-through2@^0.6.0, through2@^0.6.1:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
- integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
- readable-stream ">=1.0.33-1 <1.1.0-0"
- xtend ">=4.0.0 <4.1.0-0"
+ once "^1.4.0"
-through2@^2.0.0, through2@~2.0.0:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+enquirer@^2.3.6:
+ version "2.4.1"
+ resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz"
+ integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
+ ansi-colors "^4.1.1"
+ strip-ansi "^6.0.1"
-through@^2.3.6, through@~2.3.4:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+escalade@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-time-stamp@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
- integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-timed-out@^3.0.0:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
- integrity sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=
+escodegen@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz"
+ integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionalDependencies:
+ source-map "~0.6.1"
-timed-out@^4.0.0:
+esprima@^4.0.1:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
- integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+ resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-timers-browserify@^2.0.4:
- version "2.0.11"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
- integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
- dependencies:
- setimmediate "^1.0.4"
+estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-to-absolute-glob@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f"
- integrity sha1-HN+kcqnvUMI57maZm2YsoOs5k38=
- dependencies:
- extend-shallow "^2.0.1"
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-to-arraybuffer@^1.0.0:
+events-universal@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
- integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
-
-to-buffer@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
- integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ resolved "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz"
+ integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==
dependencies:
- kind-of "^3.0.2"
+ bare-events "^2.7.0"
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+extract-zip@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz"
+ integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
+ debug "^4.1.1"
+ get-stream "^5.1.0"
+ yauzl "^2.10.0"
+ optionalDependencies:
+ "@types/yauzl" "^2.9.1"
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
+fast-fifo@^1.2.0, fast-fifo@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz"
+ integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
-to-regex@^3.0.1, to-regex@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
- dependencies:
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- regex-not "^1.0.2"
- safe-regex "^1.1.0"
-
-tough-cookie@~2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
- integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
dependencies:
- psl "^1.1.28"
- punycode "^2.1.1"
+ pend "~1.2.0"
-trim-newlines@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
- integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+forwarded-parse@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz"
+ integrity sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==
-trim-repeated@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
- integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE=
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
dependencies:
- escape-string-regexp "^1.0.2"
-
-tslib@^1.9.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
- integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
-
-tty-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
- integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
-
-tunnel-agent@^0.4.0:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
- integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ pump "^3.0.0"
+
+get-uri@^6.0.1:
+ version "6.0.5"
+ resolved "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz"
+ integrity sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==
dependencies:
- safe-buffer "^5.0.1"
+ basic-ftp "^5.0.2"
+ data-uri-to-buffer "^6.0.2"
+ debug "^4.3.4"
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
- integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+graceful-fs@^4.2.11:
+ version "4.2.11"
+ resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
dependencies:
- prelude-ls "~1.1.2"
+ function-bind "^1.1.2"
-type@^1.0.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
- integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+http-link-header@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz"
+ integrity sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==
-type@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
- integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
-uglify-js@^3.6.0:
- version "3.9.4"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.4.tgz#867402377e043c1fc7b102253a22b64e5862401b"
- integrity sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA==
+http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1:
+ version "7.0.2"
+ resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz"
+ integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
dependencies:
- commander "~2.20.3"
+ agent-base "^7.1.0"
+ debug "^4.3.4"
-uglifyjs-webpack-plugin@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz#e75bc80e7f1937f725954c9b4c5a1e967ea9d0d7"
- integrity sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==
+https-proxy-agent@^7.0.6:
+ version "7.0.6"
+ resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz"
+ integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
dependencies:
- cacache "^12.0.2"
- find-cache-dir "^2.1.0"
- is-wsl "^1.1.0"
- schema-utils "^1.0.0"
- serialize-javascript "^1.7.0"
- source-map "^0.6.1"
- uglify-js "^3.6.0"
- webpack-sources "^1.4.0"
- worker-farm "^1.7.0"
-
-underscore@1.x.x, underscore@^1.8.3:
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.10.2.tgz#73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf"
- integrity sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==
-
-union-value@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
- integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^2.0.1"
+ agent-base "^7.1.2"
+ debug "4"
-uniq@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
- integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+image-ssim@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz"
+ integrity sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==
+
+import-in-the-middle@^1.14.2, import-in-the-middle@^1.8.1:
+ version "1.15.0"
+ resolved "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz"
+ integrity sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==
+ dependencies:
+ acorn "^8.14.0"
+ acorn-import-attributes "^1.9.5"
+ cjs-module-lexer "^1.2.2"
+ module-details-from-path "^1.0.3"
+
+intl-messageformat@^10.5.3:
+ version "10.7.18"
+ resolved "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz"
+ integrity sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==
+ dependencies:
+ "@formatjs/ecma402-abstract" "2.3.6"
+ "@formatjs/fast-memoize" "2.2.7"
+ "@formatjs/icu-messageformat-parser" "2.11.4"
+ tslib "^2.8.0"
+
+ip-address@^10.0.1:
+ version "10.1.0"
+ resolved "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz"
+ integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==
+
+is-core-module@^2.16.1:
+ version "2.16.1"
+ resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+ dependencies:
+ hasown "^2.0.2"
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-unique-filename@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
- integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
- dependencies:
- unique-slug "^2.0.0"
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-unique-slug@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
- integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
dependencies:
- imurmurhash "^0.1.4"
+ is-docker "^2.0.0"
-unique-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
- integrity sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=
+jpeg-js@^0.4.1, jpeg-js@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz"
+ integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==
-unique-stream@^2.0.2:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac"
- integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==
- dependencies:
- json-stable-stringify-without-jsonify "^1.0.1"
- through2-filter "^3.0.0"
+js-library-detector@^6.7.0:
+ version "6.7.0"
+ resolved "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz"
+ integrity sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
+legacy-javascript@latest:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/legacy-javascript/-/legacy-javascript-0.0.1.tgz"
+ integrity sha512-lPyntS4/aS7jpuvOlitZDFifBCb4W8L/3QU0PLbUTUj+zYah8rfVjYic88yG7ZKTxhS5h9iz7duT8oUXKszLhg==
-unzip-response@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
- integrity sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=
+lighthouse-logger@^2.0.1, lighthouse-logger@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.2.tgz"
+ integrity sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==
+ dependencies:
+ debug "^4.4.1"
+ marky "^1.2.2"
+
+lighthouse-stack-packs@1.12.3:
+ version "1.12.3"
+ resolved "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.12.3.tgz"
+ integrity sha512-d8IsOpE83kbANgnM+Tp8+x6HcMpX9o2ITBiUERssgzAIFdZCQzs/f4k6D0DLQTE59enml9mbAOU52Wu35exWtg==
+
+lighthouse@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.npmjs.org/lighthouse/-/lighthouse-13.0.1.tgz"
+ integrity sha512-SsxFXPE0DoUv6rH3hva0luh0pbpyIx9McBQ1WUpqCYFMtArODT6l9Zpu1K3XSdkeMQ2/zFcMN5o3pPVhfVwnCA==
+ dependencies:
+ "@paulirish/trace_engine" "0.0.61"
+ "@sentry/node" "^9.28.1"
+ axe-core "^4.11.0"
+ chrome-launcher "^1.2.1"
+ configstore "^7.0.0"
+ csp_evaluator "1.1.5"
+ devtools-protocol "0.0.1527314"
+ enquirer "^2.3.6"
+ http-link-header "^1.1.1"
+ intl-messageformat "^10.5.3"
+ jpeg-js "^0.4.4"
+ js-library-detector "^6.7.0"
+ lighthouse-logger "^2.0.2"
+ lighthouse-stack-packs "1.12.3"
+ lodash-es "^4.17.21"
+ lookup-closest-locale "6.2.0"
+ open "^8.4.0"
+ puppeteer-core "^24.23.0"
+ robots-parser "^3.0.1"
+ speedline-core "^1.4.3"
+ third-party-web "^0.27.0"
+ tldts-icann "^7.0.17"
+ ws "^7.0.0"
+ yargs "^17.3.1"
+ yargs-parser "^21.0.0"
+
+lodash-es@^4.17.21:
+ version "4.17.23"
+ resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz"
+ integrity sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==
+
+lookup-closest-locale@6.2.0:
+ version "6.2.0"
+ resolved "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz"
+ integrity sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==
-unzip-response@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
- integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+lru-cache@^7.14.1:
+ version "7.18.3"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz"
+ integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
-upath@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
- integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+marky@^1.2.2:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz"
+ integrity sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==
-uri-js@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+minimatch@^9.0.0:
+ version "9.0.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
dependencies:
- punycode "^2.1.0"
+ brace-expansion "^2.0.1"
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
- integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+mitt@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz"
+ integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
-url-parse-lax@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
- integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
- dependencies:
- prepend-http "^1.0.1"
+module-details-from-path@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz"
+ integrity sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==
-url-regex@^2.0.2:
+ms@^2.1.3:
version "2.1.3"
- resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-2.1.3.tgz#839d13d602183202ea70fef96fc6c3d29514fb84"
- integrity sha1-g50T1gIYMgLqcP75b8bD0pUU+4Q=
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+netmask@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz"
+ integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
+
+once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
- ip-regex "^1.0.1"
+ wrappy "1"
-url-regex@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
- integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=
+open@^8.4.0:
+ version "8.4.2"
+ resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz"
+ integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
+ dependencies:
+ define-lazy-prop "^2.0.0"
+ is-docker "^2.1.1"
+ is-wsl "^2.2.0"
+
+pac-proxy-agent@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz"
+ integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==
+ dependencies:
+ "@tootallnate/quickjs-emscripten" "^0.23.0"
+ agent-base "^7.1.2"
+ debug "^4.3.4"
+ get-uri "^6.0.1"
+ http-proxy-agent "^7.0.0"
+ https-proxy-agent "^7.0.6"
+ pac-resolver "^7.0.1"
+ socks-proxy-agent "^8.0.5"
+
+pac-resolver@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz"
+ integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==
dependencies:
- ip-regex "^1.0.1"
+ degenerator "^5.0.0"
+ netmask "^2.0.2"
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
-url-to-options@^1.0.1:
+pg-int8@1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
- integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
+ resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz"
+ integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
+pg-protocol@*:
+ version "1.11.0"
+ resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz"
+ integrity sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==
-use@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
- integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+pg-types@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz"
+ integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
+ dependencies:
+ pg-int8 "1.0.1"
+ postgres-array "~2.0.0"
+ postgres-bytea "~1.0.0"
+ postgres-date "~1.0.4"
+ postgres-interval "^1.1.0"
-user-home@^2.0.0:
+postgres-array@~2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
- integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8=
- dependencies:
- os-homedir "^1.0.0"
+ resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz"
+ integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+postgres-bytea@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz"
+ integrity sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==
-util@0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
- dependencies:
- inherits "2.0.1"
+postgres-date@~1.0.4:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz"
+ integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
-util@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
- integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+postgres-interval@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz"
+ integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
dependencies:
- inherits "2.0.3"
+ xtend "^4.0.0"
-uuid@^2.0.1:
+progress@^2.0.3:
version "2.0.3"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
- integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=
+ resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-agent@^6.5.0:
+ version "6.5.0"
+ resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz"
+ integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==
+ dependencies:
+ agent-base "^7.1.2"
+ debug "^4.3.4"
+ http-proxy-agent "^7.0.1"
+ https-proxy-agent "^7.0.6"
+ lru-cache "^7.14.1"
+ pac-proxy-agent "^7.1.0"
+ proxy-from-env "^1.1.0"
+ socks-proxy-agent "^8.0.5"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-uuid@^3.3.2:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
- integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
-v8-compile-cache@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
- integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+puppeteer-core@^24.23.0:
+ version "24.37.2"
+ resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.2.tgz"
+ integrity sha512-nN8qwE3TGF2vA/+xemPxbesntTuqD9vCGOiZL2uh8HES3pPzLX20MyQjB42dH2rhQ3W3TljZ4ZaKZ0yX/abQuw==
+ dependencies:
+ "@puppeteer/browsers" "2.12.0"
+ chromium-bidi "13.1.1"
+ debug "^4.4.3"
+ devtools-protocol "0.0.1566079"
+ typed-query-selector "^2.12.0"
+ webdriver-bidi-protocol "0.4.0"
+ ws "^8.19.0"
-vali-date@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6"
- integrity sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+require-in-the-middle@^7.1.1:
+ version "7.5.2"
+ resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz"
+ integrity sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==
dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
-validator@^10.0.0:
- version "10.11.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228"
- integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ debug "^4.3.5"
+ module-details-from-path "^1.0.3"
+ resolve "^1.22.8"
+
+resolve@^1.22.8:
+ version "1.22.11"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz"
+ integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==
dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
+ is-core-module "^2.16.1"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
-vinyl-assign@^1.0.1:
+robots-parser@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz"
+ integrity sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==
+
+semver@^7.5.2, semver@^7.7.3:
+ version "7.7.4"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz"
+ integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
+
+shimmer@^1.2.1:
version "1.2.1"
- resolved "https://registry.yarnpkg.com/vinyl-assign/-/vinyl-assign-1.2.1.tgz#4d198891b5515911d771a8cd9c5480a46a074a45"
- integrity sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=
- dependencies:
- object-assign "^4.0.1"
- readable-stream "^2.0.0"
+ resolved "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz"
+ integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
-vinyl-fs@^0.3.7:
- version "0.3.14"
- resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
- integrity sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=
- dependencies:
- defaults "^1.0.0"
- glob-stream "^3.1.5"
- glob-watcher "^0.0.6"
- graceful-fs "^3.0.0"
- mkdirp "^0.5.0"
- strip-bom "^1.0.0"
- through2 "^0.6.1"
- vinyl "^0.4.0"
-
-vinyl-fs@^2.2.0:
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239"
- integrity sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=
- dependencies:
- duplexify "^3.2.0"
- glob-stream "^5.3.2"
- graceful-fs "^4.0.0"
- gulp-sourcemaps "1.6.0"
- is-valid-glob "^0.3.0"
- lazystream "^1.0.0"
- lodash.isequal "^4.0.0"
- merge-stream "^1.0.0"
- mkdirp "^0.5.0"
- object-assign "^4.0.0"
- readable-stream "^2.0.4"
- strip-bom "^2.0.0"
- strip-bom-stream "^1.0.0"
- through2 "^2.0.0"
- through2-filter "^2.0.0"
- vali-date "^1.0.0"
- vinyl "^1.0.0"
-
-vinyl@^0.4.0, vinyl@^0.4.3:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
- integrity sha1-LzVsh6VQolVGHza76ypbqL94SEc=
- dependencies:
- clone "^0.2.0"
- clone-stats "^0.0.1"
+smart-buffer@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
-vinyl@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
- integrity sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=
+socks-proxy-agent@^8.0.5:
+ version "8.0.5"
+ resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz"
+ integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==
dependencies:
- clone "^1.0.0"
- clone-stats "^0.0.1"
- replace-ext "0.0.1"
+ agent-base "^7.1.2"
+ debug "^4.3.4"
+ socks "^2.8.3"
-vinyl@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
- integrity sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=
+socks@^2.8.3:
+ version "2.8.7"
+ resolved "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz"
+ integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==
dependencies:
- clone "^1.0.0"
- clone-stats "^0.0.1"
- replace-ext "0.0.1"
+ ip-address "^10.0.1"
+ smart-buffer "^4.2.0"
-vm-browserify@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
- integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-
-vue-hot-reload-api@^2.3.0:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
- integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
-
-vue-loader@^15.9.2:
- version "15.9.2"
- resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.2.tgz#ae01f5f4c9c6a04bff4483912e72ef91a402c1ae"
- integrity sha512-oXBubaY//CYEISBlHX+c2YPJbmOH68xXPXjFv4MAgPqQvUsnjrBAjCJi8HXZ/r/yfn0tPL5VZj1Zcp8mJPI8VA==
- dependencies:
- "@vue/component-compiler-utils" "^3.1.0"
- hash-sum "^1.0.2"
- loader-utils "^1.1.0"
- vue-hot-reload-api "^2.3.0"
- vue-style-loader "^4.1.0"
-
-vue-multiselect@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/vue-multiselect/-/vue-multiselect-2.1.6.tgz#5be5d811a224804a15c43a4edbb7485028a89c7f"
- integrity sha512-s7jmZPlm9FeueJg1RwJtnE9KNPtME/7C8uRWSfp9/yEN4M8XcS/d+bddoyVwVnvFyRh9msFo0HWeW0vTL8Qv+w==
-
-vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"
- integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==
- dependencies:
- hash-sum "^1.0.2"
- loader-utils "^1.0.2"
+source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-vue-template-compiler@^2.6.11:
- version "2.6.11"
- resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
- integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
+speedline-core@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz"
+ integrity sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==
dependencies:
- de-indent "^1.0.2"
- he "^1.1.0"
+ "@types/node" "*"
+ image-ssim "^0.2.0"
+ jpeg-js "^0.4.1"
-vue-template-es2015-compiler@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
- integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
+streamx@^2.15.0, streamx@^2.21.0:
+ version "2.23.0"
+ resolved "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz"
+ integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==
+ dependencies:
+ events-universal "^1.0.0"
+ fast-fifo "^1.3.2"
+ text-decoder "^1.1.0"
-vue@^2.6.11:
- version "2.6.11"
- resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
- integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
-ware@^1.0.1, ware@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4"
- integrity sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
- wrap-fn "^0.1.0"
+ ansi-regex "^5.0.1"
-watchpack-chokidar2@^2.0.0:
+stubborn-fs@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
- integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
+ resolved "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz"
+ integrity sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==
dependencies:
- chokidar "^2.1.8"
+ stubborn-utils "^1.0.1"
+
+stubborn-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz"
+ integrity sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-watchpack@^1.6.1:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa"
- integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==
+tar-fs@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz"
+ integrity sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==
dependencies:
- graceful-fs "^4.1.2"
- neo-async "^2.5.0"
+ pump "^3.0.0"
+ tar-stream "^3.1.5"
optionalDependencies:
- chokidar "^3.4.0"
- watchpack-chokidar2 "^2.0.0"
+ bare-fs "^4.0.1"
+ bare-path "^3.0.0"
-webpack-cli@^3.3.11:
- version "3.3.11"
- resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631"
- integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==
- dependencies:
- chalk "2.4.2"
- cross-spawn "6.0.5"
- enhanced-resolve "4.1.0"
- findup-sync "3.0.0"
- global-modules "2.0.0"
- import-local "2.0.0"
- interpret "1.2.0"
- loader-utils "1.2.3"
- supports-color "6.1.0"
- v8-compile-cache "2.0.3"
- yargs "13.2.4"
-
-webpack-sources@^1.4.0, webpack-sources@^1.4.1:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
- integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+tar-stream@^3.1.5:
+ version "3.1.7"
+ resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz"
+ integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==
dependencies:
- source-list-map "^2.0.0"
- source-map "~0.6.1"
+ b4a "^1.6.4"
+ fast-fifo "^1.2.0"
+ streamx "^2.15.0"
-webpack@^4.43.0:
- version "4.43.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
- integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
+text-decoder@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz"
+ integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==
dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-module-context" "1.9.0"
- "@webassemblyjs/wasm-edit" "1.9.0"
- "@webassemblyjs/wasm-parser" "1.9.0"
- acorn "^6.4.1"
- ajv "^6.10.2"
- ajv-keywords "^3.4.1"
- chrome-trace-event "^1.0.2"
- enhanced-resolve "^4.1.0"
- eslint-scope "^4.0.3"
- json-parse-better-errors "^1.0.2"
- loader-runner "^2.4.0"
- loader-utils "^1.2.3"
- memory-fs "^0.4.1"
- micromatch "^3.1.10"
- mkdirp "^0.5.3"
- neo-async "^2.6.1"
- node-libs-browser "^2.2.1"
- schema-utils "^1.0.0"
- tapable "^1.1.3"
- terser-webpack-plugin "^1.4.3"
- watchpack "^1.6.1"
- webpack-sources "^1.4.1"
-
-which-module@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
- integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+ b4a "^1.6.4"
-which@^1.0.5, which@^1.2.14, which@^1.2.4, which@^1.2.9, which@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
+third-party-web@^0.27.0, third-party-web@latest:
+ version "0.27.0"
+ resolved "https://registry.npmjs.org/third-party-web/-/third-party-web-0.27.0.tgz"
+ integrity sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==
-word-wrap@~1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
- integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+tldts-core@^7.0.22:
+ version "7.0.22"
+ resolved "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.22.tgz"
+ integrity sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==
-worker-farm@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
- integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+tldts-icann@^7.0.17:
+ version "7.0.22"
+ resolved "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.22.tgz"
+ integrity sha512-Wb5HEhrSy+zJtdJ6gop7ZNQ/Iacz/0c8t+6Kp1QoT84VRfc0TfPJLrb8f6YuRvCUOVjU889KJlPcG+5glVX8GQ==
dependencies:
- errno "~0.1.7"
+ tldts-core "^7.0.22"
-wrap-ansi@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
- integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
- dependencies:
- ansi-styles "^3.2.0"
- string-width "^3.0.0"
- strip-ansi "^5.0.0"
+tslib@^2.0.1, tslib@^2.8.0:
+ version "2.8.1"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-wrap-ansi@^6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
- integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+type-fest@^4.18.2:
+ version "4.41.0"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz"
+ integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==
+
+typed-query-selector@^2.12.0:
+ version "2.12.0"
+ resolved "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz"
+ integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==
+
+undici-types@~7.16.0:
+ version "7.16.0"
+ resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz"
+ integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==
+
+webdriver-bidi-protocol@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.0.tgz"
+ integrity sha512-U9VIlNRrq94d1xxR9JrCEAx5Gv/2W7ERSv8oWRoNe/QYbfccS0V3h/H6qeNeCRJxXGMhhnkqvwNrvPAYeuP9VA==
+
+when-exit@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz"
+ integrity sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
-wrap-fn@^0.1.0:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845"
- integrity sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=
- dependencies:
- co "3.1.0"
-
wrappy@1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-write@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
- integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
- dependencies:
- mkdirp "^0.5.1"
+ resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+ws@^7.0.0:
+ version "7.5.10"
+ resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz"
+ integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
-y18n@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
- integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+ws@^8.19.0:
+ version "8.19.0"
+ resolved "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz"
+ integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==
-yallist@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
- integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+xdg-basedir@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz"
+ integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==
-yallist@^3.0.2:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+xtend@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-yargs-parser@^13.1.0:
- version "13.1.2"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
- integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-yargs-parser@^18.1.1:
- version "18.1.3"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
- integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
+yargs-parser@^21.0.0, yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-yargs@13.2.4:
- version "13.2.4"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
- integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
- dependencies:
- cliui "^5.0.0"
- find-up "^3.0.0"
- get-caller-file "^2.0.1"
- os-locale "^3.1.0"
- require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^3.0.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^13.1.0"
-
-yargs@^15.3.1:
- version "15.3.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
- integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
+yargs@^17.3.1, yargs@^17.7.2:
+ version "17.7.2"
+ resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
dependencies:
- cliui "^6.0.0"
- decamelize "^1.2.0"
- find-up "^4.1.0"
- get-caller-file "^2.0.1"
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^4.2.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^18.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
-yauzl@^2.2.1:
+yauzl@^2.10.0:
version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+ resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz"
+ integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
-z-schema-errors@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/z-schema-errors/-/z-schema-errors-0.0.1.tgz#e06270a4ca43925729f25764789ca9f46bff0f7d"
- integrity sha1-4GJwpMpDklcp8ldkeJyp9Gv/D30=
- dependencies:
- xtend "^4.0.0"
-
-z-schema@^3.0.1:
- version "3.25.1"
- resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.25.1.tgz#7e14663be2b96003d938a56f644fb8561643fb7e"
- integrity sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==
- dependencies:
- core-js "^2.5.7"
- lodash.get "^4.0.0"
- lodash.isequal "^4.0.0"
- validator "^10.0.0"
- optionalDependencies:
- commander "^2.7.1"
+zod@^3.24.1:
+ version "3.25.76"
+ resolved "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz"
+ integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==