大势所趋——区块链(Python代码实现)

这篇具有很好参考价值的文章主要介绍了大势所趋——区块链(Python代码实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1 区块链和人工智能


人工智能和区块链诞生至今已经有了十几年,当这些技术出现时,人们都说他们会改变世界,但至今为止,这两项技术对现实的影响依然有限。从技术上看人工智能的原理其实是从大量数据中寻找规律或模式,但区块链的技术原理是什么呢?在我看来区块链的原理一直处于云里雾里,有很多近乎玄学的解释将其笼罩,有人从经济学解释,有人从社会学解释,从”人文“角度解释的区块链总是过于夸大其词,这些说法中往往又包含不良用心。

区块链的设计思想非常伟大,它集合了很多智慧的结晶,例如加密算法,分布式算法,心理学,经济学等,由于它跨越领域太多,这也是它特别“玄学”的原因

其实区块链和人工智能一样,从技术的角度看去,他们都有着极为美妙的设计思想,这些设计的美妙就像唐诗宋词,就像毕加索的话,如果我们没有去欣赏它的美,那岂不可惜。相比于人工智能,我认为区块链在技术上更容易被普通人触碰,因为前者需要大量的数据和算力,而后者只要我们掌握其技术原理就能参与其中,不需要太高的硬件门槛。

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

2 区块链的相关概念及流程


2.1 官方定义

区块链的官方定义是:一个分布式账本,一种通过去中心化、去信任的方式集体维护一个可靠数据库的技术方案。那么对于圈外人该如何理解呢?以下我会详细描述一个区块链的产生过程和实现意义,从而给大家构建出一个清晰的区块链概念。

在**大势所趋——区块链**这篇文章中我讲解了一些基本概念。

2.2 普通区块&创世区块

我们以btc为例:“区块链”,顾名思义,就是由一个个区块依次连接起来组成的链条,可以类比为一条无限长度的直线铁链,每个铁环就是一个区块。那么区块的内容应该是什么呢?**区块狭义上是有两种的,一个是普通区块,一个就是创世区块。**创世区块就是一项区块链项目中的第一个区块,由于个人水平有限,对创世区块没有做过详细研究,但是根据我的了解,创世区块应该是具备与普通区块相似结构的,但会肯定会加入一些创始人想说的东西,并且在有些项目中可能会多一条记录,就是coin的发行量,例如swtc的6000亿数目就是写在创世区块之中的,一旦发行,无法修改。

那么,一个普通区块中到底有什么?

(1)index:就是从0-n依次产生的数字,可以称之为链高度。

(2)hash:一个长度为256位随机数,是这个区块的唯一编号。

(3)previous hash:上一个区块的hash,一个普通区块有且仅有一个previous hash,这就是区块链之所以称为链的原因,就是这么一环套一环链接而成的。

(4)tempstamp:用于记录该区块诞生的时间。

(5)difficulty:直观体现创造该区块的难度。

(6)nonce:随机数,用于产生下一个区块。

上述的都存在区块头中。

(7)data:存储的交易记录。只有这个存在区块体中。

2.3  区块的工作流程

(1)如果A要和B达成一笔交易,比如A转给B一个btc,B给A打10w的RMB。A首先将自己的btc来源信息、交易人等发送给B,同时还要拷贝一份发到全网。什么?这样还有隐私可言吗?当然,聪明的中本聪当然不会犯这么低级的错误。在区块链中,每个交易个体(也可以理解为每个网络节点)都会有一对公钥和私钥,公钥相当于一个“收款地址”,而私钥是一个表明自己身份的256位的数字,目前一般是用sha265来生成的,这样,别人并不知道交易的双方是谁。发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私钥对摘要进行加密,加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。

(2)那么此时,这笔交易是否就完成了呢?如果这就算完成了,那跟A直接用包裹装10w现金快递给B有什么区别呢?此时,全网的矿工都会得到这个交易记录,那么全网的矿工都会为了若干奖励开始创建区块的工作,矿工会利用hash函数生成一个256位的唯一编号赋予这个区块,但是这个编号并不是简简单单随便生成的。编号是根据区块的具体内容如交易内容、nonce等唯一确定的,换句话说,两块内容相同的区块所对应的编号一定是唯一的。可是你会问:这又怎么了?并不难啊。错!中本聪为了控制区块的生成时间,使区块的生成速率满足全网的每10分钟一个的标准,制定了严格的区块生成校验规则,也就是说,能不能生成一个成功的区块要看你的编号是否符合这个规则。例如:生成编号中的前n位必须为‘0’。

由于区块的交易内容是无法修改的,因此矿工们只能通过修改nonce去不断尝试这个函数,直到生成了一个成功的区块为止。如果当区块平均生成时间变快或者变慢,那么系统会对区块校验规则进行相应的调整,从而使平均的生成时间能够控制在规定范围。

如果一个矿工完成了一个区块,会立刻告知其他矿工,如果其他矿工此时没有完成新的区块生成,则会停下手头的工作,对区块进行验证,需要确认的信息主要有如下几点:

1).区块的编号有效;这个只要将区块放入哈希函数中,看产生的编号是否和该区块中的编号一致即可。

