通用帳本網路中的新帳戶必須由帳本中已有的上層帳戶建立。這個家長帳戶必須簽署並提交交易,才能建立新帳戶。
本指南說明如何在通用帳本網路中要求新帳戶。您可以瞭解如何執行下列作業:
使用 Cloud Key Management Service 為新帳戶建立非對稱簽署金鑰。
找出適當上層帳戶的擁有者,以便建立帳戶。
在分類帳中建立帳戶後,請確認帳戶詳細資料。
事前準備
如要完成本指南,您需要下列項目:
啟用 Universal Ledger API 的 Google Cloud 專案。
IAM 角色,例如
roles/universalledger.networkViewer,因此您至少可以查詢通用帳本網路中的帳戶狀態。啟用 Cloud KMS 的 Google Cloud 專案。
測試期間,這個專案可以與啟用 Universal Ledger API 的專案相同。
在實際運作中,建議您採取下列做法:
- 為 Cloud KMS 資源使用專屬專案,與其他 Google Cloud 資源分開。
- 為您使用的每個通用帳本網路,建立獨立的 Google Cloud 專案來管理 Cloud KMS 金鑰。
在啟用 Cloud KMS 的專案或父項資源中,具有 Cloud KMS 管理員 (
roles/cloudkms.admin) IAM 角色。
建立非對稱式簽署金鑰
在通用帳本上運作的每個帳戶都需要非對稱簽署公開/私密金鑰組。私密金鑰用於簽署交易,公開金鑰則會註冊在帳本上,用於識別帳戶和驗證簽章。
請按照下列步驟,使用 Cloud KMS 建立合適的金鑰組,並擷取公開金鑰。只要產生的金鑰和簽章符合通用帳本需求,您可以使用其他金鑰管理方法,例如使用 SHA-256 摘要的 ECDSA P-256 金鑰。
-
在 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:金鑰環的位置,例如global。 Google Cloud
針對要在帳本中使用的每個帳戶,使用
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 金鑰組,並使用通用帳本支援的 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-----
找出可以建立帳戶的人員
您要建立的帳戶類型,決定了帳本中具有建立權限的上層帳戶。您必須找出該家長帳戶的擁有者。如要瞭解通用帳本中的帳戶類型,請參閱重要概念。
| 帳戶類型 | 檔案建立者: | 提交交易 |
|---|---|---|
| 貨幣運算符 | 平台營運人員 | CreateCurrencyOperator |
| 結算中心 | 貨幣運算符 | CreateClearinghouse |
| 客戶經理 | 貨幣運算符 | CreateAccountManager |
| 權杖管理工具 | 貨幣運算符 | CreateTokenManager |
| 使用者帳戶 | 客戶經理 | CreateAccount |
確認後,請與上層帳戶擁有者協調並分享下列詳細資料,由對方為您建立帳戶:
- 您要建立帳戶的網路名稱。如要瞭解 Private Preview 版支援的網路,請參閱「可用網路」清單。
- 非對稱簽署金鑰的公開部分和對應的
KeyFormat。 如果您按照本指南中的gcloud指令操作,格式應為KEY_FORMAT_PEM_EC_P256_SHA256。 - 帳戶註解字串,其中包含要記錄在與新帳戶相關聯的分類帳中的任何相關資訊。這是儲存在帳本中的不透明值,但通用帳本不會以其他方式解讀。建立後,這個欄位就無法變更,且任何有權存取網路的人都能讀取。
- 建立帳戶時,填寫要提交的交易所需的任何其他詳細資料。舉例來說,如要建立貨幣運算子,您也需要指定要由新建立的運算子管理的
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。
- 瞭解可透過新帳戶提交的交易。