源自 用不到 50 行的 Python 代码构建最小的区块链 (英文原文:Let’s Build the Tiniest Blockchain ) ,但是文中的代码是基于python2的,python3环境下需要略做修改,修改后的代码如下:(建议初次接触区块链的同学,先阅读本文最后的参考文章)

import hashlib as hasher
import datetime as date class Block:
def __init__(self, index, timestamp, data, previous_hash):
self._index = index
self._timestamp = timestamp
self._data = data
self._previous_hash = previous_hash
self._hash = self.hash_block() @property
def hash(self):
return self._hash @property
def index(self):
return self._index @property
def data(self):
return self._data def hash_block(self):
sha = hasher.sha256()
temp = str(self._index) + str(self._timestamp) + str(self._data) + str(self._previous_hash)
sha.update(temp.encode("utf8"))
return sha.hexdigest() def create_genesis_block():
return Block(0, date.datetime.now(), "种子区块", "0") def next_block(last_block):
this_index = last_block.index + 1
this_timestamp = date.datetime.now()
this_data = "我是新区块 " + str(this_index)
this_hash = last_block.hash
return Block(this_index, this_timestamp, this_data, this_hash) block_chain = [create_genesis_block()]
previous_block = block_chain[0] num_of_blocks_to_add = 20 for i in range(0, num_of_blocks_to_add):
block_to_add = next_block(previous_block)
block_chain.append(block_to_add)
previous_block = block_to_add
print("Block #{} 已经加入区块链!".format(block_to_add.index))
print("Hash: {}".format(block_to_add.hash))
print("Data: {}\n".format(block_to_add.data))

  运行结果:

Block #1 已经加入区块链!
Hash: 403239f4c6fc4d83fb31c07d8c0b98d922e46fe6bcd8e3b05a70b46d5357a3ca
Data: 我是新区块 1 Block #2 已经加入区块链!
Hash: 4e4e233cf54479b221d9a78e9558e4d923fc554366556a783e88798aa58dcdec
Data: 我是新区块 2 Block #3 已经加入区块链!
Hash: 35eef8b63e4e264f34fc557e637a22b6ae804ab75219291ccbae8f0c240e7ae8
Data: 我是新区块 3 Block #4 已经加入区块链!
Hash: 61836d0c9c2b6c394db9ca77fbe2ad19daf63929f0c14e681ce3a3e9e87006e4
Data: 我是新区块 4 Block #5 已经加入区块链!
Hash: c4ed97efd2fb4d97232c048119780e08b7afd99746a4734bd3c91253ffed5ee8
Data: 我是新区块 5 Block #6 已经加入区块链!
Hash: b0f02cc59d9f3f9ec29080938765efaf5d93393632a2968d3026fbf2a02e7e33
Data: 我是新区块 6 Block #7 已经加入区块链!
Hash: 0d285a0f9e902f0fcbaaa657e7ea39d098cd614517a7a66567acb511e7aa2eb3
Data: 我是新区块 7 Block #8 已经加入区块链!
Hash: f461ac428043f328309da7cac33803206cea9912f0d4e8d8cf2786d21e5ff403
Data: 我是新区块 8 Block #9 已经加入区块链!
Hash: 136a6c3f4f10b35515a07d4d4849c13ceae8cbbddb512583ab10d32b73d90d08
Data: 我是新区块 9 Block #10 已经加入区块链!
Hash: 3da8f83f07745e1a955f5f55f75a8708453afb24b5d4686d7dc7658399563a82
Data: 我是新区块 10 Block #11 已经加入区块链!
Hash: c1320b1d9e73843c718a8d708cabe7546ecd7b196afa322bba6836f01d0a078d
Data: 我是新区块 11 Block #12 已经加入区块链!
Hash: 075265e7b007ac2c5c3c1b88bdb0b8553c6330c515f2f584dd355a3ed64e179a
Data: 我是新区块 12 Block #13 已经加入区块链!
Hash: 9d212c6a850e3bbd9fbb99e00f576a4c4896483e8110b80793dc0a711867a7d4
Data: 我是新区块 13 Block #14 已经加入区块链!
Hash: 97978b45405867ccf724e7f8498f6c69cc4dbf24adb41e95f35ca650cd79d987
Data: 我是新区块 14 Block #15 已经加入区块链!
Hash: 7c3e7ad8a9d8042de861bfbff6d3c2154b1ec23442ea0ee20a7b00cdf25a1164
Data: 我是新区块 15 Block #16 已经加入区块链!
Hash: bc4fbcd63e038674f18c83bc5460bdcc538c8b0f834019bf358eb6534f322e1a
Data: 我是新区块 16 Block #17 已经加入区块链!
Hash: 36688e8a3bd29f940b4528f460a92d0dc410fc14b6e2edfd834238c18c71dafa
Data: 我是新区块 17 Block #18 已经加入区块链!
Hash: 050a08c4137e05a0b90f842aea5534e5c8a80333e384eeeda5d5913849c741cd
Data: 我是新区块 18 Block #19 已经加入区块链!
Hash: c47c5707875d7dcf125b1a448b5cbe8fbe125614e48d87e14b7d2c853e1bc3fa
Data: 我是新区块 19 Block #20 已经加入区块链!
Hash: 4d7bef7ed5d4afff9b3eaf33219be49f33f32476ad21f1ab6c2d70635078461a
Data: 我是新区块 20