2).区块的前一个区块有效;之前提过,区块是一个串联的,每一个普通区块都会记载前一个区块的编号,这需要其他矿工对比当前的区块链的最后一个区块,看是否相同。

3).交易清单有效;就是说要验证A到底有没有这一个btc可以给B。在区块链的交易信息中,会记录交易中所有btc的前世今生,区块链可以做到追本溯源,因此每一个btc在哪里,为什么在这里都可以一目了然,所以这点也没问题。

当验证完一个全新的区块后,全网就会认为这个区块有效,会将它添加到现有的区块链末端,同时结束针对该区块的挖矿工作,投入到下一个挖矿周期中。

(3)但是不难想象,这样的机制是存在冲突的隐患的,就是这么巧,两个矿工同时制作了一个正确的区块,那么此时不必二选一,可以将原来线性的区块链改成树状:

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

但是这样会导致未来在A、B后都会增加相应的区块,那么谁长谁将作为主链延伸下去,另一个也许会渐渐被遗忘,除非哪天它变得更长。

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

3 区块链Python代码实现


话不多说,我们看看如何用python代码把最基本的区块链原理编写出来。首先我们看区块链的数据结构,它包含三部分信息,一是用于标志自己的id,它是一个整数,第二个是用于记录前一个区块的id,也是一个整数,由于区块用于记录信息,因此它还包含一个字段,我们用history来表示,这个字段用来记录当前发生了的信息,区块链最大的作用就是让这段信息可验证而且不可更改,我们先看数据结构的定义,先创建文件block.:

class Block:

def init(self):

self.id = None

self.history = None

self.parent_id = None

接下来我们看看区块如何行成”链“,同时如何记录信息。假设我们想要记录这么一个事件:张三想跟李四用一百块买三条鱼,李四收到一百块后给了张三三条鱼”,那么我们可以使用下面代码用区块链进行记录,创建main.py,然后给出如下代码:

from block import *

block_A = Block()

block_A.id = 1

block_A.history = ‘张三想要三条鱼’

block_B = Block()

block_B.id = 2

block_B.parent_id = block_A.id

block_B.history = ‘张三跟李四买三条鱼’

block_C = Block()

block_C.id = 3

block_C.parent_id = block_B.id

block_C.history = ‘张三给李四一百块’

block_D = Block()

block_D.id = 3

block_D.parent_id = block_B.id

block_D.history = ‘李四收到张三一百块’

block_E = Block()

block_E.id = 3

block_E.parent_id = block_B.id

block_E.history = ‘李四给张三三条鱼’

从代码上看不同区块之间通过parent_id形成了前后连接关系,这就是区块链中的“链”,但现在还有一个严重问题,那就是信息可以更改,假设张三想来着,他把block_E里面的history改成李四给张三两条鱼,然后找李四算账那怎办,或者李四想赖账,把block_D中的history改成“李四收到张三五十块”,然后又找张三要钱,那怎么办。

为了确保信息不被更改,我们需要对每个区块的内容进行加密或者哈希,因此上面代码修改如下:

这里需要一些知识储备,我已经总结好了:学习区块链的几个小知识(Python实现)

from block import *

import hashlib

import json

block_A = Block()

block_A.id = 1

block_A.history = ‘张三想要三条鱼’

block_B = Block()

block_B.id = 2

block_B.parent_id = block_A.id

block_B.history = ‘张三跟李四买三条鱼’

block_B.parent_hash = hashlib.sha256(json.dumps(block_A.dict).encode(‘utf-8’)).hexdigest()

block_C = Block()

block_C.id = 3

block_C.parent_id = block_B.id
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)文章来源地址https://www.toymoban.com/news/detail-851306.html

1c05e862fe4e9.png)

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

大势所趋——区块链(Python代码实现),程序员,区块链,python,开发语言

到了这里,关于大势所趋——区块链(Python代码实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大势所趋之下的nft拍卖,未来艺术品的新赋能

    拍卖,顾名思义就是在规定的时间和场所,按照一定的章程和规则,将要拍卖的货物向买主进行展示,公开叫价竞购,最后由拍卖人把货物卖给出价最高的买主的一种交易方式。传统的拍卖一般都是实体物品,随着nft的发展,拍卖从传统的实物衍生到了nft数字艺术,也给疫情

    2024年01月16日
    浏览(45)
  • 【Web3.0大势所趋】我看到了互联网未来的模样

    Web3.0 是一个越来越受到关注的话题,它被认为将会带来天翻地覆的变化。本文我们一起来谈谈 Web3.0 的概念、特点和优势,并探讨它为什么如此重要和具有革命性的。 Web3.0: 是下一代互联网,也被称为分布式互联网或智能互联网。它是基于区块链技术和智能合约的互联网,具

    2023年04月24日
    浏览(41)
  • 程序员如何实现财富自由系列之:参与区块链技术的开发和投资

    作者:禅与计算机程序设计艺术 随着各行各业的人工智能技术应用越来越普及,“区块链”这个火热词汇在近几年已经掀起了一股新的热潮。 区块链(Blockchain)是一个分布式数据库,它通过对数据进行记录、验证、存储、防篡改等方式确保数据的真实性、完整性和有效性。

    2024年02月07日
    浏览(58)
  • Python制作爱心跳动代码,你也是天才程序员

    前端时间电视剧《点燃我,温暖你》正在热播中,里面的天才程序员李峋制作的爱心跳动代码是不是震撼了你的心,今天我们用Python来尝试一下制作爱心跳动代码吧! 怎么说呢,用这个表白也可以的,万一她也看这个剧呢,万一就成了呢 哈哈 冲啊,兄弟们 okok 话不多说,现

    2024年02月09日
    浏览(64)
  • python程序员的浪漫-千行生日祝福代码

    📆 Date: 2022年12月16日修改 🎬 Author: 小 y 同 学 📃 Classify: 花里胡哨区 🔖 Language : Python 🍀 花哨简介     使用python的turtle库进行绘图,先是绘制“一只大熊”送上祝福,随后绘制三层蛋糕送上浪漫!近千行的生日祝福代码还不赶快去试试!     小提示:python3的tu

    2024年02月05日
    浏览(55)
  • Python编程 圣诞树教程 (附代码)程序员的浪漫

    作者简介:一名云计算人员、每天分享Python和云计算的学习经验、和学习笔记。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录  前言 一.python 做圣诞树 1.turtle库 2.python函数的定义规则 2.引入库 3.定义画彩灯函数  4.定义画圣诞树的函数  5.定义

    2024年02月03日
    浏览(52)
  • Python程序员Visual Studio Code指南3 编辑代码

    Visual Studio Code提供了许多适用于所有编程语言的标准编辑功能。 快速修复 代码补全 定义 声明 格式化 语法 重构 代码片段 这些内置的编辑功能减少了编辑代码所需的手动任务和键入次数,从而节省了时间。 Python扩展扩展了代码编辑功能。有了Python扩展,导入库只需极少的工

    2024年02月12日
    浏览(55)
  • 代码战场:用Python射击游戏开启程序员的创造之旅

    大家好,我是辣条哥! 昨天在家点开好久没打开的游戏菜单,突然看到好久没有玩过的某F,玩了几把发现时代是真的变了! 于是今天辣条有感而发写了这么一个简陋的射击类小游戏在这个项目中,我们将使用Python编写一个射击类游戏。这个游戏不仅具有高难度,还可以进行

    2024年02月11日
    浏览(45)
  • 程序员如何通过创作图文项目实现自己的代码价值

    1.程序员 2.图文赛道创业者 毫无疑问,这是一个优质内容的时代,从某种意义上说,优质内容==Money。优质内容的形式包含很多,在头条的定义中包括:纯文字(糗事百科,头条),纯图片(图虫),视频(短:抖音,长:西瓜),音乐(汽水),直播(火山),其中在抖音中

    2024年02月02日
    浏览(59)
  • C#实现简单的心形表白代码<这是属于程序员的浪漫!>

    C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包