CODE VN

CODE VN

1637564068

Xây dựng chuỗi khối tiền điện tử của riêng bạn bằng Python

Tiền điện tử là một loại tiền kỹ thuật số phi tập trung sử dụng các kỹ thuật mã hóa để điều chỉnh việc tạo ra các đơn vị tiền tệ và để xác minh việc chuyển tiền. Ẩn danh, phân quyền và bảo mật là một trong những tính năng chính của nó. Tiền điện tử không được quản lý hoặc theo dõi bởi bất kỳ cơ quan quản lý tập trung, chính phủ hoặc ngân hàng nào.

Blockchain, một mạng ngang hàng (P2P) phi tập trung, bao gồm các khối dữ liệu, là một phần không thể thiếu của tiền điện tử. Các khối này lưu trữ theo thứ tự thời gian thông tin về các giao dịch và tuân theo một giao thức để giao tiếp giữa các nút và xác nhận các khối mới. Dữ liệu được ghi trong các khối không thể bị thay đổi nếu không có sự thay đổi của tất cả các khối tiếp theo.

Trong bài viết này, chúng tôi sẽ giải thích cách bạn có thể tạo một chuỗi khối đơn giản bằng ngôn ngữ lập trình Python.

Đây là bản thiết kế cơ bản của lớp Python mà chúng tôi sẽ sử dụng để tạo blockchain:

class Block(object):
    def __init__():
        pass
    #initial structure of the block class 
    def compute_hash():
        pass
    #producing the cryptographic hash of each block 
  class BlockChain(object):
    def __init__(self):
    #building the chain
    def build_genesis(self):
        pass
    #creating the initial block
    def build_block(self, proof_number, previous_hash):
        pass
    #builds new block and adds to the chain
   @staticmethod
    def confirm_validity(block, previous_block):
        pass
    #checks whether the blockchain is valid
    def get_data(self, sender, receiver, amount):
        pass
    # declares data of transactions
    @staticmethod
    def proof_of_work(last_proof):
        pass
    #adds to the security of the blockchain
    @property
    def latest_block(self):
        pass
    #returns the last block in the chain

Bây giờ, hãy giải thích cách hoạt động của lớp blockchain.

Cấu trúc ban đầu của lớp khối

Đây là mã cho lớp khối ban đầu của chúng tôi:

import hashlib
import time
class Block(object):
    def __init__(self, index, proof_number, previous_hash, data, timestamp=None):
        self.index = index
        self.proof_number = proof_number
        self.previous_hash = previous_hash
        self.data = data
        self.timestamp = timestamp or time.time()
    @property
    def compute_hash(self):
        string_block = "{}{}{}{}{}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)
        return hashlib.sha256(string_block.encode()).hexdigest()

Như bạn có thể thấy ở trên, phương thức khởi tạo hoặc phương thức khởi tạo lớp ( init ()) ở trên nhận các tham số sau:

self- giống như bất kỳ lớp Python nào khác, tham số này được sử dụng để tham chiếu đến chính lớp đó. Bất kỳ biến nào được liên kết với lớp đều có thể được truy cập bằng cách sử dụng nó.

index - nó được sử dụng để theo dõi vị trí của một khối trong chuỗi khối.

previous_hash - nó được sử dụng để tham chiếu hàm băm của khối trước đó trong chuỗi khối.

data—it cung cấp thông tin chi tiết về các giao dịch đã thực hiện, chẳng hạn như số tiền đã mua.

timestamp—it chèn dấu thời gian cho tất cả các giao dịch được thực hiện.

Phương thức thứ hai trong lớp, compute_hash, được sử dụng để tạo ra hàm băm mật mã của mỗi khối dựa trên các giá trị trên.

Như bạn có thể thấy, chúng tôi đã nhập thuật toán SHA-256 vào dự án blockchain tiền điện tử để giúp lấy các hàm băm của các khối.

Khi các giá trị đã được đặt bên trong mô-đun băm, thuật toán sẽ trả về một chuỗi 256-bit biểu thị nội dung của khối.

Vì vậy, đây là những gì mang lại tính bất biến của blockchain. Vì mỗi khối sẽ được đại diện bởi một hàm băm, sẽ được tính toán từ hàm băm của khối trước đó, việc làm hỏng bất kỳ khối nào trong chuỗi sẽ khiến các khối khác có hàm băm không hợp lệ, dẫn đến việc toàn bộ mạng blockchain bị phá vỡ.

