Python区块链客户端类开发教程
作者:菜鸟教程 时间:2023-06-18 03:05:51
开发客户端
客户是持有TPCoins并从网络上的其他供应商处交换商品/服务的客户,包括他自己的.我们应该为此目的定义 Client 类.要为客户端创建全局唯一标识,我们使用PKI(公钥基础结构).在本章中,让我们详细讨论一下.
客户应该能够将钱包从另一个已知的人那里汇款.同样,客户应该能够接受来自第三方的钱.对于花钱,客户将创建一个指定发件人姓名和支付金额的交易.为了收款,客户将向第三方提供他的身份 : 本质上是钱的发送者.我们不存储客户持有的钱包余额.在交易过程中,我们将计算实际余额,以确保客户有足够的余额来支付.
开发客户端类,其余在项目中的代码中,我们需要导入许多Python库.这些列在下面 :
#?import?libraries
import?hashlib
import?random
import?string
import?json
import?binascii
import?numpy?as?np
import?pandas?as?pd
import?pylab?as?pl
import?logging
import?datetime
import?collections
除了上述标准库之外,我们还要签署交易,创建对象的哈希等.为此,您需要导入以下库 :
#?following?imports?are?required?by?PKI
import?Crypto
import?Crypto.Random
from?Crypto.Hash?import?SHA
from?Crypto.PublicKey?import?RSA
from?Crypto.Signature?import?PKCS1_v1_5
客户端类
客户端类使用内置的Python RSA 算法生成私有和公开键.感兴趣的读者可以参考本教程来实现RSA.在对象初始化期间,我们创建私钥和公钥并将它们的值存储在实例变量中.
self._private_key?=?RSA.generate(1024,?random)
self._public_key?=?self._private_key.publickey()
请注意,永远不要丢失私钥.为了保留记录,生成的私钥可以复制到安全的外部存储器上,或者您可以简单地在一张纸上写下它的ASCII表示.
生成的公共密钥将用作客户端的身份.为此,我们定义了一个名为 identity 的属性,它返回公钥的HEX表示.
@property
???def?identity(self):
??????return
binascii.hexlify(self._public_key.exportKey(format='DER'))
.decode('ascii')
标识对每个客户都是唯一的,可以公开提供.任何人都可以使用此身份向您发送虚拟货币,它将被添加到您的钱包中.
客户端
class?Client:
???def?__init__(self):
??????random?=?Crypto.Random.new().read
??????self._private_key?=?RSA.generate(1024,?random)
??????self._public_key?=?self._private_key.publickey()
??????self._signer?=?PKCS1_v1_5.new(self._private_key)
???@property
???def?identity(self):
??????return
binascii.hexlify(self._public_key.exportKey(format='DER')).decode('ascii')
测试客户端
现在,我们将编写代码来说明如何使用客户端类 :
Dinesh?=?Client()
print?(Dinesh.identity)
以上代码创建客户端的实例并将其分配给var iable Dinesh .我们通过调用身份方法打印 Dinesh 的公钥.
30819f300d06092a864886f70d010101050003818d0030818902818100b547fafceeb131e07
0166a6b23fec473cce22c3f55c35ce535b31d4c74754fecd820aa94c1166643a49ea5f49f72
3181ff943eb3fdc5b2cb2db12d21c06c880ccf493e14dd3e93f3a9e175325790004954c34d3
c7bc2ccc9f0eb5332014937f9e49bca9b7856d351a553d9812367dc8f2ac734992a4e6a6ff6
6f347bd411d07f0203010001
来源:https://www.it1352.com/OnLineTutorial/python_blockchain/python_blockchain_client_class.html