Làm thế nào để xây dựng một chuỗi khối bằng Python?

Nếu bạn muốn học cách xây dựng một blockchain, thì bạn đã đến đúng nơi. Hãy đi sâu để tìm hiểu cách bạn có thể xây dựng một chuỗi khối trong python.

Có rất nhiều bài báo về blockchain, nhưng không phải tất cả chúng đều nói về việc xây dựng một blockchain từ đầu. Là một nhà phát triển, lý thuyết là quan trọng, nhưng bạn cũng cần tạo ra một blockchain để hiểu khái niệm đằng sau nó một cách hoàn chỉnh.

Ý tưởng cốt lõi đằng sau blockchain là bản chất phi tập trung của nó. Bạn sẽ bị cuốn hút bởi thực tế về cách tất cả hoạt động bên trong. Blockchain nghe có vẻ đơn giản nhưng bên trong có rất nhiều giao thức và thuật toán biến nó thành hiện thực. Chúng tôi sẽ sử dụng Python để tạo ra một chuỗi khối từ đầu.

Bạn cũng có thể lưu bài viết và đánh dấu nó là “Cách xây dựng chuỗi khối của chúng tôi”. Tin tôi đi; bài viết sẽ giúp bạn về lâu dài.

Bạn chưa bao giờ nghe nói về blockchain? Sau đó, hãy xem khóa học miễn phí của 101Blockchain. Nếu bạn đang muốn thăng tiến sự nghiệp, hãy xem Khóa học Blockchain doanh nghiệp được chứng nhận, nơi bạn tìm hiểu cách hoạt động của blockchain doanh nghiệp. Bắt đầu nào.

Bạn là người mới bắt đầu sử dụng Blockchain? Đăng ký Khóa học miễn phí về Blockchain và bắt đầu hành trình Blockchain của bạn ngay bây giờ.

Làm thế nào để xây dựng một chuỗi khối

Cách tốt nhất để học bất cứ điều gì là học bằng cách làm. Để đảm bảo bạn đang ở cùng trang với tôi, trước tiên hãy kiểm tra các yêu cầu. Chúng tôi cũng sẽ mô tả ngắn gọn về blockchain để cả hai chúng ta đều ở trên cùng một trang.

Yêu cầu

Yêu cầu cơ bản để làm theo hướng dẫn là biết cách viết mã. Nếu bạn chưa bao giờ viết mã trong đời, thì hướng dẫn này không dành cho bạn. Tôi khuyên bạn nên xem qua các khóa học dành cho người mới bắt đầu khác nhau có sẵn trực tuyến. Tôi đề xuất EdX, Udacity và Coursera để có trải nghiệm học tập tốt nhất.

Bạn đã là một lập trình viên? Sau đó, bạn nên biết về Python cơ bản. Ngoài ra, nó sẽ giúp bạn làm theo hướng dẫn “Cách xây dựng một chuỗi khối”.

Đọc ngay: Hướng dẫn cơ bản về chuỗi khối đại biểu

Chúng tôi đã tạo hướng dẫn để mọi người có thể làm theo. Vì vậy, nếu bạn không biết và muốn học cách xây dựng một blockchain từ đầu, bạn có thể làm như vậy!


 Nếu bạn không biết Python, đừng lo lắng vì nó rất dễ học. Kiểm tra Tài liệu Python để bắt đầu.

Chúng tôi sẽ sử dụng Python 3.6+ cho hướng dẫn. Nếu bạn quyết định sử dụng các phiên bản Python khác, thì bạn có thể phải nghiên cứu thêm để mã hoạt động. Vì mục đích hướng dẫn, tôi khuyên bạn nên cài đặt phiên bản mà tôi đang sử dụng.

Cuối cùng, bạn cũng nên biết về HTTP – giao thức được sử dụng để giao tiếp giữa hai bên trên internet.

Cài đặt Python bằng pip

Bạn cần cài đặt Python bằng pip. Bạn cũng cần cài đặt thư viện Yêu cầu và Flask tuyệt vời. Để làm như vậy, chỉ cần chạy lệnh dưới đây.

