主页 > imtoken官方app > 比特币疯了,区块链到底是什么鬼?
比特币疯了,区块链到底是什么鬼?
方法是将上一条记录的特征码一起编织成本条的特征码,例如:
lastHash:ca8d85b134922fe48d17bf36ceb38046;姓名:Jim;年龄:19
然后获取特征码:
from hashlib import md5
m = md5()
m.update(b"lastHash:ca8d85b134922fe48d17bf36ceb38046;name:Jim;age:19")
m.hexdigest()
# '82391695a3760b2de1c92d512b83cc14' 当前记录的特征码
这样就完成了记录直接链接
要体验一条记录是否被修改或连续比特币区块链通俗解释,只需要重新计算这条记录和它之前的记录的特征码。
当然,比特币,或者区块链的实际应用会更加复杂,比如字段、加密算法等。
实施区块链
接下来我们来实现一个比较完整的区块链
首先定义一个块类:
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()
def hash_block(self):
sha = hasher.sha256()
sha.update((str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash)).encode("utf-8"))
return sha.hexdigest()
接下来,区块链中第一个区块的特征值是如何计算的,它的前一个特征值是多少?
让我们定义一个方法来生成起始块:
def create_genesis_block():
# 手工创建第一个区块,其索引为 0,且随意取给紧前特征值 '0'
return Block(0, date.datetime.now(), "Genesis Block", "0")
然后,我们定义一个方法来生成一个新块:
def next_block(last_block):
this_index = last_block.index + 1
this_timestamp = date.datetime.now()
this_data = "Hey! I'm block " + str(this_index)
this_hash = last_block.hash
return Block(this_index, this_timestamp, this_data, this_hash)
现在所有的基础工作都完成了,我们建立一个区块数据库比特币区块链通俗解释,区块链,并计算第一个区块
blockchain = [create_genesis_block()]
最后我们模拟一个生成块的过程:
# 设置产生区块的个数
num_of_blocks_to_add = 20
# 产生区块并加入区块链
for i in range(0, num_of_blocks_to_add):
previous_block = blockchain[-1]
block_to_add = next_block(previous_block)
blockchain.append(block_to_add)
# 发布当前区块的信息
print("Block #{} has been added to the blockchain!".format(block_to_add.index))
print("Hash: {}\n".format(block_to_add.hash))
运行后,我们可以得到如下结果:
Block #1 has been added to the blockchain!
Hash: 788ec79310315740f7df959e03c8788f102c3e02d6b6ce6488ed7b7d04cc3e01
Block #2 has been added to the blockchain!
Hash: 5b6c6e0be9659ae359356015ffe9ba9e4645f181d848bfd5127dd24d29f1747c
Block #3 has been added to the blockchain!
Hash: c40e3accb5de25728770754f24d7504cc72b8138d465f5d8f1b84ad149c9b59c
Block #4 has been added to the blockchain!
Hash: 9a118b7c8b90aaab2fe6a59dd84224adb90ba4af8aaa03bf4c9b08799cc81d9b
Block #5 has been added to the blockchain!
Hash: f8fbd5b6684d926fb96dd36b89f61db3c868...<省略>...
显示的结果是区块链上的信息
在实践中,它运行在分布式环境中,需要考虑更多的因素,例如调度、合并和选举。加密算法也需要更加安全。比如椭圆曲线加密算法(ECC),常用来加强区块链的安全性和可靠性,但最基本的实现逻辑是一样的。
应用
有句话很伤感:
我明白了很多道理,但我的生活仍然很糟糕
虽然我对区块链的基本概念和实现有一个肤浅的了解,但是有什么用呢?
既不能获取和改变比特币(也不需要改变它),也不能创建区块链应用程序(尽管并非不可能)
但是这个想法可以应用在很多地方
这里我举一个我实际工作的例子:
在一个项目上,需要实现一个审计日志的功能,基本要求是连续的、防篡改的
如果不知道区块链的算法,可能需要想了很久,然后想出一个蹩脚的办法,比如用一个额外的记录来控制日志记录,或者记录关联关系(即以前做过)
现在,只需在记录中添加两个字段:上一条记录的签名和当前签名
实现另一种方法,根据指定字段计算特征码
为了方便识别,加个测试方法,就好了
除了这些应用程序之外,您还能想到哪些其他应用程序?欢迎留言
总结
截至发稿时(2021年1月9日),比特币价格接近27万,如此火爆(并不总是那么火爆,理财有风险,投资需谨慎),其内在原理就是这么简单
基于加密算法,可以完成承载海量信息的数据货币世界。这就是所谓的更简单、更有效、更稳定的解释。
不管怎样,总有它内在的基本原理和理论支持它。只有理解和掌握了它的内在原理,我们才能更好地理解一个事物。我们只需要更加好奇和耐心。
参考
PS:在公众号回复“Python”进入Python新手学习交流群,一起来
老规矩,兄弟们,你们还记得吗,点击右下角的“看”,如果觉得文章内容不错,记得分享到朋友圈让更多人知道!
【密码获取方式】
识别文末二维码,回复:210112