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
第一个方法 valid_chain() 是负责来检查链是否有效,它通过遍历区块链上的每个区块并验证它们的哈希和工作量证明来检查这个区块链是否有效。
resolve_conflicts() 方法用于遍历所有的邻居节点,下载它们的链并使用上面的方法去验证它们是否有效。如果找到有效的链,确定谁是最长的链,然后我们就用最长的链来替换我们的当前的链。
在我们的 API 上来..两个端点,一个用于添加邻居节点,另一个用于解决冲突:
@app.route("/nodes/register", methods=["POST"])
def register_nodes():
values = request.get_json()
nodes = values.get("nodes")
if nodes is None:
return "Error: Please supply a valid list of nodes", 400
for node in nodes:
blockchain.register_node(node)
response = {
"message": "New nodes have been added",
"total_nodes": list(blockchain.nodes),
}
return jsonify(response), 201
@app.route("/nodes/resolve", methods=["GET"])
def consensus():
replaced = blockchain.resolve_conflicts()
if replaced:
response = {
"message": "Our chain was replaced",
"new_chain": blockchain.chain
}
else:
response = {
"message": "Our chain is authoritative",
"chain": blockchain.chain
}
return jsonify(response), 200
这种情况下,如果你愿意,可以使用不同的机器来做,然后在你的网络上启动不同的节点。或者是在同一台机器上使用不同的端口启动另一个进程。我是在我的机器上使用了不同的端口启动了另一个节点,,并将它..到了当前的节点上。因此,我现在有了两个节点:http://localhost:5000 和 http://localhost:5001。
..一个新节点
我接着在节点 2 上挖出一些新区块,以确保这个链是最长的。之后我在节点 1 上以 GET 方式调用了 /nodes/resolve,这时,节点 1 上的链被共识算法替换成节点 2 上的链了:
工作中的共识算法
然后将它们封装起来 … 找一些朋友来帮你一起测试你的区块链。
我希望以上内容能够鼓舞你去创建一些新的东西。我是加密货币的狂热拥护者,因此我相信区块链将迅速改变我们对经济、政府和记录保存的看法。
更新: 我正计划继续它的第二部分,其中我将扩展我们的区块链,使它具备交易验证机制,同时讨论一些你可以在其上产生你自己的区块链的方式。(LCTT 译注:第二篇并没有~!)
via: http://hackernoon.com/learn-blockchains-by-building-one-117428612f46
作者:Daniel van Flymen[9] 译者:qhwdw 校对:wxy
本年5月12日是第16个全国防灾减灾日主题是“人人讲平安、个个会应急——出力提拔下层防灾避险能力”5月11日至17日为防灾减灾宣传周国度防灾减灾
近日由莆田市体育局荔城区文化体育和旅行局作为指导单元单子莆田市体育跳舞活动协会主办莆田市体育跳舞活动协会街舞专业委员会协办的“奔驰
叮!我预备了【京东卡】要给你!你的【福利】即将到账!叮!你有一张【京东卡】待查收天色逐渐转暖,属于炎天的康乐就要回来了!大排档里黏
大家好,小丽今天来为大家解答优秀护士工作总结以下问题,优秀护士工作总结自参加工作以来很多人还不知道,现在让我们一起来看看吧!1、轻基
《健康中国视察》2024年4月刊登载了题为《共建共享 健康姑苏——中国式现代化配景下的健康城市索求与实践》的封面文章聚焦姑苏健康城市扶植经
大家好,小乐今天来为大家解答送红包1314是什么意思以下问题,红包1314是多少钱很多人还不知道,现在让我们一起来看看吧!1、1314,即一生一世谐
Anna Armona 乌克兰艺术家她的水彩作品唯美、抽象且具有诗意那种布满着梦幻的色彩,灿烂斑斓,使人感受赞叹、震撼与晕眩!春:夏秋冬图文起原收
大家好,小娟今天来为大家解答辞退无固定期限合同员工的赔偿以下问题,辞退无固定期限合同员工的赔偿最高很多人还不知道,现在让我们一起来
Copyright 2024.依依自媒体,让大家了解更多图文资讯!