所谓区块链,信息化的族谱而已——简单区块链python代码示例

   日期:2020-04-30     浏览:122    评论:0    
核心提示:区块链简介。python区块链代码示例:区块链难篡改,但信息冗余。区块链的链式结构,和过去的族谱很像python
欢迎关注,敬请点赞!

所谓区块链,信息化的族谱而已——简单区块链python代码示例

    • 何为区块链?
      • 区块的特点:
    • 传统的族谱,祖先的区块链
      • 链式结构组成
      • 起源块(创世区块)
    • python区块链代码示例
    • 总结

何为区块链?


区块链是一个信息技术领域的术语。从本质上讲,它是一个去中心化的共享数据库,信息会通过点对点传输与加密的形式产生数据块,存储于其中的数据或信息,具有“不可伪造”、“全程留痕”、“可以追溯”、“公开透明”、“集体维护”等特征。

区块的特点:

  • data很难篡改,除非控制整个区块链网络50%以上的分布式数据库,才能修改。
  • 区块越多,传播越广泛,修改整条链需要的算力CPU/GPU越多。
  • 安全的代价,非常冗余。

传统的族谱,祖先的区块链

返回顶部

链式结构组成

【拿历史上最知名的家族——孔家为例,让梨的孔融是孔子20世孙,民国四大家族的孔祥熙是孔子75世孙】
(index)【序号】——相当于族谱中的世代,孔祥熙是孔子75世孙
(timestamp)【时间戳】——相当于生日,1880年9月11日
(hash)【加密信息】——相当于更新后的族谱
(pre-hash)【以前的加密信息】——相当于以前的旧族谱
(Data)【交易数据】——相当于记账或日记信息,比如满月宴请客XX桌、来了XX客人、收了XX礼金……

起源块(创世区块)

起源块,一个王朝的太(高)祖,它是一个特殊的块,没有previous_hash。
【比特币创世区块】记录的信息(Data):“The Times 03/Jan/2009 Chancellor on brink of secondbailout for banks.【2009年1月3日,财政大臣正处于实施第二轮银行紧急援助的边缘。】”

python区块链代码示例

返回顶部

import hashlib  # 导入哈希(散列)加密模块
import datetime as dtime  # 导入时间模块


class Block:  # 定义一个区块类
    # index(排行)、timestamp(生日)、data(大胖小子/贴心小棉袄)、previous_hash(相当于祖先信息)以及加密信息摘要
    def __init__(self, index, timestamp, data, previous_hash):
        self.index = index
        self.timestamp = timestamp  # 由竞争机制(挖矿、解方程)获得记账权的数据库(节点),来添加时间戳
        # data可以是想记录的任意事情(记账、笔记、合同),一旦后面追加了新的区块,就成了新块的previous(历史、经历)一部分
        self.data = data
        self.previous_hash = previous_hash
        self.hash = self.hash_block()

    def hash_block(self):
        sha = hashlib.sha256()  # sha256加密算法接口的一种
        # 对索引、时间戳、信息和前一区块的哈希值进行加密
        sha.update(f"{self.index}{self.timestamp}{self.data}{self.previous_hash}".encode('utf-8'))
        return sha.hexdigest()  # 返回16进制的信息摘要

# 第一个块的函数,或者说是起源块(创世区块)。
def create_gensis_block():
    return Block(0, dtime.datetime.now(), "1957年,约翰·巴科斯(John Backus)创建了是全世界第一套高阶语言:FORTRAN。", "0")


# 添加后面的区块的函数
# 模拟要添加的信息
data_list = ['1964年,约翰·凯梅尼(John Kemeny)和托马斯·库尔茨(Thomas Kurtz)共同开发了BASIC程序语言。',
             '1970年,尼克劳斯·维尔特(Niklaus Wirth)发明了Pascal。',
             '1972年,丹尼斯·里奇(Dennis MacAlistair Ritchie)制作带有花括号的C。',
             '1983年,比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)发明了C++。',
             '1991年,吉多·范罗苏姆(Guido van Rossum)发明了Python。',
             '1995年,布兰登·艾克(Brendan Eich)设计了JavaScript(原名LiveScript)。',
             '1996年,詹姆斯·高斯林(James Gosling)发明了Java。']


def next_block(pre_block, n):  # 前面块的区块(索引和哈希)作为参数
    this_index = pre_block.index + 1  # 前面区块索引+1
    this_timestamp = dtime.datetime.now()  # 当前时间戳,也可以time.time()
    this_data = data_list[n]  # 需要记录的相关信息
    this_hash = pre_block.hash  # 前面块的编码信息
    return Block(this_index, this_timestamp, this_data, this_hash)


# 测试代码
pre_block = create_gensis_block()  # 创世区块
str_gensis = f"{pre_block.index}---{pre_block.timestamp}---{pre_block.data}---{pre_block.hash}"
print(str_gensis)
nums = len(data_list)

for i in range(nums):
    add_block = next_block(pre_block, i)  # 增加后续区块
    pre_block = add_block
    str_add = f"{pre_block.index}---{pre_block.timestamp}---{pre_block.data}---{pre_block.hash}"
    print(str_add)

【运行结果】

0---2020-04-29 16:51:55.328838---1957年,约翰·巴科斯(John Backus)创建了是全世界第一套高阶语言:FORTRAN。---eee2a1bc47f2de44f14bdb37a40ae8806b16ac99670bc3bcc9d76c274a79f3a8
1---2020-04-29 16:51:55.329830---1964年,约翰·凯梅尼(John Kemeny)和托马斯·库尔茨(Thomas Kurtz)共同开发了BASIC程序语言。---3b8e76002244de23bd8636111a52c5500ba791a09c7762fb654284ce59557a96
2---2020-04-29 16:51:55.329830---1970年,尼克劳斯·维尔特(Niklaus Wirth)发明了Pascal。---419bd1cfd54544d8b4d2b022cad3619916ecbe9f1ef423e8cfdc9dc9f7e40466
3---2020-04-29 16:51:55.329830---1972年,丹尼斯·里奇(Dennis MacAlistair Ritchie)制作带有花括号的C。---02fc182ed17189db671d516f2327e0803d51f675e0df095fa6a2599647932f13
4---2020-04-29 16:51:55.329830---1983年,比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)发明了C++。---9f2b6646c68afbebaa98d8dcbfca999ac840e6d4757a2187828b734baea48d3b
5---2020-04-29 16:51:55.329830---1991年,吉多·范罗苏姆(Guido van Rossum)发明了Python。---cb71fe7a95a49adddac762f266b2dbb4a82d381ea14dfcd7aa83fff7020b072a
6---2020-04-29 16:51:55.329830---1995年,布兰登·艾克(Brendan Eich)设计了JavaScript(原名LiveScript)。---236dd1f06440ca95e0f8921f753ef708b1ff3acbbf2520792252fe88068c3e43
7---2020-04-29 16:51:55.329830---1996年,詹姆斯·高斯林(James Gosling)发明了Java。---60538287422bccf76fca17bf78b7fb72a096384acf6137103183f65cf7bb0915

总结

  1. 区块链难篡改,但信息冗余。
  2. 区块链的链式结构,和过去的族谱很像。

欢迎关注,敬请点赞!
返回顶部

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服