חשבונות חדשים ברשת Universal Ledger צריכים להיווצר על ידי חשבון הורה שכבר קיים בספר החשבונות. כדי ליצור את החשבון החדש, בעל חשבון ההורה צריך לחתום על עסקה ולשלוח אותה.
במדריך הזה מוסבר איך לבקש חשבון חדש ברשת Universal Ledger. בקישורים הבאים תוכלו ללמוד איך:
יוצרים מפתחות חתימה אסימטריים לחשבון החדש באמצעות Cloud Key Management Service.
כדי ליצור את החשבון, צריך לזהות את הבעלים של החשבון המתאים של ההורה.
אחרי שהחשבון נוצר בספר החשבונות, צריך לאשר את פרטי החשבון.
לפני שמתחילים
כדי להשלים את המדריך הזה, תצטרכו:
Google Cloud פרויקט שמופעל בו Universal Ledger API.
תפקיד IAM כמו
roles/universalledger.networkViewer, כדי שתוכלו לפחות לשלוח שאילתות לגבי מצב החשבונות ברשת של Universal Ledger.Google Cloud פרויקט שבו מופעל Cloud KMS.
במהלך הבדיקה, הפרויקט הזה יכול להיות זהה לפרויקט שבו מופעל Universal Ledger API.
בסביבת ייצור, מומלץ:
- כדאי להשתמש בפרויקט ייעודי למשאבי Cloud KMS, בנפרד ממשאבי Google Cloud אחרים.
- צריך ליצור Google Cloud פרויקט נפרד כדי לנהל את המפתחות של Cloud KMS לכל רשת Universal Ledger שבה אתם משתמשים.
תפקיד ה-IAM Cloud KMS Admin (
roles/cloudkms.admin) בפרויקט שבו Cloud KMS מופעל, או במשאב אב.
יצירת מפתחות חתימה אסימטריים
כל חשבון שפועל ב-Universal Ledger דורש זוג מפתחות אסימטרי לחתימה – מפתח ציבורי ומפתח פרטי. המפתח הפרטי משמש לחתימה על עסקאות, והמפתח הציבורי רשום בספר החשבונות כדי לזהות את החשבון ולאמת חתימות.
בשלבים הבאים מוסבר איך ליצור זוג מפתחות מתאים באמצעות Cloud KMS ואיך לאחזר את המפתח הציבורי. אפשר להשתמש בגישות אחרות לניהול מפתחות, כל עוד הן יוצרות מפתחות וחתימות שתואמים לדרישות של Universal Ledger, כמו מפתחות ECDSA P-256 עם תקצירי SHA-256.
-
במסוף Google Cloud , מפעילים את Cloud Shell.
מגדירים את פרויקט ברירת המחדל:
gcloud config set project KEYS_PROJECTמחליפים את
KEYS_PROJECTבמזהה הפרויקט שבו רוצים להשתמש בשביל משאבי Cloud KMS.אם עוד לא עשיתם זאת, צרו מחזיק מפתחות כדי לאחסן את המפתחות באמצעות הפקודה
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 המיקום של המפתח.
הפעולה הזו יוצרת זוג מפתחות ECDSA בעקומת P-256 עם תקציר SHA-256, כפי שנתמך ב-Universal Ledger. רשימה של פורמטים נתמכים זמינה במאמר בנושא
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 |
| Clearinghouse | אופרטור מטבע | CreateClearinghouse |
| Account Manager | אופרטור מטבע | CreateAccountManager |
| הכלי לניהול טוקנים | אופרטור מטבע | CreateTokenManager |
| חשבון משתמש | Account Manager | CreateAccount |
אחרי שתזהו את הבעלים, תצטרכו לתאם איתו ולשתף איתו את הפרטים הבאים כדי שהוא יוכל ליצור את החשבון שלכם:
- שם הרשת שבה רוצים ליצור את החשבון. לגרסת Private Preview, אפשר לעיין ברשימה של רשתות זמינות.
- החלק הציבורי של מפתח החתימה האסימטרי וה
KeyFormatהתואם שלו. אם פעלתם לפי הפקודות שלgcloudבמדריך הזה, הפורמט הואKEY_FORMAT_PEM_EC_P256_SHA256. - מחרוזת של הערה בחשבון עם כל מידע רלוונטי שצריך לתעד בספר החשבונות שמשויך לחשבון החדש. זהו ערך אטום שמאוחסן בספר החשבונות, אבל לא מתפרש אחרת על ידי Universal Ledger. אחרי שיוצרים את השדה הזה, אי אפשר לשנות אותו וכל מי שיש לו גישה לרשת יכול לקרוא אותו.
- פרטים נוספים שנדרשים כדי לאכלס את העסקה שתישלח כשיוצרים את החשבון. לדוגמה, כדי ליצור Currency Operator, צריך לציין גם את
currencyשינוהל על ידי האופרטור החדש שייווצר.
במהלך התצוגה המקדימה הפרטית, אם אתם לא בטוחים מי הבעלים של חשבון ההורה הרלוונטי לתרחיש השימוש שלכם, אתם יכולים לפנות לאיש הקשר שלכם ב-Google.
אישור שהחשבון נוצר
אחרי שהעסקה שנשלחה מחשבון ההורה תתבצע ותושלם בהצלחה בספר החשבונות, התשובה מ-method QueryTransactionState תכלול TransactionCertificate עם אירוע transaction_output שמכיל את מזהה החשבון שנוצר.
המזהה ייראה כמו בדוגמה הבאה:
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. -
LOCATION: המיקום של נקודת הקצה שאליה רוצים להגיע. -
NETWORK_NAME: השם של הרשת שבה נוצר החשבון. -
ACCOUNT_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
- מידע על עסקאות שאפשר לשלוח באמצעות החשבון החדש