Skip to content

Commit ddc700b

Browse files
committed
i18n(french): sync Anchor Flash Loan challenge
1 parent 60b6138 commit ddc700b

File tree

30 files changed

+359
-33
lines changed

30 files changed

+359
-33
lines changed

src/app/content/challenges/anchor-escrow/fr/pages/make.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ Ici, nous ajoutons deux contrôles de validation. Un sur l'argument `amount` et
142142

143143
Certaines extensions de SPL Token-2022, par exemple les hooks de transfert, les transferts confidentiels, les états de compte par défaut, peuvent introduire des vulnérabilités telles que le blocage des transferts, le verrouillage des fonds et provoquer des rug pulls dans la logique des escrows, des vaults ou des CPIs.
144144

145-
146145
- Assurez-vous que `mint_a` et `mint_b` appartiennent au même programme de jetons afin d'éviter les échecs de CPI.
147146
- Utilisez des jetons correctement audités (par exemple, USDC, wSOL) issus du programme standard SPL-Token.
148147
- Évitez les mints de Token-2022 non vérifiées ou complexes.

src/app/content/challenges/anchor-flash-loan/fr/challenge.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { ArticleSection } from "../../../../components/ArticleSection/ArticleSec
22

33
# Prêt Flash avec Anchor
44

5+
![Anchor Flash Loan](/graphics/challenge-banners/anchor-flash-loan.png)
6+
57
L'introspection des instructions est une fonctionnalité puissante qui permet à un programme d'examiner et d'analyser d'autres instructions au sein de la même transactions. Cela inclut les instructions qui n'ont pas encore été exécutées, donnant à votre programme la possibilité de "regarder dans le futur" et de prendre des décisions basées sur ce qui se passera plus tard dans la transaction.
68

79
C'est un peu comme si vous aviez une vision à rayons X pour les transactions : votre programme peut voir l'ensemble de la transaction pour comprendre la séquence complète des opérations avant de décider de la marche à suivre.

src/app/content/challenges/anchor-flash-loan/fr/pages/borrow.mdx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ Vient maintenant la partie critique de la sécurité : l'utilisation de l'intros
4242

4343
Nous commençons par accéder au sysvar `instructions` qui contient les informations sur toutes les instructions de la transaction actuelle :
4444

45-
4645
```rust
4746
/*
4847
Instruction Introspection
@@ -56,6 +55,7 @@ let ixs = ctx.accounts.instructions.to_account_info();
5655

5756
Enfin, nous effectuons la vérification la plus critique : nous nous assurons que la dernière instruction de la transaction est une instruction de remboursement valide :
5857
- Nous commençons par vérifier le nombre d'instructions et nous nous assurons que nous chargeons la dernière instruction de la transaction
58+
- Ensuite, nous vérifions le nombre d'instructions et nous assurons que nous chargeons la dernière instruction de la transaction
5959
- TNous vérifions ensuite qu'il s'agit bien de l'instruction de remboursement en vérifiant l'ID du programme et le discriminateur de l'instruction
6060
- Nous terminons en vérifiant que les ATAs passés dans l'instruction de remboursement sont les mêmes que ceux que nous passons dans notre instruction `Borrow`
6161

@@ -66,6 +66,10 @@ Enfin, nous effectuons la vérification la plus critique : nous nous assurons qu
6666
Make sure that the last instruction of this transaction is a repay instruction
6767
*/
6868

69+
// Check if this is the first instruction in the transaction.
70+
let current_index = load_current_index_checked(&ctx.accounts.sysvar_instructions)?;
71+
require_eq!(current_index, 0, ProtocolError::InvalidIx);
72+
6973
// Check how many instruction we have in this transaction
7074
let instruction_sysvar = ixs.try_borrow_data()?;
7175
let len = u16::from_le_bytes(instruction_sysvar[0..2].try_into().unwrap());

src/app/content/challenges/anchor-flash-loan/fr/verify.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,3 @@ Maintenant, mettez en pratique ce que vous avez appris. Créez un programme de p
1515
Votre programme doit vérifier le `borrowed_amount` à la fin de la transaction et rembourser le protocole avec le montant correct.
1616
</Requirement>
1717
</RequirementList>
18-

src/app/content/challenges/assembly-timeout/fr/challenge.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ call sol_get_clock_sysvar
7171
ldxdw r1, [r1+0x0000]
7272
```
7373

