- Lập trình blockchain phần 1: Ngôn ngữ lập trình C++
- Lập trình blockchain phần 2: Ngôn ngữ lập trình Javascript
Trong hai phần trước bạn đã biết vì sao C++ và JavaScript được lựa chọn để lập trình blockchain. Ngoài 2 ngôn ngữ lập trình này, Python cũng là một sự lựa chọn được nhiều người đánh giá cao trong lập trình blockchain. Bài viết này sẽ giúp bạn hiểu được lý do đằng sau đó.
Ngôn ngữ lập trình Python
Guido van Rossum, một lập trình viên người Hà Lan, đã tạo ra Python vào năm 1991. Python dựa trên một triết lý đơn giản: Tối giản. Một trong những điều đáng chú ý ở Python là nó kết hợp tính đơn giản vào ngôn ngữ lập trình bằng cách sử dụng các khoảng trắng để biểu thị các khối code thay vì dấu ngoặc nhọn hoặc từ khóa. Hãy xem điều này có nghĩa là gì nhé.
Hãy kiểm tra một chương trình “hello world” đơn giản.
print(‘Hello, world!’)
So sánh với chương trình “hello world” của C++. Nó đơn giản hơn rất nhiều.
Vậy còn những thứ phức tạp hơn một chút thì sao? Giả sử chúng ta đang cộng hai số và có kết quả.
num1 = 1.5
num2 = 6.3
sum = float(num1) + float(num2)
print(‘The sum of {0} and {1} is {2}’.format(num1, num2, sum))
Kết quả sẽ là: Tổng của 1.5 và 6.3 bằng 7.8
Vậy làm thế nào để lập trình một blockchain toàn bộ bằng cách sử dụng Python? Dữ liệu và code sau được lấy từ bài viết của tác giả Gerald Nash trên Medium.
Tạo khối
Trước tiên, hãy tạo khối:
class Block:
def __init__(self, index, timestamp, data, previous_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.hash = self.hash_block()
def hash_block(self):
sha = hasher.sha256()
sha.update(str(self.index) +
str(self.timestamp) +
str(self.data) +
str(self.previous_hash))
return sha.hexdigest()
Phân tích code
Chúng ta bắt đầu bằng cách nhập hash library để sử dụng hàm hash SHA 256 (khá giống với Javascript).
Cũng giống như JavaScript, khối có các giá trị sau:
- Index
- Timestamp
- Data
- Previous hash
- Hash.
Sau đó, gán các giá trị hash thông qua một hàm, giống như trong Javascript.
Tạo khối Genesis
Bây giờ, hãy tạo khối Genesis:
Nhập datetime là ngày tháng hiện tại.
def create_genesis_block():
return Block(0, date.datetime.now(), “Genesis Block”, “0”)
Phân tích code
Nhập datetime để đặt dấu thời gian.
Nhiệm vụ bây giờ đơn giản là tạo ra các khối genesis và gán thủ công cho nó một số dữ liệu để hoạt động. Giá trị hash trước đó là “0” vì nó không trỏ đến khối nào khác.
Tạo phần còn lại của các khối
Bây giờ, hãy xác định cách các khối tiếp theo sẽ được tạo.
def next_block(last_block):
this_index = last_block.index + 1
this_timestamp = date.datetime.now()
this_data = "Hey! I'm block " + str(this_index)
this_hash = last_block.hash
return Block(this_index, this_timestamp, this_data, this_hash)
Phân tích code
Vậy, làm thế nào chúng ta xác định các giá trị của mọi phần dữ liệu bên trong mỗi khối?
- Block index đơn giản là chỉ mục của khối cuối cùng + 1.
- Timestamp là ngày giờ hiện tại.
Dữ liệu của khối là một thông điệp đơn giản: “Hey! I’m block <index number>”.
Hash đang được tính toán bằng cách sử dụng hàm đã gọi trước đó.
Và cuối cùng, tất cả các giá trị này sẽ được trả lại cho khối.
Tạo blockchain
Cuối cùng, hãy tạo blockchain.
blockchain = [create_genesis_block()]
previous_block = blockchain[0]
num_of_blocks_to_add = 15
for i in range(0, num_of_blocks_to_add):
block_to_add = next_block(previous_block)
blockchain.append(block_to_add)
previous_block = block_to_add
# Tell everyone about it!
print "Block #{} has been added to the blockchain!".format(block_to_add.index)
print "Hash: {}n".format(block_to_add.hash)
Phân tích code
Đầu tiên, hãy tạo khối genesis và đặt giá trị cho nó là “previous_block”.
Sau đó, xác định có bao nhiêu khối được thêm vào. Trong ví dụ này, 15 khối sẽ được thêm vào.
Vì vậy, bước thêm khối sẽ được lặp lại 15 lần để thêm từng khối vào blockchain. Cuối cùng, xuất number block đã được thêm vào blockchain thông qua index number của chúng, đồng thời cũng xuất luôn ra hash.
Đây là kết quả xuất ra:
Rõ ràng trong cả Python và Javascript, bạn có thể thêm các tính năng phức tạp hơn như Proof Of Work. Nếu bạn muốn tìm hiểu cách thực hiện điều đó thì bạn nên xem qua bài viết của Gerald Nash. Nhưng bây giờ, ít nhất bạn cũng biết cách tạo một blockchain đơn giản trong Python.
Xem thêm: