精华内容
下载资源
问答
  • 本文介绍了10个最流行的Python区块链项并提供了相应的源代码下载地址。1、web3.py - 以太坊的Python开发接口web3.py是访问以太坊区块链及相关生态的Python接口,可以视为web3.js的Python版本的实现,它需要Python 3....

    Python不是主流的区块链底层平台开发语言,但是在DApp开发、区块链仿真与数据分析、智能合约安全分析等领域,Python依然是不错的选择。本文介绍了10个最流行的Python区块链项并提供了相应的源代码下载地址。

    1、web3.py - 以太坊的Python开发接口

    web3.py是访问以太坊区块链及相关生态的Python接口,可以视为web3.js的Python版本的实现,它需要Python 3.6+运行环境。

    2、mythril - 以太坊智能合约安全分析工具

    Mythril是以太坊虚拟机字节码的安全分析工具,它支持EVM兼容区块链的智能合约的安全分析,例如以太坊、hedera、quorum、vechain、roostock、tron等。

    3、Python-blockchain-sim - 适合学习与科研的仿真区块链

    使用Python开发一个多节点的仿真区块链,并基于该仿真区块链网络开发一个去中心化的数据分享应用。 适合进行区块链原理性研究,或者在自己的笔记本上仿真区块链网络并进行研究性实验,例如毕业设计项目或课题研究。本项目代码完整的教程请访问博客Python仿真区块链。

    4、SimpleCoin - 仿比特币区块链

    一个简单的仿比特币的区块链实现,采用Python开发。项目的目的是创建一种可用的区块链货币,并且尽可能的简单,因此可以用于教学目的。

    5、CrackCoin - 无链数字货币的PoC实现

    6、cert-issuer - 基于区块链的毕业证书签发与验证

    cert-issuer是一个基于比特币或以太坊区块链签发毕业证书的项目,采用Python实现。利用cert-issuer,签发机构通过向区块链提交一个包含证书哈希的交易实现毕业证书的签发,并利用该链上哈希实现毕业证书的验证。

    7、Fabric-sdk-py - 超级账本Fabric区块链的Python开发包

    Fabric-SDK-Py 是Hyperledger Fabric区块链的Python SDK,目前支持Fabric 1.4.x。

    8、octopus

    octopus是一个用于webassembly模块以及区块链智能合约的安全分析工具,其目的是提供一个分析闭源的webassembly模块以及智能合约字节码的简单方法以便更深入的了解这些WASM模块或智能合约的内部行为。

    9、python-bitcoin-blockchain-parser

    Python-bitcoin-blockchain-parser是一个python 3的比特币区块链原始数据解析器。它可以监测输出类型以及输出中的地址、解析比特币脚本、支持segwit、支持区块排序解析。

    10、Orbit

    Orbit是一个区块链交易调查工具,它通过递归地抓取交易历史来探索区块链网络,然后将数据渲染为图来展示源、目的以及可疑的连接。

    展开全文
  • 本文介绍了10个最流行的Python区块链项并提供了相应的源代码下载地址。1、web3.py - 以太坊的Python开发接口web3.py是访问以太坊区块链及相关生态的Python接口,可以视为web3.js的Python版本的实现,它需要Python 3....

    Python不是主流的区块链底层平台开发语言,但是在DApp开发、区块链仿真与数据分析、智能合约安全分析等领域,Python依然是不错的选择。本文介绍了10个最流行的Python区块链项并提供了相应的源代码下载地址。

    1、web3.py - 以太坊的Python开发接口

    web3.py是访问以太坊区块链及相关生态的Python接口,可以视为web3.js的Python版本的实现,它需要Python 3.6+运行环境。

    2、mythril - 以太坊智能合约安全分析工具

    Mythril是以太坊虚拟机字节码的安全分析工具,它支持EVM兼容区块链的智能合约的安全分析,例如以太坊、hedera、quorum、vechain、roostock、tron等。

    3、Python-blockchain-sim - 适合学习与科研的仿真区块链

    使用Python开发一个多节点的仿真区块链,并基于该仿真区块链网络开发一个去中心化的数据分享应用。 适合进行区块链原理性研究,或者在自己的笔记本上仿真区块链网络并进行研究性实验,例如毕业设计项目或课题研究。本项目代码完整的教程请访问博客Python仿真区块链。

    4、SimpleCoin - 仿比特币区块链

    一个简单的仿比特币的区块链实现,采用Python开发。项目的目的是创建一种可用的区块链货币,并且尽可能的简单,因此可以用于教学目的。

    5、CrackCoin - 无链数字货币的PoC实现

    6、cert-issuer - 基于区块链的毕业证书签发与验证

    cert-issuer是一个基于比特币或以太坊区块链签发毕业证书的项目,采用Python实现。利用cert-issuer,签发机构通过向区块链提交一个包含证书哈希的交易实现毕业证书的签发,并利用该链上哈希实现毕业证书的验证。

    7、Fabric-sdk-py - 超级账本Fabric区块链的Python开发包

    Fabric-SDK-Py 是Hyperledger Fabric区块链的Python SDK,目前支持Fabric 1.4.x。

    8、octopus

    octopus是一个用于webassembly模块以及区块链智能合约的安全分析工具,其目的是提供一个分析闭源的webassembly模块以及智能合约字节码的简单方法以便更深入的了解这些WASM模块或智能合约的内部行为。

    9、python-bitcoin-blockchain-parser

    Python-bitcoin-blockchain-parser是一个python 3的比特币区块链原始数据解析器。它可以监测输出类型以及输出中的地址、解析比特币脚本、支持segwit、支持区块排序解析。

    10、Orbit

    Orbit是一个区块链交易调查工具,它通过递归地抓取交易历史来探索区块链网络,然后将数据渲染为图来展示源、目的以及可疑的连接。

    展开全文
  • Python区块链终极指南:第1部分Python是目前最流行,功能最强大的语言之一。它不仅对初学者极为友好,而且在许多不同领域也发现了应用。实际上,根据IEEE的一项调查,Python恰好是2017年最...

    “Python是一种具有动态语义的解释性,面向对象的高级编程语言。它的高级内置数据结构与动态类型和动态绑定相结合,使其对于快速应用程序开发以及用作将现有组件连接在一起的脚本或粘合语言非常有吸引力。”

    Python区块链终极指南:第1部分

    Python是目前最流行,功能最强大的语言之一。它不仅对初学者极为友好,而且在许多不同领域也发现了应用。实际上,根据IEEE的一项调查,Python恰好是2017年最受欢迎的语言。

    image20.jpg

    Python的起源

    荷兰程序员Guido van Rossum于1991年创建了Python。Python基于简单的哲学:简约和极简主义。他们将简单性整合到语言中的一种比较引人注目的方法是使用空格来表示代码块,而不是大括号或关键字。

    让我们看看一个简单的“ hello world”程序,这意味着什么。

    打印('Hello,world!')

    是的,就是这样!

    该语言的名称源自著名的英国喜剧演员Monty Python。该语言的核心理念总结在“ Python的禅宗”文档中:

    Trial-728x90.png

    美丽胜于丑陋

    显式胜于隐式

    简单胜于复杂

    复杂胜于复杂

    可读性计数

    Python的核心是具有广泛库的面向对象 的高级编程语言。让我们看一看这些术语的含义。

    面向对象编程

    是一种面向对象的编程(OOP)语言,而不是面向过程的语言。诸如C之类的面向过程的语言利用了程序,其中有一系列作用于内存的指令。

    另一方面,OOP允许创建一个称为“类”的蓝图,从中可以生成可以相互交互的对象。这些对象执行程序。

    现在,OOP有四个支柱:封装形式

    抽象化

    多态性

    传承

    image8-1.png

    封装形式

    封装是将数据和功能包装在一个单元中的想法。这个想法是隐藏对象的初始状态,并将所有内容绑定在一个实体包中。

    抽象化

    抽象意味着用户可以使用该程序而不必担心其背后的复杂性。

    想想一辆车。

    开车时,您所关心的就是以不打任何其他方式的方式将钥匙插入并操纵车辆。您不必担心引擎如何工作以及点火装置如何燃烧燃料。

    遗产

    继承是OOP的最重要属性之一。

    继承允许对象或类基于另一个对象或类并保留其某些实现。在大多数基于类的面向对象的语言中,通过继承创建的对象将获取父对象的大多数属性和行为

    多态性

    多态是一种属性,语言操作员可以通过该属性拥有多个属性。最著名的例子是“ +”。它不仅用作数学加法运算符,而且还可以用于将两个字符串组合为一个字符串。这称为串联。

    例如。如果我们添加两个字符串“ Block” +“ Geeks”,则结果将为“ BlockGeeks”。

    低级别与高级

    程序的级别取决于它与计算机的交互程度。

    低级语言

    低级语言是与机器相关的语言,它们直接与计算机交互。请记住,计算机只能理解0和1形式的指令。这就是为什么这些语言通过二进制表示法利用这些信号直接与计算机进行交互的原因。

    正是由于这个原因,对于初学者来说,低级语言也非常难以学习,这就是为什么它们不如高阶语言流行的原因。

    汇编语言是低级语言的示例。

    高级语言

    另一方面,高级语言是与机器无关的编程语言,易于编写,阅读,编辑和理解。

    因此,尽管它们可能不会直接与机器交互并需要通过编译器,但它们却非常灵活且对初学者友好。

    高级语言的示例是Python,Java,.Net,Pascal,COBOL,C ++,C,C#等。

    Python库

    Python的最大优势之一是其超级扩展的库。该库包含内置模块(用C编写),这些模块提供对系统功能的访问,例如Python程序员无法访问的文件I / O,以及用Python编写的模块,这些模块为在Windows中发生的许多问题提供了标准化的解决方案。日常编程。

    为确保面向互联网的应用程序也能很好地表示,该库中支持许多标准格式协议,如MIME和HTTP。它包括用于创建图形用户界面,连接到关系数据库,生成伪随机数,具有任意精度小数的算术,操纵正则表达式以及单元测试的模块。

    截至2018年3月,Python软件包索引(PyPI)是第三方Python软件的官方存储库,包含超过130,000个具有广泛功能的软件包,其中包括:图形用户界面

    Web框架

    多媒体

    资料库

    联网

    测试框架

    自动化

    网页抓取[97]

    文献资料

    系统管理

    科学计算

    文字处理

    图像处理

    您需要从什么开始首先,您需要转到python.org并下载最新版本

    其次,您将需要下载Visual Studio Code,您可以在此处进行操作。

    在继续之前,我们只需配置Visual Studio。

    安装完成后,您将看到此屏幕。

    image22.png

    现在,进入File-> Open

    之后,您需要创建一个文件夹。我们将此文件夹称为“ Hello World”。

    完成后,您将需要转到Extensions并安装“ Python”。

    注意:左侧工具栏上的最后一个图标(方形的东西)是扩展按钮。

    好了,现在完成了,让我们从一些编码开始!!

    注意:在继续使用Visual Studio Code之前,我们将在Mac上使用“ Terminal”,在Windows上使用“ Command Prompt”

    从头开始

    终端上的第一行应如下所示(我们使用的是Mac air):

    X's-MacBook-Air:〜Y $

    在该行旁边,写上“ python”

    X's-MacBook-Air:〜Y $蟒蛇

    按Enter键后,您将看到以下内容:

    Python 2.7.10(默认,2018年8月17日,17:41:52)

    达尔文上的[GCC 4.2.1兼容Apple LLVM 10.0.0(clang-1000.0.42)]

    输入“帮助”,“版权”,“信用”或“许可证”以获取更多信息。

    >>>

    基本上,这意味着您现在就可以开始编码。

    让我们从简单的数值运算符开始。

    image25.png

    如您所见,到目前为止,这是相当标准的事情。到目前为止,我们完成的所有操作均遵循REPL公式。

    R =读

    E =评估

    P =打印

    L =循环

    读取2 + 2

    结果的计算为评估。

    打印结果,即4为Print

    循环基本上意味着返回并重新开始。

    让我们尝试打印“ Hello World”。

    >>>打印(“ Hello World”)

    你好,世界

    看,很简单。您只需使用print()并将“ Hello World”放入引号中即可。在下一行本身中,将进行打印。另外,请注意我们如何不使用分号结束python中的语句。

    Python中的数据类型

    好了,现在让我们谈谈数据类型。在Python中,有4种基本数据类型:布尔型

    数字(整数和浮点数)

    布尔型

    布尔值是编程语言中的标准。布尔变量只能采用两个值,即True和False。它们对于诸如if-else和loops这样的面向条件的编码非常有用。

    号码

    与所有编程语言一样,python同时使用整数和浮点数据类型。整数基本上是非小数,浮点数是小数。

    因此,3是整数,而3.4是浮点数。

    在继续之前,您应该了解两个有趣的函数,float()和int()。

    float()函数将其参数(括号内的数据)转换为浮点数。

    因此,float(5)变为5.0。

    同样,int(4.6)变为4。

    请注意,该数字并非传统意义上的四舍五入。它只是去除了小数部分。

    好了,让我们一起来体验一下这些功能。

    假设我们有一个布尔变量:a = True

    如果我们做int(a)那么我们将得到1。

    请记住,True = 1和False = 0。

    同样,float(a)将得到1.0。

    最后,我们有字符串。

    字符串是编程中使用的数据类型,例如整数和浮点数,但用于表示文本而不是数字。它由一组字符组成,这些字符也可以包含空格和数字。

    它们的声明如下:

    a ='名称'

    您可以同时使用单引号和双引号来包含您的字符串。但是,请记住,例如,您不能在同一字符串上同时使用它们。“你好”将是一个错误。

    另外,在使用字符串时,请注意撇号。例如。“我是作家”将是一个错误。您可以通过在撇号前加反斜杠来解决此问题,如下所示:'I \'ma writer'

    好吧,请记住int()和float()函数。让我们看看它们如何与字符串交互。

    因此,如果n ='9',我们想将其与1相加。

    我们可以简单地做:int(n)+ 1获得输出10。

    相反,如果我们进行float(n)运算,则输出将为9.0。

    请记住,在所有这些时间中,“ n”仍然是一个字符串变量。我们仅使用字符串的实例来进行数学运算。让我们在终端中向您展示。

    但是,如果n具有类似“ 4.5”的浮点值,并且我们尝试使用int()函数,则会收到错误消息。发生这种情况是因为字符串本身的内容是一个浮点变量。

    让我们对字符串有更多的乐趣。

    请记住,面向对象编程的属性之一是多态性。

    因此,让我们尝试串联。

    “ *”还可以对字符串变量做一些有趣的事情。

    如您所见,我们将name乘以10,然后得到name的值10倍。

    经营者

    运算符是可用于操纵特定值或操作数的工具。您会在python中找到三个最常见的运算符:数学的

    布尔型

    逻辑上

    数学运算符

    Screen-Shot-2018-12-21-at-2.11.57-PM.png

    布尔运算符

    布尔运算符处理值和操作数并给出布尔输出,即True或False

    Screen-Shot-2018-12-21-at-2.15.50-PM.png

    Screen-Shot-2018-12-21-at-2.18.42-PM.png

    逻辑运算符

    逻辑运算符比较两个条件并给出布尔结果。

    Screen-Shot-2018-12-21-at-2.20.02-PM.png

    职能

    函数是现代编程的基础。到目前为止,我们所做的任何编程都是非常基本的。但是,程序可能包含数百行代码,很难跟踪。

    这就是为什么我们使用程序的原因,这些程序基本上就像特定程序中的模块一样。

    让我们举一个例子,以了解功能的重要性。

    假设您正在写一本完全没有章节的大小说。如果您在书中之前曾描述过某些内容,则很有可能,如果您不得不再次引用它,则您将不得不重复某些段落。

    问题在于,这导致了冗余,这浪费了能量,金钱和时间。

    现在,如果我们实际上将本书分为几章呢?它为本书的整个介绍带来了很多结构和简洁。因此,如果我们想参考前面提到的内容,我们可以简单地让用户知道他们可以参考的章节编号。

    以此类推,本书是程序,各章是功能。

    那么,如何在python中定义一个函数呢?好吧,让我们看一下。

    对于这些程序,我们将使用Visual Studio Code。

    只需打开您的VSC和我们之前创建的文件夹即可。之后,单击此按钮打开一个新文件:

    image11.png

    随便命名文件,但请务必以“ .py”结尾。我们将文件命名为“ app.py”。

    好的,让我们尝试我们的第一个功能!

    def greet():

    打印('Hello')

    迎接()

    如您所见,我们以“ def”关键字开始函数定义。之后,我们得到函数的名称,后跟方括号和冒号。

    此后,与其他语言不同,python不使用大括号来定义函数体。相反,您需要做的只是缩进一点并添加主体。VSC自动为您执行此操作。

    在函数定义之后,您只需键入“ greet()”即可调用函数。

    好的,因此在编写程序之后,请确保将其保存。之后,我们将通过单击此处打开终端:

    image12.png

    当您打开终端时,您将看到以下内容:

    image14.png

    现在只需输入“ python filename.py”。

    在这种情况下,我们的文件名为“ app”,因此我们将键入pythonapp.py。

    image17.png

    如上所示,执行此操作后,程序将打印“ Hello”。

    现在,让我们在函数中引入一些参数。

    参数是函数内部的参数。因此,让我们回到问候函数并添加一些额外的元素:

    def greet(名字,姓氏)

    在这种情况下,first_name和last_name是此函数内部使用的参数。因此,这次调用函数时,还需要传递参数,如下所示:

    问候(“ Lionel”,“ Messi”)

    整个程序如下所示:

    image9.png

    因此,当您执行此程序时,输出将是:

    image13.png

    条件语句

    #1 If-Elif-Else

    条件语句是所有编程语言中的主要内容,而python使用if-elif-else语句执行该语句。Elif是“ else-if”的缩写。语法通常是这样的:

    如果条件1:

    陈述1

    条件条件2:

    陈述2

    其他

    声明3

    声明4

    那么,这里发生了什么?如果条件1是正确的,则将执行语句1,然后代码将跳至语句4以执行它。

    如果条件2为假,则代码移至条件2。如果条件2为正确,则执行语句2,然后执行语句4。

    如果所有条件都不正确,那么缺省情况下将执行语句3,然后执行语句4。

    在上面给出的假设代码中,语句4不属于任何条件,这就是为什么它在最后默认执行的原因。

    好的,现在让我们检查一个仅在使用时使用的简单程序。

    image19.png

    在此程序中,我们只是在检查数字是否小于6。如果是,那么我们将打印结果。由于满足条件,因此程序在其终端中输出该语句。

    image4.png

    好的,现在让我们将其带入另一个层次,并引入一些省略号。查看以下代码:

    image26.png

    您在这里拥有的代码几乎与以前相同。

    image16.png

    好的,现在,我们将其带到更高的层次。让我们介绍一个最终的else语句。

    因此,这里有三个条件:第一个检查数字是否大于6

    下一个检查数字是否小于4

    最后,如果所有条件都失败,则else块被激活并打印数字为5。

    正如在下面的终端中看到的,这正是out代码中发生的情况

    #2大专声明

    最后,我们有三级陈述。查看以下代码:

    年龄= 21

    message =“您符合条件”,如果年龄> = 18,否则“您不符合条件”

    打印(留言)

    你看到那句话了吗?

    如果年龄> = 18,则为“您符合条件”,否则为“您不符合条件”

    这称为第三级语句,其遵循以下格式:如果条件为“语句1”,则为“语句1”。

    基本上,仅当条件为true时才会激活语句1,否则,将激活语句2。

    循环

    最后,您有循环。循环是编程的组成部分,当需要重复执行特定任务时使用循环。Python的循环实际上非常有趣,并为您的编码增加了一个全新的维度。

    #1循环

    现在,让我们检查一下基本的for循环:

    对于范围(3)中的num:

    打印(数字)

    好的,这是怎么回事?

    range(n)将为您提供从0到n-1的数字。因此,在这种情况下,它的取值范围是0到2。num变量将在每次运行时假定范围的值。因此,如果您打印“ num”,这将是您得到的:

    “ num”在每次迭代中都占用从0到n-1的值。

    哦,这不仅限于数字。我们也可以使用字符串进行此循环。

    对于“ PYTHON”中的x:

    打印(x)

    这将打印以下内容:

    image7.png

    如您所见,x占用了字符串中的每个字符。

    image3.png

    #2 While循环

    还有另一种称为“ while”循环的循环。

    数= 100

    而数字> = 1:

    打印(数量)

    数字// = 2

    那么,这里发生了什么?

    我们一直在运行循环,直到数字大于或等于1。当执行数字// = 2时,我们基本上是在执行数字=数字// 2。

    让我们看一下结果:

    image23.png

    玩循环

    #1将循环与If-Else组合

    我们要做的第一件事是将循环与if-else语句组合在一起。

    x = 100

    对于范围(3)中的数字:

    如果x> 1:

    打印(“正”)

    其他:

    打印(“负”)

    如果执行此命令,输出将如下所示:

    image7.png

    好的,让我们对此进行一些更改。我们将在此代码中添加一些内容。

    x = 100

    对于范围(3)中的数字:

    如果x> 1:

    打印(“正”)

    打破

    其他:

    打印(“负”)

    有什么不同?

    您看到在代码中添加了一个单词吗?“ break”关键字帮助编译器突破代码。因此,在以上代码中,“正”仅打印一次,然后编译器中断。

    image15.png

    #2嵌套循环

    嵌套循环基本上是循环内的循环。在这里检查一下:

    对于范围内的x(5):

    对于范围(3)中的y:

    打印(x,y)

    那这里怎么了

    我们有ax循环和ay循环在其中运行。现在,让我们在终端中打印结果,看看会得到什么:

    image21.png

    Python区块链:结论

    让我们现在停在这里。

    我们为您提供了Python语言的基础知识。我们建议您使用代码摆弄一些东西,让它更舒适。在接下来的部分,我们终于能在我们开始blockchain。

    展开全文
  • 1. 简介此区块链教程将详细介绍区块链背后的理论...整个区块链项目开发包括3个主要部分:客户(Client)、矿工(Miners)、区块链(Blockchain)。客户:从其他卖方(供应商)购买商品。客户本身可能会成为卖方,从其提供的...

    1. 简介

    此区块链教程将详细介绍区块链背后的理论。区块链是数字货币比特币的基本构建块,此教程将讨论比特币的复杂性,全面解释区块链架构,并建立我们自己的区块链。

    本教程将介绍如何构建上述系统,并在市场上推出自己的数字货币。整个区块链项目开发包括3个主要部分:客户(Client)、矿工(Miners)、区块链(Blockchain)。客户:从其他卖方(供应商)购买商品。客户本身可能会成为卖方,从其提供的商品中接受买方的钱款。我们假设客户既可以是TPCoins的供应商,也可以是其接收者。因此,我们需要在代码中创建一个具有收付钱款功能的客户类。

    矿工:从交易池(transaction pool)中提取交易并将其组装成一个块。矿工必须提供有效的工作证明才能获得采矿奖励。矿工收取的所有钱都将由他保留。他可能在网上的其他注册供应商那里通过购买商品或服务而消费这笔钱,就像上述客户一样。

    区块链:是一种按时间顺序链接所有已开采区块的数据结构。 该链是不可变的,防止被篡改。

    2. 创建多交易

    多个客户进行的交易在系统中排队; 矿工从此队列中提取交易并将其添加到区块中。 然后他们将开采该区块,获胜的矿工将拥有将该区块添加到区块链中的特权,从而为自己赚钱。

    我们将在后续讨论区块链创建时描述此挖掘过程。 在编写多个交易代码之前,添加一个函数用来打印给定交易的内容。

    2.1 展示交易

    display_transaction函数接受交易类型的单参数。 接收到交易中的字典对象被复制到一个名为tsdict的临时变量中,并使用字典键打印对应的值。

    def display_transaction(transaction):

    tsdict = transaction.to_dict()

    print("sender: " + tsdict['sender'])

    print('-' * 20)

    print("recipient: " + tsdict['recipient'])

    print('-' * 20)

    print("value: " + str(tsdict['value']))

    print('-' * 20)

    print("time: " + str(tsdict['time']))

    print('-' * 20)

    下面我们定义一个交易队列存储交易对象。

    2.2 交易队列

    为了创建一个队列,我们声明一个名为transactions的全局列表变量:

    transactions = []

    我们简单地将每个新创建的交易添加到此队列。 注意:为简单起见,本教程中不实现队列管理逻辑。

    2.3 创建多客户

    我们将开始创建交易。 首先创建4个客户,他们为从他人那里获得各种服务或商品而互相汇款。

    Dinesh = Client()

    Ramesh = Client()

    Seema = Client()

    Vijay = Client()

    至此,我们有4个客户,分别是Dinesh,Ramesh,Seema和Vijay。 假设每个客户钱包中都持有一些TPCoin可以用于交易。 这些客户的身份将通过这些对象的identity属性来指定。

    2.4 创建第一个交易

    现在执行第一个交易:

    t1 = Transaction(Dinesh, Ramesh.identity, 5.0)

    在这个交易中,Dinesh将5个TPCoins发送给Ramesh。 为了使交易成功,必须确保Dinesh钱包中有足够的钱来进行这次付款。 注意:我们需要一个初始(genesis)交易来启动系统中TPCoin的流通。

    我们使用Dinesh的私钥签署此交易,并将其添加到交易队列中:

    t1.sign_transaction()

    transactions.append(t1)

    Dinesh完成第一个交易后,我们将在不同客户间创建更多的交易。

    2.5 添加更多交易

    现在创建更多交易,每笔交易都会向对方转移一些TPCoins。 当有人花钱时,他不必检查钱包中是否有足够的余额。在发起交易时,矿工将验证每个交易发送方所拥有的余额。

    余额不足时,矿工将此交易标记为无效,并且不会将其添加到该区块中。

    以下代码将创建9个交易并将其添加到我们的队列中。

    t2 = Transaction(Dinesh, Seema.identity, 6.0)

    t2.sign_transaction()

    transactions.append(t2)

    t3 = Transaction(Ramesh, Vijay.identity, 2.0)

    t3.sign_transaction()

    transactions.append(t3)

    t4 = Transaction(Seema, Ramesh.identity, 4.0)

    t4.sign_transaction()

    transactions.append(t4)

    t5 = Transaction(Vijay, Seema.identity, 7.0)

    t5.sign_transaction()

    transactions.append(t5)

    t6 = Transaction(Ramesh, Seema.identity, 3.0)

    t6.sign_transaction()

    transactions.append(t6)

    t7 = Transaction(Seema, Dinesh.identity, 8.0)

    t7.sign_transaction()

    transactions.append(t7)

    t8 = Transaction(Seema, Ramesh.identity, 1.0)

    t8.sign_transaction()

    transactions.append(t8)

    t9 = Transaction(Vijay, Dinesh.identity, 5.0)

    t9.sign_transaction()

    transactions.append(t9)

    t10 = Transaction(Vijay, Ramesh.identity, 3.0)

    t10.sign_transaction()

    transactions.append(t10)

    2.6 查看交易

    作为区块链管理者,你可能喜欢定期查看交易队列的内容。 为此,可以使用display_transaction函数。 要将所有交易转储到队列中,只需迭代交易列表;然后为每个交易调用display_transaction函数:

    for transaction in transactions:

    display_transaction(transaction)

    print ('-' * 20)

    由于交易会定期添加到区块中,因此你通常只希望查看尚未开采的交易清单,需要创建适当的for循环来遍历尚未挖掘的交易。

    到目前为止,你已经学习了如何创建客户,允许客户之间进行交易,维护待挖掘的未完成的交易队列。

    3. Block类

    一个区块由不同数量的交易组成。 为简单起见,假设该块由固定数量的交易组成,示例中为3个交易。 由于该块需要存储3个交易的列表,我们声明一个实例变量authenticated_transactions:

    self.verified_transactions = []

    我们将此变量命名为verify_transactions,表示只有经过验证的有效交易才会被添加到该区块中。 每个块还保留前一个块的哈希值,因此块链变得不可变。

    为了存储先前的哈希,声明一个实例变量:

    self.previous_block_hash = ""

    最后,声明一个变量Nonce,用于存储矿工在采矿过程中创建的随机数。

    self.Nonce = ""

    Block类的定义为:

    class Block():

    def __init__(self):

    self.verified_transactions = []

    self.previous_block_hash = ""

    self.Nonce = ""

    由于每个块需要前一个块的哈希值,声明一个last_block_hash的全局变量:

    last_block_hash = ""

    3.1 创建初始区块

    下面在区块链中创建第一个块。假设TPCoins的发起者最初向一个已知客户Dinesh发送500个TPCoins。 为此创建一个Dinesh实例:

    Dinesh = Client()

    然后我们创建初始(genesis)交易,并向Dinesh的公共地址发送500 TPCoins。

    t0 = Transaction("Genesis", Dinesh.identity, 500.0)

    创建一个Block类的实例:

    block0 = Block()

    将previous_block_hash和once实例变量初始化为None,因为这是存储在区块链中的第一笔交易。

    block0.previous_block_hash = None

    Nonce = None

    将t0交易添加到块中的verified_transactions列表中。

    block0.verified_transactions.append(t0)

    此时,该块完成初始化,可以添加到我们的区块链中。 我们将为此创建区块链。 在将区块添加到区块链之前,我们将对区块进行哈希处理并将其值存储在之前声明的last_block_hash变量中。 该值将由下一个矿工在其区块中使用。

    通过如下代码哈希区块并存储其值:

    digest = hash(block0)

    last_block_hash = digest

    3.2 创建区块链

    区块链包含彼此链接的区块列表。 为了存储整个列表,创建一个列表变量TPCoins:

    TPCoins = []

    dump_blockchain方法用于转储整个区块链的内容。 首先打印区块链的长度,以便确定当前区块链中存在多少个区块。

    def dump_blockchain(self):

    print("Number of blocks in the chain: " + str(len(self)))

    随着时间的推移,区块链中的块数可能很多。 当打印区块链的内容时,需要确定要检查的范围。 示例中打印了整个区块链,因为在当前示例不会添加太多块。为了遍历整个链,设置了一个for循环:

    for x in range (len(TPCoins)):

    block_temp = TPCoins[x]

    print ("block # " + str(x))

    每个引用的块都复制到临时变量block_temp中。

    将块号作为每个块的标题。 注意:数字将从零开始,第1个块是编号为1的初始块。

    在每个块中,已经将3个交易(初始块除外)的列表存储在变量verified_transactions中。 在for循环中迭代此列表,调用display_transaction显示交易明细。

    for transaction in block_temp.verified_transactions:

    display_transaction (transaction)

    dump_blockchain方法全部代码为:

    def dump_blockchain(self):

    print("Number of blocks in the chain: " + str(len(self)))

    for x in range(len(TPCoins)):

    block_temp = TPCoins[x]

    print("block # " + str(x))

    for transaction in block_temp.verified_transactions:

    display_transaction(transaction)

    print('-' * 10)

    print('=' * 40)

    现在已经创建了一个用于存储块的区块链,一个任务是创建块并将其添加到区块链中。 为此,将添加之前已经创建的初始块。

    3.3 添加初始块

    向区块链添加一个块涉及到将创建的块追加到TPCoins列表中。

    TPCoins.append(block0)

    注意:与系统中其余的块不同,初始块仅包含一个由TPCoins系统的发起者发起的交易。通过调用函数dump_blockchain转储区块链的内容:

    dump_blockchain(TPCoins)

    至此,区块链系统就可以使用了。我们将通过为感兴趣的客户提供挖掘功能,使他们成为矿工。

    展开全文
  • Fabric区块链Python开发详解课程涵盖Fabric区块链的核心概念、Fabric网络搭建、Node链码开发Python应用开发等,并提供关键知识点的预置代码,适合Python工程师快速掌握Fabric区块链应用开发技能。访问网址:Fabric...
  • 简介此区块链教程将详细介绍区块链背后的理论。区块链是数字货币比特币的基本构建块,此教程将讨论比特币的复杂性,全面解释区块链架构,并建立我们自己的区块链。Satoshi Nakamoto创建了世界上第一个虚拟货币,称为...
  • 以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只搭建环境,运行第一个...
  • Number of blocks in the chain: 4block # 0sender: Genesis--------------------recipient: 30819f300d06092a864886f70d010101050003818d0030818902818100b8c7cfaa8289d0ad11fe87e774931407ff0b67578004727b3c6b3a8...
  • 1、java比特币开发详解java比特币开发课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建...
  • 区块链或数字货币领域,Python并不是主流的开发语言。但是如果 你的目的是研究区块链技术的原理,或者需要在自己的笔记本上仿真一个 区块链网络并进行一些研究性的实验,比如完成自己的毕业设计项目 或科研课题,...
  • 区块链开发用什么语言呢?掌握区块链技术才是真正的生财之道,于是又开始掀起了学习区块链技术的浪潮。谈起学习区块链技术,先掌握一门编程语言是必须的,那区块链开发用什么语言呢?一、区块链...
  • python区块链开发

    2018-05-31 23:43:36
    至此,已经完成了:交易记录,区块的开发,现在进行区块链开发就比较容易了。实现代码如下: from Block import InvalidBlock, Block from Message import InvalidMessage, DaDaMessage from Transaction import...
  • 接着上一篇交易记录整合交易类,这里描述区块的开发。首先我们要明白一个区块,需要的内容,包括交易记录集合,时间戳,哈希,上一个区块的哈希。明白了这个,下面就容易代码开发了。import datetimeimport hashlib...
  • 区块链技术早目前已经成功地风靡全球,区块链的繁荣,让许多人好奇,区块链开发语言有哪些?一般来说,几乎所有流行的编程语言,都可以在区块链开发中得到应用,比如Solidity、Java、C++、Javascript和Golang。那么...
  • 接着上一篇交易记录整合交易类,这里描述区块的开发。首先我们要明白一个区块,需要的内容,包括交易记录集合,时间戳,哈希,上一个区块的哈希。明白了这个,下面就容易代码开发了。import datetimeimport hashlib...
  • 简介tendermint是一个开源的完整的区块链实现,可以用于公链或联盟链,其官方定位 是面向开发者的区块链共识引擎:与其他区块链平台例如以太坊或者EOS相比,tendermint最大的特点是其差异化的定位: 尽管包含了...
  • Python不是主流的区块链...本文介绍了10个最流行的Python区块链项 并提供了相应的源代码下载地址。区块链开发教程链接: 以太坊 | 比特币 | EOS | Tendermint | Hyperledger Fabric | Omni/USDT | Ripple1、web3.p...
  • simwiz.py是一个用于区块链仿真系统开发Python包,适合快速实现共识算法的仿真,或者进行大规模区块链网络的实验,例如物联网+区块链系统等。官方下载地址:http://sc.hubwiz.com/codebag/simwiz-python/。1、开发...
  • 本篇教程是面向各能力层级的 Python 开发者介绍区块链(blockchain)。你将通过从零实现一个公链(public blockchain)和构建一个简单的应用来确切理解区块链到底是什么。你将会使用 Flask 轻量级框架为区块链的不同功能...
  • 以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只搭建环境,运行第一个...
  • 我们目前正处于一个新兴的区块链开发行业中。区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣。由于许多资金充足的项目现在急于建立区块链网络并在其上部署分散的...
  • 许多资金充足的项目现在都渴望构建自己的区块链网络,并在其上部署分散式的应用程序,因此缺乏有能力的区块链开发人员。随着数十亿美元的资金流入这一领域,区块链开发商的薪酬和需求不断上升,各项目竞相竞标,以...
  • python 可以做区块链吗可以的 区块链实现原理的...学区块链好还是python区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信...
  • 区块链是一种技术,而现在那是相当的火。前些天听说本地公司也要招区块链相关技术人员了。可想而知大趋势如此。...基本编程语言最早的是汇编正题,目前区块链开发主流的有四种编程语言当然学精一个就能上天了。首...
  • Python不是主流的区块链...本文介绍了10个最流行的Python区块链项并提供了相应的源代码下载地址。 区块链开发教程链接:以太坊 | 比特币 | EOS | Tendermint | Hyperledger Fabric | Omni/USDT | Ripple 1、web3....
  • 从现在各个公有链的使用情况来看,来一代的都是参考Bitcoin,使用C 开发,而新一代的区块链技术使用的语言则是Go,Python,C#和JavaScript。以太坊自己使用的是Solidity,语法接近于JavaScript,但是有所不同。这些...
  • 区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链)、理解哈希函数是如何保持区块链的完整性、掌握如何用Go语言编程创造并添加新的块、实现多个节点通过竞争生成块、通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 654
精华内容 261
关键字:

python区块链开发

python 订阅