74-
L'appel système `sol_get_clock_sysvar` écrit les données actuelles de `Clock` dans `r1`.
74+
L'appel système `sol_get_clock_sysvar` écrit les données `Clock` actuelles à l'adresse mémoire spécifiée dans `r1`.
7575

7676
Comme la structure Clock fait 40 octets (trop grande pour les registres qui ne contiennent que 8 octets chacun), nous utilisons la pile pour un stockage rapide sans allocation avec nettoyage automatique.
7777

src/app/content/challenges/assembly-timeout/fr/verify.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Créez un programme qui n'a qu'une seule instruction. Il doit :
1212
- Utiliser les 8 premiers octets du compte `Clock` pour récupérer le slot actuel.
1313
- Vérifier si le slot actuel est supérieur au slot passé dans l'instruction. Si c'est le cas, renvoyer le code d'erreur 1.
1414

15-
> Pour obtenir le bon décalage des données d'instruction, vous pouvez utiliser notre [outil](https://sbpf.xyz). N'oubliez pas d'ajouter un compte et de définir sa longueur de données à 40 !
15+
> Pour obtenir le bon décalage des données d'instruction, vous pouvez utiliser notre [outil](https://sbpf.xyz). N'oubliez pas d'ajouter un compte et de définir sa longueur de données à 40 !
1616
1717
Commencez par installer le package sBPF comme expliqué dans la [section outillage](/en/courses/introduction-to-assembly/tooling) du cours Introduction à l'Assembly et compilez votre programme en utilisant la commande suivante dans votre terminal :
1818

src/app/content/challenges/pinocchio-escrow/fr/pages/make.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Voici les comptes dont le contexte a besoin :
1818
- system_program: le programme système. Doit être executable
1919
- token_program: le programme de jeton. Doit être executable
2020

21-
**Remarque** : Nous allons utiliser les types introduits dans l'[Introduction à Pinocchio](/en/courses/introduction-to-pinocchio/pinocchio-accounts).
21+
**Remarque** : Nous allons utiliser les assistants que nous avons présentés dans l'[Introduction à Pinocchio](/en/courses/introduction-to-pinocchio/pinocchio-accounts).
2222

2323
Cela se présente donc ainsi :
2424

src/app/content/challenges/pinocchio-escrow/fr/pages/refund.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,3 @@ Toutes les données dont nous avons besoin pour exécuter la logique se trouvent
2525
<ArticleSection name="Logique" id="logic" level="h2" />
2626

2727
Là encore, nous allons vous laisser voler de vos propres ailes et créer votre propre logique ! N'hésitez pas à consulter les sections précédentes pour voir comment nous avons implémenté les instructions *make* et *take* instruction ou à nous contacter sur Discord si vous êtes bloqué.
28-

src/app/content/challenges/pinocchio-flash-loan/fr/pages/borrow.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ impl<'a> TryFrom<&'a [AccountInfo]> for LoanAccounts<'a> {
3131
let [borrower, protocol, loan, instruction_sysvar, _token_program, _system_program, token_accounts @ ..] = accounts else {
3232
return Err(ProgramError::NotEnoughAccountKeys);
3333
};
34-
34+
3535
if !pubkey_eq(instruction_sysvar.key(), &INSTRUCTIONS_ID) {
3636
return Err(ProgramError::UnsupportedSysvar);
3737
}
@@ -192,8 +192,8 @@ for (i, amount) in self.instruction_data.amounts.iter().enumerate() {
192192
let protocol_token_account = &self.accounts.token_accounts[i * 2];
193193
let borrower_token_account = &self.accounts.token_accounts[i * 2 + 1];
194194

195-
// Get the balance of the borrower's token account and add the fee to it so we can save it to the loan account
196-
let balance = get_token_amount(&borrower_token_account.try_borrow_data()?)?;
195+
// Get the balance of the protocol's token account and add the fee to it so we can save it to the loan account
196+
let balance = get_token_amount(&protocol_token_account.try_borrow_data()?)?;
197197
let balance_with_fee = balance.checked_add(
198198
amount.checked_mul(self.instruction_data.fee as u64)
199199
.and_then(|x| x.checked_div(10_000))

src/app/content/challenges/pinocchio-flash-loan/fr/verify.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,3 @@ Il est temps de tester vos connaissances. Créez un programme de prêt flash ave
1515
Votre programme doit rembourser au protocole le montant emprunté dans la même transaction.
1616
</Requirement>
1717
</RequirementList>
18-

0 commit comments

Comments
 (0)