$ pip cài đặt Flask == 0.12.2 yêu cầu == 2.18.4

Nếu bạn đang sử dụng môi trường Windows, bạn có thể truy cập trực tiếp vào python.org để tải xuống phiên bản Python mới nhất.

Đối với tôi, tôi đã tải xuống Python 3.8.1 – phiên bản mới nhất tại thời điểm viết hướng dẫn.

Đối với IDE, tôi thích sử dụng PyCharm hơn. Tôi đang sử dụng phiên bản Cộng đồng Python cho hướng dẫn. Bạn có thể tự do sử dụng bất kỳ IDE nào mà bạn lựa chọn. Một giải pháp thay thế tuyệt vời khác là Visual Studio Code – một môi trường phát triển tích hợp mã nguồn mở miễn phí.

Công cụ cuối cùng mà bạn cần là Postman – một ứng dụng khách HTTP. Ngoài ra, bạn cũng có thể sử dụng cURL.

Tôi cũng khuyên bạn nên cài đặt một môi trường ảo để tạo ra một môi trường hoàn toàn khác cho sự phát triển của bạn. Bạn có thể đi theo tui hướng dẫn này để thiết lập nó đúng cách.

Blockchain được xem xét lại

Trước khi xây dựng blockchain, chúng ta cần phải làm mới ý tưởng của mình về blockchain. Điều này sẽ giúp chúng tôi giữ vững lập trường.

Blockchain là một công nghệ sổ cái phân tán, nơi các đồng nghiệp có thể tham gia, tương tác và thực hiện các giao dịch mà không cần một thực thể tập trung. Mỗi máy ngang hàng có một bản sao của sổ cái, điều này khiến cho tin tặc không thể thực hiện hành vi gian lận trong hệ thống. Các tính năng chính của blockchain bao gồm tính minh bạch, tính bất biến và bảo mật. Nó sử dụng các thuật toán tiền điện tử tiên tiến để đảm bảo an ninh dữ liệu. Ngoài ra, để đạt được sự đồng thuận, một mạng lưới blockchain sẽ sử dụng các thuật toán đồng thuận như Proof-of-Work, Proof-of-Stake, v.v..

Cũng đọc: Blockchain cho người mới bắt đầu: Hướng dẫn bắt đầu

Bắt đầu với việc xây dựng một chuỗi khối

Với tất cả các cài đặt tiên quyết đã được thực hiện, chúng tôi hiện đã sẵn sàng để bắt đầu với hướng dẫn của chúng tôi, “Cách xây dựng một chuỗi khối”.

Để bắt đầu, bạn cần tạo tệp blockchain.py.

1. Tạo chuỗi khối

Bước đầu tiên là tạo ra một giải pháp blockchain chức năng. Lúc đầu, chúng ta cần tạo một lớp Blockchain. Ở đó, chúng tôi sẽ tạo một phương thức khởi tạo sẽ khởi tạo chuỗi và danh sách giao dịch. Danh sách chuỗi sẽ lưu trữ chuỗi khối của chúng tôi, trong khi các giao dịch sẽ được lưu trữ trong mảng current_transacations.

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

Tiếp theo, chúng ta cần tạo một hàm new_block sẽ được sử dụng để tạo các khối mới và sau đó thêm chúng vào chuỗi hiện có. Mã cho hàm new_block như sau:

def new_block (self): # Hàm này tạo các khối mới và sau đó thêm vào chuỗi hiện có

Phương thức new_transcaction sẽ tạo một giao dịch mới và sau đó thêm giao dịch vào danh sách giao dịch hiện có.

def new_transaction (self): # Hàm này thêm một giao dịch mới vào các giao dịch đã tồn tại. Chúng tôi cũng có một hàm băm được sử dụng để tạo mã băm cho một khối. @staticmethod def hash (khối): # Dùng để băm khối