Xây dựng chuỗi

Toàn bộ khái niệm về blockchain dựa trên thực tế là các khối được “liên kết” với nhau. Bây giờ, chúng tôi sẽ tạo một lớp blockchain sẽ đóng vai trò quan trọng trong việc quản lý toàn bộ chuỗi.

Nó sẽ giữ dữ liệu giao dịch và bao gồm các phương pháp trợ giúp khác để hoàn thành các vai trò khác nhau, chẳng hạn như thêm các khối mới.

Hãy nói về các phương thức trợ giúp.

Thêm phương thức xây dựng

Đây là mã:

class BlockChain(object):
    def __init__(self):
        self.chain = []
        self.current_data = []
        self.nodes = set()
        self.build_genesis()

Các init () phương thức khởi tạo là những gì instantiates blockchain.

Dưới đây là vai trò của các thuộc tính của nó:

self.chain - biến này lưu trữ tất cả các khối.

self.current_data - biến này lưu trữ thông tin về các giao dịch trong khối.

self.build_genesis () - phương thức này được sử dụng để tạo khối ban đầu trong chuỗi.

Xây dựng Khối Sáng thế

Các build_genesis()phương pháp được sử dụng để tạo khối ban đầu trong chuỗi, có nghĩa là, một khối mà không cần bất kỳ người tiền nhiệm. Khối genesis là thứ đại diện cho sự khởi đầu của blockchain.

Để tạo nó, chúng tôi sẽ gọi build_block()phương thức và cung cấp cho nó một số giá trị mặc định. Các tham số proof_numberprevious_hashcả hai đều có giá trị bằng 0, mặc dù bạn có thể cung cấp cho chúng bất kỳ giá trị nào bạn muốn.

Đây là mã:

def build_genesis(self):
        self.build_block(proof_number=0, previous_hash=0)
 def build_block(self, proof_number, previous_hash):
        block = Block(
            index=len(self.chain),
            proof_number=proof_number,
            previous_hash=previous_hash,
            data=self.current_data
        )
        self.current_data = []  
        self.chain.append(block)
        return block

Xác nhận tính hợp lệ của chuỗi khối

Các confirm_validityphương pháp là rất quan trọng trong việc kiểm tra tính toàn vẹn của blockchain và đảm bảo những mâu thuẫn đang thiếu.

Như đã giải thích trước đó, hàm băm đóng vai trò quan trọng trong việc nhận ra tính bảo mật của chuỗi khối tiền điện tử, bởi vì bất kỳ thay đổi nhỏ nào trong một đối tượng sẽ dẫn đến việc tạo ra một hàm băm hoàn toàn khác.

Do đó, confirm_validityphương pháp sử dụng một loạt các câu lệnh if để đánh giá xem liệu băm của mỗi khối có bị xâm phạm hay không.

Hơn nữa, nó cũng so sánh các giá trị băm của mỗi hai khối liên tiếp để xác định bất kỳ điểm bất thường nào. Nếu chuỗi hoạt động bình thường, nó trả về true; nếu không, nó trả về false.

Đây là mã:

def confirm_validity(block, previous_block):
        if previous_block.index + 1 != block.index:
            return False
        elif previous_block.compute_hash != block.previous_hash:
            return False
        elif block.timestamp <= previous_block.timestamp:
            return False
        return True

Khai báo dữ liệu giao dịch

Các get_dataphương pháp rất quan trọng trong việc công bố các dữ liệu của các giao dịch trên một khối. Phương thức này nhận ba tham số (thông tin người gửi, thông tin người nhận và số tiền) và thêm dữ liệu giao dịch vào danh sách self.current_data.

Đây là mã:

def get_data(self, sender, receiver, amount):
        self.current_data.append({
            'sender': sender,
            'receiver': receiver,
            'amount': amount
        })
        return True

Hiệu quả Bằng chứng Công việc

Trong công nghệ blockchain, Proof of Work (PoW) đề cập đến sự phức tạp liên quan đến việc khai thác hoặc tạo ra các khối mới trên blockchain.

Ví dụ: PoW có thể được triển khai bằng cách xác định một số giải quyết vấn đề bất cứ khi nào người dùng hoàn thành một số công việc tính toán. Bất kỳ ai trên mạng blockchain đều nên tìm số phức tạp để xác định nhưng dễ xác minh - đây là khái niệm chính của PoW.

