Grin,一种使用MimbleWimble协议的新型加密货币,连日来让整个市场为之兴奋。但其相关教程却乏善可陈。

Grin输出采用了PedersenCommitment。输出形式如下:
新型加密货币Grin交易的具体原理解析
Grin输出——PedersenCommitment方案。
PedersenCommitment是一种隐藏信息的巧妙方式。如果这是你第一次听到Commitment,那么再看到这个词语的时候你就可以将其理解为“隐藏价值”。
如果我们选择一个非常大的数字k作为私钥,则k*H被认为是相应的公钥。即知道公钥k*H的值,要推导出k的值也几乎是不可能的。..
•r是私钥,用作盲因子,G是椭圆曲线上的不动点,他们的乘积r*G是曲线上r的公钥。
•v是输入或输出值,H是椭圆曲线上的另一个不动点。
在公式(k+j)*H=k*H+j*H中,k和j都是私钥,说明两个私钥和获取的公钥(k+j)*H,等于每个私钥的对应公钥和(k*H+j*H)。
在ECC入门中有对密码学更深入的研究,但简而言之,要花费Grin,就必须要知道盲因子(r)和Grin的数量(v)。而要解构commitment来推断这些值是不可能的。我们必须提前知道这些值。
盲因子之所以存在是因为向你支付Grin的人也知道v的值是多少(他们向你发送了多少Grin)。但只有你(而非Grin的发出方)知道该输出的盲因子,因此,只有你能够花掉这笔输出。
与其他加密货币不同,Grin不使用地址。要发送或接收Grin,发送方和接收方必须在彼此之间来回发送信息。
一种方法是通过文件。此文件可以在几秒、几天、几年或任何其他时间内共享。
在传递这个Grin交易文件时检查它的内容。
在阅读本文之前,我建议阅读“Grin的详细交易解读”来理解其中的一些词汇。
image.png
查看Grin的交易文件
假设您想向Bob发送10.25Grin,并且您俩想通过一个文件交换此交易所需的信息。你可以运行:
image.png
这将生成一个名为my_grin_transaction.tx(我的Grin交易文件)的文件,将其发送给Bob,以便他提供响应文件。
让我们打开这个my_grin_transaction.tx文件。
image.png
image.png
按顺序,我们有:
·num_participants:参与此交易的人数。Alice对Bob意味着2个参与者。Alice对Bob和Charlie意味是3个。
·id:该笔交易的唯一身份标识。以便我们在收到Bob返回的文件时跟踪交易。
接下来,我们有一个tx(交易的缩写)对象。它包括:
1.内核偏移量(这里称为偏移量)。
2.一个主体对象,包含要在此交易交易中使用的输入、此交易的输出(当前,只是我们的更改)和交易内核。
让我们深入研究一下。
·偏移量(offset):内核偏移量。这是一个随机值,从盲因中减去这个值,以使任何人更难跟踪区块链上的这个交易。
tx对象的下一个对象是输入对象。这个对象包含我们在这个交易中花费的输出信息。
image.png
·特性:在本例中,设置我们正在花费的输出的特性(此交易的输入)为“Plain”。特性变量可以是“Plain”,也可以是“Coinbase”。
Coinbase输出是由挖矿奖励产生的输出。Plain输出只是意味着它不是一个Coinbase输出。
·承诺:我们试图花费的输出。Grin中的输出是彼泽森承诺(PedersenCommitment)。要了解它如何工作,可阅读Grinwiki。
仍然在tx对象中,我们移到输出数列。
image.png
可以看到,这个输出数列已经为交易提供了一个更改输出。如果我们花费10.25个Grin,并且在这个交易中只使用一个输入(就像这里的情况),那么该输入至少会包含10.25个Grin。例如,如果这个输入包含20个Grin,那么这个交易还需要一个输出将9.75Grin发回给我们!
Grin具有唯一性,Bob需要创建一个输出返回给自己,由于我们还未真正将文件发送给Bob,因此还未构建好交易这一部分。更改输出与Bob无关,因此我们能计算出更改输出。
除了特性和提交之外,这个输出还包含一个证明。这是输出的范围证明,它证明了输出中的Grin的数量非负。范围证明允许我们以加密方式证明输出非负,而无需揭示输出的实际内容。
该交易文件的下一部分是内核数列。
image.png
交易内核也从特征变量(featuresvariable)开始。这部分可能有点令人困惑:正如我前面解释的,您看到的任何输出的特性变量都是“Plain”或“Coinbase”。但是在交易内核中,特征变量可以是“Plain”、“Coinbase”或“HeightLocked”。
image.png
交易内核的三种不同“特性”:Coinbase、Plain和HeightLocked
“Plain”交易表示锁定高度为0。换句话说,一旦将该交易广播到网络,就会立即被挖出。只要挖出任何Grin交易,就可以使用它的输出。相反,HeightLocked的交易意味着直到某个区块号才可以挖出该交易。
一旦被挖出,输出将具有“Plain”或“Coinbase”的特征,正如我们在上面看到的,在被挖出之前,它与被高度锁定的事实不再相关。
交易内核还包含费用和锁定高度、内核剩余(这里表示为excess)和交易签名(这里表示为excess-sig)。
在收到Bob返回的响应文件之前,我们还不能计算剩余和剩余签名。这就是这些数列都为0的原因。







