Demander un nouveau compte

Les nouveaux comptes d'un réseau Universal Ledger doivent être créés par un compte administrateur privilégié déjà présent dans le registre. Ce compte privilégié doit signer et envoyer une transaction pour créer le nouveau compte.

Ce guide explique comment demander un nouveau compte dans un réseau Universal Ledger. Découvrez comment :

  • Créer des clés de signature asymétriques pour le nouveau compte à l'aide de Cloud Key Management Service.

  • Identifier le propriétaire du compte privilégié approprié qui peut créer votre compte.

  • Confirmer les informations de votre compte une fois qu'il est créé dans le registre.

Avant de commencer

Pour suivre ce guide, vous aurez besoin des éléments suivants :

  • Un Google Cloud projet avec l'API Universal Ledger activée.

  • Un rôle IAM tel que roles/universalledger.networkViewer pour pouvoir au moins interroger l'état des comptes dans un réseau Universal Ledger.

  • Un Google Cloud projet avec Cloud KMS activé.

    Lors des tests, ce projet peut être le même que celui pour lequel l'API Universal Ledger est activée.

    En production, nous vous recommandons de procéder comme suit :

    • Utilisez un projet dédié pour vos ressources Cloud KMS, distinct des autres Google Cloud ressources.
    • Créez un projet Google Cloud distinct pour gérer les clés Cloud KMS de chaque réseau Universal Ledger que vous utilisez.
  • Le rôle IAM d'administrateur Cloud KMS (roles/cloudkms.admin) sur le projet pour lequel Cloud KMS est activé ou sur une ressource parente.

Créer vos clés de signature asymétriques

Chaque compte fonctionnant sur un Universal Ledger nécessite une paire de clés publique/privée de signature asymétrique. La clé privée est utilisée pour signer les transactions, et la clé publique est enregistrée dans le registre pour identifier votre compte et valider les signatures.

Les étapes suivantes vous guident dans la création d'une paire de clés appropriée à l'aide de Cloud KMS et dans la récupération de la clé publique. Vous pouvez utiliser d'autres approches de gestion des clés tant qu'elles produisent des clés et des signatures compatibles avec les exigences d'Universal Ledger, telles que les clés ECDSA P-256 avec des condensés SHA-256. Pour en savoir plus sur les formats de clés compatibles, consultez la KeyFormat référence.

  1. Dans la Google Cloud console, activez Cloud Shell.

    Activer Cloud Shell

  2. Définissez le projet par défaut :

    gcloud config set project KEYS_PROJECT
    

    Remplacez KEYS_PROJECT par l'ID du projet à utiliser pour vos ressources Cloud KMS.

  3. Si ce n'est pas déjà fait, créez un trousseau de clés pour stocker vos clés à l'aide de la gcloud kms keyrings create commande :

    gcloud kms keyrings create KEY_RING \
        --location=KEY_LOCATION
    

    Remplacez les éléments suivants :

    • KEY_RING: nom du trousseau de clés à créer, par exemple test-gcul-keys. Ce nom est destiné à vos propres besoins organisationnels et n'a pas besoin d'être enregistré dans le registre.
    • KEY_LOCATION : Google Cloud emplacement du trousseau de clés, par exemple global.
  4. Pour chaque compte que vous souhaitez utiliser dans le registre, créez une clé de signature asymétrique pour celui-ci à l'aide de la gcloud kms keys create commande :

    gcloud kms keys create KEY_NAME \
        --keyring=KEY_RING \
        --location=KEY_LOCATION \
        --purpose="asymmetric-signing" \
        --default-algorithm="ec-sign-p256-sha256"
    

    Remplacez les éléments suivants :

    • KEY_NAME: nom de la clé à créer, par exemple usd-operator ou eur-clearinghouse. Ce nom est destiné à vos propres besoins organisationnels et n'a pas besoin d'être enregistré dans le registre.
    • KEY_RING: nom du trousseau de clés dans lequel stocker la clé.
    • KEY_LOCATION : emplacement Google Cloud de la clé.

    Cela crée une paire de clés ECDSA sur la courbe P-256 avec un condensé SHA-256, comme pris en charge par Universal Ledger. Pour obtenir la liste des formats compatibles, consultez la KeyFormat référence.

  5. Récupérez la partie clé publique d'une version de clé à l'aide de la gcloud kms keys versions get-public-key commande :

    gcloud kms keys versions get-public-key KEY_VERSION \
        --key=KEY_NAME \
        --keyring=KEY_RING \
        --location=KEY_LOCATION
    

    Remplacez les éléments suivants :

    • KEY_VERSION: version de la clé à obtenir. Il s'agit de 1 pour les clés nouvellement créées.
    • KEY_NAME : nom de la clé.
    • KEY_RING: nom du trousseau de clés contenant la clé.
    • KEY_LOCATION : emplacement de la clé. Google Cloud

    Cette commande génère la clé publique au format encodé PEM (KEY_FORMAT_PEM_EC_P256_SHA256) adapté à l'utilisation avec l'API Universal Ledger, par exemple :

    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ/vWkd5wgakFbVD25k8WM9Ll6We+
    c8RVDS0R4G8xetsmFjfNW/ZxwWeB86IvMjxY8ZsdU9+W7BL5YM6rUB5yCQ==
    -----END PUBLIC KEY-----
    

