בנייה על SORA 3: Taira ו Minamoto
SORA 3 הוא מסלול ההפצה הציבורי הפנימי של האפליקציה שנבנה על Iroha 3 ו SORA Nexus. לבנות ולחזור על Taira קודם, ולאחר מכן להעביר את אותו צורת הלקוח ל Minamoto רק כאשר יש לך מפתחות מרכזיות נפרדות, XOR אמיתי עבור דמי, והישור לייצור.
הדרכה זו מראה כיצד להגדיר קלינט Iroha לרשתות ציבוריות SORA 3:
- רשת בדיקת Taira ב-
https://taira.sora.org - רשת מרכזית Minamoto ב-
https://minamoto.sora.org
השתמש Taira לבדיקות אינטגרציה, קנריות כתיבה מיומנות על ידי פנקס, וניסיון הפעלת. השתמשו Minamoto רק עבור פעילות הרשת המרכזית מוכנה לייצור. שתי הרשתות דורשות תשלום ב XOR:
- Taira משתמשת ברשת בדיקות XOR מן המזרקה הציבורית.
- Minamoto משתמשת XOR אמיתי. אין קנקן Minamoto.
מסלול הבנייה
| צעד | Taira Testnet | Minamoto מרכזית |
|---|---|---|
| תתחיל לקרוא מצב הרשת | שאלת /status ללא מפתחות | שאלת /status ללא מפתחות |
| בחר חלל נתונים | שימוש ציבורי universal אלא אם כן האפליקציה שלך זקוקה למסלול מנוהל | השתמשו באותו מרחב נתונים רק לאחר אישור הרשת הראשית |
| קבל נכס תשלום. | השתמש ברצועה הציבורית Taira | קבל XOR מתוך חשבון מימון Minamoto או זרם כספי מאושר |
| בדיקת כותבת | השתמשת בטיפול ממומלץ על ידי גלישה XOR | אל תשתמשו במכשירים בדיקות; כתבים מבזבזים אמיתי XOR |
| קידום | תמשיכו לנסות מחדש את ההיגיון, מעקב, וניהול חותמים | השתמשו במפתחות נפרדות, בקרת מימון ושחרור. |
הזרימה המעשית היא:
- לבנות את הלקוח נגד Taira ולהשתמש בשטח הנתונים הציבורי
universal. - הוסף חותם ולממן אותו עם המזרקה Taira.
- תפעיל את ההיגיון של האפליקציה שלך נגד Taira עד כישלונות הם משעממים ומצופים.
- ליצור חותם נפרד Minamoto, לממן אותו עם XOR אמיתי, ולהעביר רק את אותם פעולות מוכחות ל-mainnet.
1. להבין את מה שאתה מתכנן
ב SORA Nexus, חלל נתונים הוא חלק מהקטלוג של קו הרשת והדרכי הנתיב. לקלינט לא יוצר חלל נתוני ציבורי חדש רק על ידי שינוי client.toml.
- מצביעים את הלקוח בנקודת הסיום הימנית Torii
- בוחן את ההקשר של שרת הדומיין ומרחב נתונים עבור החשבון הקנוני שלו.
AccountId הוא תמיד קאנוני ובלתי תחום. [account].domain הערך ב client.toml מספק את ההקשר של הנתיב ושמה; הוא אינו הופך לחלק מהזהות החשבון. עבור רוב היישומים, התחילו עם הציבור universal מרחב נתונים. domain.dataspace טופס, למשל:
wonderland.universalאם אתה זקוק למרחב נתונים ארגוני חדש, תכין קטלוג והצעת מסלול במקום לנסות לרשום אותו מחשב לקוח רגיל. ראה Provision a New Dataspace למטה.
2. בדוק את נקודת הסיום הציבורית Torii
בדוק אם נקודת הסיום היעד היא חי לפני להגדיר חותם.
עבור Taira:
curl -fsS https://taira.sora.org/status \
| jq '{peers, blocks, txs_approved, queue_size}'עבור Minamoto:
curl -fsS https://minamoto.sora.org/status \
| jq '{peers, blocks, txs_approved, queue_size}'בדוק את חלל הנתונים והצפייה של המסלול שנחשף על ידי העמודה:
curl -fsS https://taira.sora.org/status \
| jq '.teu_lane_commit[] | {lane_id, alias, dataspace_id, dataspace_alias, visibility}'השתמשו באותו פקודה עם https://minamoto.sora.org/status עבור mainnet.
Taira MCP לסוכנים
Taira חושף גם גשר של פרוטוקול תקין מודל ילידי Torii (MCP) עבור זמני ההפעלה של הסוכן. השתמש בו כאשר סוכן צריך קריאת טסטנט חי, אבחון כתוב, או חזרות כתיבה משומכות בקפידה מבלי לבנות קודם קלינט מותאם על פי דפוס Torii.
| הגדרות | ערך |
|---|---|
| MCP נקודת סוף | https://taira.sora.org/v1/mcp |
| שורש רשת | https://taira.sora.org |
| השימוש המיועד | Taira קורות רשתת מבחן וניסויים של כתיבה ממומנים על ידי מכונת מים |
| שווה ערך לייצור | אל תדביקו את הכתיבה הזאת ב Minamoto אלא אם כן נקודת הסיום של הרשת המרכזית MCP ופיקוח על השחרור אושרו במפורש |
בדוק את מטא נתוני הגשר לפני הוספת חומר חתימה:
curl -fsS https://taira.sora.org/v1/mcp \
| jq '{protocolVersion, server: .serverInfo.name, tools: .capabilities.tools.count}'להגדיר את URL כשרת משתמש מקומי MCP בזמן הפעלת הסוכן. אל תתחייב את הערכים של סוכן MCP, טוגנים API, כותרות מחברים המשוברות, authority, או private_key לתוך repo docs או repo יישום זה.
כללים של סוכן מיידי שעובדים היטב עם Taira:
- תגלה כלים מהשרת MCP לפני שתתקשר אליהם; תגלה מחדש אם השר מספר
listChanged. - מעדיפים את הכלים
iroha.המתבוננים על פני כליםtorii.חומריים. - תתחילו לקרוא בלבד: לבדוק מצב, חשבונות, נכסים, שם כינוי, בלוקים, מצב הממשל, ומצב העסקאות לפני שתציעו כתבות.
- נדרש הוראות אנושיות מפורשות לפני מוטציות ברשת המבחן חיות. עבור מעטפות עסקאות חתומות מראש, השתמש
iroha.transactions.submit_and_waitכדי שהסוכן ממתין לתוצאה במקום רק להגיש. - סיכום ה- hashs של העסקה, מצב סופי וטעויות אישור שרת בתגובה הסוכן.
זרימת עבודה של פיתוח עם סוכנים
השתמשו בסוכנים כעוזרי פיתוח עבור לקוחות Iroha, בונים עסקאות, תסריטים לדיאגנסטיות וספרים של רוץ testnet. שמור על סמכות הסוכן לצמצם: הוא יכול לבחון קוד, לקרוא את מצב Taira, להציע שינויים ולפעול בדיקות מקומיות, אבל הוא לא צריך לשנות רשת חיה עד שאדם אישר את הפעולה המדויקת.
זרימת עבודה מעשית היא:
- בקש מהסוכן לבדוק את המסמכים הרלוונטיים, קוד SDK, פקודה CLI, או תוכנית כלי MCP לפני שהוא כותב קוד.
- שאל את הסוכן לכתוב קודם את הנתיב הקלינט הקטן ביותר: בדיקה של מצב, חיפוש חשבונות, פתרון פרופיל, או חיפוש מאזן.
- הוספת קוד בניית עסקאות רק לאחר שיחות קריאה בלבד עובדות נגד Taira.
- שמרו על ניסויים ברשתות חיתקות, לדוגמה מאחורי
TAIRA_LIVE=1, כך שרוץ ניסוי יחידה רגיל לעולם לא מבזבז כספי רשתות בדיקה או תלוי זמינות הרשת. - מחייב את הסוכן להודיע על שורש הרשת, שרשרת, חשבון הרשויות, סיכום הוראות, נכס תשלום, ושינוי מצב צפוי לפני שהוא מספק כל עסקאות .
- ביקורת קוד שנוצר לניהול סודי, התנהגות ניסיון חוזר, אידמפוטנטיות, וניהול דחייה לפני קידום אותו ל CI או זרמי עבודה מרכזיים.
כלים שימושיים MCP עבור פיתוח כוללים חיפוש נכסים של חשבונות, החלטה תחת השם, חיפוש בלוק, חיפוש עסקאות, רשימות עסקאות ובדיקות מצב צינור. השתמש בהם כדי לבנות אמון לפני ששלחת כל מטען מועיל חתום .
Use Taira MCP as a read-only inspector while developing this Iroha feature.
Inspect available iroha.* tools, verify the target account and asset state,
then update the client code. Do not submit transactions unless I explicitly
say "submit this transaction".זרם העבודה של עסקאות באמצעות סוכנים
הגשר MCP יכול להגיש עסקאות חתומות על ידי Iroha, אך הוא אינו מסיר את דרישות העסקה הרגילות. עסקה עדיין צריכה סמכות נכונה, רשיונות, מימון עמלות, שרשרת ID, מטאדאטה וחתום .
עבור עסקאות ברות Iroha, לבנות ולחתום על מעטפת העסקה עם SDK או CLI קודם, ולאחר מכן לתת לסוכן רק את האייטים הקנוניים של העסקה חתומה המוצגים כ- body_base64. הסוכן יכול להגיש את המעטפה ב- iroha.transactions.submit_and_wait, או להגיש אותה ב- iroha.transactions.submit ולסקר ב- iroha.transactions.wait .
אל תדביקי מפתחות פרטיות לפקודה של הסוכן. אם סוכן צריך לבנות עסקאות, ציין את זה בקוד מקומי שמטען סודות מהסביבה של זמן ההפעלה של המשתמש, שרשרת מפתח, חותם חומרה או תיק הקונפיגציה של testnet התעלמו ממנו. הסוכן אף פעם לא צריך לכתוב את החומר המרכזי לתוך מרקדון, קישורים, היומן, או מחויבויות.
לפני הגשת עסקה, לגרום לסוכן להכין תוכנית ארוכה של עסקה:
network: Taira שורש ושרשרת הרשתות המבחן IDauthority: חשבון אשר חותם ומשלם עמלותinstructions: רישום, מנטה, שריפה, העברה, מטא-מנתונים, אישור או סיכום קריאה לעסקאותfee asset: נכס אשר יועיל על Tairapreflight reads: חישוב חשבון, סכום נכסים, רשיונות, כינויים או בדיקות בלוק שכבר נעשו.expected result: מצב אשר צריך להיות נראה לאחר אישורidempotency: מה קורה אם אותה בקשה נבחנת שוב
לאחר ההשלוח, לגרום לסוכן לחכות למצב טערמינל, ולאחר מכן לאמת את השינוי במצב עם בקשה קריאה. דו"ח השלמה שימושי כולל:
- העסקה האש
- מצב הטרמינל, כגון
Committed,Applied,RejectedאוExpired - פרטים של בלוק או חוקר, כאשר הם זמינים
- תוצאות קריאת אימות
- הודעה של דחייה והאם הפסלה נראית כמו רשיונות, עמלות, אישור, מצב קבוע או זמינות נקודת הסיום
דוגמה של פקודה משמרת:
Prepare a Taira transaction plan, but do not submit yet. Use MCP reads to
verify the authority account, fee balance, target asset or alias, and current
transaction status if a hash already exists. Show the exact instructions and
expected post-state. Wait for my explicit "submit" message before calling
iroha.transactions.submit_and_wait.כאשר המעטפה חתומה כבר מוכנה:
Submit this pre-signed Taira transaction envelope with
iroha.transactions.submit_and_wait. Use the provided body_base64 only; do not
ask for private keys. Wait for a terminal status, then verify the resulting
state with read-only iroha.* tools and report the hash, status, and
verification result.לטפל Taira MCP כשטח בקרה של רשתת ניסוי ציבורית. מפתחות Taira, רשתות ניסוי XOR, חשבונות מצנצנים וסימנים קנריים הם חד פעמיים ועליהם להישאר נפרדים ממפתחות Minamoto ומפקידי עבודה של פוסקת הייצור.
דוגמאות צעצועים שאתה יכול לנסות עכשיו
דוגמאות אלה הן קריאה בלבד, אלא אם כן צוין. הם עובדים לפני שאתה מייצר מפתחות והם בטוחים להפעיל נגד שני רשתות ציבוריות.
השוואה בין מערכת המבחן Taira לבריאות הרשת המרכזית Minamoto:
for network in taira minamoto; do
root="https://$network.sora.org"
printf '\n%s\n' "$network"
curl -fsS "$root/status" \
| jq '{blocks, txs_approved, txs_rejected, queue_size, peers}'
doneרשימה של קווי השטח הנתונים הציבורי שחשפו על ידי Taira:
curl -fsS https://taira.sora.org/status \
| jq -r '.teu_lane_commit[]
| [.lane_id, .alias, .dataspace_alias, .visibility, .storage_profile, .block_height]
| @tsv'תפעיל את אותה פקודה נגד Minamoto כאשר אתה צריך את התצוגה של הרשת הראשית:
curl -fsS https://minamoto.sora.org/status \
| jq -r '.teu_lane_commit[]
| [.lane_id, .alias, .dataspace_alias, .visibility, .storage_profile, .block_height]
| @tsv'לבנות סונדה מצבו קטנה Node.js עבור לוח המעקב, בוט, או בדיקה של הפעלת:
node --input-type=module <<'EOF'
const roots = {
taira: 'https://taira.sora.org',
minamoto: 'https://minamoto.sora.org',
};
for (const [name, root] of Object.entries(roots)) {
const status = await fetch(`${root}/status`).then((res) => res.json());
const publicSpaces = status.teu_lane_commit
.filter((lane) => lane.visibility === 'public')
.map((lane) => `${lane.dataspace_alias}:${lane.block_height}`)
.join(', ');
console.log(
`${name}: ${status.blocks} blocks, ${status.queue_size} queued, public spaces ${publicSpaces}`,
);
}
EOFהצעצוע הראשון לצד כתיבה צריך להיות טענה למזרקה Taira. הוא משתמש ברשת מבחן XOR ולעולם לא צריך להצביע על Minamoto.
3. ליצור Config לקוח Taira
ליצור זוג מפתחות אם אין לך כבר אחד:
kagami keys --algorithm ed25519 --jsonליצור taira.client.toml:
chain = "fc56984b-2be7-431d-840e-21514d1883f0"
torii_url = "https://taira.sora.org/"
[account]
domain = "wonderland.universal"
profile = "taira"
public_key = "<ED25519_PUBLIC_KEY_HEX>"
private_key = "<ED25519_PRIVATE_KEY_HEX>"
[transaction]
time_to_live_ms = 100000
status_timeout_ms = 15000
nonce = falseהרמה העליונה chain היא שרשרת העסקאות המדויקת Taira ID. הגדרת [account].profile = "taira" בוחרת באופן עצמאי את ההבדל של שרשרת Taira I105. שרשרת ID אינה בוחרת את הפרופיל של החשבון.
תבדקו רק קריאה:
iroha --config ./taira.client.toml --output-format text ops sumeragi statusלבצע את האבחנה הציבורית Taira לפני בדיקות כתיבה:
iroha taira doctor --public-root https://taira.sora.org --jsonלממן את החשבון Taira באמצעות המזרקה לפני שתפעיל כתבות תשלום. זרימת המזרקה הישירה היא ב Get Testnet XOR על Taira .
לאחר קבלת ההצעה על המנקה והמימון של החשבון, Taira קאנרי הוא מבחן עשן כתיבה אופציונלי:
iroha --config ./taira.client.toml taira write-canary \
--public-root https://taira.sora.org \
--write-config ./taira.canary.client.toml \
--jsonהקנרי שולח פינג חתום, מחכה לאישור, ומכתוב את ההסדרות של חותם בזמן הפעלה כאשר --write-config מסופק. Taira הוא רשת מבחן ציבורית, כך שסיפוק השורה יכול לגרום לפינג חתום להיכשל גם כאשר המזרקה עצמה עובדת . אם taira doctor מדווח על שורה מלאה או הקנרי חוזר PRTRY:NEXUS_FEE_ADMISSION_REJECTED, חכו ותנסו שוב לפני שתייחסו לזה כטעיה בהשפעה של הלקוח.
עבור בדיקות עשן ללא פיקוח, לכסות את הקנרי במעגל חוזר מוגבל:
ok=false
for attempt in 1 2 3 4 5; do
iroha --config ./taira.client.toml taira write-canary \
--public-root https://taira.sora.org \
--write-config ./taira.canary.client.toml \
--json && ok=true && break
sleep 60
done
test "$ok" = trueלהפסיק לנסות מחדש אם iroha taira doctor מראה כישלונות קשים. סיפוק השורה והרחישה של הכניסה לתשלום הם תנאים עולמיים ברשתת המבחן הציבורית; DNS, TLS או status = "fail" אבחון לא.
ליצור a SORA Nexus חשבון ID
א SORA Nexus חשבון ID הוא קנוני I105 כתובת המוצאת מפתח הציבורי של החשבון ושל הרשת המטרה. [account].domain ערך לקוח TOML. אותו מפתח ציבורי מקודד למפתחות שונות IDs על Taira ו Minamoto, ומשתמשים הייצור צריכים ליצור זוג מפתחות נפרד עבור Minamoto.
לייצר או לטעון את מספר מפתחות Ed25519 אשר ישלטו על החשבון:
kagami keys --algorithm ed25519 --jsonלהפוך את המפתח הציבורי לחשבון Taira ID:
iroha tools address convert --profile taira <ED25519_PUBLIC_KEY_HEX>להפוך מפתח ציבורי Minamoto עם הפריפקס של הרשת הראשית:
iroha tools address convert --profile minamoto <ED25519_PUBLIC_KEY_HEX>השתמשו בחשבון המוצא ID בכל מקום Nexus API או CLI הפיקוד מבקש חשבון קנוני. ID, לדוגמה, Taira גלימה account_id, תשמור על המפתח הפרטי המתאים בהשגחת הלקוח שלך, ולבחר את אותה רשת ציבורית עם [account].profile = "taira" או [account].profile = "minamoto".
יצירת ID איננה מעצמה מייצרת חשבון ממומן על שרשרת. ב Taira, המזרקה יכולה ליצור ולממן את החשבון עבור testnet כותבים. ב Minamoto, השתמשו ב-mainnet מורשה או זרם כספי.
אחסון המפתחות וגיבוי
ניתן לחלוק את החשבון ID ואת המפתח הציבורי. המפתח הפרטי המתאים, הסיסמה, הזרע וחומר השיקום חייבים להיות סודיים.
השתמשו בתרגילים אלה עבור חשבונות SORA Nexus:
- שמור את המפתחות הפרטיות במנהל סיסמאות מוצפן, חנות מפתח תומכת בהרדואר או שירות חתימה ייחודי. אל תתחייב את המפתחות לפיקוח מקור או להשאיר את המפתחות הייצור בהיסטוריה של הצ'ל, בלגים, צ'אט, כרטיסים, או גיבויים לא מוצפנים.
- השתמשו בשבילה ייחודית בעלת אנטרופיה גבוהה עבור כל שפת או חותם הייצור. שמור סיסמאים במנהל סיסמה או בתהליך אחסון חלקי, ולא באותו קבץ או חבילת גיבוי כמו המפתח הפרטי מוצפן.
- שמרו על המפתחות Taira ו Minamoto בנפרד. מטרידו את המפתחות Taira כחומר רשת ניסוי חד פעמי ומפתחות Minamoto כמערכת כספי הייצור.
- גיבוי המפתח הפרטי, המפתח הציבורי, החשבון ID, פרופיל החשבון, וכל הערות לשחזור חשבון או שמירה נדרשות כדי להחזיר את החותם. מפתח פרטי ללא ההקשר של הרשת הוא קל לשימוש לרעה במהלך השיקום.
- שמרו לפחות גיבוי לא מקוון אחד מוצפן וגיבוי מוצפן אחד נפרד מבחינה גיאוגרפית עבור חותמי הייצור. תבדקו התאוששות עם פעולת קריאה קטנה בלבד לפני שתסתמכו על גיבוי .
- סובב או תחליף חותם אם המפתח הפרטי, סיסמה, מדיה גיבוי, או מארח החתימה עשויים להיות חשופים.
לקבלת פרטים נוספים, ראה חסון מפתחות קריפטוגרפיים ו- אבטחת סיסמא .
קבל את הטסטנט XOR על Taira
השתמש במברך הציבורי ישירות.
- ליצור או להטען חותם ולחושב את החשבון הקנוני Taira שלו ID.
- תביא את הפאזל הנוכחי.
- לפתור את הפאזל אם
difficulty_bitsגדול יותר מ-0. - תגיש את בקשת המנקה.
- חכו עד שהמשקל של החשבון או נכסים יראו לפני שישלחו הודעות תשלום.
הפוך מפתח ציבורי לתוך Taira I105 חשבון ID צפוי על ידי המזרקה:
iroha tools address convert --profile taira <ED25519_PUBLIC_KEY_HEX>תביא את הפאזל.
curl -fsS https://taira.sora.org/v1/accounts/faucet/puzzle | jq .המזרקה היא שירות רשת מבחן ציבורי. אם הפאזל או נקודת הסיום של הדרישה חוזרת 502, פסק זמן, או טעות אחרת ברמת השער, חכו ותנסו שוב לפני שינויים במפתחות או בהקנת הלקוח שלכם.
התגובה היא בצורת זו:
{
"algorithm": "scrypt-leading-zero-bits-v1",
"difficulty_bits": 8,
"anchor_height": 741,
"anchor_block_hash_hex": "05d2...",
"challenge_salt_hex": null,
"scrypt_log_n": 13,
"scrypt_r": 8,
"scrypt_p": 1,
"max_anchor_age_blocks": 6
}כאשר difficulty_bits הוא 0, להגיש רק את החשבון ID:
curl -fsS https://taira.sora.org/v1/accounts/faucet \
-H 'content-type: application/json' \
-d '{"account_id":"<TAIRA_I105_ACCOUNT_ID>"}'כאשר difficulty_bits הוא גדול יותר מ 0, לפתור את הפאזל ולהכלל את גובה המעמד בתוספת הנונס:
curl -fsS https://taira.sora.org/v1/accounts/faucet \
-H 'content-type: application/json' \
-d '{
"account_id": "<TAIRA_I105_ACCOUNT_ID>",
"pow_anchor_height": 741,
"pow_nonce_hex": "<NONCE_HEX>"
}'האלגוריתם של הפאזל הוא:
- לבנות את האתגר כמו SHA-256 על:
- בייטים של
iroha:accounts:faucet:pow:v2 - חשבון UTF-8 ID
anchor_heightכמו ג'ון גדולu64anchor_block_hash_hexמפורסמת באייטיםchallenge_salt_hexמקובל כבייטים, כאשר קיים
- בייטים של
- נסה
u64nonces מוצפן כערכים של 8 בייטים גדול-endian. - עבור כל סקרפט, תפעיל את הסקרפט עם:
- סיסמה: ה-8-בייט nonce
- מלח: האתגר של 32 בייטים
N = 2^scrypt_log_nr = scrypt_rp = scrypt_p- אורך ההוצאת: 32 בייטים
- ה-nonce המנצח הוא ה- digest הראשון עם לפחות
difficulty_bitsמוביל אפס ביטים.
התגובה למנקה כוללת את נכס המיועד והשיש של העסקות בשורה:
{
"account_id": "<TAIRA_I105_ACCOUNT_ID>",
"asset_definition_id": "6TEAJqbb8oEPmLncoNiMRbLEK6tw",
"asset_id": "...",
"amount": "25000",
"tx_hash_hex": "...",
"status": "QUEUED"
}התשובה מובילה כיום עם HTTP 202 Accepted. הגדרת הנכסים ID לעיל היא הנכסים של Taira המימון על ידי המנקה הציבורית. המנקה קיבלה את הבקשה כאשר היא חוזרת tx_hash_hex ו status: "QUEUED".
לאחר מכן סקר עבור הנכס המיועד לפני שתשלח את העסקאות שלך של תשלום דמי:
iroha --config ./taira.client.toml ledger asset get \
--definition 6TEAJqbb8oEPmLncoNiMRbLEK6tw \
--account <TAIRA_I105_ACCOUNT_ID>אם תביעת המזרקה התקבלה אך החשבון או הנכס עדיין לא נראים, העסקה עדיין מאחורי עיבוד קו הטסטנט ציבורי. חכו ותנסיו מחדש את הקריאה לפני שתשלחו כתבות.
עבור בדיקה ישירה API מוכנה לפעולה, שמור את זה כ- taira_faucet_claim.py ותעבירו את החשבון Taira I105 ID:
#!/usr/bin/env python3
import hashlib
import json
import sys
import urllib.request
def has_leading_zero_bits(digest: bytes, bits: int) -> bool:
full, rem = divmod(bits, 8)
if digest[:full] != b"\0" * full:
return False
return rem == 0 or digest[full] >> (8 - rem) == 0
root = "https://taira.sora.org"
account_id = sys.argv[1]
with urllib.request.urlopen(f"{root}/v1/accounts/faucet/puzzle") as res:
puzzle = json.load(res)
claim = {"account_id": account_id}
difficulty = int(puzzle["difficulty_bits"])
if difficulty > 0:
challenge = hashlib.sha256()
challenge.update(b"iroha:accounts:faucet:pow:v2")
challenge.update(account_id.encode())
challenge.update(int(puzzle["anchor_height"]).to_bytes(8, "big"))
challenge.update(bytes.fromhex(puzzle["anchor_block_hash_hex"]))
if puzzle.get("challenge_salt_hex"):
challenge.update(bytes.fromhex(puzzle["challenge_salt_hex"]))
n = 1 << int(puzzle["scrypt_log_n"])
r = int(puzzle["scrypt_r"])
p = int(puzzle["scrypt_p"])
salt = challenge.digest()
for nonce in range(1_000_000):
nonce_bytes = nonce.to_bytes(8, "big")
digest = hashlib.scrypt(nonce_bytes, salt=salt, n=n, r=r, p=p, dklen=32)
if has_leading_zero_bits(digest, difficulty):
claim["pow_anchor_height"] = puzzle["anchor_height"]
claim["pow_nonce_hex"] = nonce_bytes.hex()
break
else:
raise SystemExit("faucet nonce not found")
request = urllib.request.Request(
f"{root}/v1/accounts/faucet",
data=json.dumps(claim).encode(),
headers={"content-type": "application/json"},
method="POST",
)
with urllib.request.urlopen(request) as res:
print(json.dumps(json.load(res), indent=2))המנקה היא רק עבור Taira כספי טסטנט. אל השתמשו בטסטנט XOR, חשבונות ברזל, או Taira חותמים קנריים Minamoto זורמים.
5. ליצור תיקון לקוחות Minamoto
השתמשו בשני מפתחות נפרדים עבור Minamoto. אל תחזרו להשתמש במפתחות Taira עבור הרשת הראשית.
ליצור minamoto.client.toml:
chain = "00000000-0000-0000-0000-000000000753"
torii_url = "https://minamoto.sora.org/"
[account]
domain = "wonderland.universal"
profile = "minamoto"
public_key = "<ED25519_PUBLIC_KEY_HEX>"
private_key = "<ED25519_PRIVATE_KEY_HEX>"
[transaction]
time_to_live_ms = 100000
status_timeout_ms = 15000
nonce = falseהרמה העליונה chain הוא הזרם Nexus שרשרת מרכזית ID. [account].profile = "minamoto" בוחרת את Minamoto I105 הגדלה של שרשרת; שם המארח של נקודת הסיום והשרשרת ID אל תבחרו את זה באופן מעורפל.
להמיר מפתח ציבורי Minamoto לחשבון קנוני שלו I105 ID עם מקוד הרשת המרכזית:
iroha tools address convert --profile minamoto <ED25519_PUBLIC_KEY_HEX>תפעילו רק בדיקות בצד קריאה עד שהחשבון יועבר ויימומן באמצעות הזרימת ה-mainnet או זרימת השלטון:
iroha --config ./minamoto.client.toml --output-format text ops sumeragi statusאל תפעילו את המנקה Taira או עוזרת כתיבה נגד Minamoto.
6. מימון חשבון Minamoto ב- XOR
דמי Minamoto משולמים עם ייצור XOR, ו- Minamoto אין לו צינור ציבורי. לממן את החשבון המוגדר באמצעות חיבור ברשת המרכזית או העברת כספים מאושרים, או לקבל XOR מחשב Minamoto מיומן קיים.
בדוק את החשבון הקנוני ID והסכום עם בדיקות קריאה בלבד לפני הצבת כתב. תייחסו ל- Minamoto XOR כספי ייצור: תחזרי את אותה מבצע ב- Taira קודם, שמרו על מפתחות ייצור נפרדים, ואל תחשבו כי ניתן להפעיל מחדש עסקאות ברשת המרכזית.
Taira XOR לא יכול לשלם עמלות Minamoto. סולכות רשתות הבדיקה ודרשות למזרזים אינן מועברות ל Minamoto.
7. לעבוד בתוך מרחב נתונים קיים
השתמשו בשמות דומנים מוסמכים לחלוטין עבור אובייקטים של ספרי הנתונים המתגוררים בתוך חלל נתונים. לדוגמה, תחום פרויקט בחלל נתונים ציבורי צריך להשתמש:
apps.universalלאחר שהחשבון שלך יש את הרשיונות הנדרשים, ליצור כוונה ללא סוד AliasSetupPlanRequestV1 עבור הדומיין ולהשתמש בתכנן ההצהרה:
iroha --config ./taira.client.toml \
app alias setup plan \
--intent-file ./taira-apps-domain.intent.json \
--plan-file ./taira-apps-domain.plan.json
iroha --config ./taira.client.toml \
--metadata ./taira.tx-metadata.json \
app alias setup apply --plan-file ./taira-apps-domain.plan.jsonעבור Minamoto, ליצור ולאשר כוונה ותוכנית מרכזית נפרדות. התוכניות קשורות למגוון, סמכות, מעגל של מצב החיים שלהם, ומוקד, כך שתכנית Taira לא יכולה להיות מובילה או משחזרת:
iroha --config ./minamoto.client.toml \
app alias setup plan \
--intent-file ./minamoto-apps-domain.intent.json \
--plan-file ./minamoto-apps-domain.plan.json
iroha --config ./minamoto.client.toml \
app alias setup apply --plan-file ./minamoto-apps-domain.plan.jsonהכינוי של חשבונות משתמש באותם קישורים של חלקי נתונים:
alice@apps.universal
alice@universalשדות חשבון קפדניים עדיין משתמשים בחשבון קנוני I105 IDs. מתייחסו לכינויים כקשרים שניתן לקרוא על ידי אדם אשר מתפתחים לחשבון קאנוני IDs.
8. סיפקת מרחב נתונים חדש
מרחב נתונים חדש הוא מפעיל ושינוי של ממשל. נקודת הסיום הציבורית Torii יכולה לכוון את התנועה אל מרחבי נתונים מותאמים, אך היא תסרב על שם כינויים לא ידועים למרחבי נתנים.
לפני שאתה מכין שינוי, קלט את קטלוג החי הנוכחי:
curl -fsS https://taira.sora.org/status \
| jq '.teu_lane_commit[] | {lane_id, alias, dataspace_id, dataspace_alias, visibility}'עבור חשבון מפעיל, בדוק גם את תנוחת מסדרת המסלול:
iroha --config ./operator.client.toml app nexus lane-report --summaryאל תפרסמו שם כינוי חדש אלא אם כן עברו יחד סקירה של המסלול ID, חלל הנתונים ID, קבוצת ההמתנה, סובלנות לטעויות, מוניסט, כללי הנתיב והיצרן הפועל. חשבון משתמש רגיל עם הרשאות הנדרשות יכול לרכוש תחום ולקחתו SNS בתוך חלל נתונים קיים באמצעות מתכנן התכונות; הוא לא יכול להוסיף באופן בטוח חלל נתוני ציבורי חדש.
עבור חלל נתונים פרטי או ארגוני, להכין שינוי קטלוג עם:
- פרופיל שדה נתונים ייחודי ומספר
id - כניסה למסלול מתאימה או מינוי למסלול קיים
- חלל הנתונים
fault_tolerance - כללי הנתיב עבור ההוראות או קווי החשבון שצריכים לנחות שם
- מוניסט של דירקטוריון החלל או הוכחה מקבילת לשימוש, כאשר חלקי הנתונים חושפים יכולות UAID
- אישור השלטון למדיניות ההסמכה, התכנות, הסדר והטיפול.
פרגמנט קונפיגרציה שניתן לבחון נראה כך:
[[nexus.lane_catalog]]
index = 5
alias = "payments"
description = "Payments lane"
dataspace = "payments"
visibility = "public"
metadata = {}
[[nexus.dataspace_catalog]]
alias = "payments"
id = 20
description = "Payments dataspace"
fault_tolerance = 1
[[nexus.routing_policy.rules]]
lane = 5
dataspace = "payments"
[nexus.routing_policy.rules.matcher]
account_prefix = "payments."
description = "Route payments domains to the payments dataspace"קבלה של המפעיל צריכה לכלול את השערים הבאים:
irohad --sora --config <config.toml> --trace-configמעביר את הקונפיגורציה של העמודה המפתרת- המניפסט שנוצר או הוחזר מאורכיב עם חישובים וחתימות.
- מבחני עשן עוברים על Taira לפני כל קידום Minamoto
- קטלוג
/statusלאחר השינוי מראה את המסלול הנדרש ומרחב הנתונים. iroha app nexus lane-report --summaryלא מדווח על חוסר מסמכים נדרשים.
curl -fsS https://taira.sora.org/status \
| jq '.teu_lane_commit[] | select(.dataspace_alias == "payments")'לקדם את אותו מרחב נתונים ל- Minamoto רק לאחר שמלאים את הפעלת Taira, בדיקות עשן, מעקב וראיות של ניהול.