Python区块链客户端类开发教程
作者:菜鸟教程
开发客户端
客户是持有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
以上就是Python区块链客户端类开发教程的详细内容,更多关于Python区块链客户端类的资料请关注脚本之家其它相关文章!