I nuovi account in una rete Universal Ledger devono essere creati da un account principale già presente nel ledger. Questo account genitore deve firmare e inviare una transazione per creare il nuovo account.
Questa guida descrive come richiedere un nuovo account in una rete Universal Ledger. Scopri come:
Crea chiavi di firma asimmetriche per il nuovo account utilizzando Cloud Key Management Service.
Identifica il proprietario dell'account genitore appropriato per creare il tuo account.
Conferma i dettagli dell'account una volta creato nel libro mastro.
Prima di iniziare
Per completare questa guida, avrai bisogno di quanto segue:
Un progetto Google Cloud con l'API Universal Ledger abilitata.
Un ruolo IAM come
roles/universalledger.networkViewerper poter almeno eseguire query sullo stato degli account in una rete Universal Ledger.Un progetto Google Cloud con Cloud KMS abilitato.
Durante il test, questo progetto può essere lo stesso in cui è abilitata l'API Universal Ledger.
In produzione, ti consigliamo di:
- Utilizza un progetto dedicato per le risorse Cloud KMS, separato dalle altre risorse. Google Cloud
- Crea un progetto Google Cloud separato per gestire le chiavi Cloud KMS per ogni rete Universal Ledger che utilizzi.
Il ruolo IAM Amministratore Cloud KMS (
roles/cloudkms.admin) nel progetto con Cloud KMS abilitato o in una risorsa padre.
Creare le chiavi di firma asimmetriche
Ogni account che opera su un Universal Ledger richiede una coppia di chiavi asimmetriche di firma pubblica-privata. La chiave privata viene utilizzata per firmare le transazioni, mentre la chiave pubblica viene registrata nel ledger per identificare il tuo account e verificare le firme.
I seguenti passaggi ti guidano nella creazione di una coppia di chiavi adatta utilizzando Cloud KMS e nel recupero della chiave pubblica. Puoi utilizzare altri approcci di gestione delle chiavi, purché producano chiavi e firme compatibili con i requisiti di Universal Ledger, ad esempio chiavi ECDSA P-256 con digest SHA-256.
-
Nella console Google Cloud , attiva Cloud Shell.
Imposta il progetto predefinito:
gcloud config set project KEYS_PROJECTSostituisci
KEYS_PROJECTcon l'ID del progetto da utilizzare per le risorse Cloud KMS.Se non l'hai ancora fatto, crea un portachiavi per contenere le chiavi utilizzando il comando
gcloud kms keyrings create:gcloud kms keyrings create KEY_RING \ --location=KEY_LOCATIONSostituisci quanto segue:
KEY_RING: il nome delle chiavi automatizzate da creare, ad esempiotest-gcul-keys. Questo nome è per le tue esigenze organizzative e non deve essere registrato nel registro.KEY_LOCATION: la posizione Google Cloud delle chiavi automatizzate, ad esempioglobal.
Per ogni account che vuoi utilizzare nel ledger, crea una chiave di firma asimmetrica utilizzando il comando
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"Sostituisci quanto segue:
KEY_NAME: il nome della chiave da creare, ad esempiousd-operatoroeur-clearinghouse. Questo nome è per le tue esigenze organizzative e non deve essere registrato nel libro mastro.KEY_RING: il nome del portachiavi in cui archiviare la chiave.KEY_LOCATION: la Google Cloud posizione della chiave.
Viene creata una coppia di chiavi ECDSA sulla curva P-256 con un digest SHA-256 come supportato dal Universal Ledger. Per un elenco dei formati supportati, consulta il riferimento
KeyFormat.Recupera la parte della chiave pubblica di una versione della chiave utilizzando il comando
gcloud kms keys versions get-public-key:gcloud kms keys versions get-public-key KEY_VERSION \ --key=KEY_NAME \ --keyring=KEY_RING \ --location=KEY_LOCATIONSostituisci quanto segue:
KEY_VERSION: la versione della chiave da recuperare,1per le chiavi appena create.KEY_NAME: il nome della chiave.KEY_RING: il nome delle chiavi automatizzate che contengono la chiave.KEY_LOCATION: la Google Cloud posizione della chiave.
Questo comando restituisce la chiave pubblica in un formato con codifica PEM (
KEY_FORMAT_PEM_EC_P256_SHA256) adatto all'uso con l'API Universal Ledger come:-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ/vWkd5wgakFbVD25k8WM9Ll6We+ c8RVDS0R4G8xetsmFjfNW/ZxwWeB86IvMjxY8ZsdU9+W7BL5YM6rUB5yCQ== -----END PUBLIC KEY-----
Identificare chi può creare il tuo account
Il tipo di account che vuoi creare determina l'account principale nel libro mastro che ha l'autorizzazione per crearlo. Devi identificare il proprietario di questo account genitore. Per informazioni sui tipi di account nel Universal Ledger, vedi Concetti chiave.
| Tipo di account | Creato da | Invio della transazione |
|---|---|---|
| Currency Operator | Operatore della piattaforma | CreateCurrencyOperator |
| Clearinghouse | Currency Operator | CreateClearinghouse |
| Account manager | Currency Operator | CreateAccountManager |
| Token Manager | Currency Operator | CreateTokenManager |
| Account utente | Account manager | CreateAccount |
Una volta identificato, dovrai coordinarti e condividere i seguenti dettagli con il proprietario dell'account principale che può creare il tuo account:
- Il nome della rete in cui vuoi creare l'account. Per l'anteprima privata, consulta l'elenco delle reti disponibili.
- La parte pubblica della chiave di firma asimmetrica e il relativo
KeyFormat. Se hai seguito i comandigcloudin questa guida, il formato èKEY_FORMAT_PEM_EC_P256_SHA256. - Una stringa di commento dell'account con tutte le informazioni pertinenti da registrare nel libro mastro associato al tuo nuovo account. Si tratta di un valore opaco che viene memorizzato nel ledger, ma non interpretato in altro modo dal Universal Ledger. Una volta creato, questo campo è immutabile e leggibile da chiunque abbia accesso alla rete.
- Eventuali dettagli aggiuntivi necessari per compilare la transazione da inviare
al momento della creazione dell'account. Ad esempio, per creare un operatore di valuta devi
anche specificare la
currencyche verrà gestita dal nuovo operatore da creare.
Durante l'anteprima privata, contatta il tuo referente Google se non sai chi sia il proprietario dell'account genitore pertinente per il tuo caso d'uso.
Conferma la creazione dell'account
Una volta che la transazione inviata dall'account genitore viene eseguita correttamente
e finalizzata nel registro, la risposta del metodo
QueryTransactionState
includerà un
TransactionCertificate
con un evento transaction_output contenente l'ID account dell'account appena creato.
L'ID sarà simile al seguente esempio:
1:USR:XTS:025sAZ55EqGKF6vpXEpSS8X891nNDEQU9yFQKYkcFzAb6
Puoi confermare che il nuovo account è presente nel registro inviando la seguente richiesta 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
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto in cui è abilitata l'API Universal Ledger.LOCATION: la posizione dell'endpoint da raggiungere.NETWORK_NAME: il nome della rete in cui è stato creato il tuo account.ACCOUNT_ID: l'ID dell'account appena creato.
Vedrai un output simile al seguente:
{
"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",
}
}
}
Passaggi successivi
- Scopri come inviare richieste RPC all'API Universal Ledger.
- Scopri di più sulle transazioni che puoi inviare utilizzando il tuo nuovo account.