脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python区块链创建多个交易教程

python区块链创建多个交易教程

2023-02-15 14:06菜鸟教程 Python

这篇文章主要为大家介绍了python区块链创建多个交易的实现示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

创建多个交易

各个客户进行的交易在系统中排队;矿工从这个队列中获取交易并将其添加到块中.然后他们将挖掘区块,获胜的矿工将有权将区块添加到区块链中,从而为自己赚取一些钱.

我们将在稍后讨论这个挖掘过程区块链的创建.在我们为多个事务编写代码之前,让我们添加一个小实用程序函数来打印给定事务的内容.

显示事务

display_transaction 函数接受事务类型的单个参数.接收到的事务中的字典对象被复制到名为 dict 的临时变量,并使用字典键,各种值将打印在控制台上.

?
1
2
3
4
5
6
7
8
9
10
11
def display_transaction(transaction):
   #for transaction in transactions:
   dict = transaction.to_dict()
   print ("sender: " + dict['sender'])
   print ('-----')
   print ("recipient: " + dict['recipient'])
   print ('-----')
   print ("value: " + str(dict['value']))
   print ('-----')
   print ("time: " + str(dict['time']))
   print ('-----')

接下来,我们定义一个事务队列来存储我们的事务对象.

交易队列

要创建队列,我们声明一个名为 transactions 列表变量>如下 

?
1
transactions = []

我们将只需将每个新创建的事务附加到此队列.请注意,为简洁起见,我们不会在本教程中实现队列管理逻辑.

创建多个客户端

现在,我们将开始创建事务.首先,我们将创建四个客户,他们将相互汇款以从其他人那里获得各种服务或商品.

?
1
2
3
4
Dinesh = Client()
Ramesh = Client()
Seema = Client()
Vijay = Client()

此时,我们有四个客户叫Dinesh,Ramesh,Seema和Vijay.我们目前假设这些客户中的每一个都在他们的钱包中持有一些TPCoins用于交易.通过使用这些对象的标识属性来指定每个客户端的标识.

创建第一个事务

现在,我们首先启动交易如下 :

?
1
2
3
4
5
t1 = Transaction(
   Dinesh,
   Ramesh.identity,
   15.0
)

在此交易中,Dinesh向Ramesh发送了5个TPCoins.为了使交易成功,我们必须确保Dinesh在他的钱包里有足够的钱来支付这笔款项.请注意,我们需要一个genesis事务来启动系统中的TPCoin循环.您将在阅读时很快编写此genesis事务的事务代码.

我们将使用Dinesh的私钥对此事务进行签名,并将其添加到事务队列中,如下所示 :

?
1
2
t1.sign_transaction()
transactions.append(t1)

在Dinesh做出的第一笔交易之后,我们将在上面创建的不同客户之间创建更多交易.

添加更多交易

我们现在将创建几个以上的交易,每个交易都会向另一方发放一些TPCoins.当有人花钱时,他没有必要在这个钱包中检查是否有足够的余额.无论如何,矿工将在发起交易时验证发件人所拥有的余额的每笔交易.

如果余额不足,矿工会将此交易标记为无效且不会添加这个块.

以下代码创建并添加了九个以上的事务.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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)

当你运行上面的代码,你将在队列中有十个交易来让矿工创建他们的块.

转储交易

作为区块链经理,您可能会定期查看事务队列的内容.为此,您可以使用我们之前开发的 display_transaction 函数.要转储队列中的所有事务,只需迭代事务列表,并为每个引用的事务调用 display_transaction 函数,如下所示 :

?
1
2
3
for transaction in transactions:
   display_transaction (transaction)
   print ('--------------')

事务由虚线分隔以区分.如果你运行上面的代码,你会看到如下所示的交易清单 :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
value: 15.0
-----
time: 2019-01-14 16:18:01.859915
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae14
3cbe59b3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fb
d9ee74b9e7ea12334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0
961b4f212d1fd5b5e49ae09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d0623
75799742a359b8f22c5362e5650203010001
-----
value: 6.0
-----
time: 2019-01-14 16:18:01.860966
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876
f41338c62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cc
e25be99452a81df4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47
452590137869c25d9ff83d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f0
0e321b65e4c33acaf6469e18e30203010001
-----
value: 2.0
-----
time: 2019-01-14 16:18:01.861958
-----
--------------

为简洁起见,我只先打印列表中的交易很少.在上面的代码中,我们打印了从第一个事务开始的所有事务,除了从未添加到此列表的genesis事务.由于事务定期添加到块中,您通常只想查看尚未开采的事务列表.在这种情况下,您需要创建一个适当的 for 循环来迭代尚未开采的事务.

到目前为止,您已经学会了如何创建客户端,允许它们相互之间并维护要挖掘的待处理事务的队列.现在,这是本教程最重要的部分,也就是创建一个区块链,更多关于python区块链创建交易的资料请关注服务器之家其它相关文章!

原文链接:https://www.it1352.com/OnLineTutorial/python_blockchain/python_blockchain_creating_multiple_transactions.html

延伸 · 阅读

精彩推荐
  • PythonPython中三维坐标空间绘制的实现

    Python中三维坐标空间绘制的实现

    这篇文章主要介绍了Python中三维坐标空间绘制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    余生若初14702020-09-23
  • PythonPython数据分析之pandas比较操作

    Python数据分析之pandas比较操作

    比较操作是很简单的基础知识,不过Pandas中的比较操作有一些特殊的点,本文介绍的非常详细,对正在学习python的小伙伴们很有帮助.需要的朋友可以参考下...

    Python碎片11692021-11-08
  • Pythonpython用pyecharts实现地图数据可视化

    python用pyecharts实现地图数据可视化

    这篇文章主要介绍了python用pyecharts实现地图数据可视化,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...

    阿橙FM5752021-09-25
  • PythonDjango内容增加富文本功能的实例

    Django内容增加富文本功能的实例

    下面小编就为大家带来一篇Django内容增加富文本功能的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    reaptem4752020-12-11
  • Python在PyCharm中三步完成PyPy解释器的配置的方法

    在PyCharm中三步完成PyPy解释器的配置的方法

    今天小编就为大家分享一篇在PyCharm中三步完成PyPy解释器的配置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    针叶12982021-04-14
  • Python打包python 加icon 去掉cmd黑窗口方法

    打包python 加icon 去掉cmd黑窗口方法

    今天小编就为大家分享一篇打包python 加icon 去掉cmd黑窗口方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    frank_good12572021-07-18
  • Pythonpython 实现mysql增删查改示例代码

    python 实现mysql增删查改示例代码

    python中可以通过pymysql实现MySQL数据库的连接,并实现数据库的各种操作,这篇文章主要给大家介绍了关于pymsql实现增删改查的示例代码,需要的朋友可以参考...

    墨渊7862022-03-06
  • Pythonpip安装py_zipkin时提示的SSL问题对应

    pip安装py_zipkin时提示的SSL问题对应

    今天小编就为大家分享一篇关于pip安装py_zipkin时提示的SSL问题对应,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    liumiaocn10572021-05-09