区块链、比特币简易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)、验证等,需要找一篇更详细的实现研究一下。

上一篇:Proof Key for Code Exchange by OAuth Public Clients


下一篇:[易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]