科普文丨Grin交易文件都包含了什么?

与其他加密货币不同,Grin不使用地址。要发送或接收Grin,发送方和接收方必须在彼此之间来回发送信息。
头等仓APP下载

与其他加密货币不同,Grin不使用地址。要发送或接收Grin,发送方和接收方必须在彼此之间来回发送信息。

一种方法是通过文件。此文件可以在几秒、几天、几年或任何其他时间内共享。

在传递这个Grin交易文件时检查它的内容。

在阅读本文之前,我建议阅读“Grin的详细交易解读”来理解其中的一些词汇。

科普文丨Grin交易文件都包含了什么?

查看Grin的交易文件

假设你想向Bob发送10.25 Grin,并且你俩想通过一个文件交换此交易所需的信息。你可以运行:
科普文丨Grin交易文件都包含了什么?

这将生成一个名为my_grin_transaction.tx(我的Grin交易文件)的文件,将其发送给Bob,以便他提供响应文件。

让我们打开这个my_grin_transaction.tx文件。

科普文丨Grin交易文件都包含了什么?

科普文丨Grin交易文件都包含了什么?

按顺序有以下信息:
num_participants:参与此交易的人数。Alice对Bob意味着2个参与者。Alice对Bob和Charlie意味是3个。
id:该笔交易的唯一身份标识。以便我们在收到Bob返回的文件时跟踪交易。

接下来,我们有一个tx(交易的缩写)对象。它包括:

1.内核偏移量(这里称为偏移量)。
2.一个主体对象,包含要在此交易交易中使用的输入、此交易的输出(当前只是我们能更改)和交易内核。

深入研究一下:
偏移量offset:内核偏移量。这是一个随机值,从盲因中减去这个值,以使任何人更难跟踪区块链上的这个交易。

tx对象的下一个对象是输入对象。这个对象包含我们在这个交易中花费的输出信息。

科普文丨Grin交易文件都包含了什么?

特性:在本例中,设置我们正在花费的输出的特性(此交易的输入)为“Plain”。特性变量可以是“Plain”,也可以是“Coinbase”。

Coinbase输出是由挖矿奖励产生的输出。Plain输出只是意味着它不是一个Coinbase输出。

承诺:我们试图花费的输出。Grin中的输出是佩德森承诺Pedersen Commitment。要了解它如何工作,可阅读Grin wiki

仍然在tx对象中,我们移到输出数列。

科普文丨Grin交易文件都包含了什么?

可以看到,这个输出数列已经为交易提供了一个更改输出。如果我们花费10.25个Grin,并且在这个交易中只使用一个输入(就像这里的情况),那么该输入至少会包含10.25个Grin。例如,如果这个输入包含20个Grin,那么这个交易还需要一个输出将9.75 Grin发回给我们。

Grin具有唯一性,Bob需要创建一个输出返回给自己,由于我们还未真正将文件发送给Bob,因此还未构建好交易这一部分。更改输出与Bob无关,因此我们能计算出更改输出。

除了特性和提交之外,这个输出还包含一个证明。这是输出的范围证明,它证明了输出中的Grin的数量非负。范围证明允许我们以加密方式证明输出非负,而无需揭示输出的实际内容。

该交易文件的下一部分是内核数列。

科普文丨Grin交易文件都包含了什么?

交易内核也从特征变量features variable开始。这部分可能有点令人困惑:正如我前面解释的,你看到的任何输出的特性变量都是“Plain”或“Coinbase”。但是在交易内核中,特征变量可以是“Plain”、“Coinbase”或“HeightLocked”。

科普文丨Grin交易文件都包含了什么?

交易内核的三种不同“特性”:Coinbase、Plain和HeightLocked

“Plain”交易表示锁定高度为0。换句话说,一旦将该交易广播到网络,就会立即被挖出。只要挖出任何Grin交易,就可以使用它的输出。相反,“HeightLocked”交易意味着直到某个区块号才可以挖出该交易。