当然这只是最基本的“数据结构”级别的hello world,方便大家理解区块链的数据结构而已,真正区块链中的挖矿速度控制(10分钟1个块)、分叉处理(最先达到6个块的分叉胜出) 这些都没有考虑进去。

参考文章:

中本聪的论文(中文翻译)

阮一峰:区块链入门教程

最基本的区块链hello world(python3实现)的更多相关文章

  1. 用spring boot 2从零开始创建区块链

    区块链这么火的技术,大java怎能落后,所以有了本文,主要代码参考自 Learn Blockchains by Building One , 中文翻译:用Python从零开始创建区块链 . 一.区块链 ...

  2. Python创建一个简单的区块链

    区块链(Blockchain)是一种分布式账本(listributed ledger),它是一种仅供增加(append-only),内容不可变(immutable)的有序(ordered)链式数据结构 ...

  3. 用 Python 撸一个区块链

    本文翻译自 Daniel van Flymen 的文章 Learn Blockchains by Building One 略有删改.原文地址:https://hackernoon.com/learn ...

  4. 用Python从零开始创建区块链

    本文主要内容翻译自Learn Blockchains by Building One 本文原始链接,转载请注明出处. 作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一 ...

  5. 区块链(Blockchain)

    一 .什么是区块链? 区块链(Blockchain)是由节点参与的分布式数据库系统[1],它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger).它是比特币的一个重要概念,完整比特币区 ...

  6. 区块链是伟大的,比特币则不然。《FinTech,金融科技时代的来临》。3星。

    本书讲技术给金融业带来的变革和可能的趋势.作者认为区块链是伟大的发明,因为他可以让金融交易免费且实时地进行.比特币则可能会被其他区块链技术取代.书中有至少一半的内容涉及到了区块链和比特币.总体评价3星 ...

  7. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

  8. 区块链技术(一):Truffle开发入门

    以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只 ...

  9. 区块链Fabric技术在托管业务中的运用初探

    区块链Fabric技术在托管业务中的运用初探 什么是Fabric技术 HyperLedger是IBM.Intel等多家公司正开展的一个区块链项目,包含了Fabric.Iroha等多项技术,其中最为活跃 ...

随机推荐

  1. Ex 6_12 凸多边形的最优三角剖分..._第六次作业

    假设顶点的总数为n,从0到n-1. 从序号为0的顶点开始以逆时针方向排序,对于 令子问题A[i,j]为包含顶点i,i+1, . . . j的凸多边形的最小三角剖分代价,dist(i,j)为顶点i到顶点 ...

  2. Oracle 11g安装步骤以及Oracle11g创建表空间和用户,并授权

    Oracle 11g安装步骤详解 一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地 ...

  3. OCM_第十三天课程:Section6 —》数据库性能调优 _结果缓存 /多列数据信息采集统计/采集数据信息保持游标有效

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  4. liunx java环境搭建

    1.安装jdk apt install openjdk--jdk-headless //可以直接输入javac会有提示

  5. 模拟js中注册表单验证

    示例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  6. 调用write方法打印语句到浏览器

    1.document.write("我爱学习--喜欢学习");​  //   在浏览器中输出的结果为:我爱学习--喜欢学习 2.首先,声明一个变量. var str="h ...

  7. Chakra GC内存管理(未完)

    这一部分是我在网上找Chakra资料的时候偶然发现的zenhumany师傅在Hitcon2015上的议题<Microsoft Edge MemGC Internals>,感觉正好可以了解一 ...

  8. poj 1751 输出MST中新加入的边

    给出结点的坐标 以及已建好的边 要输出MST中加入的边(已建好的边就不用输出了)结点的编号从1开始注意这题只有一组数据 不能用多组输入 否则就超时(在这被坑惨了Orz) Sample Input 91 ...

  9. Nordic Collegiate Programming Contest NCPC 2017-Problem D-Distinctive Character

    题目大意:给你n(n<=1e5)个二进制串 (每个串位数不超过20),定义两个串的相似度为对应 位置上相同的个数. 让你构造一个二进制串,使这个串与所给的这些串的相似度的最小值最大. 思路:刚开 ...

  10. 手动部署 kubernetes 1.9 记录

    前言 目前 kubernetes 正式版本已经到1.10版本.因为前面有大佬(漠然)已经采完坑,所以自己也试着部署 kubernetes 1.9 体验下该版本的新特性.对于前面部署的 kubernet ...