Identifier qui peut créer votre compte

Le type de compte que vous souhaitez créer détermine le compte privilégié du registre qui est autorisé à le créer. Vous devez identifier le propriétaire de ce compte privilégié. Pour en savoir plus sur les types de comptes dans le Universal Ledger, consultez Concepts clés.

Type de compte Créé par Envoi de la transaction
Opérateur de devise Opérateur de plate-forme CreateCurrencyOperator
Chambre de compensation Opérateur de devise CreateClearinghouse
Responsable de compte Opérateur de devise CreateAccountManager
Gestionnaire de jetons Opérateur de devise CreateTokenManager
Compte utilisateur Responsable de compte CreateAccount

Une fois identifié, vous devrez coordonner et partager les informations suivantes avec le propriétaire du compte privilégié qui peut créer votre compte :

  • Nom du réseau dans lequel vous souhaitez créer le compte. Pour obtenir la liste des régions compatibles, consultez Réseaux et régions disponibles.
  • Partie publique de votre clé de signature asymétrique et son correspondant KeyFormat. Si vous avez suivi les commandes gcloud de ce guide, le format est KEY_FORMAT_PEM_EC_P256_SHA256.
  • Chaîne de commentaire de compte contenant toutes les informations pertinentes à enregistrer dans le registre associé à votre nouveau compte. Il s'agit d'une valeur opaque stockée dans le registre, mais qui n'est pas interprétée autrement par Universal Ledger. Une fois créé, ce champ est immuable et lisible par toute personne ayant accès au réseau.
  • Toutes les informations supplémentaires requises pour remplir la transaction à envoyer lors de la création du compte. Par exemple, pour créer un opérateur de devise, vous devez également spécifier la currency qui sera gérée par le nouvel opérateur à créer.

Pendant la préversion, contactez votre contact Google si vous ne savez pas qui est le propriétaire du compte privilégié pertinent pour votre cas d'utilisation.

Confirmer la création de votre compte

Une fois la transaction envoyée par le compte privilégié exécutée et finalisée dans le registre, la réponse de la QueryTransactionState méthode inclura un TransactionCertificate avec un transaction_output événement contenant l'ID de compte du compte nouvellement créé compte.

L'ID se présentera comme dans l'exemple suivant :

1:USR:XTS:025sAZ55EqGKF6vpXEpSS8X891nNDEQU9yFQKYkcFzAb6

Vous pouvez vérifier que votre nouveau compte est présent dans le registre en envoyant la requête REST suivante :

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://universalledger.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/NETWORK_NAME:queryAccount?account_id=ACCOUNT_ID

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet pour lequel l' API Universal Ledger est activée.
  • LOCATION : emplacement du point de terminaison à atteindre.
  • NETWORK_NAME : nom du réseau dans lequel votre compte a été créé.
  • ACCOUNT_ID : ID de votre compte nouvellement créé.

Vous devez obtenir un résultat semblable à ce qui suit :

{
  "account": {
    "publicKey": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFSi92V2tkNXdnYWtGYlZEMjVrOFdNOUxsNldlKwpjOFJWRFMwUjRHOHhldHNtRmpmTlcvWnh3V2VCODZJdk1qeFk4WnNkVTkrVzdCTDVZTTZyVUI1eUNRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t",
    "roundId": "10962032",
    "comment": "My Test Account",
    "userDetails": {
      "accountManager": {
        "id": "1:ACT:XTS:02f4VSHyPsXeMZmcogbNx7bP4kfn5DYvc7d2K52RYAFd3"
      },
      "tokenManager": {
        "id": "1:TKN:XTS:024fqJS87dJ94ETN9PGhTCGd86btXj9iyWLxGQWgC3dde"
      },
      "roles": [
        "ROLE_PAYER",
        "ROLE_RECEIVER"
      ],
      "accountStatus": "ACCOUNT_STATUS_ACTIVE",
    }
  }
}

Étape suivante