> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plasma.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Démarrage rapide

> Configurez votre environnement et déployez un contrat sur le Plasma Testnet avec Hardhat ou Foundry.

Ce guide couvre la configuration de l'environnement, le déploiement de contrats et l'interaction avec le testnet compatible EVM de Plasma en utilisant Hardhat. Il suppose une familiarité de base avec les outils Ethereum et le développement de smart contracts.

## Prérequis

* Node.js 20+
* Connaissance de base du développement Ethereum
* Wallet de navigateur

## Configuration de l'environnement

Utilisez Hardhat pour construire et déployer les contrats.

### Configuration de Hardhat

1. Créez un nouveau répertoire de projet et initialisez :

   ```shell theme={null}
   mkdir my-plasma-project
   cd my-plasma-project
   npm init -y
   npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
   npm install dotenv
   npx hardhat init
   ```
2. Suivez les étapes pour créer un projet JavaScript. Sauvegardez le projet où vous voulez. Vous n'avez probablement pas besoin d'un fichier `.gitignore` pour ce démarrage rapide.
3. Configurez `hardhat.config.js` pour le testnet Plasma :

   ```javascript theme={null}
   require("@nomicfoundation/hardhat-toolbox");
   require("dotenv").config();

   /** @type import('hardhat/config').HardhatUserConfig */
   module.exports = {
     solidity: "0.8.28",
     networks: {
       plasmaTestnet: {
         url: process.env.RPC_ENDPOINT,
         chainId: 9746,
         accounts: [process.env.PRIVATE_KEY] // We'll set this up next.
       }
     }
   };
   ```

## Configuration du wallet et du testnet

### Ajouter le Plasma Testnet à votre wallet de navigateur

1. Ouvrez votre wallet de navigateur (MetaMask, Trust Wallet ou Rabby) et cliquez sur le sélecteur de réseau.
2. Sélectionnez l'option pour ajouter un réseau personnalisé (par exemple **Ajouter un réseau**, **Ajouter manuellement** ou **Ajouter un réseau personnalisé**).
3. Saisissez ces détails :
   * **Nom du réseau** : Plasma Testnet
   * **Nouvelle URL RPC** : `https://testnet-rpc.plasma.to`
   * **Chain ID** : `9746`
   * **Symbole de la devise** : `XPL`
   * **URL de l'explorateur de blocs** : `https://testnet.plasmascan.to`
4. Enregistrez le réseau et basculez vers le Plasma Testnet dans votre wallet.

### Obtenir des tokens de testnet