Hàm cuối cùng mà chúng ta sẽ tạo last_block. Nó được sử dụng để gọi khối cuối cùng trong chuỗi.

Chúng ta cũng có thể tạo thêm ba hàm nữa tại đây.

  • register_node () → Để đăng ký một nút mới và thêm nó vào mạng
  • valid_proof () → Sẽ đảm bảo khi tập hợp một khối được gửi tới chuỗi sẽ giải quyết được vấn đề
  • valid_chain () → Điều này sẽ kiểm tra xem các khối tiếp theo trong chuỗi có hợp lệ hay không.

Bản thiết kế cho blockchain.py trông như bên dưới.

class Blockchain (đối tượng): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): # Hàm này tạo các khối mới và sau đó thêm vào chuỗi hiện có def new_transaction (self): # Hàm này thêm một giao dịch mới vào các giao dịch đã tồn tại vượt qua @staticmethod def hash (block): # Được sử dụng để băm một khối @property def last_block (self): # Gọi và trả về khối cuối cùng của chuỗi pass

Lớp Blockchain quản lý toàn bộ chuỗi. Các định nghĩa được xác định trong lớp quản lý các hành động khác nhau trong chuỗi khối.

Hãy xem xét từng phương pháp dưới đây.

Đọc ngay: sharding blockchain là gì: Giới thiệu về giải pháp mở rộng quy mô blockchain

Cấu trúc của một khối

Một khối chứa thông tin quan trọng về các giao dịch và chuỗi. Bất kỳ khối nào trên chuỗi sẽ chứa thông tin sau

  • mục lục
  • dấu thời gian trong Unix time
  • danh sách giao dịch
  • bằng chứng
  • Băm khối trước

Hầu hết thông tin trong khối là tự giải thích. Ở đây, hai biến quan trọng là before_hash, chứa giá trị băm của khối trước đó. Điều này rất quan trọng vì nó đảm bảo rằng blockchain là bất biến và không có tác nhân độc hại nào có thể cập nhật, xóa hoặc thêm bất kỳ dữ liệu nào vào chuỗi.

Đọc ngay: Tại sao Blockchain sẽ thay đổi thế giới?

Thêm giao dịch vào một khối

Với cấu trúc của khối đã hiểu, bây giờ chúng ta hãy tìm hiểu cách thêm giao dịch vào khối. Mã cho nó như dưới đây.

def new_transaction (self): # Hàm này thêm một giao dịch mới vào các giao dịch hiện có """Điều này sẽ tạo ra một giao dịch mới sẽ được gửi đến khối tiếp theo. Nó sẽ chứa ba biến bao gồm người gửi, người nhận và số tiền """ self.current_transactions.append ({‘sender’: sender, ‘người nhận’: người nhận ‘số tiền’: số tiền,}) return self.last_block [‘index’] + 1 Như bạn có thể thấy, nó chỉ đơn giản là nối danh sách current_transaction với một đối tượng chứa ba biến → người gửi, người nhận, số tiền.

Khi việc bổ sung được thực hiện xong, phương thức này sau đó sẽ gửi chỉ mục khối đến chuỗi. Nó là khối tiếp theo sẽ được khai thác.

Tạo khối mới

Trước khi bắt đầu tạo khối mới, chúng ta cần tạo khối genesis. Để làm như vậy, chúng ta cần sử dụng một dòng mã đơn giản như dưới đây.

self.new_block (before_hash = 1, proof = 100)

Dòng này sẽ được thêm vào lớp Blockchain của bạn.

Đối với phương thức new_block (), bạn cần gửi hai biến làm tham số của nó. Nó bao gồm bằng chứng và before_hash.

Bây giờ, chúng ta hãy xem xét phương thức new_block () bên dưới.

def new_block (self, proof, before_hash = None): # Hàm này tạo các khối mới và sau đó thêm vào chuỗi hiện có """Phương thức này sẽ chứa bằng chứng hai tham số, băm trước""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: bằng chứng, trước_hash: trước_hash hoặc self.hash (self.chain [-1]),}

