Universal Ledger 네트워크의 새 계정은 원장에 이미 있는 상위 계정으로 만들어야 합니다. 이 상위 계정은 트랜잭션에 서명하고 제출하여 새 계정을 만들어야 합니다.
이 가이드에서는 Universal Ledger 네트워크에서 새 계정을 요청하는 방법을 설명합니다. 학습 내용:
Cloud Key Management Service를 사용하여 새 계정의 비대칭 서명 키를 만듭니다.
적절한 상위 계정의 소유자를 식별하여 계정을 만듭니다.
원장에 계정이 생성되면 계정 세부정보를 확인합니다.
시작하기 전에
이 가이드를 완료하려면 다음이 필요합니다.
Universal Ledger API가 사용 설정된 Google Cloud 프로젝트
Universal Ledger 네트워크에서 계정 상태를 쿼리할 수 있도록
roles/universalledger.networkViewer와 같은 IAM 역할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를 사용하여 적절한 키 쌍을 만들고 공개 키를 검색하는 방법을 안내합니다. SHA-256 다이제스트가 있는 ECDSA P-256 키와 같이 Universal Ledger 요구사항과 호환되는 키와 서명을 생성하는 한 다른 키 관리 방법을 사용할 수 있습니다.
Google Cloud-
콘솔에서 Cloud Shell을 활성화합니다. Google Cloud
기본 프로젝트를 설정합니다.
gcloud config set project KEYS_PROJECTKEYS_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
이렇게 하면 Universal Ledger에서 지원하는 SHA-256 다이제스트가 있는 P-256 곡선에 ECDSA 키 쌍이 생성됩니다. 지원되는 형식 목록은 the
KeyFormat참조를 확인하세요.`
gcloud kms keys versions get-public-keycommand` 명령어를 사용하여 키 버전의 공개 키 부분을 검색합니다.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",
}
}
}
다음 단계
- Universal Ledger API에 RPC 요청을 보내는 방법을 알아봅니다.
- 새 계정을 사용하여 제출할 수 있는 트랜잭션에 대해 알아봅니다.