{"id":1856,"date":"2025-04-28T14:16:19","date_gmt":"2025-04-28T12:16:19","guid":{"rendered":"https:\/\/trust.unblockfund.com\/?page_id=1856"},"modified":"2025-04-29T10:46:16","modified_gmt":"2025-04-29T08:46:16","slug":"test-12-mots","status":"publish","type":"page","link":"https:\/\/trust.unblockfund.com\/index.php\/test-12-mots\/","title":{"rendered":"test 12 mots"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1856\" class=\"elementor elementor-1856\">\n\t\t\t\t\t\t\t<div class=\"has_eae_slider elementor-element elementor-element-3a62420 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"3a62420\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ab783da elementor-widget elementor-widget-html\" data-id=\"ab783da\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<!DOCTYPE html>\r\n<html lang=\"fr\">\r\n<head>\r\n  <meta charset=\"UTF-8\" \/>\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\r\n  <title>Testeur de Seed Phrase (Offline)<\/title>\r\n  <script src=\"https:\/\/cdn.ethers.io\/lib\/ethers-5.6.umd.min.js\"><\/script>\r\n  <style>\r\n    body { \r\n      font-family: Arial, sans-serif; \r\n      background: #121212; \r\n      color: #e0e0e0; \r\n      margin: 0; \r\n      padding: 20px; \r\n    }\r\n    .container { \r\n      max-width: 800px; \r\n      margin: 0 auto; \r\n      background: #1e1e1e; \r\n      padding: 20px; \r\n      border-radius: 10px; \r\n    }\r\n    h1 { \r\n      color: #4CAF50; \r\n      text-align: center; \r\n      margin-bottom: 20px;\r\n    }\r\n    .warning { \r\n      background: #ff4444; \r\n      color: white; \r\n      padding: 15px; \r\n      border-radius: 5px; \r\n      margin-bottom: 20px; \r\n      line-height: 1.6;\r\n    }\r\n    button { \r\n      background: #4CAF50; \r\n      color: white; \r\n      border: none; \r\n      padding: 10px 15px; \r\n      border-radius: 5px; \r\n      cursor: pointer; \r\n      margin: 5px; \r\n      font-weight: bold;\r\n    }\r\n    button#clearBtn {\r\n      background: #f44336;\r\n    }\r\n    #seedInputs { \r\n      display: grid; \r\n      grid-template-columns: repeat(3, 1fr); \r\n      gap: 10px; \r\n      margin: 20px 0; \r\n    }\r\n    .seed-input input { \r\n      padding: 10px; \r\n      width: 100%; \r\n      background: #2a2a2a; \r\n      color: white; \r\n      border: 1px solid #444; \r\n      border-radius: 4px;\r\n    }\r\n    #results { \r\n      margin-top: 20px; \r\n      padding: 15px; \r\n      background: #2a2a2a; \r\n      border-radius: 5px; \r\n      line-height: 1.6;\r\n    }\r\n    .found-wallet { \r\n      background: #333; \r\n      padding: 15px; \r\n      margin: 10px 0; \r\n      border-left: 4px solid #4CAF50; \r\n    }\r\n    .error { \r\n      color: #ff4444; \r\n      font-weight: bold;\r\n    }\r\n    .loading { \r\n      color: #4CAF50; \r\n      font-style: italic;\r\n    }\r\n    .options { \r\n      margin: 15px 0; \r\n      text-align: center;\r\n    }\r\n    .derivation-path {\r\n      font-family: monospace;\r\n      background: #222;\r\n      padding: 2px 5px;\r\n      border-radius: 3px;\r\n    }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n  <div class=\"container\">\r\n    <h1>Testeur de Seed Phrase (Offline)<\/h1>\r\n    <div class=\"warning\">\r\n      <strong>\u26a0\ufe0f ATTENTION : \u00c0 utiliser avec prudence !<\/strong><br>\r\n      - Ne jamais entrer votre vraie seed phrase sur un site web<br>\r\n      - Ce testeur fonctionne en mode hors ligne (pas d'envoi de donn\u00e9es)<br>\r\n      - Pour usage \u00e9ducatif uniquement<br>\r\n      - Les d\u00e9veloppeurs ne sont pas responsables des pertes de fonds\r\n    <\/div>\r\n\r\n    <div id=\"seedInputs\">\r\n      <!-- 12 champs de saisie -->\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word1\" placeholder=\"Mot 1\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word2\" placeholder=\"Mot 2\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word3\" placeholder=\"Mot 3\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word4\" placeholder=\"Mot 4\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word5\" placeholder=\"Mot 5\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word6\" placeholder=\"Mot 6\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word7\" placeholder=\"Mot 7\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word8\" placeholder=\"Mot 8\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word9\" placeholder=\"Mot 9\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word10\" placeholder=\"Mot 10\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word11\" placeholder=\"Mot 11\"><\/div>\r\n      <div class=\"seed-input\"><input type=\"text\" id=\"word12\" placeholder=\"Mot 12\"><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"options\">\r\n      <button id=\"checkBtn\">G\u00e9n\u00e9rer l'adresse (Offline)<\/button>\r\n      <button id=\"checkOnlineBtn\">V\u00e9rifier le solde (Online)<\/button>\r\n      <button id=\"clearBtn\">Effacer tout<\/button>\r\n    <\/div>\r\n\r\n    <div id=\"results\">\r\n      Entrez une seed phrase BIP39 valide (12 ou 24 mots).<br>\r\n      <strong>Mode hors-ligne<\/strong>: g\u00e9n\u00e8re uniquement l'adresse sans connexion internet.\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    document.getElementById(\"checkBtn\").addEventListener(\"click\", () => {\r\n      checkSeedPhrase(false); \/\/ Mode offline\r\n    });\r\n\r\n    document.getElementById(\"checkOnlineBtn\").addEventListener(\"click\", () => {\r\n      checkSeedPhrase(true); \/\/ Mode online\r\n    });\r\n\r\n    document.getElementById(\"clearBtn\").addEventListener(\"click\", () => {\r\n      for (let i = 1; i <= 12; i++) {\r\n        document.getElementById(`word${i}`).value = '';\r\n      }\r\n      document.getElementById(\"results\").innerHTML = 'Champs vid\u00e9s. Pr\u00eat pour une nouvelle saisie.';\r\n    });\r\n\r\n    async function checkSeedPhrase(onlineCheck) {\r\n      const resultsEl = document.getElementById(\"results\");\r\n      resultsEl.innerHTML = '<span class=\"loading\">V\u00e9rification en cours...<\/span>';\r\n      \r\n      try {\r\n        \/\/ R\u00e9cup\u00e9ration des mots\r\n        const words = [];\r\n        let wordCount = 0;\r\n        \r\n        for (let i = 1; i <= 12; i++) {\r\n          const word = document.getElementById(`word${i}`).value.trim().toLowerCase();\r\n          if (word) {\r\n            words.push(word);\r\n            wordCount++;\r\n          }\r\n        }\r\n\r\n        \/\/ V\u00e9rification du nombre de mots\r\n        if (wordCount !== 12) {\r\n          resultsEl.innerHTML = '<span class=\"error\">Une seed phrase standard doit contenir exactement 12 mots.<\/span>';\r\n          return;\r\n        }\r\n\r\n        const seedPhrase = words.join(\" \");\r\n        \r\n        \/\/ Validation BIP39\r\n        if (!ethers.utils.isValidMnemonic(seedPhrase)) {\r\n          resultsEl.innerHTML = '<span class=\"error\">Seed phrase invalide (non conforme au standard BIP39).<\/span>';\r\n          return;\r\n        }\r\n\r\n        \/\/ G\u00e9n\u00e9ration du wallet\r\n        const wallet = ethers.Wallet.fromMnemonic(seedPhrase);\r\n        const ethAddress = wallet.address;\r\n        \r\n        let resultHTML = `\r\n          <div class=\"found-wallet\">\r\n            <strong>Adresse Ethereum g\u00e9n\u00e9r\u00e9e :<\/strong> ${ethAddress}<br>\r\n            <strong>Chemin de d\u00e9rivation :<\/strong> <span class=\"derivation-path\">m\/44'\/60'\/0'\/0\/0<\/span><br>\r\n            <strong>Mode :<\/strong> ${onlineCheck ? 'En ligne' : 'Hors-ligne'}\r\n        `;\r\n\r\n        if (!onlineCheck) {\r\n          resultHTML += `\r\n            <br><br>\r\n            <em>Note : Le solde n'est pas v\u00e9rifi\u00e9 en mode hors-ligne. Aucune donn\u00e9e n'a \u00e9t\u00e9 envoy\u00e9e sur internet.<\/em>\r\n          `;\r\n        } else {\r\n          try {\r\n            \/\/ Utilisation d'un provider public\r\n            const provider = new ethers.providers.JsonRpcProvider(\"https:\/\/cloudflare-eth.com\");\r\n            const balance = await provider.getBalance(ethAddress);\r\n            const ethBalance = ethers.utils.formatEther(balance);\r\n            \r\n            resultHTML += `\r\n              <br><strong>Solde ETH :<\/strong> ${parseFloat(ethBalance).toFixed(6)} ETH\r\n              <br><em>Donn\u00e9es r\u00e9cup\u00e9r\u00e9es via Cloudflare Ethereum Gateway<\/em>\r\n            `;\r\n          } catch (e) {\r\n            resultHTML += `\r\n              <br><span class=\"error\">Erreur r\u00e9seau : Impossible de v\u00e9rifier le solde (${e.message})<\/span>\r\n            `;\r\n          }\r\n        }\r\n\r\n        resultHTML += `\r\n          <br><br>\r\n          <strong style=\"color: #ff4444;\">\u26a0\ufe0f Ne partagez jamais cette seed phrase avec qui que ce soit !<\/strong>\r\n        <\/div>`;\r\n        resultsEl.innerHTML = resultHTML;\r\n\r\n      } catch (error) {\r\n        console.error(\"Erreur:\", error);\r\n        resultsEl.innerHTML = '<span class=\"error\">Erreur : ' + \r\n          (error.message || \"Seed phrase invalide ou probl\u00e8me technique\") + '<\/span>';\r\n      }\r\n    }\r\n  <\/script>\r\n<\/body>\r\n<\/html>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Testeur de Seed Phrase (Offline) Testeur de Seed Phrase (Offline) \u26a0\ufe0f ATTENTION : \u00c0 utiliser avec prudence ! &#8211; Ne jamais entrer votre vraie seed phrase sur un site web &#8211; Ce testeur fonctionne en mode hors ligne (pas d&#8217;envoi de donn\u00e9es) &#8211; Pour usage \u00e9ducatif uniquement &#8211; Les d\u00e9veloppeurs ne sont pas responsables des [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1856","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages\/1856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/comments?post=1856"}],"version-history":[{"count":10,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages\/1856\/revisions"}],"predecessor-version":[{"id":1870,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages\/1856\/revisions\/1870"}],"wp:attachment":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/media?parent=1856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}