חשבונות חדשים ברשת 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. פרטים על פורמטים נתמכים של מפתחות מופיעים במאמר בנושא KeyFormat.
-
במסוף 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 |
אחרי שתזהו את הבעלים, תצטרכו לתאם איתו ולשתף איתו את הפרטים הבאים כדי שהוא יוכל ליצור את החשבון שלכם:
- שם הרשת שבה רוצים ליצור את החשבון. רשימת האזורים הנתמכים מופיעה במאמר רשתות ואזורים זמינים.
- החלק הציבורי של מפתח החתימה האסימטרי וה
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
- מידע על עסקאות שאפשר לשלוח באמצעות החשבון החדש