თუ გადავხედავთ წინა რამდენიმე წლის ტენდენციებს, ჩვენ ყოველთვის გვსმენია ბლოკჩეინის შესახებ, მაგრამ არა ბევრი სპეციფიკის შესახებ.
ჩვენ ყველამ ვიცით, რომ კრიპტოვალუტები, როგორიცაა Bitcoin, Ethereum, Dogecoin, Matic და სხვები, ეყრდნობა blockchain ტექნოლოგიას. ბლოკჩეინმა სათავეში ჩაუყარა მნიშვნელოვანი მოვლენები, რომლებმაც რევოლუცია მოახდინეს მრავალ ინდუსტრიაში 2021 წელს და გზა გაუხსნეს ახალ მიღწევებს.
ბლოკჩეინი არის მონაცემთა შენახვის საშუალება ისე, რომ ძნელი ან შეუძლებელი იყოს რედაქტირება, გატეხვა ან თაღლითობა. ეს არის ტრანზაქციების ციფრული წიგნი, რომელიც დუბლირებულია და ვრცელდება ბლოკჩეინის კომპიუტერული სისტემების მთელ ქსელში.
ეს არის მონაცემთა ბაზის ინოვაციური ტექნოლოგია, რომელიც ამუშავებს პრაქტიკულად ყველა კრიპტოვალუტას. ბლოკჩეინი წარმოუდგენლად ართულებს სისტემის გატეხვას ან მოტყუებას მონაცემთა ბაზის იდენტური ასლების მთელ ქსელში გავრცელებით.
მიუხედავად იმისა, რომ ბიტკოინი ახლა ყველაზე გამორჩეული გამოყენებაა ბლოკჩეინისთვის, ტექნოლოგიას შეუძლია მრავალი აპლიკაციის გამოყენება.
კრიპტოვალუტები და ბლოკჩეინები სულ უფრო პოპულარული ხდება ბოლო წლებში და ეს ტენდენცია, სავარაუდოდ, გაგრძელდება.
ჩვენ გავაკეთებთ მარტივ ბლოკჩეინს JavaScript-ით ამ სახელმძღვანელოში. ის მოგაწვდით ძირითად გაგებას, თუ როგორ მუშაობს ბლოკჩეინი.
მოდით დავარქვათ მას MelodyCoin და ჩაერთოთ პირდაპირ მოქმედებაში!
ბლოკის შექმნა
დასაწყისისთვის, ჩვენ შევქმნით ახალ JavaScript ფაილს, რომელშიც განვათავსებთ მთელ ჩვენს კოდს.
მოდით ვუწოდოთ მას main.js და დავიწყოთ აღწერით, თუ როგორ უნდა გამოიყურებოდეს ბლოკჩეინი და ბლოკები.
შექმენით Block კლასი და მიეცით მას ფუნქცია Object() { [native code] } დასაწყისისთვის.
ახალი ბლოკის შექმნისას უნდა მიუთითოთ თარიღი და წინა ბლოკის ჰეში:
აქ მოცემულია თითოეული ქონების განმარტებები:
- დროის შტამპი მიუთითებს როდის გაკეთდა ბლოკი. თქვენ შეგიძლიათ გამოიყენოთ ნებისმიერი ფორმატი, რომელსაც აირჩევთ (ამ შემთხვევაში, UNIX დროის შტამპი).
- მონაცემების ნებისმიერი ფორმა, რომლის დაკავშირებაც გსურთ ამ ბლოკთან, შეიძლება ჩართული იყოს მონაცემთა პარამეტრში. თუ გსურთ შექმნათ კრიპტოვალუტა, შეგიძლიათ შეინახოთ ტრანზაქციის მონაცემები, როგორიცაა გამგზავნი/მიმღები და გადატანილი თანხის რაოდენობა.
- previousHash არის სტრიქონი, რომელიც შეიცავს წინა ბლოკის ჰეშს. ეს არის ის, რაც გამოიმუშავებს ბლოკების ჯაჭვს, რაც გადამწყვეტი იქნება შემდგომში ჩვენი ბლოკჩეინის მთლიანობის უზრუნველსაყოფად.
ჰეშების შექმნა
თითოეული ბლოკი აკავშირებს წინა ბლოკს (ამგვარად წინაHash თვისება). ანუ, თითოეული ბლოკი მოითხოვს ჰეშს. ჰეში თითის ანაბეჭდის მსგავსია. თითოეული ბლოკისთვის ის განსხვავებულია.
ბლოკის ჰეში შეიძლება გამოითვალოს მისი მთელი შინაარსის ჰეშის ფუნქციის გავლით.
მაშ ასე, დავიწყოთ ფუნქციის განხორციელებით, რომელიც ითვლის მიმდინარე ბლოკის ჰეშს.
ასე რომ, Block კლასში, ჩვენ განვსაზღვრავთ calculeHash ფუნქციას:
თუმცა, SHA256 ჰეში არ არის მხარდაჭერილი JavaScript-ით და უნდა იყოს მიღებული გარე ბიბლიოთეკიდან.
Crypto-js არის ფანტასტიკური პაკეტი, რომელიც მოიცავს რამდენიმე ჰეშის ალგორითმის უსაფრთხო განხორციელებას.
შემდეგ ჩვენ შეგვიძლია შემოვიტანოთ ის ჩვენს main.js კოდში.
ახლა, როდესაც ჩვენ გვაქვს გამოთვლაHash() ფუნქცია, მოდით გამოვიყენოთ ის ჩვენი Block-ის ფუნქციაში:
აღწერის შემდეგ როგორ გამოიყურება ბლოკი, შეგვიძლია განვსაზღვროთ როგორი უნდა იყოს ბლოკჩეინი. მოდით შევქმნათ ახალი კლასი.
ამ სცენარში, ბლოკჩეინი არის ძალიან მარტივი ობიექტი, რომელსაც აქვს საკუთრების ჯაჭვი. ეს არის მასივი, რომელიც შეიცავს ჯაჭვის ყველა ბლოკს.
სანამ ბლოკებს დავამატებთ, ჯერ უნდა შევქმნათ ის, რაც ცნობილია როგორც "გენეზისის ბლოკი". ეს არის პირველი ბლოკი ჯაჭვში და უნიკალურია იმით, რომ არ შეუძლია მიუთითოს წინა ბლოკზე (ეს არის პირველი!).
ასე რომ, გენეზისის ბლოკის ასაგებად, ჩვენს კლასს დავამატებ ფუნქციას, სახელად createGenesisBlock (). დაუბრუნდით ფუნქციას Object() { [მშობლიური კოდი] } ჩვენი Blockchain კლასის.
ახლა ჩვენ შეგვიძლია შევიტანოთ გენეზის ბლოკი ნებისმიერ დროს, როცა ავაშენებთ ახალ ბლოკჩეინის მაგალითს:
ბლოკჩეინის მეთოდები
ახლა მოდით დავამატოთ მეთოდები ჩვენს Blockchain კლასში, რომელიც საშუალებას მოგვცემს გავაკეთოთ ისეთი რამ, როგორიცაა ახალი ბლოკების დამატება და უახლესი ბლოკის მოძიება.
getLatestBlock ფუნქცია ყველაზე ძირითადია. ის უბრალოდ აბრუნებს ჯაჭვის მასივის საბოლოო წევრს:
addBlock ტექნიკა ცოტა უფრო ჩართულია.
სანამ ჩვენს ჯაჭვს დავამატებთ ახალ ბლოკს, ჯერ სათანადოდ უნდა დავაყენოთ ამ ბლოკის წინაHash ველი.
ის უნდა იყოს დაყენებული ჩვენს ჯაჭვში ბოლო დამატებული ბლოკის ჰეშზე. ჩვენ ასევე უნდა გამოვთვალოთ ახალი ბლოკის ჰეში:
ტესტირება
ვნახოთ, როგორ გამოვიდა ჩვენი MelodyCoin.
შექმენით ბლოკჩეინის მაგალითი ამის მისაღწევად. მოდით დავამატოთ კიდევ რამდენიმე ბლოკი:
ჩვენ იქ ორი ახალი ბლოკი გავაკეთეთ. მოდით, გადავხედოთ, როგორ გამოიყურება ამჟამად ჩვენი ბლოკჩეინი.
MelodyCoin იქნება სტრინგირებული და დაფორმატებული ოთხი ინტერვალით:
შეამოწმეთ ბლოკჩეინის მთლიანობა
ბლოკჩეინები ფანტასტიკურია, რადგან ბლოკის დამატების შემდეგ, მისი შეცვლა შეუძლებელია ჯაჭვის დარჩენილი ნაწილის გაუქმების გარეშე.
თუმცა, არ არსებობს მეთოდი, რომ შევამოწმო ჩვენი ბლოკჩეინის მთლიანობა ამ განხორციელებით.
მოდით შემოვიტანოთ isChainValid ფუნქცია ჩვენს ბლოკჩეინში. თუ ჯაჭვი ლეგიტიმურია, ის დაბრუნდება ჭეშმარიტად; წინააღმდეგ შემთხვევაში, ის დაბრუნდება false:
მთლიანობის ტესტირება
ახლა ჩვენ შეგვიძლია გამოვცადოთ ჩვენი ბლოკჩეინის მთლიანობა. თუ ჩვენ ახლა განვახორციელებთ, ეს დაადასტურებს, რომ ჩვენი ჯაჭვი ნამდვილია.
მოდით ახლა ვცადოთ ჩვენი ბლოკჩეინის ხელყოფა. მოდით შევცვალოთ ბლოკი 2 და გადავწეროთ მისი შიგთავსი (დავუშვათ, რომ ოთხის ნაცვლად 100 მონეტა გადავიტანეთ).
როდესაც ჩვენ ვასრულებთ ამას, ჩვენ ვხედავთ, რომ პროგრამული უზრუნველყოფა ცნობს ჩვენს ძალისხმევას ჯაჭვის ჩარევისთვის.
თუმცა, თქვენ შეგიძლიათ დაიჯეროთ, რომ არსებობს სხვა მეთოდი, რომ მე ამ საქმეში ჩავერევი. მე შევცვალე შინაარსი ბლოკში, მაგრამ არ გამოვთვალე ჰეში. ასე რომ, შეგიძლიათ სცადოთ იყოთ ჭკვიანი და ხელახლა გამოთვალოთ იმავე ბლოკის ჰეში.
სულ ეს იყო ჩვენი პატარა ბლოკჩეინის დაყენება! ეს საშუალებას გვაძლევს დავამატოთ ახალი ბლოკები და აღმოვაჩინოთ მონაცემების გაყალბება ჯაჭვის შიგნით.
არის ორი პრობლემა ჩვენს პატარა ბლოკჩეინთან დაკავშირებით, რომელიც უნდა გადავწყვიტოთ:
- თანამედროვე კომპიუტერები ძალიან სწრაფია და შეუძლიათ ჩვენს ჯაჭვს ათასობით ბლოკის დამატება წამებში. ჩვენ აშკარად არ გვინდა, რომ ვინმემ ჩვენი ბლოკჩეინი სპამი გამოაქვეყნოს.
- ჩვენი ბლოკჩეინი კვლავ დაუცველია ხელყოფის მიმართ. შეგიძლიათ განაახლოთ ბლოკის შინაარსი და შემდეგ უბრალოდ ხელახლა გამოთვალოთ ჰეშები (და წინა ჰეშები) ყველა შემდეგი ბლოკისთვის. მაშინაც კი, თუ თქვენ არეულობთ მას, თქვენ აღმოჩნდებით ლეგიტიმური ჯაჭვით.
ამ პრობლემების გადასაჭრელად, ბლოკჩეინები იყენებენ ტექნიკას, რომელიც ცნობილია როგორც „მუშაობის მტკიცებულება“. თქვენ უნდა აჩვენოთ, რომ ამ მიდგომის გამოყენებით ბლოკის შესაქმნელად გამოიყენეთ გამოთვლითი რესურსების მნიშვნელოვანი რაოდენობა. ამასაც ეძახიან სამთო.
სამუშაოს დადასტურება მოითხოვს, რომ ბლოკის ჰეში იწყებოდეს ნულების კონკრეტული რაოდენობით. მაგრამ როგორ შეგიძლიათ გაიგოთ შეესაბამება თუ არა თქვენი ჰეში ამ წესს?
ბლოკის შიგთავსი განსაზღვრავს მის ჰეშს. ასე რომ, ჩვენ ყოველთვის ვიღებთ ერთსა და იმავე ჰეშს, იმ პირობით, რომ არ შევცვლით შიგთავსს.
თითოეულ ბლოკს გადაწყვეტის სახით უნდა დაემატოს ნონსის მნიშვნელობა. ეს არის არსებითად რამდენიმე შემთხვევითი მონაცემი, რომელიც ჩვენ შეგვიძლია განვაახლოთ მანამ, სანამ ჩვენი ბლოკის ჰეში არ დაიწყება საკმარისი ნულებით. იმის გამო, რომ თქვენ არ შეგიძლიათ შეცვალოთ ჰეშის ფუნქციის გამომავალი, თქვენ უნდა შეამოწმოთ მრავალი განსხვავებული კომბინაცია და იმედი გქონდეთ საუკეთესოზე.
გააცნეთ მაინინგი ბლოკჩეინში
დავიწყოთ ნონსის ჩართვით ჩვენს Block კლასში. Nonce არის ერთი მნიშვნელობა ჩვენს ბლოკში, რომელიც შეგვიძლია შევცვალოთ ბლოკის ჰეშზე ზემოქმედების მიზნით.
ჩვენ არ შეგვიძლია შევცვალოთ დროის ანაბეჭდი ან მონაცემები.
შემდეგი, მოდით დავწეროთ mineBlock() ფუნქცია, რომელიც შეასრულებს ბლოკის რეალურ მაინინგს. ეს ფუნქცია გაიგზავნება საჭირო სირთულის პარამეტრად და გაგრძელდება მანამ, სანამ ჩვენი ბლოკის ჰეში არ დაიწყება საკმარისი ნულებით.
მე უბრალოდ გავაკეთე ძირითადი while მარყუჟი, რომელიც გაგრძელდება მანამ, სანამ ჩვენი ჰეში არ დაიწყება საკმარისი ნულებით. ჩვენ ვიყენებთ სირთულეს იმის დასადგენად, თუ რამდენი ნული გვჭირდება. 5-ის სირთულის შემთხვევაში, ჩვენი ჰეში უნდა დაიწყოს 5 ნულით.
როდესაც ჩვენი ჰეში არ შეიცავს საკმარის ნულებს, ჩვენ ვზრდით ნონსს ერთით და ხელახლა ვიანგარიშებთ ჰეშს. და თუ ჩვენ ვიპოვით ჰეშს, რომელიც შეესაბამება სირთულეს, ჩვენ შევიყვანთ მას კონსოლში.
კიდევ ერთი რამ უნდა გავაკეთოთ. ჩვენ ნამდვილად არ ვითვალისწინებთ nonce ცვლადს ჩვენს გამოთვლის ჰეშ მეთოდში, ასე რომ, აქ არის:
ბლოკჩეინის კლასი
მოდით გამოვცადოთ ეს ახალი მიდგომა ჩვენს ბლოკჩეინის კლასში და ვნახოთ, როგორ წავა.
დასაწყისისთვის, მე განვსაზღვრავ ჩვენი ბლოკჩეინის სირთულეს ფუნქციაში Object(). ჩვენ განვსაზღვრავთ მას აქ, რადგან შეგვიძლია მისი გამოყენება სადმე მოგვიანებით.
შემდეგ addBlock ფუნქცია უნდა შეიცვალოს ისე, რომ მან ბლოკი მოახდინოს ჩვენს ჯაჭვში დამატებამდე.
გამოიყენეთ ბლოკჩეინი
ახლა მოდით გამოვიყენოთ ჩვენი ახალი ბლოკჩეინი სამუშაოს დადასტურების ალგორითმით. აქ დაამატეთ რამდენიმე console.log განცხადება.
როდესაც ჩვენ ვასრულებთ ამ კოდს, შეგვიძლია დავინახოთ, რომ მაინინგის პროცესი აღარ არის განსაკუთრებით სწრაფი.
გარკვეული დრო სჭირდება ალგორითმს ჰეშებით ბლოკების გენერირებას, რომლებიც იწყება სამი ნულით (როგორც კონფიგურირებულია სირთულის მიხედვით).
ასე რომ, ეს იყო ჩვენი ძირითადი ბლოკჩეინის დაყენების დასასრული.
ჩვენ შეგვიძლია დავარეგულიროთ, რამდენად სწრაფად დაემატება ახალი ბლოკები ჩვენს ბლოკჩეინს, მუშაობის მტკიცებულების მექანიზმის წყალობით.
ეს არის ყველაზე მნიშვნელოვანი უსაფრთხოების ფუნქცია ბლოკჩეინებზე. ახლა კი, როცა გესმით, როგორ მუშაობს, დაიწყეთ საკუთარის შექმნა!
დატოვე პასუხი