# Đặt danh sách giao dịch hiện tại thành trống.

   khối trả về self.current_transactions = [] self.chain.append (block)

Hãy giải thích mã của new_block. Chúng tôi tạo một danh sách khối chứa ba tham số quan trọng. Khi chúng được xác định, sau đó chúng tôi cũng viết mã để đặt lại danh sách current_transaction và sau đó nối khối vào chuỗi. Phương thức new_block, khi được gọi, trả về khối.

Đọc ngay: Hướng dẫn cho người mới bắt đầu: Ethereum Classic là gì?

Hãy cũng xác định phương thức last_block bên dưới.

@bất động sản

def last_block (bản thân):

# Gọi và trả về khối cuối cùng của chuỗi

return self.chain [-1]

Ngoài ra, mã cho phương thức hash () như sau:

 

def hash (block): # Được sử dụng để băm một khối """Mã sau sẽ tạo ra một băm khối SHA-256 và cũng đảm bảo rằng từ điển được sắp xếp theo thứ tự""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () Nếu bạn kết hợp tất cả các mã cho đến bây giờ, chúng ta sẽ có blockchain.py sau. Kiểm tra nó bên dưới.

 

class Blockchain (object): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (before_hash = 1, proof = 100) def new_block (self, proof, before_hash = None): #This chức năng tạo các khối mới và sau đó thêm vào chuỗi hiện có """Phương thức này sẽ chứa bằng chứng hai tham số, băm trước""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, before_hash: before_hash hoặc self.hash (self.chain [-1]),} # Set danh sách giao dịch hiện tại để trống. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): # Hàm này thêm một giao dịch mới vào các giao dịch hiện có """Điều này sẽ tạo ra một giao dịch mới sẽ được gửi đến khối tiếp theo. Nó sẽ chứa ba biến bao gồm người gửi, người nhận và số tiền """ self.current_transactions.append ({‘sender’: sender, ‘người nhận’: người nhận, ‘số tiền’: số tiền,}) trả về self.last_block [‘index’] + 1 @staticmethod def hash (khối): # Dùng để băm một khối """Mã sau sẽ tạo ra một băm khối SHA-256 và cũng đảm bảo rằng từ điển được sắp xếp theo thứ tự""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self): # Gọi và trả về khối cuối cùng của chuỗi return self.chain [ -1]

Bằng chứng về việc triển khai công việc

Bước tiếp theo của chúng tôi trong việc xây dựng blockchain.py là triển khai Proof-of-Work.

Vậy, Proof of Work là gì? Đây là một phương pháp đồng thuận được sử dụng để thêm các khối mới vào chuỗi. Nó đặt ra một thách thức cho người khai thác và khi người khai thác giải quyết được vấn đề, khối sẽ được xác minh. Đổi lại, người khai thác nhận được phần thưởng dựa trên độ phức tạp của vấn đề.

Bằng chứng công việc của Bitcoin được gọi là Hashcash. Nó đảm bảo rằng sự đồng thuận của mạng bitcoin hoạt động như dự định.

Cũng nên đọc: Thuật toán đồng thuận: Gốc rễ của công nghệ chuỗi khối

Hãy xác định phương thức proof_of_work (). Phương thức sẽ là một phần của lớp Blockchain.

def Proof_of_work (self, last_proof): """Phương pháp này là nơi bạn triển khai thuật toán đồng thuận. Nó có hai tham số bao gồm self và last_proof""" bằng chứng = 0 trong khi self.valid_proof (last_proof, bằng chứng) là Sai: bằng chứng + = 1 trở lại bằng chứng @staticmethod def valid_proof (last_proof, bằng chứng): """Phương thức này xác nhận khối""" đoán = f ‘{last_proof} {bằng chứng}’. encode () đoán_hash = hashlib.sha256 (đoán) .hexigest () trả về đoán_hash [: 4] == "0000"

