zoukankan      html  css  js  c++  java
  • 区块链、比特币简易PYTHON实现版笔记

    原文: https://medium.com/@vanflymen/learn-blockchains-by-building-one-117428612f46

    repo: https://github.com/dvf/blockchain

    重点:

    1. 区块链(blockchain)是由一连串块(block)组成的,块是有序的,且无法改变;块的内容可以包含交易信息、文件、图片、或者任何数据;

    2. 块与块之间通过哈希值(hash)串联起来。

    这个简易的python+flask实现版,有几个思想需要注意:

    1. 一套服务(意思就是部署一个blockchain.py)称为一个节点(node)

    2. 每个节点都在记录着自己的一套chain(里面都是block),节点之间通过一致性算法来互相同步,找到block最多(chain最长)的节点,把自己的

    chain换成较长的(权威的)chain;

    3. 块包含的内容示例:

    index就是这个块的序号,transactions是块内的实际内容,这里里面记录的是交易记录(可以有多条);

    previous_hash是上个块的哈希值,proof即证明,这个proof是用来挖矿用的(改操作称为工作量的证明),

    大意是通过上个块的proof拼这个块的proof,拼出来的字符串进行sha256算哈希值,算出来的十六进制数看前面有几个0,

    如果程序规定是4个0,且刚好算出来这个哈希值是4个0开头,那么就算对了,意思是找到了这个块的proof,挖到矿了,

    此时会给挖到矿的节点奖励一个比特币,然后把当前记录的内容(transactions)打包进块。

    block = {
        'index': 1,
        'timestamp': 1506057125.900785,
        'transactions': [
            {
                'sender': "8527147fe1f5426f9dd545de4b27ee00",
                'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
                'amount': 5,
            }
        ],
        'proof': 324984774000,
        'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
    }
    

    4. 状态

    节点运行后: 创建一个空白的块,块里面唯一有用的信息就是那个proof,要用来挖矿用的;

    此时,可以进行交易,即增加transactions的操作,比如一个账户(节点)给另一个账户转账。这些操作都会暂存起来,直到节点挖到矿了。

    挖到矿的节点会对暂存的内容进行打包(自身获得比特币奖励),比如把积攒起来的transactions写到一个块里面(暂存区会清空)。这个新的块的proof,就是刚才挖矿时算出来的那个proof

    5. 如何保证去中心化、一致性

    区块链的中心思想是去中心化,如果是一个去中心化的网络,如何才能让所有节点上的链(chain)都相同呢。其实就是通过注册节点,获取到网络上所有的节点,每次去查所有节点,找到链最长

    的那个,把自己的链替换了。

    其他:这个python实现太简单了,没有涉及交易(transactions)、验证等,需要找一篇更详细的实现研究一下。

  • 相关阅读:
    【HYSBZ】1588 营业额统计
    【HYSBZ】1503 郁闷的出纳员
    【ZOJ】3228 Searching the String
    【ZOJ】3494 BCD Code
    【HDU】1754 I Hate It
    【HDU】3247 Resource Archiver
    【POJ】3481 Double Queue
    EdgeCore初学习
    go mod常用命令 已经 常见问题
    GO语言内存操作指导—unsafe的使用
  • 原文地址:https://www.cnblogs.com/importsober/p/12890645.html
Copyright © 2011-2022 走看看