Bằng cách này, nó không khuyến khích gửi thư rác và ảnh hưởng đến tính toàn vẹn của mạng.

Trong bài viết này, chúng tôi sẽ minh họa cách đưa thuật toán Proof of Work vào một dự án tiền điện tử blockchain.

Hoàn thiện với khối cuối cùng

Cuối cùng, phương thức trình trợ giúp mới nhất_block () được sử dụng để truy xuất khối cuối cùng trên mạng, thực sự là khối hiện tại.

Đây là mã:

def latest_block(self):
        return self.chain[-1]

Triển khai khai thác trên chuỗi khối

Bây giờ, đây là phần thú vị nhất!

Ban đầu, các giao dịch được lưu giữ trong danh sách các giao dịch chưa được xác minh. Khai thác đề cập đến quá trình đặt các giao dịch chưa được xác minh trong một khối và giải quyết vấn đề PoW. Nó có thể được gọi là công việc tính toán liên quan đến việc xác minh các giao dịch.

Nếu mọi thứ đã được tìm ra chính xác, một khối sẽ được tạo hoặc khai thác và kết hợp với các khối khác trong chuỗi khối. Nếu người dùng đã khai thác thành công một khối, họ thường được thưởng vì đã sử dụng tài nguyên máy tính của họ để giải quyết vấn đề PoW.

Đây là phương pháp khai thác trong dự án blockchain tiền điện tử đơn giản này:

def block_mining(self, details_miner):
            self.get_data(
            sender="0", #it implies that this node has created a new block
            receiver=details_miner,
            quantity=1, #creating a new block (or identifying the proof number) is awarded with 1
        )
        last_block = self.latest_block
        last_proof_number = last_block.proof_number
        proof_number = self.proof_of_work(last_proof_number)
        last_hash = last_block.compute_hash
        block = self.build_block(proof_number, last_hash)
        return vars(block)

Tóm lược

Đây là toàn bộ mã cho lớp blockchain tiền điện tử của chúng tôi bằng Python:

import hashlib
import time
class Block(object):
    def __init__(self, index, proof_number, previous_hash, data, timestamp=None):
        self.index = index
        self.proof_number = proof_number
        self.previous_hash = previous_hash
        self.data = data
        self.timestamp = timestamp or time.time()
    @property
    def compute_hash(self):
        string_block = "{}{}{}{}{}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)
        return hashlib.sha256(string_block.encode()).hexdigest()
    def __repr__(self):
        return "{} - {} - {} - {} - {}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)
class BlockChain(object):
    def __init__(self):
        self.chain = []
        self.current_data = []
        self.nodes = set()
        self.build_genesis()
    def build_genesis(self):
        self.build_block(proof_number=0, previous_hash=0)
    def build_block(self, proof_number, previous_hash):
        block = Block(
            index=len(self.chain),
            proof_number=proof_number,
            previous_hash=previous_hash,
            data=self.current_data
        )
        self.current_data = []  
        self.chain.append(block)
        return block
    @staticmethod
    def confirm_validity(block, previous_block):
        if previous_block.index + 1 != block.index:
            return False
        elif previous_block.compute_hash != block.previous_hash:
            return False
        elif block.timestamp <= previous_block.timestamp:
            return False
        return True
    def get_data(self, sender, receiver, amount):
        self.current_data.append({
            'sender': sender,
            'receiver': receiver,
            'amount': amount
        })
        return True        
    @staticmethod
    def proof_of_work(last_proof):
        pass
    @property
    def latest_block(self):
        return self.chain[-1]
    def chain_validity(self):
        pass        
    def block_mining(self, details_miner):       
        self.get_data(
            sender="0", #it implies that this node has created a new block
            receiver=details_miner,
            quantity=1, #creating a new block (or identifying the proof number) is awared with 1
        )
        last_block = self.latest_block
        last_proof_number = last_block.proof_number
        proof_number = self.proof_of_work(last_proof_number)
        last_hash = last_block.compute_hash
        block = self.build_block(proof_number, last_hash)
        return vars(block)  
    def create_node(self, address):
        self.nodes.add(address)
        return True
    @staticmethod
    def get_block_object(block_data):        
        return Block(
            block_data['index'],
            block_data['proof_number'],
            block_data['previous_hash'],
            block_data['data'],
            timestamp=block_data['timestamp']
        )
