Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions fr/1/arrays.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Quand vous voulez regrouper des éléments, vous pouvez utiliser un **_tableau_*
uint[2] fixedArray;
// Un autre Tableau fixe, qui peut contenir 5 `string` :
string[5] stringArray;
// un Tableau dynamique, il n'a pas de taille fixe, il peut continuer de grandir :
// un Tableau dynamique. Il n'a pas de taille fixe, il peut continuer de grandir :
uint[] dynamicArray;
```

Expand All @@ -56,7 +56,7 @@ Vous pouvez aussi créer un tableau de **_structure_**. En utilisant la structur
Person[] people; // Tableau dynamique, on peut en rajouter sans limite.
```

Vous vous rappelez que les variables d'état sont stockées définitivement dans la blockchain ? Il peut donc être utile de créer des tableaux dynamique de structure pour stocker des données structurées dans votre contrat, un peu comme une base de données.
Vous vous rappelez que les variables d'état sont stockées définitivement dans la blockchain ? Il peut donc être utile de créer des tableaux dynamiques de structure pour stocker des données structurées dans votre contrat, un peu comme une base de données.

## Tableaux publics

Expand All @@ -69,6 +69,6 @@ Les autres contrats vont pouvoir lire (mais pas écrire) ce tableau. C'est donc

# A votre tour

Nous allons vouloir stocker une armée de zombies dans notre application. Et nous allons vouloir montrer tous nos zombies à d'autres applications, cette armée devra donc être publique.
Nous allons vouloir stocker une armée de zombies dans notre application. Et nous allons vouloir montrer tous nos zombies à d'autres applications. Cette armée devra donc être publique.

1. Créez un tableau public de **_structures_** `Zombie`, et appelez le `zombies`.
2 changes: 1 addition & 1 deletion fr/1/arraysstructs2.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,6 @@ numbers.push(15);

Faisons faire quelque chose à notre fonction createZombie !

1. Remplissez le corps de la fonction afin qu'elle crée un nouveau `Zombie` et qu'elle l'ajoute au tableau `zombies`. Les noms `name` et `dna` pour le nouveau Zombie devraient provenir des arguments de la fonction.
1. Remplissez le corps de la fonction afin qu'elle créée un nouveau `Zombie` et qu'elle l'ajoute au tableau `zombies`. Les noms `name` et `dna` pour le nouveau Zombie devraient provenir des arguments de la fonction.

2. Faites-le en une ligne de code pour garder les choses concises.
4 changes: 2 additions & 2 deletions fr/1/events.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ material:

Notre contrat est presque fini ! nous allons maintenant ajouter un **_ évènement _** (event).

Un **_ évènement _** est un moyen pour votre contrat d'indiquer à votre application frontale (front-end) que quelque chose vient d'arriver sur la blockchain, l'application frontale pouvant être «à l'écoute» de certains événements pour prendre des mesures quand ils se produisent.
Un **_ évènement _** est un moyen pour votre contrat d'indiquer à votre application frontale (front-end) que quelque chose vient d'arriver sur la blockchain, l'application frontale pouvant être « à l'écoute » de certains événements pour prendre des mesures quand ils se produisent.

Exemple :

