好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python区块链交易类教程

创建 Transaction 类

在本章中,让我们创建一个 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)

当你运行上面的代码时,你会看到类似于这个 : 的输出;

现在作为我们创建客户端的基础设施和如果交易准备就绪,我们现在将有多个客户在现实生活中进行多笔交易.

以上就是Python区块链交易类教程的详细内容,更多关于Python区块链交易类的资料请关注其它相关文章!

查看更多关于Python区块链交易类教程的详细内容...

  阅读:52次