blockchain = BlockChain()
print("GET READY MINING ABOUT TO START")
print(blockchain.chain)
last_block = blockchain.latest_block
last_proof_number = last_block.proof_number
proof_number = blockchain.proof_of_work(last_proof_number)
blockchain.get_data(
    sender="0", #this means that this node has constructed another block
    receiver="LiveEdu.tv", 
    amount=1, #building a new block (or figuring out the proof number) is awarded with 1
)
last_hash = last_block.compute_hash
block = blockchain.build_block(proof_number, last_hash)
print("WOW, MINING HAS BEEN SUCCESSFUL!")
print(blockchain.chain)

Bây giờ, chúng ta hãy thử chạy mã của mình để xem liệu chúng ta có thể tạo ra một số đồng tiền kỹ thuật số hay không…

Wow, nó hoạt động!

Phần kết luận

Đó là nó!

Chúng tôi hy vọng rằng bài viết này đã giúp bạn hiểu được công nghệ cơ bản cung cấp năng lượng cho các loại tiền điện tử như Bitcoin và Ethereum.

Chúng tôi chỉ minh họa những ý tưởng cơ bản để làm cho bạn chân ướt chân ráo trong công nghệ blockchain sáng tạo. Dự án trên vẫn có thể được cải tiến bằng cách kết hợp các tính năng khác để làm cho nó hữu ích và mạnh mẽ hơn.

What is GEEK

Buddha Community

Ray  Patel

Ray Patel

1619518440

top 30 Python Tips and Tricks for Beginners

Welcome to my Blog , In this article, you are going to learn the top 10 python tips and tricks.

1) swap two numbers.

2) Reversing a string in Python.

3) Create a single string from all the elements in list.

4) Chaining Of Comparison Operators.

5) Print The File Path Of Imported Modules.

6) Return Multiple Values From Functions.

7) Find The Most Frequent Value In A List.

8) Check The Memory Usage Of An Object.

#python #python hacks tricks #python learning tips #python programming tricks #python tips #python tips and tricks #python tips and tricks advanced #python tips and tricks for beginners #python tips tricks and techniques #python tutorial #tips and tricks in python #tips to learn python #top 30 python tips and tricks for beginners

Ray  Patel

Ray Patel

1619510796

Lambda, Map, Filter functions in python

Welcome to my Blog, In this article, we will learn python lambda function, Map function, and filter function.

Lambda function in python: Lambda is a one line anonymous function and lambda takes any number of arguments but can only have one expression and python lambda syntax is

Syntax: x = lambda arguments : expression

Now i will show you some python lambda function examples:

#python #anonymous function python #filter function in python #lambda #lambda python 3 #map python #python filter #python filter lambda #python lambda #python lambda examples #python map

Shardul Bhatt

Shardul Bhatt

1626775355

Why use Python for Software Development

No programming language is pretty much as diverse as Python. It enables building cutting edge applications effortlessly. Developers are as yet investigating the full capability of end-to-end Python development services in various areas. 

By areas, we mean FinTech, HealthTech, InsureTech, Cybersecurity, and that's just the beginning. These are New Economy areas, and Python has the ability to serve every one of them. The vast majority of them require massive computational abilities. Python's code is dynamic and powerful - equipped for taking care of the heavy traffic and substantial algorithmic capacities. 

Programming advancement is multidimensional today. Endeavor programming requires an intelligent application with AI and ML capacities. Shopper based applications require information examination to convey a superior client experience. Netflix, Trello, and Amazon are genuine instances of such applications. Python assists with building them effortlessly. 

5 Reasons to Utilize Python for Programming Web Apps 

Python can do such numerous things that developers can't discover enough reasons to admire it. Python application development isn't restricted to web and enterprise applications. It is exceptionally adaptable and superb for a wide range of uses.

Robust frameworks 

Python is known for its tools and frameworks. There's a structure for everything. Django is helpful for building web applications, venture applications, logical applications, and mathematical processing. Flask is another web improvement framework with no conditions. 

Web2Py, CherryPy, and Falcon offer incredible capabilities to customize Python development services. A large portion of them are open-source frameworks that allow quick turn of events. 

Simple to read and compose 

