在本章中,让我们创建一个 Transaction 类,以便客户能够向某人汇款.请注意,客户可以是货币的发件人或收件人.当您想要收款时,其他一些发件人将创建一个交易并在其中指定您的公开地址.我们将事务类的初始化定义如下 :
def __init__(self, sender, recipient, value): self.sender = sender self.recipient = recipient self.value = value self.time = datetime.datetime.now()
init 方法有三个参数 : 发件人的公开键,收件人的公开键以及要发送的金额.它们存储在实例变量中以供其他方法使用.另外,我们创建了一个用于存储事务时间的变量.
接下来,我们编写一个名为 to_dict 的实用程序方法,它结合了上述四个实例字典对象中的变量.这只是通过一个变量来访问整个交易信息.
正如您在前面的教程中所知,区块链中的第一个区块是 Genesis 块. Genesis块包含区块链创建者发起的第一个事务.这个人的身份可能像比特币一样保密.因此,当创建第一个交易时,创建者可以将其身份发送为 Genesis .因此,在创建字典时,我们检查发件人是否 Genesis ,如果是,我们只需将一些字符串值赋给身份变量;否则,我们将发件人的身份分配给身份变量.
if self.sender == "Genesis": identity = "Genesis"else: identity = self.sender.identity
我们使用以下构建字典代码行
return collections.OrderedDict({ 'sender': identity, 'recipient': self.recipient, 'value': self.value, 'time' : self.time})
整个代码 to_dict 方法如下所示 :
def to_dict(self): if self.sender == "Genesis": identity = "Genesis" else: identity = self.sender.identity return collections.OrderedDict({ 'sender': identity, 'recipient': self.recipient, 'value': self.value, 'time' : self.time})
最后,我们将使用发件人的私钥对此字典对象进行签名.和以前一样,我们使用带有SHA算法的内置PKI.生成的签名被解码以获得用于打印的ASCII表示并将其存储在我们的区块链中. sign_transaction 方法代码显示在这里 :
def sign_transaction(self): private_key = self.sender._private_key signer = PKCS1_v1_5.new(private_key) h = SHA.new(str(self.to_dict()).encode('utf8')) return binascii.hexlify(signer.sign(h)).decode('ascii')
我们现在将测试这个 Transaction 类.
测试交易类
为此,我们将创建两个用户,名为 Dinesh 和 Ramesh . Dinesh将向Ramesh发送5个TPCoins.为此,我们首先创建名为Dinesh和Ramesh的客户端.
Dinesh = Client()Ramesh = Client()
请记住,当您实例化客户端类时,将创建客户端唯一的公共和私钥.当Dinesh向Ramesh发送付款时,他将需要使用客户端的身份属性获得的Ramesh的公钥.
因此,我们将使用以下代码创建事务实例 :
t = Transaction( Dinesh, Ramesh.identity, 5.0)
请注意,第一个参数是发件人,第二个参数是收件人的公钥,第三个参数是要传输的金额. sign_transaction 方法从第一个参数中检索发件人的私钥,用于演唱交易.
创建事务对象后,您将通过调用它来对其进行签名b> sign_transaction 方法.此方法以可打印格式返回生成的签名.我们使用以下两行代码生成并打印签名 :
signature = t.sign_transaction()print (signature)
当你运行上面的代码时,你会看到类似于这个 : 的输出;
7c7e3c97629b218e9ec6e86b01f9abd8e361fd69e7d373c38420790b655b9abe3b575e343c713703ca1aee781acd7157a0624db3d57d7c2f1172730ee3f45af943338157f899965856f6b00e34db240b62673ad5a08c8e490f880b568efbc36035cae2e748f1d802d5e8e66298be826f5c6363dc511222fb2416036ac04eb972
现在作为我们创建客户端的基础设施和如果交易准备就绪,我们现在将有多个客户在现实生活中进行多笔交易.
免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除
-
设计总结|如何更好地表达活动品牌?
-
谈谈“目标思维”的落地
编辑导读:我们在做数据分析之前,一定要搞清楚需求方的目标到底是什么,要根据目标来重新定义业务方提出的问题,这就是目标思维。目标思维有多重要呢?应该如何落地呢...
-
在线教育平台竞品分析:网易云课堂vs腾讯课堂
本文从移动端出发,对当前比较热门的两款在线教育平台软件-网易云课堂和腾讯课堂进行比较和分析,不足之处还请大家多提意见。 市场分析 随着国内互联网技术的发展和移...
-
即学即用|父亲节活动的4种运营策略
-
B端产品经理和体验设计师的工作职责边界梳理
-
豆果美食电商分支用户体验报告及建议
-
数据分析师如何提高工作效率
在我们的日常工作中,提高工作效率是每个岗位都需要实现的,在工作中,面对比较凌乱的事情时,首先我们需要梳理清楚,按重要级进行开展;本文作者分享了关于...
-
2016中国云计算SaaS移动办公平台年度综合报告
-
网易大布局教育事业:网易公开课、网易云课堂和MOOC分析
-
一篇文章搞懂语音交互的来龙去脉