Ajout des changements de clé dans l'indexeur subsquid

Une des fonctionnalités importante de l’indexeur était de pouvoir accéder à l’historique des changements de clé des identités. Je l’ai donc ajoutée :

query MyQuery {
  identities(where: {name_eq: "cgeek"}) {
    index
    name
    account {
      id
    }
    ownerKeyChanges {
      id
      previous {
        id
      }
      next {
        id
      }
    }
  }
}

pour cgeek

  "data": {
    "identities": [
      {
        "index": 34,
        "name": "cgeek",
        "account": {
          "id": "5E6q47RRGZU15LjUiBTm2DZjpqFKAjRNafYS8YV8AzTQZtLG"
        },
        "ownerKeyChanges": [
          {
            "id": "genesis-34",
            "previous": {
              "id": "5CfdJjEgh3jDkg3bzmZ1ED1xVhXAARtNmZJWbcXh53rU8z5a"
            },
            "next": {
              "id": "5E6q47RRGZU15LjUiBTm2DZjpqFKAjRNafYS8YV8AzTQZtLG"
            }
          }
        ]
      }
    ]
  }
}

pour HugoTrentesaux

{
  "data": {
    "identities": [
      {
        "index": 344,
        "name": "HugoTrentesaux",
        "account": {
          "id": "5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz"
        },
        "ownerKeyChanges": [
          {
            "id": "0000030504-d4b9e-000002",
            "previous": {
              "id": "5DSF5HxiQvy2xJdtdtMSPYZdSoLAsGDxzJaifiAfAByinrH4"
            },
            "next": {
              "id": "5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz"
            }
          }
        ]
      }
    ]
  }
}

pour vit

{
  "data": {
    "identities": [
      {
        "index": 58,
        "name": "vit",
        "account": {
          "id": "5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai"
        },
        "ownerKeyChanges": [
          {
            "id": "0000075504-bedb9-000003",
            "previous": {
              "id": "5EAL8tSa5TQsxuiveWCY6TbmmFQbxGYNHKb7QtPRwj34Mtzz"
            },
            "next": {
              "id": "5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai"
            }
          }
        ]
      }
    ]
  }
}

Et poka n’a pas changé d’identité vu qu’il n’était plus membre.

J’ai aussi ajouté la relation “was identity” sur les comptes pour voir s’ils ont été la cible d’un changement de clé :

query MyQuery {
  identities(where: {name_eq: "poka"}) {
    id
    index
    name
    ownerKeyChange {
      blockNumber
      previous {
        id
        identity {
          name
        }
        wasIdentity {
          identity {
            name
          }
        }
      }
      next {
        id
        identity {
          name
        }
        wasIdentity {
          identity {
            name
          }
        }
      }
    }
  }
}
{
  "data": {
    "identities": [
      {
        "id": "genesis-61",
        "index": 61,
        "name": "poka",
        "ownerKeyChange": [
          {
            "blockNumber": 7412,
            "previous": {
              "id": "5GMyvKsTNk9wDBy9jwKaX6mhSzmFFtpdK9KNnmrLoSTSuJHv",
              "identity": null,
              "wasIdentity": [
                {
                  "identity": {
                    "name": "poka"
                  }
                }
              ]
            },
            "next": {
              "id": "5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn",
              "identity": {
                "name": "poka"
              },
              "wasIdentity": []
            }
          }
        ]
      }
    ]
  }
}

On voit bien :

  • que 5GMyvKsTNk9wDBy9jwKaX6mhSzmFFtpdK9KNnmrLoSTSuJHv
    • n’est pas le compte d’une identité
    • a été le compte de l’identité poka
  • que 5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn
    • est le compte de l’identité poka
    • n’a jamais connu de migration d’identité (l’identité aurait pu faire un aller-retour entre deux clés)

Encore une fois, ce n’est vraiment pas évident de trouver le bon schéma qui correspond à notre métier, mais je pense m’en approcher. Je publie ça après relecture.