Follow Us
Facebooktwitteryoutube
YouTube
Promo
banner
Promo
banner

Как да изградим блокчейн в Python?

Ако искате да научите как да изградите блокчейн, тогава сте попаднали на правилното място. Нека се потопим дълбоко, за да научим как можете да изградите блокчейн в python.

Има тонове статии около блокчейн, но не всички от тях говорят за изграждане на блокчейн от нулата. Като разработчик теориите са важни, но също така трябва да създадете блокчейн, за да разберете напълно концепцията зад него.

Основната идея зад блокчейн е неговата децентрализирана природа. Ще бъдете очаровани от факта как всичко работи вътре. Blockchain може да звучи просто, но вътре има много протоколи и алгоритми, които го правят. Ще използваме Python, за да създадем блокчейн от нулата.

Можете също да запазите статията и да я маркирате като „Как да изградим нашата блокчейн“. Вярвай ми; статията ще ви помогне в дългосрочен план.

Никога не сте чували за блокчейн? След това вижте безплатния курс на 101Blockchain. Ако искате да напреднете в кариерата си, проверете сертифицирания корпоративен блокчейн курс, където ще научите как работи корпоративната блокчейн. Да започваме.

Вие сте начинаещ в Blockchain? Запишете се в Blockchain Free Course и започнете вашето Blockchain пътешествие сега.

Как да изградим блокчейн

Най-добрият начин да научите каквото и да било е да се учите, като правите. За да сте сигурни, че сте на същата страница като мен, нека първо проверим изискванията. Също така ще опишем накратко блокчейн, така че и двамата да сме на една и съща страница.

Изискване

Основното изискване да следвате ръководството е да знаете как да кодирате. Ако никога през живота си не сте кодирали, това ръководство не е за вас. Препоръчвам ви да проверите различните курсове за начинаещи, които се предлагат онлайн. Препоръчвам EdX, Udacity и Coursera за най-доброто учебно изживяване.

Вече сте програмист? След това трябва да знаете за основния Python. Освен това ще ви помогне да следвате урока „Как да изградим блокчейн“.

Прочетете сега: Крайно ръководство на Quorum Blockchain

Създадохме урока, за да може всеки да го следва. Така че, ако не знаете и искате да се научите как да изграждате блокчейн от нулата, можете да го направите!


 Ако не познавате Python, не се притеснявайте, тъй като е лесно да го вземете. Вижте Документация за Python за да започнете.

Ще използваме Python 3.6+ за урока. Ако решите да използвате други версии на Python, може да се наложи да направите повече изследвания, за да работи кодът. За учебни цели препоръчвам да инсталирате версията, която използвам.

И накрая, трябва да знаете и за HTTP – протоколът, който се използва за комуникация между две страни в интернет.

Инсталиране на Python с помощта на pip

Трябва да инсталирате Python с помощта на pip. Също така трябва да инсталирате прекрасни библиотеки Requests и Flask. За да направите това, просто изпълнете командата по-долу.

$ pip install Flask == 0.12.2 заявки == 2.18.4

Ако използвате Windows среда, можете директно да отидете на python.org, за да изтеглите най-новата версия на Python.

Що се отнася до мен, изтеглих Python 3.8.1 – най-новата компилация по време на писането на урока.

За IDE предпочитам да използвам PyCharm. Използвам изданието на общността на Python за урока. Можете да използвате всяка IDE по ваш избор. Друга чудесна алтернатива е Visual Studio Code – безплатна интегрирана среда за разработка с отворен код.

Последният инструмент, от който ще се нуждаете, е Postman – HTTP клиент. Като алтернатива можете да използвате и cURL.

Също така препоръчвам да инсталирате виртуална среда, за да създадете напълно различна среда за вашето развитие. Можете да проследите това ръководство за да го настроите правилно.

Повторно посещение на блокчейн

Преди да започнем да изграждаме блокчейна, трябва да освежим идеята си за блокчейн. Това ще ни помогне да останем на една и съща страница.

Blockchain е технология за разпределена книга, при която връстниците могат да участват, да си взаимодействат и да изпълняват транзакции, без да е необходимо централизирано лице. Всеки партньор има копие на счетоводната книга, което прави невъзможно хакерите да извършват измами в системата. Основните характеристики на блокчейна включват прозрачност, неизменност и сигурност. Той използва усъвършенствани алгоритми за криптовалута, за да осигури сигурност на данните. Също така, за да постигне консенсус, блокчейн мрежата ще използва консенсусни алгоритми като Proof-of-Work, Proof-of-Stake и т.н..

Прочетете също: Блокчейн за начинаещи: Ръководство за начало