Python has an improved sentence structure - one that is like the English language. New engineers for Python can undoubtedly understand where they stand in the development process. The simplicity of composing allows quick application building. 

The motivation behind building Python, as said by its maker Guido Van Rossum, was to empower even beginner engineers to comprehend the programming language. The simple coding likewise permits developers to roll out speedy improvements without getting confused by pointless subtleties. 

Utilized by the best 

Alright - Python isn't simply one more programming language. It should have something, which is the reason the business giants use it. Furthermore, that too for different purposes. Developers at Google use Python to assemble framework organization systems, parallel information pusher, code audit, testing and QA, and substantially more. Netflix utilizes Python web development services for its recommendation algorithm and media player. 

Massive community support 

Python has a steadily developing community that offers enormous help. From amateurs to specialists, there's everybody. There are a lot of instructional exercises, documentation, and guides accessible for Python web development solutions. 

Today, numerous universities start with Python, adding to the quantity of individuals in the community. Frequently, Python designers team up on various tasks and help each other with algorithmic, utilitarian, and application critical thinking. 

Progressive applications 

Python is the greatest supporter of data science, Machine Learning, and Artificial Intelligence at any enterprise software development company. Its utilization cases in cutting edge applications are the most compelling motivation for its prosperity. Python is the second most well known tool after R for data analytics.

The simplicity of getting sorted out, overseeing, and visualizing information through unique libraries makes it ideal for data based applications. TensorFlow for neural networks and OpenCV for computer vision are two of Python's most well known use cases for Machine learning applications.

Summary

Thinking about the advances in programming and innovation, Python is a YES for an assorted scope of utilizations. Game development, web application development services, GUI advancement, ML and AI improvement, Enterprise and customer applications - every one of them uses Python to its full potential. 

The disadvantages of Python web improvement arrangements are regularly disregarded by developers and organizations because of the advantages it gives. They focus on quality over speed and performance over blunders. That is the reason it's a good idea to utilize Python for building the applications of the future.

#python development services #python development company #python app development #python development #python in web development #python software development

CODE VN

CODE VN

1637564068

Xây dựng chuỗi khối tiền điện tử của riêng bạn bằng Python

Tiền điện tử là một loại tiền kỹ thuật số phi tập trung sử dụng các kỹ thuật mã hóa để điều chỉnh việc tạo ra các đơn vị tiền tệ và để xác minh việc chuyển tiền. Ẩn danh, phân quyền và bảo mật là một trong những tính năng chính của nó. Tiền điện tử không được quản lý hoặc theo dõi bởi bất kỳ cơ quan quản lý tập trung, chính phủ hoặc ngân hàng nào.

Blockchain, một mạng ngang hàng (P2P) phi tập trung, bao gồm các khối dữ liệu, là một phần không thể thiếu của tiền điện tử. Các khối này lưu trữ theo thứ tự thời gian thông tin về các giao dịch và tuân theo một giao thức để giao tiếp giữa các nút và xác nhận các khối mới. Dữ liệu được ghi trong các khối không thể bị thay đổi nếu không có sự thay đổi của tất cả các khối tiếp theo.

Trong bài viết này, chúng tôi sẽ giải thích cách bạn có thể tạo một chuỗi khối đơn giản bằng ngôn ngữ lập trình Python.

Đây là bản thiết kế cơ bản của lớp Python mà chúng tôi sẽ sử dụng để tạo blockchain:

class Block(object):
    def __init__():
        pass
    #initial structure of the block class 
    def compute_hash():
        pass
    #producing the cryptographic hash of each block 
  class BlockChain(object):
    def __init__(self):
    #building the chain
    def build_genesis(self):
        pass
    #creating the initial block
    def build_block(self, proof_number, previous_hash):
        pass
    #builds new block and adds to the chain
   @staticmethod
    def confirm_validity(block, previous_block):
        pass
    #checks whether the blockchain is valid
    def get_data(self, sender, receiver, amount):
        pass
    # declares data of transactions
    @staticmethod
    def proof_of_work(last_proof):
        pass
    #adds to the security of the blockchain
    @property
    def latest_block(self):
        pass
    #returns the last block in the chain

Bây giờ, hãy giải thích cách hoạt động của lớp blockchain.

Cấu trúc ban đầu của lớp khối

Đây là mã cho lớp khối ban đầu của chúng tôi:

