[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-20-cicd-smart-contracts-regression-gas":3},{"article":4,"author":60},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":39,"related_articles":40},"d6000000-0000-0000-0000-000000000120","a0000000-0000-0000-0000-000000000062","Deep EVM #20 : CI\u002FCD pour smart contracts — Tests, régression de gas et sécurité","deep-evm-20-cicd-smart-contracts-regression-gas","Construisez un pipeline CI\u002FCD de qualité production pour les smart contracts avec suivi de régression de gas, analyse statique, vérification automatisée et vérifications de sécurité au déploiement.","## Les smart contracts ne sont pas des logiciels ordinaires\n\nLes smart contracts ne sont pas comme les logiciels classiques. Une fois déployés, ils sont immuables. Un bug dans une application web signifie un hotfix et un redéploiement. Un bug dans un smart contract signifie des fonds perdus, une corruption permanente de l'état, ou une mise à niveau proxy coûteuse.\n\nCette immuabilité exige un pipeline CI\u002FCD plus rigoureux que tout autre type de logiciel.\n\n## Architecture du pipeline\n\n```yaml\n# .gitlab-ci.yml\nstages:\n  - lint\n  - test\n  - gas-check\n  - security\n  - deploy\n\nlint:\n  stage: lint\n  script:\n    - forge fmt --check\n    - solhint 'src\u002F**\u002F*.sol'\n\nunit-tests:\n  stage: test\n  script:\n    - forge test -vvv\n    - forge test --fuzz-runs 10000\n\ngas-regression:\n  stage: gas-check\n  script:\n    - forge snapshot --check\n  allow_failure: false\n\nsecurity-scan:\n  stage: security\n  script:\n    - slither src\u002F --sarif output.sarif\n    - mythril analyze src\u002FContract.sol\n\ndeploy-testnet:\n  stage: deploy\n  script:\n    - forge script script\u002FDeploy.s.sol --rpc-url $TESTNET_RPC --broadcast\n  only:\n    - main\n```\n\n## Suivi de régression de gas\n\n`forge snapshot` crée un fichier `.gas-snapshot` qui enregistre le coût en gas de chaque test. En CI, `--check` compare avec le snapshot de référence et échoue si le gas augmente.\n\n```bash\n# Créer le snapshot de référence\nforge snapshot\n\n# En CI, vérifier les régressions\nforge snapshot --check --tolerance 5\n# Échoue si un test utilise plus de 5% de gas en plus\n```\n\nCela empêche les développeurs d'introduire accidentellement des inefficiences de gas.\n\n## Analyse statique\n\n### Slither\n\nSlither détecte les vulnérabilités communes :\n\n```bash\nslither src\u002F --exclude naming-convention --filter-paths test\u002F\n```\n\nDétections clés : réentrance, variables d'état non utilisées, fonctions publiques qui devraient être externes, comparaisons de timestamps dangereuses.\n\n### Mythril\n\nMythril effectue une exécution symbolique pour trouver des chemins d'exploitation :\n\n```bash\nmythril analyze src\u002FContract.sol --execution-timeout 300\n```\n\n## Vérification automatique sur Etherscan\n\nAprès le déploiement, vérifiez automatiquement le code source :\n\n```bash\nforge verify-contract \\\n    --chain-id 1 \\\n    --compiler-version v0.8.24 \\\n    $CONTRACT_ADDRESS \\\n    src\u002FContract.sol:Contract \\\n    --etherscan-api-key $ETHERSCAN_KEY\n```\n\n## Vérifications de sécurité au déploiement\n\nAvant chaque déploiement en production, vérifiez :\n\n1. **Tous les tests passent** — y compris le fuzz testing\n2. **Pas de régression de gas** — Snapshot vérifié\n3. **Analyse statique propre** — Pas de vulnérabilités critiques\n4. **Audit complété** — Pour les changements majeurs\n5. **Simulation de déploiement** — Fork du mainnet, déployer, tester\n\n```solidity\n\u002F\u002F script\u002FDeploy.s.sol\ncontract DeployScript is Script {\n    function run() public {\n        vm.startBroadcast();\n\n        \u002F\u002F Déployer\n        Contract c = new Contract();\n\n        \u002F\u002F Vérification post-déploiement\n        require(c.owner() == msg.sender, \"Owner check failed\");\n        require(c.paused() == false, \"Should not be paused\");\n\n        vm.stopBroadcast();\n    }\n}\n```\n\n## Conclusion\n\nUn pipeline CI\u002FCD robuste pour les smart contracts est votre dernière ligne de défense contre les bugs coûteux. Le suivi de régression de gas, l'analyse statique et les vérifications de déploiement automatisées transforment un processus risqué en une opération prévisible et sûre.","\u003Ch2 id=\"les-smart-contracts-ne-sont-pas-des-logiciels-ordinaires\">Les smart contracts ne sont pas des logiciels ordinaires\u003C\u002Fh2>\n\u003Cp>Les smart contracts ne sont pas comme les logiciels classiques. Une fois déployés, ils sont immuables. Un bug dans une application web signifie un hotfix et un redéploiement. Un bug dans un smart contract signifie des fonds perdus, une corruption permanente de l’état, ou une mise à niveau proxy coûteuse.\u003C\u002Fp>\n\u003Cp>Cette immuabilité exige un pipeline CI\u002FCD plus rigoureux que tout autre type de logiciel.\u003C\u002Fp>\n\u003Ch2 id=\"architecture-du-pipeline\">Architecture du pipeline\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-yaml\"># .gitlab-ci.yml\nstages:\n  - lint\n  - test\n  - gas-check\n  - security\n  - deploy\n\nlint:\n  stage: lint\n  script:\n    - forge fmt --check\n    - solhint 'src\u002F**\u002F*.sol'\n\nunit-tests:\n  stage: test\n  script:\n    - forge test -vvv\n    - forge test --fuzz-runs 10000\n\ngas-regression:\n  stage: gas-check\n  script:\n    - forge snapshot --check\n  allow_failure: false\n\nsecurity-scan:\n  stage: security\n  script:\n    - slither src\u002F --sarif output.sarif\n    - mythril analyze src\u002FContract.sol\n\ndeploy-testnet:\n  stage: deploy\n  script:\n    - forge script script\u002FDeploy.s.sol --rpc-url $TESTNET_RPC --broadcast\n  only:\n    - main\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"suivi-de-r-gression-de-gas\">Suivi de régression de gas\u003C\u002Fh2>\n\u003Cp>\u003Ccode>forge snapshot\u003C\u002Fcode> crée un fichier \u003Ccode>.gas-snapshot\u003C\u002Fcode> qui enregistre le coût en gas de chaque test. En CI, \u003Ccode>--check\u003C\u002Fcode> compare avec le snapshot de référence et échoue si le gas augmente.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\"># Créer le snapshot de référence\nforge snapshot\n\n# En CI, vérifier les régressions\nforge snapshot --check --tolerance 5\n# Échoue si un test utilise plus de 5% de gas en plus\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cela empêche les développeurs d’introduire accidentellement des inefficiences de gas.\u003C\u002Fp>\n\u003Ch2 id=\"analyse-statique\">Analyse statique\u003C\u002Fh2>\n\u003Ch3>Slither\u003C\u002Fh3>\n\u003Cp>Slither détecte les vulnérabilités communes :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">slither src\u002F --exclude naming-convention --filter-paths test\u002F\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Détections clés : réentrance, variables d’état non utilisées, fonctions publiques qui devraient être externes, comparaisons de timestamps dangereuses.\u003C\u002Fp>\n\u003Ch3>Mythril\u003C\u002Fh3>\n\u003Cp>Mythril effectue une exécution symbolique pour trouver des chemins d’exploitation :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">mythril analyze src\u002FContract.sol --execution-timeout 300\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"v-rification-automatique-sur-etherscan\">Vérification automatique sur Etherscan\u003C\u002Fh2>\n\u003Cp>Après le déploiement, vérifiez automatiquement le code source :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">forge verify-contract \\\n    --chain-id 1 \\\n    --compiler-version v0.8.24 \\\n    $CONTRACT_ADDRESS \\\n    src\u002FContract.sol:Contract \\\n    --etherscan-api-key $ETHERSCAN_KEY\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"v-rifications-de-s-curit-au-d-ploiement\">Vérifications de sécurité au déploiement\u003C\u002Fh2>\n\u003Cp>Avant chaque déploiement en production, vérifiez :\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Tous les tests passent\u003C\u002Fstrong> — y compris le fuzz testing\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Pas de régression de gas\u003C\u002Fstrong> — Snapshot vérifié\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Analyse statique propre\u003C\u002Fstrong> — Pas de vulnérabilités critiques\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Audit complété\u003C\u002Fstrong> — Pour les changements majeurs\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Simulation de déploiement\u003C\u002Fstrong> — Fork du mainnet, déployer, tester\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F script\u002FDeploy.s.sol\ncontract DeployScript is Script {\n    function run() public {\n        vm.startBroadcast();\n\n        \u002F\u002F Déployer\n        Contract c = new Contract();\n\n        \u002F\u002F Vérification post-déploiement\n        require(c.owner() == msg.sender, \"Owner check failed\");\n        require(c.paused() == false, \"Should not be paused\");\n\n        vm.stopBroadcast();\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"conclusion\">Conclusion\u003C\u002Fh2>\n\u003Cp>Un pipeline CI\u002FCD robuste pour les smart contracts est votre dernière ligne de défense contre les bugs coûteux. Le suivi de régression de gas, l’analyse statique et les vérifications de déploiement automatisées transforment un processus risqué en une opération prévisible et sûre.\u003C\u002Fp>\n","fr","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:29.317597Z","CI\u002FCD pour smart contracts — Tests, régression de gas et sécurité","Pipeline CI\u002FCD de production pour smart contracts : suivi de régression de gas, analyse statique et vérification automatisée Etherscan.","smart contract ci cd pipeline",null,"index, follow",[22,27,31,35],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000012","DevOps","devops","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000016","EVM","evm",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000021","Foundry","foundry",{"id":36,"name":37,"slug":38,"created_at":26},"c0000000-0000-0000-0000-000000000013","Security","security","Blockchain",[41,48,54],{"id":42,"title":43,"slug":44,"excerpt":45,"locale":12,"category_name":46,"published_at":47},"d0000000-0000-0000-0000-000000000677","Pourquoi Bali devient le hub impact-tech d'Asie du Sud-Est en 2026","pourquoi-bali-devient-hub-impact-tech-asie-sud-est-2026","Bali se classe 16e parmi les écosystèmes startups d'Asie du Sud-Est. Avec une concentration croissante de bâtisseurs Web3, de startups IA durables et d'entreprises eco-travel tech, l'île se forge une identité de capitale impact-tech de la région.","Ingénierie","2026-03-28T10:44:49.517126Z",{"id":49,"title":50,"slug":51,"excerpt":52,"locale":12,"category_name":46,"published_at":53},"d0000000-0000-0000-0000-000000000676","Le patchwork de la protection des données ASEAN : checklist de conformité pour les développeurs","patchwork-protection-donnees-asean-checklist-conformite-developpeurs","Sept pays de l'ASEAN disposent désormais de lois complètes sur la protection des données, chacune avec des modèles de consentement, des exigences de localisation et des structures de sanctions différents. Voici une checklist pratique de conformité pour les développeurs.","2026-03-28T10:44:49.504560Z",{"id":55,"title":56,"slug":57,"excerpt":58,"locale":12,"category_name":46,"published_at":59},"d0000000-0000-0000-0000-000000000675","La transformation numérique de 29 milliards de dollars d'Indonesia : opportunités pour les éditeurs de logiciels","transformation-numerique-29-milliards-dollars-indonesia-opportunites-editeurs-logiciels","Le marché des services informatiques d'Indonesia devrait atteindre 29,03 milliards de dollars en 2026, contre 24,37 milliards en 2025. L'infrastructure cloud, l'IA, le e-commerce et les centres de données tirent la croissance la plus rapide d'Asie du Sud-Est.","2026-03-28T10:44:49.469231Z",{"id":13,"name":61,"slug":62,"bio":63,"photo_url":19,"linkedin":19,"role":64,"created_at":65,"updated_at":65},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]