As novas contas em uma rede de razão universal precisam ser criadas por uma conta principal já presente no razão. Essa conta principal precisa assinar e enviar uma transação para criar a nova conta.
Este guia descreve como solicitar uma nova conta em uma rede de razão universal. Saiba como realizar as seguintes ações:
Crie chaves de assinatura assimétricas para a nova conta usando o Cloud Key Management Service.
Identifique o proprietário da conta de familiar responsável adequada para criar sua conta.
Confirme os detalhes da conta depois que ela for criada no livro razão.
Antes de começar
Para concluir este guia, você vai precisar do seguinte:
Um projeto do Google Cloud com a API Universal Ledger ativada.
Um papel do IAM, como
roles/universalledger.networkViewer, para que você possa pelo menos consultar o estado das contas em uma rede de razão universal.Um projeto Google Cloud com o Cloud KMS ativado.
Durante o teste, esse projeto pode ser o mesmo em que a API Universal Ledger está ativada.
Em produção, recomendamos que você:
- Use um projeto dedicado para seus recursos do Cloud KMS, separado de outros recursos do Google Cloud .
- Crie um projeto Google Cloud separado para gerenciar as chaves do Cloud KMS de cada rede do Universal Ledger que você usa.
O papel do IAM de administrador do Cloud KMS (
roles/cloudkms.admin) no projeto com o Cloud KMS ativado ou em um recurso pai.
Criar chaves de assinatura assimétricas
Cada conta que opera em um Universal Ledger requer um par de chaves pública-privada de assinatura assimétrica. A chave privada é usada para assinar transações, e a chave pública é registrada no livro-razão para identificar sua conta e verificar assinaturas.
As etapas a seguir orientam você na criação de um par de chaves adequado usando o Cloud KMS e na recuperação da chave pública. Você pode usar outras abordagens de gerenciamento de chaves, desde que elas produzam chaves e assinaturas compatíveis com os requisitos do Universal Ledger, como chaves ECDSA P-256 com resumos SHA-256.
-
No console do Google Cloud , ative o Cloud Shell.
Defina o projeto padrão.
gcloud config set project KEYS_PROJECTSubstitua
KEYS_PROJECTpelo ID do projeto a ser usado nos recursos do Cloud KMS.Se ainda não tiver feito isso, crie um keyring para armazenar suas chaves usando o comando
gcloud kms keyrings create:gcloud kms keyrings create KEY_RING \ --location=KEY_LOCATIONSubstitua:
KEY_RING: o nome do keyring a ser criado, por exemplo,test-gcul-keys. Esse nome é para suas próprias necessidades organizacionais e não precisa ser registrado no livro razão.KEY_LOCATION: o Google Cloud local do keyring, por exemplo,global.
Para cada conta que você quer usar no razão, crie uma chave de assinatura assimétrica usando o 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"Substitua:
KEY_NAME: o nome da chave a ser criada. Por exemplo,usd-operatoroueur-clearinghouse. Esse nome é para suas próprias necessidades organizacionais e não precisa ser registrado no livro razão.KEY_RING: o nome do keyring que vai armazenar a chave.KEY_LOCATION: o Google Cloud local da chave.
Isso cria um par de chaves ECDSA na curva P-256 com um resumo SHA-256, conforme compatível com o Universal Ledger. Para uma lista de formatos compatíveis, consulte a referência
KeyFormat.Recupere a parte da chave pública de uma versão da chave usando o 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_LOCATIONSubstitua:
KEY_VERSION: a versão da chave a ser recebida. Para chaves recém-criadas, é1.KEY_NAME: o nome da chave;KEY_RING: o nome do keyring que contém a chave.KEY_LOCATION: o Google Cloud local da chave.
Esse comando gera a chave pública em um formato codificado em PEM (
KEY_FORMAT_PEM_EC_P256_SHA256) adequado para uso com a API Universal Ledger como:-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ/vWkd5wgakFbVD25k8WM9Ll6We+ c8RVDS0R4G8xetsmFjfNW/ZxwWeB86IvMjxY8ZsdU9+W7BL5YM6rUB5yCQ== -----END PUBLIC KEY-----
Identificar quem pode criar sua conta
O tipo de conta que você quer criar determina a conta principal no razão que tem permissão para criá-la. Você precisa identificar o proprietário dessa conta do familiar responsável. Para saber mais sobre os tipos de contas no Universal Ledger, consulte Principais conceitos.
| Tipo de conta | Criado por | Envio da transação |
|---|---|---|
| Operador de moeda | Operador de plataforma | CreateCurrencyOperator |
| Clearinghouse | Operador de moeda | CreateClearinghouse |
| Gerente de contas | Operador de moeda | CreateAccountManager |
| Gerenciador de tokens | Operador de moeda | CreateTokenManager |
| Conta de usuário | Gerente de contas | CreateAccount |
Depois de identificar a conta, coordene e compartilhe os seguintes detalhes com o proprietário da conta principal, que pode criar sua conta:
- O nome da rede em que você quer criar a conta. Para a prévia privada, consulte a lista de Redes disponíveis.
- A parte pública da sua chave de assinatura assimétrica e o
KeyFormatcorrespondente. Se você seguiu os comandosgcloudneste guia, o formato éKEY_FORMAT_PEM_EC_P256_SHA256. - Uma string de comentário da conta com informações relevantes para registrar no razão associado à sua nova conta. Esse é um valor opaco armazenado no livro-razão, mas não interpretado de outra forma pelo Universal Ledger. Depois de criado, esse campo é imutável e pode ser lido por qualquer pessoa com acesso à rede.
- Outros detalhes necessários para preencher a transação a ser enviada
ao criar a conta. Por exemplo, para criar um operador de moeda, você também precisa especificar o
currencyque será gerenciado pelo novo operador a ser criado.
Durante a prévia privada, entre em contato com seu contato no Google se não tiver certeza sobre quem é o proprietário da conta principal relevante para seu caso de uso.
Confirmar se a conta foi criada
Quando a transação enviada pela conta principal for executada e finalizada no livro razão, a resposta do método QueryTransactionState vai incluir um TransactionCertificate com um evento transaction_output que contém o ID da conta recém-criada.
O ID será semelhante a este exemplo:
1:USR:XTS:025sAZ55EqGKF6vpXEpSS8X891nNDEQU9yFQKYkcFzAb6
Para confirmar se a nova conta está presente no livro razão, envie a seguinte solicitação 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
Substitua:
PROJECT_ID: o ID do projeto em que a API Universal Ledger está ativada.LOCATION: o local do endpoint a ser alcançado.NETWORK_NAME: o nome da rede em que sua conta foi criada.ACCOUNT_ID: o ID da conta recém-criada.
Você verá um resultado semelhante a este:
{
"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",
}
}
}
A seguir
- Saiba como enviar solicitações RPC para a API Universal Ledger.
- Saiba mais sobre as transações que você pode enviar usando sua nova conta.