新しいアカウントをリクエストする

Universal Ledger ネットワークの新しいアカウントは、台帳にすでに存在する特権管理者アカウントによって作成される必要があります。この特権アカウントは、新しいアカウントを作成するためにトランザクションに署名して送信する必要があります。

このガイドでは、Universal Ledger ネットワークで新しいアカウントをリクエストする方法について説明します。学習内容:

  • Cloud Key Management Service を使用して、新しいアカウントの非対称署名鍵を作成します。

  • アカウントを作成できる適切な特権アカウントの所有者を特定します。

  • 台帳に作成されたら、アカウントの詳細を確認します。

始める前に

このガイドを完了するには、次のものが必要です。

  • Universal Ledger API が有効になっている Google Cloud プロジェクト。

  • roles/universalledger.networkViewer などの IAM ロール。これにより、少なくとも Universal Ledger ネットワーク内のアカウントの状態をクエリできます。

  • Cloud KMS が有効になっている Google Cloud プロジェクト。

    テスト中、このプロジェクトは Universal Ledger API が有効になっているプロジェクトと同じにできます。

    本番環境では、次のことをおすすめします。

    • Cloud KMS リソースには、他の Google Cloud リソースとは別の専用プロジェクトを使用します。
    • 使用する Universal Ledger ネットワークごとに、Cloud KMS 鍵を管理するための個別の Google Cloud プロジェクトを作成します。
  • Cloud KMS が有効になっているプロジェクトまたは親リソースに対する Cloud KMS 管理者(roles/cloudkms.admin)IAM ロール。

非対称署名鍵を作成する

Universal Ledger で動作するすべてのアカウントには、非対称署名公開鍵 / 秘密鍵ペアが必要です。秘密鍵はトランザクションの署名に使用され、公開鍵はアカウントの識別と署名の検証のために台帳に登録されます。

次の手順では、Cloud KMS を使用して適切な鍵ペアを作成し、公開鍵を取得する方法について説明します。ECDSA P-256 鍵と SHA-256 ダイジェストなど、Universal Ledger の要件と互換性のある鍵と署名が生成される限り、他の鍵管理アプローチを使用できます。サポートされている鍵形式の詳細については、KeyFormat リファレンスをご覧ください。

  1. Google Cloud コンソールで Cloud Shell をアクティブにします。

    Cloud Shell をアクティブにする

  2. デフォルト プロジェクトを設定します。

    gcloud config set project KEYS_PROJECT
    

    KEYS_PROJECT は、Cloud KMS リソースに使用するプロジェクトの ID に置き換えます。

  3. まだ作成していない場合は、gcloud kms keyrings create コマンドを使用して、鍵を保持するキーリングを作成します。

    gcloud kms keyrings create KEY_RING \
        --location=KEY_LOCATION
    

    次のように置き換えます。

    • KEY_RING: 作成するキーリングの名前(例: test-gcul-keys)。この名前は組織のニーズに合わせて使用するものであり、台帳に記録する必要はありません。
    • KEY_LOCATION: キーリングの Google Cloud ロケーション(例: global)。
  4. 台帳で使用するアカウントごとに、gcloud kms keys create コマンドを使用して非対称署名鍵を作成します。

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

    次のように置き換えます。

    • KEY_NAME: 作成する鍵の名前(例: usd-operatoreur-clearinghouse)。この名前は組織のニーズに合わせて使用するもので、台帳に記録する必要はありません。
    • KEY_RING: 鍵を保持するキーリングの名前。
    • KEY_LOCATION: 鍵の Google Cloud ロケーション。

    これにより、Universal Ledger でサポートされている SHA-256 ダイジェストを使用して、P-256 曲線上に ECDSA 鍵ペアが作成されます。サポートされている形式の一覧については、KeyFormat リファレンスをご覧ください。

  5. gcloud kms keys versions get-public-key コマンドを使用して、鍵バージョンの公開鍵部分を取得します。

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

    次のように置き換えます。

    • KEY_VERSION: 取得する鍵のバージョン。新しく作成された鍵の場合は 1 です。
    • KEY_NAME: 鍵の名前
    • KEY_RING: 鍵を含むキーリングの名前。
    • KEY_LOCATION: 鍵の Google Cloud ロケーション。

    このコマンドは、Universal Ledger API で使用するのに適した PEM 形式(KEY_FORMAT_PEM_EC_P256_SHA256)で公開鍵を出力します。

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

アカウントを作成できるユーザーを確認する

作成するアカウントのタイプによって、作成権限を持つ台帳上の特権アカウントが決まります。その特権アカウントの所有者を特定する必要があります。Universal Ledger のアカウントのタイプについては、主なコンセプトをご覧ください。

アカウントの種類 作成者 取引の送信
通貨演算子 プラットフォーム オペレーター CreateCurrencyOperator
クリアリングハウス 通貨演算子 CreateClearinghouse
アカウント マネージャー 通貨演算子 CreateAccountManager
トークン マネージャー 通貨演算子 CreateTokenManager
ユーザー アカウント アカウント マネージャー CreateAccount

特定したら、アカウントを作成できる特権アカウントの所有者と調整し、次の詳細情報を共有する必要があります。

  • アカウントを作成するネットワークの名前。サポートされているリージョンのリストについては、利用可能なネットワークとリージョンをご覧ください。
  • 非対称署名鍵の公開部分と、対応する KeyFormat。このガイドの gcloud コマンドに従った場合、形式は KEY_FORMAT_PEM_EC_P256_SHA256 です。
  • 新しいアカウントに関連付けられた台帳に記録する関連情報を含むアカウント コメント文字列。これは、台帳に保存されるが、Universal Ledger によって解釈されない不透明な値です。作成後は変更できず、ネットワークにアクセスできるすべてのユーザーが読み取ることができます。
  • アカウントの作成時に送信されるトランザクションにデータを入力するために必要な追加の詳細。たとえば、通貨オペレータを作成するには、作成する新しいオペレータが管理する currency も指定する必要があります。

プレビュー期間中に、ユースケースに関連する特権アカウントの所有者が不明な場合は、Google の担当者にお問い合わせください。

アカウントが作成されたことを確認する

特権アカウントによって送信されたトランザクションが台帳で正常に実行され、確定されると、QueryTransactionState メソッドからのレスポンスには、新しく作成されたアカウントのアカウント ID を含む transaction_output イベントを含む TransactionCertificate が含まれます。

ID は次の例のようになります。

1:USR:XTS:025sAZ55EqGKF6vpXEpSS8X891nNDEQU9yFQKYkcFzAb6

次の REST リクエストを送信すると、新しいアカウントが台帳に存在することを確認できます。

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

次のように置き換えます。

  • PROJECT_ID: Universal Ledger API が有効になっているプロジェクトの ID。
  • LOCATION: 接続するエンドポイントのロケーション。
  • NETWORK_NAME: アカウントが作成されたネットワークの名前。
  • ACCOUNT_ID: 新しく作成したアカウントの ID。

出力は次のようになります。

{
  "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",
    }
  }
}

次のステップ