1. Copiez l'adresse de votre wallet depuis votre wallet de navigateur.
2. Visitez [openfaucet.org](https://openfaucet.org/).
3. Saisissez votre adresse et demandez des tokens de testnet.
4. Attendez que la transaction se termine (elle devrait apparaître dans votre wallet en quelques secondes).

### Configurer les variables d'environnement

1. Exportez la clé privée de votre compte en utilisant les paramètres de compte de votre wallet de navigateur.
2. Créez un fichier `.env` à la racine de votre projet :

   ```shell theme={null}
   PRIVATE_KEY=your_private_key_here
   RPC_ENDPOINT=https://testnet-rpc.plasma.to
   ```

<Warning>
  Ne commitez jamais votre clé privée ou votre mnémonique dans le contrôle de version. Ajoutez `.env` à votre fichier `.gitignore`.
</Warning>

## Écrire un smart contract simple

1. Créez un contrat de stockage basique `contracts/SimpleStorage.sol` :

   ```solidity theme={null}
   // SPDX-License-Identifier: MIT
   pragma solidity ^0.8.28;

   contract SimpleStorage {
       string private storedData;
       
       event DataStored(string data);
       
       constructor() {
           storedData = "Hello, Plasma!";
       }
       
       function setData(string memory data) public {
           storedData = data;
           emit DataStored(data);
       }
       
       function getData() public view returns (string memory) {
           return storedData;
       }
   }
   ```
2. Compilez le contrat :

   ```shell theme={null}
   npx hardhat compile
   ```

   Cela devrait produire quelque chose comme :

   ```plaintext theme={null}
   Downloading compiler 0.8.28
   Downloading compiler 0.8.28
   Compiled 2 Solidity files successfully (evm target: paris).
   ```

## Tests

1. Créez un script de test `test/SimpleStorage.js` :

   ```javascript theme={null}
   const { expect } = require("chai");

   describe("SimpleStorage", function () {
     let simpleStorage;

     beforeEach(async function () {
       const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
       simpleStorage = await SimpleStorage.deploy();
       await simpleStorage.waitForDeployment();
     });

     it("Should return the initial greeting", async function () {
       expect(await simpleStorage.getData()).to.equal("Hello, Plasma!");
     });

     it("Should update the stored data", async function () {
       await simpleStorage.setData("Updated data");
       expect(await simpleStorage.getData()).to.equal("Updated data");
     });
   });
   ```
2. Exécutez les tests :

   ```shell theme={null}
   npx hardhat test
   ```

   Cela devrait produire quelque chose comme :

   ```plaintext theme={null}
   Lock
     Deployment
       ✔ Should set the right unlockTime (454ms)
       ✔ Should set the right owner
       ✔ Should receive and store the funds to lock
       ✔ Should fail if the unlockTime is not in the future
     Withdrawals
       Validations
         ✔ Should revert with the right error if called too soon
         ✔ Should revert with the right error if called from another account
         ✔ Shouldn't fail if the unlockTime has arrived and the owner calls it
       Events
         ✔ Should emit an event on withdrawals
       Transfers
         ✔ Should transfer the funds to the owner

   SimpleStorage
     ✔ Should return the initial greeting
     ✔ Should update the stored data


   11 passing (541ms)
   ```

### Déployer sur le Plasma Testnet

1. Créez d'abord un répertoire `scripts` :

   ```shell theme={null}
   mkdir scripts
   ```
2. Ensuite, créez un script pour déployer le contrat `scripts/deploy.js` :

   ```javascript theme={null}
   async function main() {
     const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
     
     console.log("Deploying SimpleStorage...");
     const simpleStorage = await SimpleStorage.deploy();
     await simpleStorage.waitForDeployment();
     
     const address = await simpleStorage.getAddress();
     console.log("SimpleStorage deployed to:", address);
   }

   main()
     .then(() => process.exit(0))
     .catch((error) => {
       console.error(error);
       process.exit(1);
     });
   ```
3. Déployez le contrat :

   ```shell theme={null}
   npx hardhat run scripts/deploy.js --network plasmaTestnet
   ```

   Cela devrait produire quelque chose comme :

   ```plaintext theme={null}
   Deploying SimpleStorage...
   SimpleStorage deployed to: 0xaa4FB2A8eD6953A4e57b8097BAf048d7919e6262
   ```
4. Notez l'adresse `deployed to:`. C'est l'adresse de votre contrat sur le testnet Plasma.

## Vérifier le déploiement

1. Copiez l'adresse du contrat.
2. Visitez l'[explorateur du testnet Plasma](https://testnet.plasmascan.to/).
3. Recherchez l'adresse de votre contrat pour voir la transaction de déploiement.

## Dépannage

| Problème                    | Résolution                                                                         |
| :-------------------------- | :--------------------------------------------------------------------------------- |
| Erreurs d'estimation de gas | Assurez-vous que le wallet a suffisamment de XPL                                   |
| Erreurs de connexion réseau | Vérifiez l'URL RPC et la disponibilité du testnet                                  |
| Erreurs de clé privée       | Assurez-vous que `.env` est correctement configuré (pas de préfixe `0x` si requis) |
| Délai de l'explorateur      | Attendez quelques minutes ; l'explorateur peut être en cours de synchronisation    |