import hashlib
import time
class Block(object):
    def __init__(self, index, proof_number, previous_hash, data, timestamp=None):
        self.index = index
        self.proof_number = proof_number
        self.previous_hash = previous_hash
        self.data = data
        self.timestamp = timestamp or time.time()
    @property
    def compute_hash(self):
        string_block = "{}{}{}{}{}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)
        return hashlib.sha256(string_block.encode()).hexdigest()

Như bạn có thể thấy ở trên, phương thức khởi tạo hoặc phương thức khởi tạo lớp ( init ()) ở trên nhận các tham số sau:

self- giống như bất kỳ lớp Python nào khác, tham số này được sử dụng để tham chiếu đến chính lớp đó. Bất kỳ biến nào được liên kết với lớp đều có thể được truy cập bằng cách sử dụng nó.

index - nó được sử dụng để theo dõi vị trí của một khối trong chuỗi khối.

previous_hash - nó được sử dụng để tham chiếu hàm băm của khối trước đó trong chuỗi khối.

data—it cung cấp thông tin chi tiết về các giao dịch đã thực hiện, chẳng hạn như số tiền đã mua.

timestamp—it chèn dấu thời gian cho tất cả các giao dịch được thực hiện.

Phương thức thứ hai trong lớp, compute_hash, được sử dụng để tạo ra hàm băm mật mã của mỗi khối dựa trên các giá trị trên.

Như bạn có thể thấy, chúng tôi đã nhập thuật toán SHA-256 vào dự án blockchain tiền điện tử để giúp lấy các hàm băm của các khối.

Khi các giá trị đã được đặt bên trong mô-đun băm, thuật toán sẽ trả về một chuỗi 256-bit biểu thị nội dung của khối.

Vì vậy, đây là những gì mang lại tính bất biến của blockchain. Vì mỗi khối sẽ được đại diện bởi một hàm băm, sẽ được tính toán từ hàm băm của khối trước đó, việc làm hỏng bất kỳ khối nào trong chuỗi sẽ khiến các khối khác có hàm băm không hợp lệ, dẫn đến việc toàn bộ mạng blockchain bị phá vỡ.

Xây dựng chuỗi

Toàn bộ khái niệm về blockchain dựa trên thực tế là các khối được “liên kết” với nhau. Bây giờ, chúng tôi sẽ tạo một lớp blockchain sẽ đóng vai trò quan trọng trong việc quản lý toàn bộ chuỗi.

Nó sẽ giữ dữ liệu giao dịch và bao gồm các phương pháp trợ giúp khác để hoàn thành các vai trò khác nhau, chẳng hạn như thêm các khối mới.

Hãy nói về các phương thức trợ giúp.

Thêm phương thức xây dựng

Đây là mã:

class BlockChain(object):
    def __init__(self):
        self.chain = []
        self.current_data = []
        self.nodes = set()
        self.build_genesis()

Các init () phương thức khởi tạo là những gì instantiates blockchain.

Dưới đây là vai trò của các thuộc tính của nó:

self.chain - biến này lưu trữ tất cả các khối.

self.current_data - biến này lưu trữ thông tin về các giao dịch trong khối.

self.build_genesis () - phương thức này được sử dụng để tạo khối ban đầu trong chuỗi.

Xây dựng Khối Sáng thế

Các build_genesis()phương pháp được sử dụng để tạo khối ban đầu trong chuỗi, có nghĩa là, một khối mà không cần bất kỳ người tiền nhiệm. Khối genesis là thứ đại diện cho sự khởi đầu của blockchain.

Để tạo nó, chúng tôi sẽ gọi build_block()phương thức và cung cấp cho nó một số giá trị mặc định. Các tham số proof_numberprevious_hashcả hai đều có giá trị bằng 0, mặc dù bạn có thể cung cấp cho chúng bất kỳ giá trị nào bạn muốn.

Đây là mã:

def build_genesis(self):
        self.build_block(proof_number=0, previous_hash=0)
 def build_block(self, proof_number, previous_hash):
        block = Block(
            index=len(self.chain),
            proof_number=proof_number,
            previous_hash=previous_hash,
            data=self.current_data
        )
        self.current_data = []  
        self.chain.append(block)
        return block

Xác nhận tính hợp lệ của chuỗi khối