Първи стъпки с изграждането на блокчейн

С всички необходими инсталации, направени, вече сме готови да започнем с нашия урок „Как да изградим блокчейн“.

За да започнете, трябва да създадете файл blockchain.py.

1. Създаване на блокчейн

Първата стъпка е да се направи функционално решение за блокчейн. Отначало трябва да създадем клас Blockchain. Там ще създадем конструктор, който ще инициира списъка на веригата и транзакциите. Списъкът с вериги ще съхранява нашата блокчейн, докато транзакциите ще се съхраняват в масива current_transacations.

def __init __ (self): self.chain = [] self.current_transaction = []

След това трябва да създадем функция new_block, която ще се използва за създаване на нови блокове и след това да ги добавим към съществуващата верига. Кодът за функцията new_block е както по-долу:

def new_block (самостоятелно): # Тази функция създава нови блокове и след това добавя към съществуващия пропуск на веригата

Методът new_transcaction ще създаде нова транзакция и след това ще добави транзакцията към вече съществуващия списък с транзакции.

def new_transaction (self): # Тази функция добавя нова транзакция към вече съществуващи транзакции. Ние също имаме хеш функция, която се използва за създаване на хеш за блок. @staticmethod def hash (block): # Използва се за хеширане на блок

Последната функция, която ще създадем last_block. Използва се за извикване на последния блок във веригата.

Тук можем да създадем още три функции.

  • register_node () → За да регистрирате нов възел и да го добавите към мрежата
  • valid_proof () → Ще гарантира, че изпратеният блок към веригата ще реши проблема
  • valid_chain () → Това ще провери дали следващите блокове във веригата са валидни или не.

Планът за blockchain.py изглежда по-долу.

клас Blockchain (обект): def __init __ (самостоятелно): self.chain = [] self.current_transaction = [] def new_block (self): # Тази функция създава нови блокове и след това добавя към съществуващата верижна карта def new_transaction (self): # Тази функция добавя нова транзакция към вече съществуваща транзакция pass @staticmethod def hash (block): # Използва се за хеширане на блок @property def last_block (self): # Извиква и връща последния блок от верижния пропуск

Класът Blockchain управлява цялата верига. Дефинициите, дефинирани под класа, управляват различните действия в рамките на блокчейна.

Нека да разгледаме всеки един от методите по-долу.

Прочетете сега: Какво представлява blockchain sharding: Въведение в решение за мащабиране на blockchain

Структура на блок

Блокът съдържа жизненоважна информация за транзакции и вериги. Всеки блок по веригата ще съдържа следната информация

  • индекс
  • клеймо в Unix време
  • списък на транзакциите
  • доказателство
  • Хеш на предишния блок

По-голямата част от информацията в рамките на блока се обяснява сама по себе си. Тук двете ключови променливи са previous_hash, който съдържа хеш стойността на предишния блок. Това е важно, тъй като гарантира, че блокчейнът е неизменен и никой злонамерен участник не може да актуализира, изтрие или добави каквито и да е данни към веригата.

Прочетете сега: Защо Blockchain ще промени света?

Добавяне на транзакция към блок

С разбирането на структурата на блока, нека сега се научим как да добавяме транзакция към блока. Кодът за него е както по-долу.

def new_transaction (самостоятелно): # Тази функция добавя нова транзакция към вече съществуващи транзакции """Това ще създаде нова транзакция, която ще бъде изпратена до следващия блок. Той ще съдържа три променливи, включително подател, получател и сума """ self.current_transaction.append ({‘sender’: sender, ‘получател’: получател ‘сума’: сума,}) return self.last_block [‘index’] + 1 Както можете да видите, той просто добавя списъка current_transaction с обект, който съдържа три променливи → подател, получател, сума.

След като добавянето приключи, методът изпраща индекса на блока към веригата. Това е следващият блок, който ще бъде добит.

Създаване на нови блокове

Преди да започнем да създаваме нови блокове, трябва да създадем генезисния блок. За целта трябва да използваме прост ред код, както е показано по-долу.

self.new_block (предишен_хаш = 1, доказателство = 100)

Този ред трябва да бъде добавен към вашия клас Blockchain.

За метода new_block () трябва да изпратите две променливи като негови параметри. Включва доказателство и previous_hash.

Сега, нека да разгледаме метода new_block () по-долу.

def new_block (self, proof, previous_hash = None): # Тази функция създава нови блокове и след това добавя към съществуващата верига """Този метод ще съдържа доказателство за два параметъра, предишен хеш""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash или self.hash (self.chain [-1]),}

