בקשה ליצירת חשבון חדש

חשבונות חדשים ברשת 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.

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

  2. מגדירים את פרויקט ברירת המחדל:

    gcloud config set project KEYS_PROJECT
    

    מחליפים את KEYS_PROJECT במזהה הפרויקט שבו רוצים להשתמש בשביל משאבי Cloud KMS.

  3. אם עוד לא עשיתם זאת, צרו מחזיק מפתחות כדי לאחסן את המפתחות באמצעות הפקודה gcloud kms keyrings create:

    gcloud kms keyrings create KEY_RING \
        --location=KEY_LOCATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • KEY_RING: השם של אוסף המפתחות שרוצים ליצור, למשל test-gcul-keys. השם הזה מיועד לצרכים הארגוניים שלכם ולא צריך לתעד אותו בספר החשבונות.
    • KEY_LOCATION: ה Google Cloud מיקום של אוסף המפתחות, לדוגמה global.
  4. לכל חשבון שרוצים להשתמש בו בספר החשבונות, יוצרים מפתח חתימה אסימטרי באמצעות הפקודה 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.

  5. כדי לאחזר את החלק של המפתח הציבורי מגרסת מפתח, משתמשים בפקודה 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",
    }
  }
}

המאמרים הבאים