Các confirm_validityphương pháp là rất quan trọng trong việc kiểm tra tính toàn vẹn của blockchain và đảm bảo những mâu thuẫn đang thiếu.

Như đã giải thích trước đó, hàm băm đóng vai trò quan trọng trong việc nhận ra tính bảo mật của chuỗi khối tiền điện tử, bởi vì bất kỳ thay đổi nhỏ nào trong một đối tượng sẽ dẫn đến việc tạo ra một hàm băm hoàn toàn khác.

Do đó, confirm_validityphương pháp sử dụng một loạt các câu lệnh if để đánh giá xem liệu băm của mỗi khối có bị xâm phạm hay không.

Hơn nữa, nó cũng so sánh các giá trị băm của mỗi hai khối liên tiếp để xác định bất kỳ điểm bất thường nào. Nếu chuỗi hoạt động bình thường, nó trả về true; nếu không, nó trả về false.

Đây là mã:

def confirm_validity(block, previous_block):
        if previous_block.index + 1 != block.index:
            return False
        elif previous_block.compute_hash != block.previous_hash:
            return False
        elif block.timestamp <= previous_block.timestamp:
            return False
        return True

Khai báo dữ liệu giao dịch

Các get_dataphương pháp rất quan trọng trong việc công bố các dữ liệu của các giao dịch trên một khối. Phương thức này nhận ba tham số (thông tin người gửi, thông tin người nhận và số tiền) và thêm dữ liệu giao dịch vào danh sách self.current_data.

Đây là mã:

def get_data(self, sender, receiver, amount):
        self.current_data.append({
            'sender': sender,
            'receiver': receiver,
            'amount': amount
        })
        return True

Hiệu quả Bằng chứng Công việc

Trong công nghệ blockchain, Proof of Work (PoW) đề cập đến sự phức tạp liên quan đến việc khai thác hoặc tạo ra các khối mới trên blockchain.

Ví dụ: PoW có thể được triển khai bằng cách xác định một số giải quyết vấn đề bất cứ khi nào người dùng hoàn thành một số công việc tính toán. Bất kỳ ai trên mạng blockchain đều nên tìm số phức tạp để xác định nhưng dễ xác minh - đây là khái niệm chính của PoW.

Bằng cách này, nó không khuyến khích gửi thư rác và ảnh hưởng đến tính toàn vẹn của mạng.

Trong bài viết này, chúng tôi sẽ minh họa cách đưa thuật toán Proof of Work vào một dự án tiền điện tử blockchain.

Hoàn thiện với khối cuối cùng

Cuối cùng, phương thức trình trợ giúp mới nhất_block () được sử dụng để truy xuất khối cuối cùng trên mạng, thực sự là khối hiện tại.

Đây là mã:

def latest_block(self):
        return self.chain[-1]

Triển khai khai thác trên chuỗi khối

Bây giờ, đây là phần thú vị nhất!

Ban đầu, các giao dịch được lưu giữ trong danh sách các giao dịch chưa được xác minh. Khai thác đề cập đến quá trình đặt các giao dịch chưa được xác minh trong một khối và giải quyết vấn đề PoW. Nó có thể được gọi là công việc tính toán liên quan đến việc xác minh các giao dịch.

Nếu mọi thứ đã được tìm ra chính xác, một khối sẽ được tạo hoặc khai thác và kết hợp với các khối khác trong chuỗi khối. Nếu người dùng đã khai thác thành công một khối, họ thường được thưởng vì đã sử dụng tài nguyên máy tính của họ để giải quyết vấn đề PoW.

Đây là phương pháp khai thác trong dự án blockchain tiền điện tử đơn giản này:

def block_mining(self, details_miner):
            self.get_data(
            sender="0", #it implies that this node has created a new block
            receiver=details_miner,
            quantity=1, #creating a new block (or identifying the proof number) is awarded with 1
        )
        last_block = self.latest_block
        last_proof_number = last_block.proof_number
        proof_number = self.proof_of_work(last_proof_number)
        last_hash = last_block.compute_hash
        block = self.build_block(proof_number, last_hash)
        return vars(block)

Tóm lược

Đây là toàn bộ mã cho lớp blockchain tiền điện tử của chúng tôi bằng Python:

