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区块链客户端类的资料请关注我们其它相关文章!

(0)

相关推荐

  • 如何用用Python制作NFT区块链作品

    目录 什么是 NFT? ERC20 与 ERC721 NFT 有什么用? NFT 的价值 如何制作 NFT 如何进行无限定制的 NFT 快速上手 ERC721 代币标准 什么是 NFT 元数据和 TokenURI? TokenURI 链下元数据与链上元数据 什么是 NFT? NFT英文全称为Non-Fungible Token,翻译成中文就是:非同质化代币,具有不可分割.不可替代.独一无二等特点.NFT由于其非同质化.不可拆分的特性,使得它可以和现实世界中的一些商品绑定.换言之,其实就是发行在区

  • Python实现类似比特币的加密货币区块链的创建与交易实例

    虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录交易的数字账本. 更通俗的说,它是一个公开的数据库,新的数据存储在被称之为区块(block)的容器中,并被添加到一个不可变的链(chain)中(因此被称为区块链(blockchain)),之前添加的数据也在该链中.对于比特币或其它加密货币来说,这些数据就是一组组交易,不过,也可以是其它任何类型的数据

  • Python区块链交易类教程

    目录 创建 Transaction 类 测试交易类 创建 Transaction 类 在本章中,让我们创建一个 Transaction 类,以便客户能够向某人汇款.请注意,客户可以是货币的发件人或收件人.当您想要收款时,其他一些发件人将创建一个交易并在其中指定您的公开地址.我们将事务类的初始化定义如下 : def __init__(self, sender, recipient, value):    self.sender = sender    self.recipient = recipi

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

    目录 创建多个交易 显示事务 交易队列 创建多个客户端 创建第一个事务 添加更多交易 转储交易 创建多个交易 各个客户进行的交易在系统中排队;矿工从这个队列中获取交易并将其添加到块中.然后他们将挖掘区块,获胜的矿工将有权将区块添加到区块链中,从而为自己赚取一些钱. 我们将在稍后讨论这个挖掘过程区块链的创建.在我们为多个事务编写代码之前,让我们添加一个小实用程序函数来打印给定事务的内容. 显示事务 display_transaction 函数接受事务类型的单个参数.接收到的事务中的字典对象被复制到

  • python区块及区块链的开发详解

    接着上一篇交易记录整合交易类,这里描述区块的开发. 首先我们要明白一个区块,需要的内容,包括交易记录集合,时间戳,哈希,上一个区块的哈希.明白了这个,下面就容易代码开发了. import datetime import hashlib from Message import DaDaMessage, InvalidMessage from Transaction import Transaction class Block: #不定参数,*args,区块集合 def __init__(self,

  • 从0编写区块链之用python解释区块链最基本原理

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

  • Python区块链客户端类开发教程

    目录 开发客户端 客户端类 客户端 测试客户端 开发客户端 客户是持有TPCoins并从网络上的其他供应商处交换商品/服务的客户,包括他自己的.我们应该为此目的定义 Client 类.要为客户端创建全局唯一标识,我们使用PKI(公钥基础结构).在本章中,让我们详细讨论一下. 客户应该能够将钱包从另一个已知的人那里汇款.同样,客户应该能够接受来自第三方的钱.对于花钱,客户将创建一个指定发件人姓名和支付金额的交易.为了收款,客户将向第三方提供他的身份 : 本质上是钱的发送者.我们不存储客户持有的钱包

  • Python区块链块的添加教程

    目录 添加第一个区块 添加更多块 转储整个区块链 每个矿工将从先前创建的交易池中获取交易.要跟踪已挖掘的消息数量,我们必须创建一个全局变量 : last_transaction_index = 0 我们现在让我们的第一个矿工在区块链中添加一个区块. 添加第一个区块 到添加一个新块,我们首先创建一个 Block 类的实例 block = Block() 我们从队列中选取前3个交易并减去; for i in range(3):    temp_transaction = transactions[l

  • Python区块链创建Genesis Block教程

    我们假设TPCoins的发起人最初向已知客户 Dinesh 发出500个TPCoins.为此,他首先创建一个Dinesh实例 : Dinesh = Client() 然后我们创建一个创世纪交易,并向Dinesh的公共地址发送500个TPCoins. t0 = Transaction (    "Genesis",    Dinesh.identity,    500.0 ) 现在,我们创建 Block的实例类并将其命名为 ;block0 block0 = Block() 我们将 pre

  • Python区块链创建Block Class教程

    一个块由不同数量的事务组成.为简单起见,在我们的例子中,我们假设该块由固定数量的事务组成,在这种情况下为3.由于块需要存储这三个事务的列表,我们将声明一个名为 verified_transactions 的实例变量,如下所示 : self.verified_transactions = [] 我们已将此变量命名为 verified_transactions ,以表明只有经过验证的有效交易将被添加到块中.每个块还保存前一个块的哈希值,以便块链变为不可变. 为了存储前一个哈希,我们声明一个实例变量如

  • Python区块链创世块创建教程

    区块链包含彼此链接的区块列表.要存储整个列表,我们将创建一个名为TPCoins : 的列表变量; TPCoins = [] 我们还将编写一个名为 dump_blockchain 的实用程序方法来转储整个区块链的内容.我们首先打印区块链的长度,以便我们知道区块链中当前存在多少个区块 def dump_blockchain (self):    print ("Number of blocks in the chain: " + str(len (self))) 请注意,随着时间的推移,数

  • Python区块链Creating Miners教程

    目录 消息摘要函数 挖掘函数 第1步 第2步 第3步 测试挖掘函数 为了实现挖掘,我们需要开发一个挖掘功能.挖掘功能需要在给定的消息字符串上生成摘要并提供工作证明.让我们在本章讨论这个. 消息摘要函数 我们将编写一个名为 sha256 的实用程序函数来创建给定消息的摘要 : def sha256(message): return hashlib.sha256(message.encode('ascii')).hexdigest() sha256 函数将消息作为参数进行编码它为ASCII,生成十六

  • python区块链实现简版网络

    目录 说明 引言 区块链网络 kademlia发现协议 简化协议 消息 TCP服务端 TCP客户端 P2P服务器 连接节点 RPC 测试 区块同步方式 问题 总结 说明 本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用python实现的,但根据个人的理解进行了一些修改,大量引用了原文的内容.文章末尾有"本节完整源码实现地址". 引言 到目前为止,我们所构建的原型已经具备了区块链所有的关键特性:匿名,安全,随机生成的地址

  • python区块链地址的简版实现

    说明 本文根据https://github.com/liuchengxu/blockchain-tutorial 的内容,用python实现的,但根据个人的理解进行了一些修改,大量引用了原文的内容.文章末尾有"本节完整源码实现地址". 引言 在上一篇文章中,我们已经初步实现了交易.相信你应该了解了交易中的一些天然属性,这些属性没有丝毫“个人”色彩的存在:在比特币中,没有用户账户,不需要也不会在任何地方存储个人数据(比如姓名,护照号码或者 SSN).但是,我们总要有某种途径识别出你是交易

随机推荐