בסדרת מאמרים זו, נבנה מטבע קריפטוגרפי פשוט המבוסס על הטמעת בלוקצ'יין פשוטה בגולנג תוך פחות מ-5 דקות. תחילה עליך להתקין Golang כדי ליצור את הפרויקט הזה. עבור עורך טקסט אתה יכול להשתמש בכל דבר, כאן אני משתמש בקוד סטודיו חזותי.
התקנת אותו? בסדר, בוא נעשה את זה!
אם יצרת את הפרויקט צור קובץ main.go . אוקיי מאפשר קוד, ראשית נתחיל מ-main.go נתחיל עם החלק struct Block של "blockchain". בבלוקצ'יין, הוא חוסם שמאחסן מידע בעל ערך. לדוגמה, ביטקוין חוסם עסקאות בחנות, המהות של כל מטבע קריפטוגרפי. מלבד זאת, בלוק מכיל מידע טכני כלשהו, כמו הגרסה שלו, חותמת הזמן הנוכחית וה-hash של הבלוק הקודם. במאמר זה אנחנו לא הולכים ליישם את הבלוק כפי שהוא מתואר במפרטי הבלוקצ'יין או הביטקוין, במקום זאת, נשתמש בגרסה פשוטה שלו, המכילה רק מידע משמעותי. הנה איך זה נראה. כאן יש לנו בלוק struct:
הקלד Block struct {זמן חותמת זמןטרנזקציות []מחרוזתprevhash []בייטHash []בייט}
Timestamp
הוא חותמת הזמן הנוכחית (כאשר הבלוק נוצר), transactions
הוא המידע בעל הערך האמיתי הכלול בבלוק, prevhas
מאחסן את ה-hash של הבלוק הקודם, ו Hash
הוא ה-hash של הבלוק. במפרט ביטקוין Timestamp
, prevhash
, ו Hash
הם כותרות בלוק, היוצרות מבנה נתונים נפרד, ועסקאות (transaction
במקרה שלנו) הוא מבנה נתונים נפרד. אז אנחנו מערבבים אותם כאן למען הפשטות.
אז איך מחשבים את ה-hashs? אופן חישוב הגיבוב הוא תכונה חשובה מאוד של בלוקצ'יין, ותכונה זו היא שהופכת את הבלוקצ'יין לאבטח. העניין הוא שחישוב hash הוא פעולה קשה מבחינה חישובית, זה לוקח קצת זמן אפילו במחשבים מהירים (בגלל זה אנשים קונים GPUs חזקים כדי לכרות ביטקוין). זהו תכנון אדריכלי מכוון, המקשה על הוספת בלוקים חדשים, ובכך מונע את השינוי שלהם לאחר הוספתם. נדון וניישם מנגנון זה במאמר עתידי.
לעת עתה, רק ניקח שדות בלוק, נשרשר אותם ונחשב גיבוב SHA-256 על השילוב המשורשר. בוא נעשה את זה ב Newhash
שיטה:
func NewHash(זמן זמן.זמן, טרנזקציות []מחרוזת, prevhash []בייט) []בייט {קלט := append(prevhash, time.String()...)עבור עסקאות := טווח עסקאות {input = append(input, string(rune(transaction))...)}hash := sha256.Sum256(קלט)החזר hash[:]}
לאחר מכן, בעקבות מוסכמה של גולנג, ניישם פונקציה שתפשט את היצירה של בלוק וגימור:
func Blocks(transactions []string, prevhash []byte) *Block {currentTime := time.Now()החזר &חסום{חותמת זמן: time.Time{},עסקאות: עסקאות,prevhash: prevhash,Hash: NewHash(currentTime, טרנזקציות, prevhash),}}
אנו ממשיכים ליצור פונקציית הדפסה. פונקציית ההדפסה שימושית להדפסת התוכן של כל בלוק שמבצע עסקה. הנה הקוד:
func Print(בלוק *חסום) {fmt.Printf("ttime: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("thash: %xn", block.Hash)}
ועסקת פונקציה עבור עסקת הדפסה:
func Transaction(block *Block) {fmt.Println("tTransactions:")עבור i, transaction := range block.transactions {fmt.Printf("tt%v: %qn", i, transaction)}}
לאחר השלמת כל הפונקציות הנדרשות, נשתמש בה בפונקציה הראשית:
func main () {ryan := []string{"ryandi שלח 50 BTC ל-Reza"}block_1 := Blocks(ריאן, []בייט{})fmt.Println("זה הבלוק הראשון שלנו")Print(block_1)Transaction(block_1)jack := []string{"jack send 20 BTC to Reynold"}block_2 := Blocks(jack, block_1.Hash)fmt.Println("זה הבלוק השני שלנו")Print(block_2)Transaction(block_2)}
אוקיי כל הקוד שסיימנו לכתוב. בוא נריץ אותו על ידי הקלדת go run main.go בטרמינל. פלט:
סיכום
בנינו אב טיפוס פשוט מאוד של בלוקצ'יין: זה רק מערך של בלוקים, כשלכל בלוק יש קשר לקודמו. עם זאת, הבלוקצ'יין בפועל הוא הרבה יותר מורכב. בבלוקצ'יין שלנו הוספת בלוקים חדשים היא קלה ומהירה, אבל בבלוקצ'יין אמיתי הוספת בלוקים חדשים דורשת קצת עבודה: צריך לבצע כמה חישובים כבדים לפני שמקבלים אישור להוסיף בלוקים (מנגנון זה נקרא הוכחה של עבודה). כמו כן, בלוקצ'יין הוא מסד נתונים מבוזר שאין לו מקבל החלטות אחד. לפיכך, חסימה חדשה חייבת להיות מאושרת ומאושרת על ידי משתתפים אחרים ברשת (מנגנון זה נקרא קונצנזוס). ועדיין אין עסקאות בבלוקצ'יין שלנו!
- "
- תעשיות
- מאמר
- מאמרים
- ביטקוין
- blockchain
- BTC
- לִבנוֹת
- לִקְנוֹת
- קוד
- מחשבים
- הקשר
- קונסנסוס
- תוכן
- להמשיך
- מטבע מבוזר
- נוֹכְחִי
- נתונים
- מסד נתונים
- עיצוב
- עורך
- מהר
- מאפיין
- שדות
- ראשון
- לעקוב
- טופס
- פונקציה
- עתיד
- GV
- שירים
- כאן
- איך
- hr
- HTTPS
- ia
- מידע
- IP
- IT
- בינוני
- רשת
- אחר
- אֲנָשִׁים
- מניעה
- פּרוֹיֶקט
- הוכחת עבודה
- רכס
- הפעלה
- סדרה
- פָּשׁוּט
- So
- התחלה
- חנות
- חנויות
- טכני
- זמן
- עסקה
- עסקות
- W
- תיק עבודות
- כתיבה