想学习区块链?那就用 Python 构建一个 | Linux 中国(4)

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

[本文来自:www.11jj.com]

  •                return False

    [原文来自:www.11jj.com]

  •            # 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。

    想学习区块链?那就用 Python 构建一个 | Linux 中国(4)

    ..一个新节点

    我接着在节点 2 上挖出一些新区块,以确保这个链是最长的。之后我在节点 1 上以 GET 方式调用了 /nodes/resolve,这时,节点 1 上的链被共识算法替换成节点 2 上的链了:

    想学习区块链?那就用 Python 构建一个 | Linux 中国(4)

    工作中的共识算法

    然后将它们封装起来 … 找一些朋友来帮你一起测试你的区块链。

    我希望以上内容能够鼓舞你去创建一些新的东西。我是加密货币的狂热拥护者,因此我相信区块链将迅速改变我们对经济、政府和记录保存的看法。

    更新: 我正计划继续它的第二部分,其中我将扩展我们的区块链,使它具备交易验证机制,同时讨论一些你可以在其上产生你自己的区块链的方式。(LCTT 译注:第二篇并没有~!)

    via: http://hackernoon.com/learn-blockchains-by-building-one-117428612f46

    作者:Daniel van Flymen[9] 译者:qhwdw 校对:wxy

    本文由 LCTT 原创编译,Linux中国 荣誉推出

    自媒体 微信号:11jj 扫描二维码关注公众号
    爱八卦,爱爆料。

    小编推荐

    1. 1

      @全体师生 防灾减灾宣传周主题海报来了

      本年5月12日是第16个全国防灾减灾日主题是“人人讲平安、个个会应急——出力提拔下层防灾避险能力”5月11日至17日为防灾减灾宣传周国度防灾减灾

    2. 2

      名单出炉!莆田首支霹雳舞市级集训队名单确定

      近日由莆田市体育局荔城区文化体育和旅行局作为指导单元单子莆田市体育跳舞活动协会主办莆田市体育跳舞活动协会街舞专业委员会协办的“奔驰

    3. 3

      你的【福利】即将到账

      叮!我预备了【京东卡】要给你!你的【福利】即将到账!叮!你有一张【京东卡】待查收天色逐渐转暖,属于炎天的康乐就要回来了!大排档里黏

    4. 4

      优秀护士工作总结(优秀护士工作总结自参加工作以来)

      大家好,小丽今天来为大家解答优秀护士工作总结以下问题,优秀护士工作总结自参加工作以来很多人还不知道,现在让我们一起来看看吧!1、轻基

    5. 5

      《健康中国观察》封面文章,介绍苏州经验!

      《健康中国视察》2024年4月刊登载了题为《共建共享 健康姑苏——中国式现代化配景下的健康城市索求与实践》的封面文章聚焦姑苏健康城市扶植经

    6. 6

      送红包1314是什么意思(红包1314是多少钱)

      大家好,小乐今天来为大家解答送红包1314是什么意思以下问题,红包1314是多少钱很多人还不知道,现在让我们一起来看看吧!1、1314,即一生一世谐

    7. 7

      她打翻了上帝的水彩盒!太美了!

      Anna Armona 乌克兰艺术家她的水彩作品唯美、抽象且具有诗意那种布满着梦幻的色彩,灿烂斑斓,使人感受赞叹、震撼与晕眩!春:夏秋冬图文起原收

    8. 8

      辞退无固定期限合同员工的赔偿(辞退无固定期限合同员工的赔偿最高)

      大家好,小娟今天来为大家解答辞退无固定期限合同员工的赔偿以下问题,辞退无固定期限合同员工的赔偿最高很多人还不知道,现在让我们一起来

    Copyright 2024.依依自媒体,让大家了解更多图文资讯!