# Задайте текущия списък с транзакции на празен.

   self.current_transactions = [] self.chain.append (block) return block

Нека да обясним кода на new_block. Създаваме списък с блокове, който съдържа трите важни параметъра. След като бъдат дефинирани, ние също така записваме кода за нулиране на списъка current_transaction и след това добавяме блока към веригата. Когато е извикан, методът new_block връща блока.

Прочетете сега: Ръководство за начинаещи: Какво е Ethereum Classic?

Нека дефинираме и метода last_block по-долу.

@Имот

def last_block (самостоятелно):

# Извиква и връща последния блок от веригата

връщане self.chain [-1]

Също така кодът за метода hash () е както по-долу:

 

def hash (block): # Използва се за хеширане на блок """Следващият код ще създаде хеш на блок SHA-256 и също така ще гарантира, че речникът е подреден""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () Ако комбинирате целия код до сега, ще имаме следния blockchain.py. Проверете го по-долу.

 

клас Blockchain (обект): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def new_block (self, proof, previous_hash = None): #This функция създава нови блокове и след това добавя към съществуващата верига """Този метод ще съдържа доказателство за два параметъра, предишен хеш""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash или self.hash (self.chain [-1]),} # Set текущия списък с транзакции да се изпразни. self.current_transaction = [] self.chain.append (block) return block def new_transaction (self): # Тази функция добавя нова транзакция към вече съществуващи транзакции """Това ще създаде нова транзакция, която ще бъде изпратена до следващия блок. Той ще съдържа три променливи, включително подател, получател и сума """ self.current_transactions.append ({‘sender’: sender, ‘получател’: получател, ‘сума’: сума,}) return self.last_block [‘index’] + 1 @staticmethod def hash (block): # Използва се за хеширане блок """Следващият код ще създаде хеш на блок SHA-256 и също така ще гарантира, че речникът е подреден""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self): # Извиква и връща последния блок от веригата return self.chain [ -1]

Доказателство за изпълнение на работа

Следващата ни стъпка в изграждането на blockchain.py е внедряването на Proof-of-Work.

И така, какво е доказателство за работа? Това е метод на консенсус, който се използва за добавяне на нови блокове във веригата. Това представлява предизвикателство за миньора и след като майнерът реши проблема, блокът се проверява. Миньорът в замяна получава награда въз основа на сложността на проблема.

Доказателството за работа на биткойн е известно като Hashcash. Той гарантира, че консенсусът на биткойн мрежата работи по предназначение.

Прочетете също: Консенсусни алгоритми: Коренът на технологията Blockchain

Нека дефинираме метода proof_of_work (). Методът ще бъде част от класа Blockchain.

def proof_of_work (самостоятелно, last_proof): """Този метод е мястото, където се прилага алгоритъмът за консенсус. Необходими са два параметъра, включително self и last_proof""" proof = 0, докато self.valid_proof (last_proof, proof) е False: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Този метод валидира блока""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (познай) .hexigest () върни guess_hash [: 4] == "0000"

Първият метод proof_of_work е прост; той просто задава доказателство на 0 и след това изпълнява цикъл while, за да стартира метода valid_proof. Ако е невярно, добавете едно към доказателството.

Можете да увеличите трудността на хеша, като добавите още нули.

Това ни води до края на нашата Blockchain.py. Нашият код е както по-долу.

клас Blockchain (обект): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def proof_of_work (self, last_ last): """Този метод е мястото, където се прилага алгоритъмът за консенсус. Необходими са два параметъра, включително self и last_proof""" proof = 0, докато self.valid_proof (last_proof, proof) е False: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Този метод валидира блока""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (познай) .hexigest () върни guess_hash [: 4] == "0000" def new_block (self, proof, previous_hash = None): # Тази функция създава нови блокове и след това добавя към съществуващата верига """Този метод ще съдържа доказателство за два параметъра, предишен хеш""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash или self.hash (self.chain [-1]),} # Set текущия списък с транзакции да се изпразни. self.current_transaction = [] self.chain.append (block) return block def new_transaction (self): # Тази функция добавя нова транзакция към вече съществуващи транзакции """Това ще създаде нова транзакция, която ще бъде изпратена до следващия блок. Той ще съдържа три променливи, включително подател, получател и сума """ self.current_transactions.append ({‘sender’: sender, ‘получател’: получател, ‘сума’: сума,})

 

върнете self.last_block [‘индекс’] + 1

@staticmethod

def хеш (блок):

# Използва се за хеширане на блок

“” ”Следващият код ще създаде хеш на блок SHA-256 и също така ще гарантира, че речникът е подреден” ””

block_string = json.dumps (block, sort_keys = True) .encode ()

