区块链技术因为比特币的火爆而广受关注,我们这里用 python 代码来聊一下区块链技术:
区块链实现原理的简易描述
区块链技术做为一种数字记账技术,其核心是将保存了交易数据的区块,以加密的方式,按时间的顺序链式记录。区块链本身就是一个公共的数据库,系统将新诞生的业务数据存储在被称为区块的容器之中,并将该区块添加到已有区块组成的链条之中。有点像贪吃蛇,吃的区块越多,蛇的身体越长;在比特币的应用场景下,这些数据是一组转账交易记录。在共享单车的应用场景下,这些数据就可以是借车还车的交易记录。
区块链的简易实现代码
# -*- coding:utf-8 -*- import hashlib from datetime import datetime # 定义区块类 class Block(object): def __init__(self, index, time, data, pre_hash): self.index = index self.time = time self.data = data self.pre_hash = pre_hash self.hash = self.hash_block() def hash_block(self): sha = hashlib.sha256() sha.update("{}{}{}{}".format(self.index,self.time,self.data,self.pre_hash)) return sha.hexdigest() # 创建初始区块 def head_block_create(): return Block(0,datetime.now(),"Head Block","0") # 创建新的区块 def new_block(last_block): _index = last_block.index + 1 _time = datetime.now() _data = "block {}".format(_index) _hash = last_block.hash return Block(_index,_time,_data,_hash) blockchain = [ head_block_create()] pre_block = blockchain[0] print "Block id:0 Hash value:{}".format(blockchain[0].hash) # 待测新增区块的数量 num_block = 10 for i in range(num_block): one_block = new_block(pre_block) blockchain.append(one_block) pre_block = one_block print "Block id:{} Hash value:{}".format(one_block.index, one_block.hash) |
在上述的代码中,区块链核心存储的数据结构是列表,通过 new_block()产生的新区块,被不断的增添到区块链的尾部,每个区块的 Hash 值中包含该区块所有的数据信息,在计算该 Hash 值的过程中需引用前一区块的 Hash 值,故而实现了防篡改。而区块链数据库的最大价值就是这种高度防篡改的可信计算。在我们的简易区块链实现中成功体现了这一点。在商用级的区块链应用中,新建区块的过程被称为智能合约,区块链就是通过智能合约不断的壮大。
以下是代码的运行结果,在不同的时间下,运行结果不同。
运行结果
Block id:0 Hash value:b04fc0d7ae7d5021da4e49cdbebaf3bc1e27d926a905cc365a160aaf5136692b Block id:1 Hash value:3f6b49529a0333b359d49ddf6f91d7943f1a551d1d3374daa5510ad6b1eed517 Block id:2 Hash value:7089817515c5c9ef0ec0a4c50912b7c268345b9441aa870373949c3b2f804204 Block id:3 Hash value:28f20d2ea8ae5fef85acd89ad10370022930438a5329fa54eaf8bb8994c1cddc Block id:4 Hash value:e033054800d81e60571611cf7fe845faefb5d0779b0604b931c17004aaea7ca1 Block id:5 Hash value:7428e1ab5a1bda7cd6fc62a210e9c1d4c807a9390b2b3726a304bfd120f3ea74 Block id:6 Hash value:0770614e40da99f52910946fcc8703565f6a13b40b88b272b66847fbf8efb38c Block id:7 Hash value:2c2940adb46c77daefe6e5415d1cb1db991e9337e8fca763855d889baa5133aa Block id:8 Hash value:e09d2e1183c3d7bb123f207c25ef9bdd387b2baad183730d62fb49811e0493e5 Block id:9 Hash value:b35deb22f71b0f845cf0ccdf4f999437bd78303e4ba5a09e633e2c1d14fd652c Block id:10 Hash value:c63c5fbee68db81e40fdae2973c35b7e9556e9bbf2fd0737df3f145634f7e557 |
版权声明:51Testing软件测试网原创出品,未经明确的书面许可,任何人或单位不得对本文进行复制、转载或镜像,否则将追究法律责任。