HỌC CÁCH XÂY DỰNG BLOCKCHAINS TỪ A -> Z

February 20, 2020

HỌC CÁCH XÂY DỰNG BLOCKCHAINS

TỪ A -> Z (Phần 2)

Khi bạn bắt đầu tìm hiểu về thuật ngữ Blockchains, chắc hẳn bạn cũng đang rất quan tâm tới sự gia tăng của tiền điện tử. Thế nhưng để hiểu về Blockchains không phải là một điều dễ dàng, bạn sẽ chìm đắm trong một loạt thuật ngữ trước khi bạn có thể hiểu được cách hoạt động và công nghệ cơ bản đằng sau chúng. Cách tốt nhất là tự mình xây dựng một Blockchains để biết được những vấn đề phát sinh và nắm thật rõ ràng. Tham khảo cách xây dựng chi tiết Blockchains phần 2 từ jt1.vn qua bài viết dưới đây.

 

Bước 3: Tương tác với Blockchains

Bạn có thể sử dụng cURL hoặc Postman cũ đơn giản để tương tác với API qua mạng.

 

Để bật máy chủ:

$ python blockchain.py

* Chạy http://127.0.0.1:5000 / (Nhấn CTRL + C để thoát)

Hãy thử khai thác một Block bằng cách tạo một yêu cầu GET, tới http: // localhost: 5000 / mine:

 

Sau đó, khởi tạo một giao dịch bằng cách yêu cầu lệnh POST http://localhost:5000/transactions/new:

 

Trong trường hợp bạn không dùng Postman, bạn có thể thực hiện yêu cầu tương đương bằng cURL:

$ curl -X POST -H "Content-Type: application/json" -d '{

"sender": "d4ee26eee15148ee92c6cd394edd974e",

"recipient": "someone-other-address",

"amount": 5

}' "http://localhost:5000/transactions/new"

 

Bước 4: Sự đồng thuận

Khi đã tạo dựng thành công một Blockchains, về cơ bản nó đã chấp nhận các giao dịch và cho phép khai thác các Block mới. Thế nhưng có một vấn đề nảy sinh khi người dùng không cùng phản ánh cùng một chuỗi. Đây được gọi là vấn đề về sự đồng thuận và cần phải triển khai thuật toán nếu muốn có nhiều hơn một móc xích trong mạng lưới của mình.

 

Đăng ký một điểm nối mới

Để cho một điểm nối biết về các điểm nối lân cận trên mạng, mỗi điểm trên mạng lưới phải giữ cách thức tạo dựng của các điểm nối khác. Vì vậy, cần phải thêm một số điểm cuối:

/nodes/register để chấp nhận danh sách các điểm nối mới ở dạng URL.

/nodes/resolve để thực hiện thuật toán về sự đồng thuận cho người dùng.

 

Cần sửa đổi lại hàm tạo Blockchains và cung cấp một phương thức để đăng ký các điểm nối:

   ...
 

      from urllib.parse import urlparse

 

      ...

 

      class Blockchain(object):

 

       def __init__(self):

         ...

      self.nodes = set()

         ...

 

  def register_node(self, address):

      """

      Add a new node to the list of nodes

   :param address: <str> Address of node. Eg. 'http://192.168.0.5:5000'

    :return: None

      """

 

      parsed_url = urlparse(address)

      self.nodes.add(parsed_url.netloc)

 

Thực hiện thuật toán đồng thuận

Như đã đề cập ở trên, khi có xung đột xảy ra thì cách giải quyết tốt nhất là tạo một quy tắc mà ở đó chuỗi dài nhất trên mạng là chuỗi thực tế. Sử dụng thuật toán này, bạn sẽ đạt được sự đồng thuận giữa các điểm nối trong mạng lưới.

  ...

      import requests

 

     class Blockchain(object)

 

       ...

 

        def valid_chain(self, chain):

        """

      Determine if a given blockchain is valid

      :param chain: <list> A blockchain

      :return: <bool> True if valid, False if not

       """

 

      last_block = chain[0]

      current_index = 1

 

 

      while current_index < len(chain):

          block = chain[current_index]

          print(f'{last_block}')

          print(f'{block}')

          print("\n-----------\n")

 

          # Check that the hash of the block is correct

          if block['previous_hash'] != self.hash(last_block):

 

              return False

 

          # Check that the Proof of Work is correct

          if not self.valid_proof(last_block['proof'], block['proof']):

 

              return False

 

 

          last_block = block

          current_index += 1

 

      return True

  def resolve_conflicts(self):

      """

      This is our Consensus Algorithm, it resolves conflicts by replacing our chain with the longest one in the network.

      :return: <bool> True if our chain was replaced, False if not

      """

      neighbours = self.nodes

      new_chain = None

 

      # We're only looking for chains longer than ours

      max_length = len(self.chain)

 

    # Grab and verify the chains from all the nodes in our network for node in neighbours:

          response = requests.get(f'http://{node}/chain')

 

          if response.status_code == 200:

              length = response.json()['length']

              chain = response.json()['chain']

 

 

              # Check if the length is longer and the chain is valid

              if length > max_length and self.valid_chain(chain):

                  max_length = length

                  new_chain = chain

 

           # Replace our chain if we discovered a new, valid chain longer than ours

      if new_chain:

          self.chain = new_chain

          return True

      return False

 

Trên đây là tất cả những kiến thức từ cơ bản tới nâng cao để tự mình xây dựng Blockchains. Hy vọng bài viết có thể giúp bạn hiểu thêm về Blockchains và cách thức hoạt động của nó.

Nguồn tổng hợp

---

JT1 - IT Recruitment Agency
Website: 
https://www.jt1.vn
Email: hi@jt1.vn
Điện thoại: +8428 6675 6685
Xem thêm các bài viết khác tại: https://www.jt1.vn/blog
Theo dõi chúng tôi tại: https://www.facebook.com/jt1asia/

 

Please reload

Recent Posts

Please reload

banner-top-it-job-right.gif

Archive

Please reload

Tags

Please reload

Related Posts