אם נסתכל על המגמות של השנים הקודמות, שמענו על בלוקצ'יין כל הזמן, אבל לא הרבה על הפרטים הספציפיים.
כולנו מודעים לכך שמטבעות קריפטוגרפיים כמו ביטקוין, Ethereum, Dogecoin, Matic ואחרים מסתמכים על טכנולוגיית בלוקצ'יין. Blockchain הוביל את האירועים המשמעותיים שחוללו מהפכה בתעשיות רבות בשנת 2021 וסללו את הדרך להישגים חדשים.
Blockchain הוא אמצעי לאחסון נתונים בצורה שקשה או בלתי אפשרי לערוך, לפרוץ או לרמות. זהו פנקס דיגיטלי של עסקאות המשוכפלות ומפוזרות על פני כל רשת מערכות המחשוב של הבלוקצ'יין.
זוהי טכנולוגיית מסד הנתונים פורצת הדרך המניעה כמעט את כל מטבעות הקריפטו. Blockchain מקשה מאוד לפרוץ או לרמות את המערכת על ידי הפצת עותקים זהים של מסד נתונים על פני רשת שלמה.
בעוד ביטקוין הוא כיום השימוש הבולט ביותר בבלוקצ'יין, הטכנולוגיה יכולה לשרת מגוון רחב מאוד של יישומים.
מטבעות קריפטו ובלוקצ'יין הפכו פופולריים יותר ויותר בשנים האחרונות, ומגמה זו צפויה להימשך.
אנו ניצור בלוקצ'יין פשוט עם JavaScript במדריך זה. זה יספק לך הבנה בסיסית של איך בלוקצ'יין עובד.
בואו נקרא לזה MelodyCoin ונכנס מיד לפעולה!
יצירת בלוק
כדי להתחיל, ניצור קובץ JavaScript חדש שבו נמקם את כל הקוד שלנו.
בואו נקרא לזה main.js ונתחיל בתיאור איך בלוקצ'יין ובלוקים צריכים להיראות.
צור מחלקה בלוק ותן לה את הפונקציה Object() { [קוד מקורי] } מלכתחילה.
עליך לתת תאריך, ואת ה-hash של הבלוק הקודם בעת יצירת בלוק חדש:
להלן ההגדרות לכל נכס:
- חותמת הזמן מציינת מתי בוצעה החסימה. אתה יכול להשתמש בכל פורמט שתבחר (במקרה זה, חותמת זמן UNIX).
- כל צורה של נתונים שברצונך לחבר לבלוק זה יכולה להיכלל בפרמטר הנתונים. אם ברצונך ליצור מטבע קריפטוגרפי, תוכל לשמור נתוני עסקאות כגון השולח/המקבל וסכום הכסף שהועבר לכאן.
- ה- previousHash הוא מחרוזת שמחזיקה את ה-hash של הבלוק הקודם. זה מה שייצור את שרשרת הבלוקים, שתהיה קריטית במתן שלמות הבלוקצ'יין שלנו בהמשך.
יצירת Hash
כל בלוק מקשר לבלוק הקודם (ולכן המאפיין previousHash). כלומר, כל בלוק דורש hash. Hash דומה לטביעת אצבע. זה נבדל עבור כל בלוק.
ניתן לחשב את ה-hash של בלוק על-ידי העברת כל התוכן שלו דרך פונקציית Hash.
אז בואו נתחיל ביישום פונקציה שמחשבת את ה-hash של הבלוק הנוכחי.
אז תחת המחלקה Block, אנו מגדירים את הפונקציה calculateHash:
עם זאת, ה-hash SHA256 אינו נתמך על ידי JavaScript ויש להשיגו מספרייה חיצונית.
Crypto-js היא חבילה פנטסטית הכוללת יישומים מאובטחים של מספר אלגוריתמי Hash.
אז נוכל לייבא אותו לקוד main.js שלנו.
עכשיו, כשיש לנו את הפונקציה calculateHash() שלנו, בואו נשתמש בה בפונקציית הבלוק שלנו:
לאחר תיאור איך נראה בלוק, נוכל להגדיר איך בלוקצ'יין צריך להיראות. אז בואו ניצור כיתה חדשה.
בתרחיש זה, הבלוקצ'יין הוא אובייקט פשוט מאוד שיש לו שרשרת מאפיינים. זהו מערך המחזיק את כל הבלוקים בשרשרת.
לפני שנוכל להוסיף בלוקים, עלינו ליצור תחילה את מה שמכונה "גוש בראשית". זהו הבלוק הראשון בשרשרת, והוא ייחודי בכך שאינו יכול להצביע על בלוק קודם (הוא הראשון!).
אז, כדי לבנות את בלוק הבראשית, אוסיף פונקציה למחלקה שלנו בשם createGenesisBlock (). חזרה בפונקציה Object() { [קוד מקורי] } של מחלקה Blockchain שלנו.
כעת נוכל לכלול את בלוק הג'נסיס בכל פעם שאנו בונים מופע חדש של בלוקצ'יין:
שיטות בלוקצ'יין
כעת, בואו נוסיף שיטות למחלקת הבלוקצ'יין שלנו שיאפשרו לנו לעשות דברים כמו להוסיף בלוקים חדשים ולאחזר את הבלוק העדכני ביותר.
הפונקציה getLatestBlock היא הבסיסית ביותר. זה פשוט מחזיר את החבר האחרון במערך השרשרת:
טכניקת addBlock היא קצת יותר מעורבת.
לפני שנוכל להוסיף בלוק חדש לשרשרת שלנו, עלינו להגדיר כראוי את שדה ה-hash הקודם של הבלוק הזה.
יש להגדיר אותו ל-hash של הבלוק האחרון שנוסף לרשת שלנו. אנחנו צריכים גם לחשב את ה-hash של הבלוק החדש:
בדיקות
בוא נראה איך MelodyCoin שלנו יצא.
צור מופע בלוקצ'יין כדי להשיג זאת. בואו נוסיף עוד כמה בלוקים:
יצרנו שם שני בלוקים חדשים. בואו להציץ איך נראה הבלוקצ'יין שלנו כרגע.
MelodyCoin יהיה מחרוזת ופורמט עם ארבעה רווחים:
ודא את תקינות הבלוקצ'יין
Blockchains הם פנטסטיים מכיוון שברגע שנוסף בלוק, לא ניתן לשנות אותו מבלי לבטל את שאר השרשרת.
עם זאת, אין שיטה עבורי לבדוק את תקינות הבלוקצ'יין שלנו עם יישום זה.
בואו נכיר פונקציית isChainValid לבלוקצ'יין שלנו. אם השרשרת לגיטימית, היא תחזור אמיתית; אחרת, הוא יחזיר false:
בדיקת תקינות
כעת אנו יכולים להעמיד את תקינות הבלוקצ'יין שלנו במבחן. אם נבצע את זה עכשיו, זה יאשר שהשרשרת שלנו אמיתית.
הבה ננסה כעת להתעסק בבלוקצ'יין שלנו. נשנה את בלוק 2 ונחליף את תוכנו (נניח שהעברנו 100 מטבעות במקום ארבעה).
כאשר אנו מבצעים זאת, אנו יכולים לראות שהתוכנה מזהה את המאמץ שלנו להתעסק בשרשרת.
עם זאת, אתה יכול להאמין שיש שיטה אחרת בשבילי להתערב בזה. שיניתי את התוכן בבלוק אבל לא חישבתי מחדש את ה-hash. אז אתה יכול לנסות להיות חכם ולחשב מחדש את ה-hash של אותו בלוק.
זה כל מה שהיה במערך הבלוקצ'יין הזעיר שלנו! זה מאפשר לנו להוסיף בלוקים חדשים ולזהות התעסקות בנתונים בתוך השרשרת.
ישנן שתי בעיות עם הבלוקצ'יין הקטן שלנו שעלינו לטפל בהן:
- מחשבים מודרניים מהירים במיוחד ויכולים להוסיף אלפי בלוקים לשרשרת שלנו בשניות. ברור שאנחנו לא רוצים שמישהו יעביר דואר זבל לבלוקצ'יין שלנו.
- הבלוקצ'יין שלנו עדיין חשוף לשיבוש. אתה יכול לעדכן את התוכן של בלוק ואז פשוט לחשב מחדש את הגיבובים (וגיבובים קודמים) עבור כל הבלוקים הבאים. גם אם תתעסקו עם זה, תקבלו שרשרת לגיטימית.
כדי להתמודד עם החששות הללו, blockchains משתמשים בטכניקה המכונה "הוכחה לעבודה". עליך להוכיח שהשתמשת בכמות משמעותית של משאבי חישוב כדי ליצור בלוק באמצעות גישה זו. זה נקרא גם כריית.
הוכחת עבודה דורשת ש-hash של בלוק יתחיל בכמות מסוימת של אפסים. אבל איך אתה יכול לדעת אם ה-hash שלך מתאים לכלל זה?
התוכן של בלוק קובע את ה-hash שלו. אז אנחנו תמיד משיגים את אותו hash, בתנאי שלא נשנה את התוכן.
לכל בלוק צריך להוסיף ערך nonce כפתרון. זה בעצם כמה נתונים אקראיים שאנחנו יכולים לעדכן עד שה-hash של הבלוק שלנו יתחיל עם מספיק אפסים. מכיוון שאתה לא יכול לשנות את הפלט של פונקציית Hash, אתה צריך לבדוק הרבה שילובים שונים ולקוות לטוב.
הכירו את כרייה לבלוקצ'יין
נתחיל בכך שכוללת נון-נס בשיעור הבלוק שלנו. ה-nonce הוא הערך היחיד בתוך הבלוק שלנו שאנו יכולים לשנות כדי להשפיע על ה-hash של הבלוק.
אין באפשרותנו לשנות את חותמת הזמן או את הנתונים.
לאחר מכן, בוא נכתוב פונקציה mineBlock() שתבצע את הכרייה בפועל של בלוק. פונקציה זו תישלח את הקושי הדרוש כפרמטר ותמשיך לפעול עד שה-hash של הבלוק שלנו יתחיל במספיק אפסים.
פשוט הכנתי לולאת while בסיסית שתפעל עד שה-hash שלנו יתחיל עם מספיק אפסים. אנו משתמשים בקושי כדי לקבוע כמה אפסים נדרשים. עם קושי של 5, ה-hash שלנו חייב להתחיל ב-5 אפסים.
כאשר ה-hash שלנו אינו מכיל מספיק אפסים, אנו מעלים את ה-nonce באחד ומחשבים מחדש את ה-hash. ואם אנחנו מוצאים hash שמתאים לקושי, אנחנו רושמים אותו לקונסולה.
יש עוד דבר אחד שאנחנו צריכים לעשות. אנחנו לא באמת לוקחים את המשתנה nonce בחשבון בשיטת calculateHash שלנו, אז הנה הוא:
שיעור בלוקצ'יין
בואו נבחן את הגישה החדשה הזו במחלקת הבלוקצ'יין שלנו ונראה איך זה הולך.
כדי להתחיל, אגדיר את הקושי של הבלוקצ'יין שלנו בפונקציה Object(). אנו מגדירים אותו כאן מכיוון שנוכל להשתמש בו איפשהו מאוחר יותר.
לאחר מכן יש לשנות את הפונקציה addBlock כך שתכרה את הבלוק לפני הוספתו לשרשרת שלנו.
השתמש ב-Blockchain
כעת, בואו נשתמש בבלוקצ'יין החדש שלנו עם אלגוריתם הוכחת עבודה. כאן, הוסף כמה הצהרות console.log.
כאשר אנו מבצעים את הקוד הזה, אנו יכולים לראות שתהליך הכרייה אינו מהיר במיוחד.
לוקח לאלגוריתם זמן מה ליצור בלוקים עם hashes שמתחילים בשלושה אפסים (כפי שהוגדר לפי קושי).
אז זה היה הסוף של מערך הבלוקצ'יין הבסיסי שלנו.
אנו יכולים לווסת באיזו מהירות הוספת בלוקים חדשים לבלוקצ'יין שלנו הודות למנגנון הוכחת העבודה.
זוהי תכונת האבטחה המשמעותית ביותר בבלוקצ'יין. ועכשיו כשאתה מבין איך זה עובד, המשך ליצור משלך!
השאירו תגובה