Phương thức proof_of_work đầu tiên rất đơn giản; nó chỉ cần đặt bằng chứng thành 0 và sau đó chạy một vòng lặp while để chạy phương thức valid_proof. Nếu nó là False, thì hãy thêm một cái vào bằng chứng.

Bạn có thể tăng độ khó của băm bằng cách thêm nhiều số 0 hơn.

Điều này dẫn chúng tôi đến phần cuối của Blockchain.py của chúng tôi. Mã của chúng tôi viết tắt như dưới đây.

class Blockchain (object): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (before_hash = 1, proof = 100) def proof_of_work (self, last_proof): """Phương pháp này là nơi bạn triển khai thuật toán đồng thuận. Nó có hai tham số bao gồm self và last_proof""" bằng chứng = 0 trong khi self.valid_proof (last_proof, bằng chứng) là Sai: bằng chứng + = 1 trở lại bằng chứng @staticmethod def valid_proof (last_proof, bằng chứng): """Phương thức này xác nhận khối""" đoán = f ‘{last_proof} {bằng chứng}’. encode () đoán_hash = hashlib.sha256 (đoán) .hexigest () trả về đoán_hash [: 4] == "0000" def new_block (self, proof, before_hash = None): # Hàm này tạo các khối mới và sau đó thêm vào chuỗi hiện có """Phương thức này sẽ chứa bằng chứng hai tham số, băm trước""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, before_hash: before_hash hoặc self.hash (self.chain [-1]),} # Set danh sách giao dịch hiện tại để trống. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): # Hàm này thêm một giao dịch mới vào các giao dịch hiện có """Điều này sẽ tạo ra một giao dịch mới sẽ được gửi đến khối tiếp theo. Nó sẽ chứa ba biến bao gồm người gửi, người nhận và số tiền """ self.current_transactions.append ({‘sender’: người gửi, ‘người nhận’: người nhận, ‘số tiền’: số tiền,})

 

return self.last_block [‘index’] + 1

@staticmethod

def hash (khối):

# Được sử dụng để băm khối

“” ”Đoạn mã theo sau sẽ tạo hàm băm khối SHA-256 và cũng đảm bảo rằng từ điển được sắp xếp theo thứ tự” ””

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

trả về hashlib.sha256 (block_string) .hexdigest ()

@bất động sản

def last_block (bản thân):

# Gọi và trả về khối cuối cùng của chuỗi

return self.chain [-1]

2. Tích hợp API

Tuyệt vời, chúng tôi tạo ra một blockchain hoạt động! Bây giờ, để sử dụng nó một cách hiệu quả, chúng ta cần tạo một API (Giao diện lập trình ứng dụng).

Để làm như vậy, chúng tôi sẽ sử dụng Python Framework phổ biến: Flask.

Flask là một khuôn khổ vi mô, có nghĩa là nó nhẹ và bạn có thể thêm các thư viện mà mình cần. Nó cũng cho phép bạn tạo điểm cuối hàm Python một cách dễ dàng.

Để tạo API, trước tiên chúng tôi cần đảm bảo blockchain của chúng tôi có thể chấp nhận các yêu cầu qua HTTP. Để làm như vậy, chúng ta phải tạo ra nhiều phương pháp hơn.

Bây giờ, chúng tôi sẽ sửa đổi blockchain.py.

# Tạo ứng dụng nút ứng dụng = Flask (__ name__) node_identifier = str (uuid4 ()). Replace (‘-‘, ”) # Khởi tạo chuỗi khối chuỗi khối = Blockchain () @ app.route (‘/ mine’, method = [ ‘GET’]) def mine (): return "Khai thác một khối mới" @ app.route (‘/ transaction / new’, method = [‘POST’]) def new_transaction (): return "Thêm một giao dịch mới" @ app.router (‘/ chain’, methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (response) , 200 if __name__ == ‘__main__’: app.run (host ="0.0.0.0", cổng = 5000)