връщане hashlib.sha256 (block_string) .hexdigest ()

@Имот

def last_block (самостоятелно):

# Извиква и връща последния блок от веригата

връщане self.chain [-1]

2. API интеграция

Страхотно, създаваме блокчейн, който работи! Сега, за да го използваме ефективно, трябва да създадем API (Приложен програмен интерфейс).

За целта ще използваме популярната рамка на Python: Flask.

Flask е микрорамка, което означава, че е лека и можете да добавите библиотеките, от които се нуждаете. Също така ви позволява лесно да създавате крайна точка на функцията Python.

За да създадем API, първо трябва да се уверим, че нашата блокчейн може да приема заявки през HTTP. За целта трябва да създадем повече методи.

Сега ще модифицираме blockchain.py.

# Създаване на възел на приложението app = Flask (__ name__) node_identifier = str (uuid4 ()). Replace (‘-‘, ”) # Инициализиране на blockchain blockchain = Blockchain () @ app.route (‘/ mine’, methods = [ ‘GET’]) def mine (): return "Извличане на нов блок" @ app.route (‘/ транзакции / нови’, методи = [‘POST’]) def new_transaction (): return "Добавяне на нова транзакция" @ app.router (‘/ chain’, methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (response) , 200 ако __name__ == ‘__main__’: app.run (хост ="0.0.0.0", порт = 5000)

Кодът е обяснителен в по-голямата си част. Първо правим иницииране на възел. След това създаваме произволен възел. След като приключим, ние инициализираме класа си Blockchain. След като приключим, трябва да създадем три крайни точки, както е показано по-долу.

  • / моя крайна точка
  • / транзакции / нова крайна точка
  • / крайна точка на веригата

И накрая, пускаме сървъра на 5000 порта.

Приложението вече е почти създадено. Всичко, което трябва да направим, е да създадем метода на класа на транзакциите.

@ app.route (‘/ транзакции / нови’, методи = [‘POST’]) def new_transaction (): values ​​= request.get_json () # Проверка дали необходимите данни са там или не се изискват = [‘sender’, ‘ получател ‘,’ сума ‘], ако не всички (k в стойности за k в задължителни): връщане “Липсващи стойности”, 400 # създаване на нов индекс на транзакция = blockchain.new_transaction (стойности [‘ изпращач ‘], стойности [‘ получател ‘ , стойности [‘сума’]]) response = {‘message’: f’Transaction е планирано да бъде добавено към Блок No. {index} ‘} return jsonify (response), 201

Прочетете също: Ето какво трябва да знаете за доказателството за работа на блокчейн

Крайна точка за копаене

Последната крайна точка, която ще създадем, е крайната точка за добив. За целта трябва да се уверим, че прави следните три неща.

  • Доказателство за изчисление на работата
  • Изковете нов блокчейн и след това го добавете към веригата
  • Наградете миньора за работата му

@ app.route (‘/ mine’, methods = [‘GET’]) def mine (): """Тук правим доказателството за работа на алгоритъма да работи""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # награждаване на майнера за неговия принос. 0 указва, че е извлечена нова монета blockchain.new_transaction (sender ="0", получател = node_identifier, количество = 1,) # сега създайте новия блок и го добавете към веригата previous_hash = blockchain.hash (last_block) block = blockchain.new_block (proof, previous_hash) response = {‘message’: ‘Новият блок е подправен ‘,’ index ‘: block [‘ index ‘],’ транзакции ‘: block [‘ транзакции ‘],’ proof ‘: block [‘ proof ‘],’ previous_hash ‘: block [‘ previous_hash ‘]} return jsonify (отговор), 200

Прочетете сега: Ръководство за начинаещи: Какво е AION? Първо в света блокчейн мрежа от трето поколение

3. Блокчейн взаимодействие

Последната стъпка е да взаимодействате с блокчейна. Ще използваме Postman, за да взаимодействаме с блокчейн мрежата чрез API, който току-що създадохме.

Изпълнете кода по-долу на Python Console

python blockchain.py

Заключение

Това ни води до края на нашия Как да изградим блокчейн. Надявам се стъпките и кодовете по-горе да ви помогнат да изградите блокчейн в Python. Така че, ако сте начинаещ и се стремите да изградите кариера в Blockchain, ние ви предлагаме да започнете своята blockchain кариера с нашия безплатен курс по Blockchain Fundamentals Изберете нас като ваш партньор за обучение и ще ви имаме, докато не получите мечтаната работа.

И така, какво мислите за блокчейн и неговото прилагане? Коментирайте по-долу и ни уведомете.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Adblock
detector