52 lines
2.6 KiB
Solidity
52 lines
2.6 KiB
Solidity
// SPDX-License-Identifier: MIT
|
||
pragma solidity ^0.8.34;
|
||
|
||
// --- Imports (OpenZeppelin 5.x) ---
|
||
// ERC20 : implémentation standard d’un jeton fongible (transfer, balanceOf, totalSupply, …).
|
||
// Sur BNB Smart Chain, l’explorateur qualifie ce type de jeton en BEP-20.
|
||
// Ownable : un compte « owner » pour l’administration du contrat (sans mint dans ce projet).
|
||
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
|
||
|
||
/**
|
||
* @title FGC42Forge
|
||
* @notice Jeton pédagogique du projet 42 Tokenizer — réseau BNB Smart Chain Testnet uniquement.
|
||
*
|
||
* Contraintes sujet :
|
||
* - Nom contenant « 42 » : FGC42Forge (symbole FG42).
|
||
* - Standard de la chaîne : BEP-20 (code via OpenZeppelin ERC20).
|
||
* - Supply fixe : 1 000 000 jetons, créés une seule fois au déploiement (pas de mint public).
|
||
*
|
||
* Sécurité (soutenance) :
|
||
* - Toute la supply est mintée au constructeur vers le déployeur (msg.sender).
|
||
* - Aucune fonction publique permettant d’augmenter totalSupply après deploy.
|
||
* - owner() peut gérer le rôle admin OpenZeppelin (ex. transferOwnership), pas créer de FG42.
|
||
*/
|
||
contract FGC42Forge is ERC20, Ownable {
|
||
/**
|
||
* @dev Offre initiale en plus petite unité (18 décimales, convention ERC-20).
|
||
* 1 FG42 affiché dans un wallet = 1 * 10^18 unités internes.
|
||
* Literal : 1_000_000 * 10^18 (lisible ; équivalent à 1_000_000 * 10**decimals()).
|
||
*/
|
||
uint256 private constant INITIAL_SUPPLY = 1_000_000 * (10 ** 18);
|
||
|
||
/**
|
||
* @notice Déploie le token et forge toute la supply pour le compte qui envoie la transaction.
|
||
*
|
||
* @dev Ordre des initialiseurs de héritage :
|
||
* 1. ERC20("FGC42Forge", "FG42") — nom et symbole on-chain (MetaMask, BscScan).
|
||
* 2. Ownable(msg.sender) — le déployeur devient owner (admin du contrat).
|
||
* 3. _mint(msg.sender, INITIAL_SUPPLY) — émission unique ; pas d’appel mint ultérieur prévu.
|
||
*/
|
||
constructor() ERC20("FGC42Forge", "FG42") Ownable(msg.sender) {
|
||
_mint(msg.sender, INITIAL_SUPPLY);
|
||
}
|
||
|
||
// -------------------------------------------------------------------------
|
||
// Fonctions ERC-20 héritées (non redéfinies ici) — utilisables telles quelles :
|
||
// name(), symbol(), decimals(), totalSupply(), balanceOf(), transfer(),
|
||
// approve(), transferFrom(), allowance(), événements Transfer / Approval.
|
||
// Fonctions Ownable héritées : owner(), transferOwnership(), renounceOwnership().
|
||
// -------------------------------------------------------------------------
|
||
}
|