Phần lớn mã này có thể tự giải thích được. Đầu tiên chúng tôi thực hiện khởi tạo nút. Tiếp theo, chúng tôi tạo một nút ngẫu nhiên. Sau khi hoàn tất, chúng tôi sau đó khởi tạo lớp Blockchain của mình. Sau khi hoàn tất, chúng ta cần tạo ba điểm cuối như bên dưới.

  • / điểm cuối của tôi
  • / giao dịch / điểm cuối mới
  • / điểm cuối chuỗi

Cuối cùng, chúng tôi chạy máy chủ trên cổng 5000.

Ứng dụng gần như đã được tạo. Tất cả những gì chúng ta cần làm là tạo phương thức lớp giao dịch.

@ app.route (‘/ transaction / new’, method = [‘POST’]) def new_transaction (): values ​​= request.get_json () # Kiểm tra xem dữ liệu bắt buộc có ở đó hay không = [‘sender’, ‘ người nhận ‘,’ số tiền ‘] nếu không phải tất cả (k trong giá trị cho k trong bắt buộc): trả về’ Giá trị bị thiếu ‘, 400 # tạo chỉ mục giao dịch mới = blockchain.new_transaction (giá trị [‘ người gửi ‘], giá trị [‘ người nhận ‘ , giá trị [‘số tiền’]]) response = {‘message’: f’Transaction được lên lịch để thêm vào Block No. {index} ‘} return jsonify (response), 201

Cũng đọc: Đây là những gì bạn cần biết về Blockchain Proof of Work

Điểm cuối khai thác

Điểm cuối cuối cùng mà chúng ta sẽ tạo là điểm cuối khai thác. Để làm như vậy, chúng ta phải đảm bảo rằng nó thực hiện ba điều sau.

  • Tính toán bằng chứng công việc
  • Tạo ra chuỗi khối mới và sau đó thêm nó vào chuỗi
  • Thưởng cho người khai thác vì công việc của anh ấy

@ app.route (‘/ mine’, method = [‘GET’]) def mine (): """Ở đây chúng tôi làm cho thuật toán bằng chứng công việc hoạt động""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # thưởng cho người khai thác vì đóng góp của anh ta. 0 chỉ định đồng tiền mới đã được khai thác blockchain.new_transaction (sender ="0", người nhận = node_identifier, số tiền = 1,) # bây giờ tạo khối mới và thêm nó vào chuỗi before_hash = blockchain.hash (last_block) block = blockchain.new_block (bằng chứng, trước đó_hash) response = {‘message’: ‘Khối mới đã được giả mạo ‘,’ index ‘: block [‘ index ‘],’ transaction ‘: block [‘ giao dịch ‘],’ bằng chứng ‘: khối [‘ bằng chứng ‘],’ before_hash ‘: block [‘ before_hash ‘]} trả về jsonify (phản hồi), 200

Đọc ngay: Hướng dẫn dành cho người mới bắt đầu: AION là gì? Mạng lưới chuỗi khối thế hệ thứ ba trên thế giới

3. Tương tác Blockchain

Bước cuối cùng là tương tác với blockchain. Chúng tôi sẽ sử dụng Postman để tương tác với mạng blockchain bằng cách sử dụng API mà chúng tôi vừa tạo.

Chạy mã bên dưới trên Bảng điều khiển Python

python blockchain.py

Phần kết luận

Điều này dẫn chúng ta đến phần cuối của Cách xây dựng một blockchain. Hy vọng các bước và mã ở trên sẽ giúp bạn xây dựng một Blockchain bằng Python. Vì vậy, nếu bạn là người mới và mong muốn xây dựng sự nghiệp trong Blockchain, chúng tôi khuyên bạn nên bắt đầu sự nghiệp blockchain của mình với Khóa học Cơ bản về Blockchain miễn phí của chúng tôi. Hãy chọn chúng tôi làm đối tác học tập của bạn và chúng tôi sẽ có bạn cho đến khi bạn không có được công việc mơ ước của mình.

Vì vậy, bạn nghĩ gì về blockchain và việc triển khai nó? Bình luận bên dưới và hãy cho chúng tôi biết.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map