Skip to content
Closed
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
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
---
title: Liste de contrôle de sécurité des contrats intelligents
description: Un flux de travail suggéré pour la rédaction de contrats intelligents sécurisés
title: "Liste de contrôle de sécurité des contrats intelligents"
description: "Un flux de travail suggéré pour la rédaction de contrats intelligents sécurisés"
author: "Trailofbits"
tags:
- "contrats intelligents"
- "sécurité"
- "solidity"
tags: [ "contrats intelligents", "sécurité", "solidité" ]
skill: intermediate
lang: fr
published: 2020-09-07
source: Créer des contrats sécurisés
source: Building secure contracts
sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/workflow.md
---

Expand All @@ -19,26 +16,25 @@ Voici un processus de haut niveau que nous vous recommandons de suivre lors de l

Recherchez les vulnérabilités connues :

- Vérifiez vos contrats avec [Slither](https://github.com/crytic/slither). Cet outil intègre plus de 40 détecteurs pour les vulnérabilités connues. Exécutez-le à chaque enregistrement d'un nouveau code et assurez-vous que son rapport soit positif (ou utilisez le mode triage pour mettre sous silence certains problèmes).
- Vérifiez vos contrats avec [Crytic](https://crytic.io/). Il vérifie 50 vulnérabilités que Slither ne détecte pas. Cryptic peut également aider votre équipe à rester le maître du jeu en faisant apparaître facilement les problèmes de sécurité dans les Pull Requests sur GitHub.
- Examinez vos contrats avec [Slither](https://github.com/crytic/slither). Cet outil intègre plus de 40 détecteurs pour les vulnérabilités connues. Exécutez-le à chaque enregistrement d'un nouveau code et assurez-vous que son rapport soit positif (ou utilisez le mode triage pour mettre sous silence certains problèmes).
- Examinez vos contrats avec [Crytic](https://crytic.io/). Il vérifie 50 vulnérabilités que Slither ne détecte pas. Cryptic peut également aider votre équipe à rester le maître du jeu en faisant apparaître facilement les problèmes de sécurité dans les Pull Requests sur GitHub.

Considérez les caractéristiques spéciales de votre contrat :

- Vos contrats sont-ils évolutifs ? Vérifiez votre code de mise à niveau pour les défauts avec [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) ou [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/). Nous avons documenté 17 façons dont les mises à niveau peuvent mal tourner.
- Vos contrats sont-ils évolutifs ? Examinez votre code de mise à niveau pour y déceler des failles avec [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) ou [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/). Nous avons documenté 17 façons dont les mises à niveau peuvent mal tourner.
- Est-ce que vos contrats doivent se conformer aux ERC? Vérifiez-les avec [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance). Cet outil identifie instantanément les écarts de six spécifications courantes.
- Avez-vous des tests unitaires dans Truffe ? Enrichissez-les avec [`slither-prop`](https://github.com/crytic/slither/wiki/Property-generation). Il génère automatiquement une suite de propriétés de sécurité robustes pour les fonctionnalités de l'ERC20 en fonction de votre code spécifique.
- Intégrez-vous des jetons tiers ? Consultez notre [liste de contrôle d'intégration de jetons](/developers/tutorials/token-integration-checklist/) avant de vous fier à des contrats externes.
- Intégrez-vous des jetons tiers ? Examinez notre [liste de contrôle d'intégration de jetons](/developers/tutorials/token-integration-checklist/) avant de dépendre de contrats externes.

Inspectez visuellement les fonctions de sécurité critiques de votre code :

- Examinez l'afficheur [inheritance-graph](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) de Slither. Évitez les surcharges involontaires et les problèmes de linéarisation C3.
- Examinez l'afficheur [résumé de fonction](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) de Slither. Il signale la visibilité des fonctions et les contrôles d'accès.
- Examinez l'afficheur [variables et accès](https://github.com/trailofbits/slither/wiki/Printer-documentation#variables-written-and-authorization) de Slither. Il signale les contrôles d'accès aux variables d'état.
- Examinez l'imprimante [inheritance-graph](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) de Slither. Évitez les surcharges involontaires et les problèmes de linéarisation C3.
- Examinez l'imprimante [function-summary](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) de Slither. Il signale la visibilité des fonctions et les contrôles d'accès.
- Examinez l'imprimante [vars-and-auth](https://github.com/trailofbits/slither/wiki/Printer-documentation#variables-written-and-authorization) de Slither. Il signale les contrôles d'accès aux variables d'état.

Documentez les propriétés critiques de sécurité et utilisez des générateurs de tests automatisés pour les évaluer :

- Apprenez à [documenter les propriétés de sécurité de votre code](/developers/tutorials/guide-to-smart-contract-security-tools/). C'est difficile au départ, mais c'est l'activité la plus importante pour obtenir un bon résultat. C'est également un prérequis à l'utilisation des techniques avancées de ce tutoriel.
- Definissez les propriétés de sécurité en Solidity, pour les utiliser avec [Echidna](https://github.com/crytic/echidna) et [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html). Concentrez-vous sur votre automate, les contrôles d'accès, les opérations arithmétiques, les interactions externes et la conformité aux normes.
- Définissez les propriétés de sécurité dans Solidity, pour les utiliser avec [Echidna](https://github.com/crytic/echidna) et [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html). Concentrez-vous sur votre automate, les contrôles d'accès, les opérations arithmétiques, les interactions externes et la conformité aux normes.
- Définissez les propriétés de sécurité avec [l'API Python de Slither](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/). Concentrez-vous sur l'héritage, les dépendances des variables, les contrôles d'accès et d'autres problèmes structurels.
- Exécutez vos tests de propriété sur chaque commit avec [Crytic](https://crytic.io). Crytic peut consommer et évaluer les tests de propriétés de sécurité pour que tout le monde dans votre équipe puisse facilement voir qu'ils passent sur GitHub. Les tests en échec peuvent bloquer les commits.

Expand All @@ -51,6 +47,6 @@ Enfin, soyez attentifs aux problèmes que les outils automatisés ne peuvent pas

## Demandez de l'aide {#ask-for-help}

[Les heures de bureau d'Ethereum](https://calendly.com/dan-trailofbits/office-hours) se déroulent tous les mardis après-midi. Ces sessions en tête à tête sont l'occasion de nous poser toutes vos questions sur la sécurité, de dépannage à l'aide de nos outils et d'obtenir des commentaires d'experts sur votre approche actuelle. Nous vous aiderons à travailler à travers ce guide.
Les [heures de permanence Ethereum](https://calendly.com/dan-trailofbits/office-hours) ont lieu tous les mardis après-midi. Ces sessions en tête à tête sont l'occasion de nous poser toutes vos questions sur la sécurité, de dépannage à l'aide de nos outils et d'obtenir des commentaires d'experts sur votre approche actuelle. Nous vous aiderons à travailler à travers ce guide.

Rejoignez notre Slack : [Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw). Nous sommes toujours disponibles dans les canaux #crytic et #ethereum si vous avez des questions.
Original file line number Diff line number Diff line change
@@ -1,44 +1,42 @@
---
title: Envoyer des jetons avec ethers.js
description: Guide à l'intention des débutants sur l'envoi de jetons à l'aide d'ether.js.
title: "Envoyer des jetons à l'aide d'ethers.js"
description: "Guide pour débutants sur l'envoi de jetons à l'aide d'ethers.js."
author: Kim YongJun
tags:
- "ETHERS.JS"
- "ERC-20"
- "JETONS"
tags: [ "ETHERS.JS", "ERC-20", "JETONS" ]
skill: beginner
lang: fr
published: 2021-04-06
---

## Envoyer un jeton avec ethers.js (5.0) {#send-token}
## Envoyer un jeton avec ethers.js(5.0) {#send-token}

### Dans ce tutoriel, vous allez apprendre à {#you-learn-about}
### Dans ce tutoriel, vous apprendrez comment {#you-learn-about}

- Importer ethers.js
- Transférer un jeton
- Définir le prix du gaz en fonction de l'état du trafic réseau
- Définir le prix du gaz en fonction de l'état du trafic du réseau

### Pour commencer {#to-get-started}

Pour commencer, nous devons d'abord importer la bibliothèque ethers.js dans notre JavaScript en intégrant ethers.js (5.0)
Pour commencer, nous devons d'abord importer la bibliothèque ethers.js dans notre JavaScript.
Inclure ethers.js(5.0)

### Installation {#install-ethersjs}

```shell
/home/ricmoo> npm install --save ethers
```

ES6 dans le navigateur :
ES6 dans le navigateur

```html
<script type="module">
import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
// Your code here...
// Votre code ici...
</script>
```

ES3 (UMD) dans le navigateur :
ES3 (UMD) dans le navigateur

```html
<script
Expand All @@ -49,19 +47,19 @@ ES3 (UMD) dans le navigateur :

### Paramètres {#param}

1. **`contract_address`** : l'adresse du contrat du jeton (l'adresse du contrat est nécessaire lorsque le jeton que vous voulez transférer n'est pas de l'ether)
2. **`send_token_amount`** : le montant que vous désirez envoyer au destinataire
1. **`contract_address`** : adresse du contrat de jeton (l'adresse du contrat est nécessaire lorsque le jeton que vous voulez transférer n'est pas de l'ether)
2. **`send_token_amount`** : le montant que vous souhaitez envoyer au destinataire
3. **`to_address`** : l'adresse du destinataire
4. **`send_account`** : l'adresse de l'expéditeur
5. **`private_key`** : clé privée de l'expéditeur afin de signer la transaction et de transférer véritablement les jetons
5. **`private_key`** : clé privée de l'expéditeur pour signer la transaction et transférer les jetons

## Remarque {#notice}

`signTransaction(tx)` est retiré car `sendTransaction()` le fait en interne.
`signTransaction(tx)` est supprimé car `sendTransaction()` s'en charge en interne.

## Procédure d'envoi {#procedure}

### 1. Se connecter au réseau (testnet) {#connect-to-network}
### 1. Se connecter au réseau (réseau de test) {#connect-to-network}

#### Définir le fournisseur (Infura) {#set-provider}

Expand Down Expand Up @@ -91,17 +89,17 @@ window.ethersProvider.getGasPrice() // gasPrice

### 5. Définir la transaction {#define-transaction}

Les variables définies ci-dessous sont dépendantes de `send_token()`
Les variables définies ci-dessous dépendent de `send_token()`

### Paramètres de la transaction {#transaction-params}
### Paramètres de transaction {#transaction-params}

1. **`send_account`** : adresse de l'expéditeur du jeton
2. **`to_address`** : adresse du destinataire du jeton
3. **`send_token_amount`** : nombre de jetons à envoyer
3. **`send_token_amount`** : le montant de jetons à envoyer
4. **`gas_limit`** : limite de gaz
5. **`gas_price`** : prix du gaz

[Voir ci-dessous pour savoir comment les utiliser](#how-to-use)
[Voir ci-dessous pour savoir comment l'utiliser](#how-to-use)

```javascript
const tx = {
Expand All @@ -114,16 +112,16 @@ const tx = {
}
```

### 6. Transférer {#transfer}
### 6. Transfert {#transfer}

```javascript
walletSigner.sendTransaction(tx).then((transaction) => {
console.dir(transaction)
alert("Send finished!")
alert("Envoi terminé !")
})
```

## Comment lutiliser  {#how-to-use}
## Comment l'utiliser {#how-to-use}

```javascript
let private_key =
Expand All @@ -146,9 +144,9 @@ send_token(
)
```

### Réussi ! {#success}
### Succès ! {#success}

![image de la transaction effectuée avec succès](./successful-transaction.png)
![image d'une transaction effectuée avec succès](./successful-transaction.png)

## send_token() {#send-token-method}

Expand All @@ -168,23 +166,23 @@ function send_token(
console.log(`gas_price: ${gas_price}`)

if (contract_address) {
// general token send
// envoi de jeton générique
let contract = new ethers.Contract(
contract_address,
send_abi,
walletSigner
)

// How many tokens?
// Combien de jetons ?
let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
console.log(`numberOfTokens: ${numberOfTokens}`)

// Send tokens
// Envoyer des jetons
contract.transfer(to_address, numberOfTokens).then((transferResult) => {
console.dir(transferResult)
alert("sent token")
alert("jeton envoyé")
})
} // ether send
} // envoi d'ether
else {
const tx = {
from: send_account,
Expand All @@ -201,10 +199,10 @@ function send_token(
try {
walletSigner.sendTransaction(tx).then((transaction) => {
console.dir(transaction)
alert("Send finished!")
alert("Envoi terminé !")
})
} catch (error) {
alert("failed to send!!")
alert("échec de l'envoi !!")
}
}
})
Expand Down
Loading