Expand All @@ -101,7 +101,7 @@ YourContract.IntegersAdded(function(error, result) {

# A votre tour

A chaque fois qu'un nouveau zombie est créé, nous voulons qu'un évènement informe l'application frontale, ainsi, elle pourra l'afficher.
A chaque fois qu'un nouveau zombie est créé, nous voulons qu'un évènement informe l'application frontale. Ainsi, elle pourra l'afficher.

1. Déclarez un `event` appelé `NewZombie`. Les arguments devront être `zombieId` (un `uint`), `name` (un `string`), et `dna` (un `uint`).

Expand Down
2 changes: 1 addition & 1 deletion fr/1/functions2.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,6 @@ Comme vous pouvez le voir, nous avons utilisé le mot-clé `private` après le n

# A votre tour.

La fonction `createZombie` de notre contrat est par défaut publique - cela veut dire que n'importe qui peut l'appeler et créer un nouveau Zombie dans notre contrat ! Changeons la en privée.
La fonction `createZombie` de notre contrat est par défaut publique - cela veut dire que n'importe qui peut l'appeler et créer un nouveau Zombie dans notre contrat ! Changeons-la en privée.

1. Modifiez `createZombie` pour que ce soit une fonction privée. N'oubliez pas la convention de nom !
6 changes: 3 additions & 3 deletions fr/1/functions3.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ En Solidity, une déclaration de fonction indique le type de la valeur retourné

La fonction ci-dessus ne change pas un état en Solidity - c.-à-d. elle ne change pas une valeur et n'écrit rien.

Dans ce cas là, nous pouvons la déclarer comme une fonction **_view_** (vue), cela veut dire qu'elle va seulement voir des données sans les modifier :
Dans ce cas-là, nous pouvons la déclarer comme une fonction **_view_** (vue), cela veut dire qu'elle va seulement voir des données sans les modifier :

```
function sayHello() public view returns (string) {
Expand All @@ -85,9 +85,9 @@ function _multiply(uint a, uint b) private pure returns (uint) {
return a * b;
}
```
Cette fonction ne lit aucune donnée du contrat - elle retourne une valeur qui dépend seulement de ses arguments. Dans ce cas là, nous déclarerons la fonction comme **_pure_**.
Cette fonction ne lit aucune donnée du contrat - elle retourne une valeur qui dépend seulement de ses arguments. Dans ce cas-là, nous déclarerons la fonction comme **_pure_**.

> Remarque: Il peut être difficile de se rappeler quand marquer les fonctions comme étant pure/view. Heureusement, le compilateur Solidity est bon pour vous avertir quand vous devriez utiliser l'un ou l'autre de ces modificateurs.
> Remarque: Il peut être difficile de se rappeler quand marquer les fonctions comme étant pure/view. Heureusement, le compilateur Solidity est bon pour vous avertir quand vous devez utiliser l'un ou l'autre de ces modificateurs.

# A votre tour

Expand Down
6 changes: 3 additions & 3 deletions fr/1/keccak256.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ Comment faire pour que notre fonction `_generateRandomDna` retourne un `uint` (p

Ethereum a la fonction de hachage `keccak256` intégrée, qui est une variante de SHA3. Une fonction de hachage permet fondamentalement de lier une chaîne d'entrée à un nombre hexadécimal aléatoire de 256 bits. Le moindre changement dans la chaîne provoquera un grand changement dans le hachage.

Cela sert à beaucoup de chose pour Ethereum, mais pour l'instant nous allons simplement l'utiliser pour générer un nombre pseudo-aléatoire.
Cela sert à beaucoup de choses pour Ethereum, mais pour l'instant nous allons simplement l'utiliser pour générer un nombre pseudo-aléatoire.

Exemple:
Exemple :

```
//6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5
Expand All @@ -72,7 +72,7 @@ keccak256("aaaac");
```
Comme vous pouvez le voir, les valeurs retournées sont complètement différentes alors qu'il y a seulement 1 caractère de changé à l'argument d'entrée.

> Remarque: La génération de nombres aléatoires **sécurisés** dans la blockchain est un problème très complexe. Notre méthode ici n'est pas sécurisée, mais comme la sécurité n'est pas la grande priorité de notre ADN Zombie, cela sera suffisant pour notre usage.
> Remarque : La génération de nombres aléatoires **sécurisés** dans la blockchain est un problème très complexe. Notre méthode ici n'est pas sécurisée, mais comme la sécurité n'est pas la grande priorité de notre ADN Zombie, cela sera suffisant pour notre usage.

## Conversion de type

Expand Down
2 changes: 1 addition & 1 deletion fr/1/puttingittogether.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Nous allons créer une fonction publique qui prend un paramètre, le nom du zomb

1. Créez une fonction `public` nommée `createRandomZombie`. Elle devra prendre seulement un paramètre `_name` (un `string`). _(Remarque : déclarez cette fonction `public`. de la même manière que vous avez déclaré la fonction précédente `private`)_

2. La première ligne de la fonction devra exécuter la fonction `_generateRandomDna` avec comme argument `_name` and stocker le résultat dans un `uint` nommé `randDna`.
2. La première ligne de la fonction devra exécuter la fonction `_generateRandomDna` avec comme argument `_name` et stocker le résultat dans un `uint` nommé `randDna`.

3. La deuxième ligne devra exécuter la fonction `_createZombie` avec comme arguments `_name` et `randDna`.

Expand Down
4 changes: 2 additions & 2 deletions fr/1/structs.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ struct Person {

Les structures vous permettent de créer des types de données plus complexes avec plusieurs propriétés.

> Remarque : Nous venons d'introduire un nouveau type, `string` (Chaîne de caractères). Les chaînes de caractères sont utilisées pour les données UTF-8 de longueur arbitraire. Ex. `string greeting = "Hello world!"`
> Remarque : Nous venons d'introduire un nouveau type, `string` (Chaîne de caractères). Les chaînes de caractères sont utilisées pour les données UTF-8 de longueur arbitraire. Exemple : `string greeting = "Hello world!"`

# A votre tour

Dans notre application, nous allons vouloir créer des zombies ! Et les zombies ont plusieurs propriétés, une structure est parfaitement adapté pour ça.
Dans notre application, nous allons vouloir créer des zombies ! Et les zombies ont plusieurs propriétés, une structure est parfaitement adaptée pour ça.

1. Créez une `struct` nommée `Zombie`.

Expand Down
4 changes: 2 additions & 2 deletions fr/1/web3js.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ function generateZombie(id, name, dna) {
}
```

Notre code JavaScript prends alors les valeurs générées dans `zombieDetails` ci-dessus, et utilise de la magie JavaScript (nous utilisons Vue.js) pour changer les images et appliquer des filtres CSS. Vous obtiendrez tout le code nécessaire dans une prochaine leçon.
Notre code JavaScript prend alors les valeurs générées dans `zombieDetails` ci-dessus, et utilise de la magie JavaScript (nous utilisons Vue.js) pour changer les images et appliquer des filtres CSS. Vous obtiendrez tout le code nécessaire dans une prochaine leçon.

# A votre tour d’essayer !

Allez-y - rentrer un nom dans le champ à droite, et regardez quel zombie vous obtiendrez !
Allez-y ! Entrez un nom dans le champ à droite, et regardez quel zombie vous obtiendrez !

**Une fois que vous avez un zombie qui vous satisfait, cliquez sur "Prochain Chapitre" ci-dessous pour enregistrer votre zombie et terminer la leçon 1 !**
6 changes: 3 additions & 3 deletions fr/2/00-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ header: Alors, vous êtes arrivé à la Leçon 2 !
roadmap: roadmap2.jpg
---

Vous m'impressionnez humain ! Vous êtes un meilleur codeur que j'aurais pensé.
Vous m'impressionnez humain ! Vous êtes un meilleur codeur que je ne l'aurais pensé.

La Leçon 2 va vous apprendre à **multiplier votre armée de zombie en les nourrissant avec d'autres formes de vie**.
La leçon 2 va vous apprendre à **multiplier votre armée de zombie en les nourrissant avec d'autres formes de vie**.

Nous allons voir des concepts Solidity plus avancés, nous vous recommandons fortement d'avoir fini la Leçon 1 avant de commencer.
Nous allons voir des concepts Solidity plus avancés, nous vous recommandons fortement d'avoir fini la leçon 1 avant de commencer.
16 changes: 8 additions & 8 deletions fr/2/1-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,26 @@ material:
answer: 1
---

Avec la Leçon 1, nous avons créé une fonction qui prend un nom, et qui l'utilise pour générer un zombie aléatoire, ce zombie est ajouté à la base de donnée de notre jeu stockée sur la blockchain.
Durant la leçon 1, nous avons créé une fonction qui prend un nom, et qui l'utilise pour générer un zombie aléatoire. Ce zombie est ajouté à la base de données de notre jeu stockée sur la blockchain.

Avec la Leçon 2, nous allons modifier notre application pour qu'elle ressemble plus à un jeu : Nous allons la rendre multijoueur, et nous allons aussi ajouter des manières plus amusantes de créer des zombies, au lieu de les générer juste aléatoirement.
Dans la leçon 2, nous allons modifier notre application pour qu'elle ressemble plus à un jeu : Nous allons la rendre multijoueur, et nous allons aussi ajouter des manières plus amusantes de créer des zombies, au lieu de simplement les générer aléatoirement.

Comment allons nous créer de nouveaux zombies ? En faisant manger d'autres formes de vie à nos zombies !
Comment allons-nous créer de nouveaux zombies ? En faisant manger d'autres formes de vie à nos zombies !


## Alimentation des zombies

Quand un zombie mange, il infecte l'hôte avec un virus. Le virus transforme l'hôte en un nouveau zombie qui va rejoindre votre armée. L'ADN du nouveau zombie va être calculée à partir de l'ADN du zombie et de l'ADN de l'hôte.
Quand un zombie mange, il infecte l'hôte avec un virus. Le virus transforme ainsi l'hôte en un nouveau zombie qui rejoindra votre armée. L'ADN du nouveau zombie va être calculé à partir de l'ADN du zombie et de l'ADN de l'hôte.

Et qu'est ce que les zombie préfèrent manger ?
Et qu'est-ce que les zombie préfèrent manger ?

Pour le savoir... Vous allez devoir finir la Leçon 2 !
Pour le savoir... Vous allez devoir finir la leçon 2 !


# A votre tour

Il y a un petit exemple à droite. Cliquez sur un humain pour voir ce qu'il arrive quand votre zombie le mange !
Il y a un petit exemple à droite. Cliquez sur un humain pour voir ce qui se passe lorsque votre zombie le mange !

Vous pouvez voir que l'ADN du nouveau zombie est déterminée par l'ADN de votre zombie et celui de l'hôte.
Vous pouvez voir que l'ADN du nouveau zombie est déterminé par l'ADN de votre zombie et celui de l'hôte.

Quand vous êtes prêt, cliquez sur "Prochain Chapitre" et nous allons rendre ce jeu multijoueur.
18 changes: 9 additions & 9 deletions fr/2/10-interactingcontracts.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ material:
}
---

Il est temps de nourrir nos zombies ! Et qu'est ce que les zombies aiment manger par dessus tout ?
Il est temps de nourrir nos zombies ! Et qu'est-ce que les zombies aiment manger par dessus tout ?

Eh bien, il se trouve que les CryptoZombies adorent manger des...

Expand Down Expand Up @@ -126,27 +126,27 @@ contract LuckyNumber {
}
}
```
Cela serait un simple contrat où n'importe qui pourrait stocker son nombre porte-bonheur, et il serait associé à leur adresse Ethereum. Ensuite n'importe qui pourrait regarder leur nombre porte-bonheur en utilisant leur adresse.
Cela serait un simple contrat où n'importe qui pourrait stocker son nombre porte-bonheur, et il serait associé à leur adresse Ethereum. Ensuite, n'importe qui pourrait regarder leur nombre porte-bonheur en utilisant leur adresse.

Maintenant, imaginons que nous avons un contrat externe qui voudrait lire les données de ce contrat en utilisant la fonction `getNum`.

Premièrement, nous devrions définir une **_interface_** du contract `LuckyNumber` :
Premièrement, nous devrions définir une **_interface_** du contrat `LuckyNumber` :

```
contract NumberInterface {
function getNum(address _myAddress) public view returns (uint);
}
```

Vous remarquerez que cela ressemble à la définition d'un contrat, avec quelques différences. Premièrement nous déclarons seulement les fonctions avec lesquelles nous souhaitons interagir - dans ce cas, `getNum` - et nous ne mentionnons aucune autre fonction ou variable.
Vous remarquerez que cela ressemble à la définition d'un contrat, avec quelques nuances. Premièrement, nous déclarons seulement les fonctions avec lesquelles nous souhaitons interagir - dans ce cas, `getNum` - et nous ne mentionnons aucune autre fonction ou variable.

Deuxièmement, nous ne définissons par de corps de fonction, à la place des `{` et `}`, nous finissons simplement la déclaration de la fonction avec un `;`.
Deuxièmement, nous ne définissons pas de corps de fonction. A la place des `{` et `}`, nous finissons simplement la déclaration de la fonction avec un `;`.

C'est un peu comme le squelette d'un contrat. C'est comme ça que le compilateur sait que c'est une interface.

En incluant cette interface dans le code de notre dapp, notre contrat sait à quoi ressemble les fonctions de l'autre contrat, comment les appeler, et quelle type de réponse en attendre.
En incluant cette interface dans le code de notre dapp, notre contrat sait à quoi ressemble les fonctions de l'autre contrat, comment les appeler, et quel type de réponse en attendre.

Nous verrons comment appeler les fonctions de l'autre contrat dans la prochaine leçon, pour l'instant nous allons déclarer notre interface pour le contrat CryptoKitties.
Nous verrons comment appeler les fonctions de l'autre contrat dans la prochaine leçon. Pour l'instant, nous allons déclarer notre interface pour le contrat CryptoKitties.

# A votre tour

Expand Down Expand Up @@ -182,10 +182,10 @@ function getKitty(uint256 _id) external view returns (
}
```

La fonction est un peu différente que ce dont nous avons l'habitude. Vous pouvez voir qu'elle retourne... un tas de différentes valeurs. Si vous venez d'un langage de programmation comme JavaScript, c'est différent - en Solidity une fonction peut retourner plus d'une valeur.
La fonction est un peu différente que ce dont nous avons l'habitude. Vous pouvez voir qu'elle retourne... un tas de différentes valeurs. Si vous venez d'un langage de programmation comme JavaScript, c'est différent - en Solidity, une fonction peut retourner plus d'une valeur.

Maintenant que nous savons à quoi ressemble notre fonction, nous pouvons l'utiliser pour créer une interface :

1. Définissez une interface appelée `KittyInterface`. C'est comme déclarer un nouveau contrat - nous utilisons le mot clé `contract`.
1. Définissez une interface appelée `KittyInterface`. C'est comme déclarer un nouveau contrat - nous utilisons le mot-clé `contract`.

2. Dans l'interface, définissez une fonction `getKitty` (qui devrait être un copier/coller de la fonction ci-dessus, mais avec un `;` après la déclaration `returns` au lieu de tout ce qu'il y a entre les `{}`).
4 changes: 2 additions & 2 deletions fr/2/11-interactingcontracts2.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,6 @@ De cette manière, votre contrat peut interagir avec n'importe quel autre contra

# A votre tour

Nous allons configurer notre contrat pour qu'il puisse lire le smart contract CryptoKitties !
Nous allons configurer notre contrat afin qu'il puisse lire le smart contract CryptoKitties !

1. J'ai sauvegardé l´adresse du contrat CryptoKitties dans le code pour vous, sous une variable appelée `ckAddress`. A la prochaine ligne, créer une `KittyInterface` nommée `kittyContract`, et initialisez la avec `ckAddress` - de la même manière que nous avons fait avec `numberContract` au dessus.
1. J'ai sauvegardé l´adresse du contrat CryptoKitties dans le code pour vous, sous une variable appelée `ckAddress`. A la prochaine ligne, créez une `KittyInterface` nommée `kittyContract`, et initialisez-la avec `ckAddress` - de la même manière que ce que nous avons fait avec `numberContract` ci-dessus.
4 changes: 2 additions & 2 deletions fr/2/12-multiplereturns.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,11 @@ function getLastReturnValue() external {

# A votre tour

Il est temps d'interagir avec le contrat CryptoKitties !
Il est temps d'intéragir avec le contrat CryptoKitties !

Nous allons créer une fonction qui récupère les gènes d'un chaton à partir du contrat :

1. Créez une fonction appelée `feedOnKitty`. Elle prendra 2 paramètres `uint`, `_zombieId` et `_kittyId` et elle devra être `public`.
1. Créez une fonction appelée `feedOnKitty`. Elle prendra 2 paramètres `uint`, `_zombieId` et `_kittyId` et devra être `public`.

2. La fonction devra d'abord déclarer un `uint` nommé `kittyDna`.

Expand Down
Loading