一旦被挖出,输出将具有“Plain”或“Coinbase”的特征,正如我们在上面看到的,在被挖出之前,它与被高度锁定的事实不再相关。

交易内核还包含费用和锁定高度、内核余额(这里表示为excess)和交易签名(这里表示为excess-sig)。

在收到Bob返回的响应文件之前,我们还不能计算余额和余额签名。这就是这些数列都为0的原因。

在tx对象之后,我们仅剩以下字段:

科普文丨Grin交易文件都包含了什么?

1.数量:转移的Grin数量是nanoGrin单元的倍数。nanoGrin是Grin的十亿分之一。只有发送方和接收方才能看到这个金额。

2.费用:交易的挖矿费,也可以是nanoGrin的倍数。
3.高度:创建此交易文件的区块号。
4.锁定高度:此交易输出所在的区块号变得可花费。可以看到,在本例中,锁定高度等于高度变量,也就是可立即挖出该交易。

接下来,是一个参与者的数据(participant_data)数列。

科普文丨Grin交易文件都包含了什么?

它包含交易参与者之间来回传递的信息。目前它只包含我们的数据,因为我们还未与Bob共享这个文件。

1.id:此交易中的参与者id。ID为0对应于交易的发送方,即我们。

2.public_blind_extra:对全盲因子总和的承诺。可参阅Grin的详细交易解读。

3.public_nonce:对随机数的承诺。这用于构建交易签名。有关这方面的更多信息可以在Grin的详细交易解读中找到。

4.part_sig:我们的部分签名为空白,因此直到我们收到Bob返回的数据,才能进行创建。

5.message:可以添加到交易中的额外“消息”。如果你使用-g标志创建此文件,并在其后放置任意字符串,则该消息将出现在这里。

注意:当人们提到Grin交易的“消息”时,通常指的是交易费用(如果有的话)和锁定高度(如果有的话)。这个额外的“消息”字段完全独立:你可以添加一个字符串发送给Bob,反之亦然,这个字符串永远不会发布在链上。

6.message_sig:我刚才提到的额外的“信息”字段由全盲因子总和签名。有了签名,Bob可以用你对所有盲因的承诺来验证该消息。Bob在收到这个文件后,可以将自己的额外消息和信息签名添加到文件中。我们可以用同样的方法验证他的信息。

我们将此文件发送给Bob,并等待他返回响应文件。

Bob的响应文件

Bob在他的Grin客户端中使用以下命令接受该文件:

科普文丨Grin交易文件都包含了什么?

此命令会为Bob生成my_grin_transaction.tx.response的响应文件,他将发送回给我们。

打开这个文件。

科普文丨Grin交易文件都包含了什么?科普文丨Grin交易文件都包含了什么?

正如我们所看到的,这个文件包含我们发送给Bob的所有内容,以及Bob在上面添加的一些数据。

在参与者数据数列中,我们看到参与者Bob的id为1 的新条目。Bob加上他的全盲因子承诺,以及随机数的承诺,连同最后的部分签名。

确认交易

当我们收到Bob的响应文件时,我们运行以下命令来完成交易:

科普文丨Grin交易文件都包含了什么?

我们实际上并没有看到缺失的部分被填满,而是看到:

科普文丨Grin交易文件都包含了什么?

grin钱包完成命令,运行成功。

现在,我们从Bob获得了创建输出并将其添加到输出数列所需的所有信息。在后台,Grin客户端填充缺失部分(如extra和excess_signature),将该数据序列化为字节数列,并将其发送到Grin网络进行验证。

不久,这个Grin交易将被挖出,Bob将收到他的10.25 Grin,我们将收到找零。

本文由 区块链资讯平台头等仓 作者:Winny 发表,其版权均为 区块链资讯平台头等仓 所有,文章内容系作者个人观点,不代表 区块链资讯平台头等仓 对观点赞同或支持。如需转载,请注明文章来源。
头等仓APP下载

发表评论