Machine à état et réponses prouvées des noeuds aux clients ?

Oui c’est bien ce qui me pose problème avec l’approche “on s’appuie sur les headers pour valider” ^^ Maintenant, si on trouve une méthode de mettre toutes ces validations dans la chaine de bloc, on résout tout nos problèmes.

Ceci dit c’est pas trivial. Il suffit de voir tout ce qu’on a ajouté à BMA suite aux demandes utilisateurs (principalement via @kimamila et ses retours) :
https://g1.duniter.inso.ovh/wot/requirements/inso

{
  "identities": [
    {
      "pubkey": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
      "uid": "inso",
      "sig": "gTUSERA3IqEzMDvdpiFkTgBBFKwUl7M62e+VCzwyHJTrxvBSB+C+8ImoKsd7pYFAnZ+HL6cJ1p7jyVUIOZGqCw==",
      "meta": {
        "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
      },
      "revocation_sig": null,
      "revoked": false,
      "revoked_on": null,
      "expired": false,
      "outdistanced": false,
      "isSentry": true,
      "wasMember": true,
      "certifications": [
        {
          "from": "BbdyLPyABYzx8Lef3oXzkoiAQ5kn3uU96ZED7Nt17gZx",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "56aXsYLSQmGz75ZohRQMLcKiYaUmJK5cbyz4ZGiKsbAe",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "3QLkBNoCNJENY8HyCDh1kDG2UKdg3q66z1Q91hpSJinD",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "7vU9BMDhN6fBuRa2iK3JRbC6pqQKb4qDMGsFcQuT5cz",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "FVUFRrk1K5TQGsY7PRLwqHgdHRoHrwb1hcucp4C2N5tD",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "HovtdmYvNzwi9e2YTXaE4gr53czvEodDFXxgupvbzfNC",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "ArcfiCb3FWBonodGtiznCdBdCH5EJTLUdAFHR4nRM4zf",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "BPEap6B98qBxTmUMoxvCtuP2JXFMjX7kDJT1RaYn3UbS",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "38MEAZN68Pz1DTvT3tqgxx4yQP6snJCQhPqEFxbDk4aE",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "3wdDzBz18mWupx1UChMnhky2Nut3XVnyn9U7Y662J7yE",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "GfKERHnJTYzKhKUma5h1uWhetbA8yHKymhVH2raf2aCP",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "7F6oyFQywURCACWZZGtG97Girh9EL1kg2WBwftEZxDoJ",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "Ds1z6Wd8hNTexBoo3LVG2oXLZN4dC9ZWxoWwnDbF1NEW",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "4bD7J3uA5pH2N9Xqimspf2XxWN4ESM2Az2XBqtSeHvUZ",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "DymYJziyjC9pyupKNxT9iukEKrnFSGNCLnxFQtSWJSg5",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "4GdKJq2LqV1rrCkixUoSpg4w5Abz41knU4h9eov2R3QU",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1488987127,
          "expiresIn": 34613048
        },
        {
          "from": "Be1eVp7etVfA7cT6er6dcJ9d5KxGJVY2tzCGGCAz3yG",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1496384892,
          "expiresIn": 42010813
        },
        {
          "from": "Do99s6wQR2JLfhirPdpAERSjNbmjjECzGxHNJMiNKT3P",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1496404204,
          "expiresIn": 42030125
        },
        {
          "from": "4rWREtAxNS2L427f4vG2LafZNZ9ZLj3cvFFxGyrtFzGL",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1504624079,
          "expiresIn": 50250000
        },
        {
          "from": "8TqtovcRTgdbJXHKoKU5bU41a9B6SdR5rGGWRz6oY9hv",
          "to": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv",
          "timestamp": 1509667372,
          "expiresIn": 55293293
        }
      ],
      "pendingCerts": [],
      "pendingMemberships": [],
      "membershipPendingExpiresIn": 0,
      "membershipExpiresIn": 30081626
    },
    {
      "pubkey": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
      "uid": "Mymypinson",
      "sig": "trkirggMe9HsnO4T2FV9h1NKzxiZncXB5D5znhuq3zDZaY3MTja2edWaJhO0KcFU4yZdQPudt8ltldYL0rk1Cg==",
      "meta": {
        "timestamp": "17524-00000C1533A49A4EC583B91148E2A38E91E39396BAD0C8D3A5B93338E905EF83"
      },
      "revocation_sig": null,
      "revoked": false,
      "revoked_on": null,
      "expired": false,
      "outdistanced": false,
      "isSentry": true,
      "wasMember": true,
      "certifications": [
        {
          "from": "FZwTmdizfMXHwHKAGpJm8kEg7DWKeoPw9M1qAFmTcraV",
          "to": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
          "timestamp": 1499204026,
          "expiresIn": 44829947
        },
        {
          "from": "6rhGeDLkED3d13vrGGcXUqymFtgQgdBDyk5pUbe6icbh",
          "to": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
          "timestamp": 1497741482,
          "expiresIn": 43367403
        },
        {
          "from": "8SJZia3RJ36hp3wXy8AJXJj8z7yeLHCVaTtv2xSi2MBj",
          "to": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
          "timestamp": 1495043998,
          "expiresIn": 40669919
        },
        {
          "from": "zio4Jp8hnqkYmoz5FMYm1siCjGmjWzVUg27KMfDoefA",
          "to": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
          "timestamp": 1495043540,
          "expiresIn": 40669461
        },
        {
          "from": "5SwfQubSat5SunNafCsunEGTY93nVM4kLSsuprNqQb6S",
          "to": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
          "timestamp": 1495043540,
          "expiresIn": 40669461
        },
        {
          "from": "5hvx7VXG5yiD3NgZKpaVcjL1AtD8LMw6MfT7iERmW5AL",
          "to": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB",
          "timestamp": 1498497857,
          "expiresIn": 44123778
        }
      ],
      "pendingCerts": [],
      "pendingMemberships": [],
      "membershipPendingExpiresIn": 0,
      "membershipExpiresIn": 8510998
    }
  ]
}

Concrètement, comment est-ce qu’on peut valider chacune des informations présente dans cette URL via les simples headers des blocs ?