Universal Ledger 網路中的新帳戶必須由帳本中已有的特殊權限管理員帳戶建立。這個具備權限的帳戶必須簽署並提交交易,才能建立新帳戶。
本指南說明如何在 Universal Ledger 網路中申請新帳戶。您可以瞭解如何執行下列作業:
使用 Cloud Key Management Service 為新帳戶建立非對稱簽署金鑰。
找出適當權限帳戶的擁有者,請對方為您建立帳戶。
在分類帳中建立帳戶後,請確認帳戶詳細資料。
事前準備
如要完成本指南,您需要下列項目:
啟用 Universal Ledger API 的 Google Cloud 專案。
IAM 角色,例如
roles/universalledger.networkViewer,因此您至少可以查詢 Universal Ledger 網路中的帳戶狀態。啟用 Cloud KMS 的 Google Cloud 專案。
測試期間,這個專案可以與啟用 Universal Ledger API 的專案相同。
在實際運作中,建議您採取下列做法:
- 為 Cloud KMS 資源使用專屬專案,與其他 Google Cloud 資源分開。
- 為您使用的每個 Universal Ledger 網路,建立獨立的 Google Cloud 專案來管理 Cloud KMS 金鑰。
在啟用 Cloud KMS 的專案或父項資源中,具有 Cloud KMS 管理員 (
roles/cloudkms.admin) IAM 角色。
建立非對稱式簽署金鑰
在 Universal Ledger 上運作的每個帳戶都需要非對稱簽署公私金鑰組。私密金鑰用於簽署交易,公開金鑰則會註冊在帳本上,用於識別帳戶和驗證簽章。
請按照下列步驟,使用 Cloud KMS 建立合適的金鑰組,並擷取公開金鑰。只要產生的金鑰和簽章符合 Universal Ledger 需求,您可以使用其他金鑰管理方法,例如搭配 SHA-256 摘要的 ECDSA P-256 金鑰。如要進一步瞭解支援的金鑰格式,請參閱 KeyFormat 參考資料。
-
在 Google Cloud 控制台中啟用 Cloud Shell。
設定預設專案:
gcloud config set project KEYS_PROJECT將
KEYS_PROJECT替換為要用於 Cloud KMS 資源的專案 ID。如果尚未建立金鑰環來保存金鑰,請使用
gcloud kms keyrings create指令:gcloud kms keyrings create KEY_RING \ --location=KEY_LOCATION更改下列內容:
KEY_RING:要建立的金鑰環名稱,例如test-gcul-keys。這個名稱僅供您所屬機構使用,不需要記錄在分類帳中。KEY_LOCATION: 金鑰環的 Google Cloud 位置,例如global。
如要在帳本中使用帳戶,請使用
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-operator或eur-clearinghouse。這個名稱僅供您機構內部使用,不需要記錄在分類帳上。KEY_RING:用於保存金鑰的金鑰環名稱。KEY_LOCATION:金鑰的 Google Cloud 位置。
這會在 P-256 曲線上建立 ECDSA 金鑰組,並使用 Universal Ledger 支援的 SHA-256 摘要。如需支援格式的清單,請參閱
KeyFormat參考資料。使用
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 位置。
這個指令會以 PEM 編碼格式輸出公開金鑰 (
KEY_FORMAT_PEM_EC_P256_SHA256),適用於 Universal Ledger API,例如:-----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 方法的回應會包含 TransactionCertificate,其中含有 transaction_output 事件,內含新建立帳戶的帳戶 ID。
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",
}
}
}
後續步驟
- 瞭解如何傳送 RPC 要求至 Universal Ledger API。
- 瞭解可透過新帳戶提交的交易。