import hashlib
import time
class Block(object):
    def __init__(self, index, proof_number, previous_hash, data, timestamp=None):
        self.index = index
        self.proof_number = proof_number
        self.previous_hash = previous_hash
        self.data = data
        self.timestamp = timestamp or time.time()
    @property
    def compute_hash(self):
        string_block = "{}{}{}{}{}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)
        return hashlib.sha256(string_block.encode()).hexdigest()
    def __repr__(self):
        return "{} - {} - {} - {} - {}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)
class BlockChain(object):
    def __init__(self):
        self.chain = []
        self.current_data = []
        self.nodes = set()
        self.build_genesis()
    def build_genesis(self):
        self.build_block(proof_number=0, previous_hash=0)
    def build_block(self, proof_number, previous_hash):
        block = Block(
            index=len(self.chain),
            proof_number=proof_number,
            previous_hash=previous_hash,
            data=self.current_data
        )
        self.current_data = []  
        self.chain.append(block)
        return block
    @staticmethod
    def confirm_validity(block, previous_block):
        if previous_block.index + 1 != block.index:
            return False
        elif previous_block.compute_hash != block.previous_hash:
            return False
        elif block.timestamp <= previous_block.timestamp:
            return False
        return True
    def get_data(self, sender, receiver, amount):
        self.current_data.append({
            'sender': sender,
            'receiver': receiver,
            'amount': amount
        })
        return True        
    @staticmethod
    def proof_of_work(last_proof):
        pass
    @property
    def latest_block(self):
        return self.chain[-1]
    def chain_validity(self):
        pass        
    def block_mining(self, details_miner):       
        self.get_data(
            sender="0", #it implies that this node has created a new block
            receiver=details_miner,
            quantity=1, #creating a new block (or identifying the proof number) is awared with 1
        )
        last_block = self.latest_block
        last_proof_number = last_block.proof_number
        proof_number = self.proof_of_work(last_proof_number)
        last_hash = last_block.compute_hash
        block = self.build_block(proof_number, last_hash)
        return vars(block)  
    def create_node(self, address):
        self.nodes.add(address)
        return True
    @staticmethod
    def get_block_object(block_data):        
        return Block(
            block_data['index'],
            block_data['proof_number'],
            block_data['previous_hash'],
            block_data['data'],
            timestamp=block_data['timestamp']
        )
blockchain = BlockChain()
print("GET READY MINING ABOUT TO START")
print(blockchain.chain)
last_block = blockchain.latest_block
last_proof_number = last_block.proof_number
proof_number = blockchain.proof_of_work(last_proof_number)
blockchain.get_data(
    sender="0", #this means that this node has constructed another block
    receiver="LiveEdu.tv", 
    amount=1, #building a new block (or figuring out the proof number) is awarded with 1
)
last_hash = last_block.compute_hash
block = blockchain.build_block(proof_number, last_hash)
print("WOW, MINING HAS BEEN SUCCESSFUL!")
print(blockchain.chain)

Bây giờ, chúng ta hãy thử chạy mã của mình để xem liệu chúng ta có thể tạo ra một số đồng tiền kỹ thuật số hay không…

Wow, nó hoạt động!

Phần kết luận

Đó là nó!

Chúng tôi hy vọng rằng bài viết này đã giúp bạn hiểu được công nghệ cơ bản cung cấp năng lượng cho các loại tiền điện tử như Bitcoin và Ethereum.

Chúng tôi chỉ minh họa những ý tưởng cơ bản để làm cho bạn chân ướt chân ráo trong công nghệ blockchain sáng tạo. Dự án trên vẫn có thể được cải tiến bằng cách kết hợp các tính năng khác để làm cho nó hữu ích và mạnh mẽ hơn.

Art  Lind

Art Lind

1602968400

Python Tricks Every Developer Should Know

Python is awesome, it’s one of the easiest languages with simple and intuitive syntax but wait, have you ever thought that there might ways to write your python code simpler?

In this tutorial, you’re going to learn a variety of Python tricks that you can use to write your Python code in a more readable and efficient way like a pro.

Let’s get started

Swapping value in Python

Instead of creating a temporary variable to hold the value of the one while swapping, you can do this instead

>>> FirstName = "kalebu"
>>> LastName = "Jordan"
>>> FirstName, LastName = LastName, FirstName 
>>> print(FirstName, LastName)
('Jordan', 'kalebu')

#python #python-programming #python3 #python-tutorials #learn-python #python-tips #python-skills #python-development