Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
160 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
. W9 @1 a- z. P" u% s' c2 T: v4 }1 X% o, n! l/ b
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。$ i3 \. }: D5 R. R
4 D* z" {1 J9 p3 d2 ]/ B
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
/ ]( _( o& U9 T( c2 z8 B5 V9 ~: g& p5 Z6 g7 L: D9 a: l
1.png
1 V: s8 Y, s' [$ Y0 `) T7 Y
! e. _) |. n* c. @  A' L( H-一个 Grin 输出就是一个 Pedersen 承诺。-  q$ Q( g+ G! L' N2 X
3 g# Y# u7 h9 u6 ?% [/ m& g8 I
Perdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。- ?' T6 j0 ^, M7 o* K- u. i
, F9 q, `5 L, n1 ]
以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。
  D% P( [5 @  Q& t2 V/ }- J
$ b/ h3 _9 \+ x) {假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……
) c: @: B$ F! {) i4 }9 o- I7 @% V- D6 v+ |5 d, V
? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
6 @% r" K2 B, i' Q# l$ P, n  E. c
) y+ B  [7 ?0 u$ \$ Z% W% ]% O? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……% }' e. h/ I1 S4 H  o

: |/ A3 l" ]1 n8 P# y; u5 i已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。) L0 @7 {/ i/ a/ X4 q8 L
. W6 m4 T( B* X# c* D0 Q
若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。
( W5 {: d+ r. T4 Z
3 N8 Z& r! ?" y5 J( uGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。
# e/ ^# f. W5 D! B8 P& s; p% s
6 K8 w6 N8 U+ E% }- E5 L假设这个输出包含 40 Grin,使用的致盲因子为 20 。
" g5 B3 S5 S, A9 `; h7 n! Z4 v3 B7 i( f7 w8 h9 }
(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):3 f- p9 X4 O# H

; t. q2 [# d' b0 m) |1 L8 v-在该输出中,致盲因子是 20,Grin 数量是 40。-
# z6 b7 }, T# t5 y- G/ C1 m- }0 K1 p4 ^, S" _# v) [& k
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:
3 F$ N6 Q) p9 v  M" H4 y
5 l8 d, h  u$ ]: [, o7 t" w-Grin 输出(位于 “commit” 列)。-
. ~+ k) a5 `( ^/ X) M7 b9 I
9 A, o! p5 i9 |# u7 u# }6 L再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。; d! k6 }9 B3 F% f' i  ~  ]0 p+ e

) w5 h6 ^: ]* j% X5 u, }花费该输出, x. C2 P! p' o
, k  x, u+ E8 @6 }7 i
假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。
  m6 {$ b' L" G) j2 V. P0 i- P" y$ b
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。: b- F6 |  G2 D. C

4 p. w+ w  z, J6 J: K- T% d/ Z4 \  W-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-5 q7 r  O" d6 T

+ C3 _4 A# M! F这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。
, j' R" a7 Z3 H, X, X4 `" ^- a
7 S" B6 {& @- Z, z$ Q3 R- i) K8 g) E7 oAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。& o" ^* l3 O0 p, Z

: i, e+ a$ G6 I3 Z$ P, D: P-Alice 的找零输出。-
# I0 d3 U: R, b& k( ?5 _! j) ~3 X4 s6 J6 S3 g6 P7 m, r
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。* X2 ^! h" |- y+ P  d- f
1 c( P- x1 Y7 i# ?
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。
) v+ o3 V! ]5 E# |: ^/ W% o# i, I9 S: ~2 w! g. n. U5 T
-Alice 的致盲因子总数。-
& N% u7 ~. v5 x) N; |' ^+ x4 ~; s* n( f) R3 Z
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
" b8 G; ~6 O) h. z
7 \6 Y1 ]4 f: L- q) l$ {2 h2 _最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
2 K9 B6 z0 a5 b! _' `- {
; K% W5 [: A$ c2 {7 `  ]  xAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。1 F7 V; M: D- g) f( v3 t
  c, L1 ?+ c! {" a! X# T( G! j
Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。
& P% L: I  T$ j/ X/ J' u2 e9 Y1 W+ k  v$ Z( r8 I( Z
元数据(Metadata)字段:
1 Z' R0 k# e- w; Y* W- b
  H& q+ r; i  P2 K4 o* U$ t5 H# C  R发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
+ e: c5 Z) ]' ]: f1 h0 |" _. R& M& q
交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。/ `1 N. }1 p8 S" p( V
2 h1 h- J! ~& y6 D
交易费(TX fee): 交易费(在本教程中咱不讨论了)。+ W7 S0 l3 g+ m9 |: p7 L# y+ p: [! w
5 l) J$ w/ |: ?4 t' E* `
锁定高度(lock_height):交易生效的区块号。
/ ]+ H' G' \1 z: y5 S6 B6 r7 |
2 F$ d7 A( z/ G8 b& W4 Z数据(Data)字段:; R- M' {0 l5 j6 u+ x2 v4 f

4 d, E  h4 q$ k) {: F6 ?交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。! H2 {# j7 ~4 Y7 t6 E# J  N9 t
" z( ^' J3 b" O# y' `
找零输出(co): Alice 的找零输出
9 b+ ]9 w  q4 c7 K& S. c
; c" g3 [# V' n# k6 Eks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。: y$ p8 d3 E; o) [; f
: M7 G5 W( j4 D% y& v8 O
rs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。2 Q) [/ j% N2 F( R1 H4 j
) D7 _( {) O9 G$ D% S7 B
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。$ G3 a# m& G/ R/ m( f- L

; |5 n2 V2 `# j$ r3 pBob 的操作
( j0 D" Q6 V) K4 z9 j1 K% r7 O8 R) o
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。9 {5 b3 C0 g0 I, ]# Q

  O# D7 t- ~5 c7 |) ^2 A3 }; g-交易 “消息”。-
6 v5 _9 O- l! W/ y2 I- i" ^/ m
) ?4 z0 p% z. T( Q( s- \; d8 ?4 SBob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。' G6 I8 @1 d; X$ f
$ ~% `" o/ E7 c. J$ Q
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:2 ?8 S* @1 K; ^/ F4 U0 l

8 H$ H0 B" N# G/ `1 {9 [-交易的 Schnorr 挑战。-
; }% B" e- C, l1 [4 S) i/ c/ U# S6 e
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:6 p1 ~- N9 H) N6 }4 z( w
- S" S& r4 K- G3 E3 {# H. S- y
交易消息。" O( J4 i# D. W, d
7 v. `0 j6 \# v' x! H) o
Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
4 ^+ w0 t0 K* O
" E8 Y% R1 o9 v7 g' S# w3 fBob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。1 f" z: F, T- b8 ^5 `
% d2 a& Z) C! e5 g; ]; P. x' B
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。
0 J7 m4 f" E4 _7 o, a4 r
) }5 g# C, P) N7 U6 b-该交易中 Bob 的部分签名。-
0 T& \6 Q+ y5 s# M! i* }# V) w# N/ J
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:/ T8 `# o2 n. g

6 J: O6 C3 a8 T9 p% W/ R. a- bBob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-
6 Y3 ?0 c+ F( r. O6 G6 S- ^. {1 W% z, D  }
按照顺序,发送的内容包括:
" {  J1 q, k0 O/ ~( H/ f4 g5 U# R3 A( N1 h
sr: Bob 的部分签名。, S' Z% i# ]3 g9 M# a

4 v! O8 n9 j, B: lkr ? G: Bob 所选的 nonce 对应的承诺。
( R: f8 a( r  {: d$ V" L) @. g; b# M
rr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。
, R) g: e+ S+ N6 T6 p& O% r' u9 m$ k: d' K+ O
最后一步:发送回 Alice+ E* M9 |7 s, v, r* B" m. S

; ]) z) b  D2 x" t( }; nAlice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
1 w1 ?" }! S+ c1 s" V; r- y
* [% A$ n0 g1 w# f3 a1 N$ K相信你还记得,Bob 的部分签名 sr 包括以下内容:, q) H4 g" s. |$ |5 H8 q0 Y

( e4 w7 G; T; N! v  `-该交易中 Bob 的部分签名。-- _  ~9 u, K7 _* T' [) @0 O* M
5 t# ~# P1 v) k
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。
& a/ t3 Y- G& H  [& y6 [2 E7 r) I
. p. F* A1 E$ D# ~% N# ?Alice 在等式两边同时乘以生成点 G。-+ d1 s% j$ h& J, |( L7 B% k

, A: }3 m1 m8 O: _) u4 _8 b% X因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。- g/ I* ^$ D( }: A9 b/ A
0 ?$ p  \, R+ p7 p  J+ f
通过完成以上操作,Alice 能够证明:
" P1 h$ z( C$ ?7 K0 w0 E# t& n! y" t
Bob 知道他将收到的 Grin 数量(25)。
2 C. X) ?6 Y# O- p2 O7 h* T
8 [2 j8 E$ p2 h. d# \Bob 知道他的 nonce 值。
2 t8 V  m1 O% c& ~- P
. e4 b) W3 a  g; WBob 知道他为这 25 Grin 选取的致盲因子。
3 b6 a$ G2 T5 n( }' o
. I" v$ p' q9 Q( D4 }……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。
+ t5 f  v- {' D! n
7 T* A: J4 m' ]5 a5 S之后,Alice 生成她自己的部分签名:
  V: h) W; A% k+ w) k  n. `2 w. L
-该交易中 Alice 的部分签名。-
; ?( [0 C  O' H/ l
# R" V& a) C/ m* |+ W* G6 A0 ]; A4 m& cAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:$ T+ s4 S5 T+ f7 Q6 N

6 I) T; V5 Y# M0 b交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。$ W4 W9 s) ]" R$ p' c2 w7 X! v

, ^9 e5 E9 B) |: w# S按照顺序,签名 包含:
& ~! m0 `, ^; O
3 r2 s! Z; U1 nAlice 和 Bob 的部分签名之和。$ u6 O) {6 M4 _- O! r

: T5 L& n$ i6 ^4 aAlice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
. e% T2 \. [* P  R
, p2 F2 c/ N& V$ ?合并之后,交易签名可以表示成如下形式:
7 p* G- {9 D( v4 A( u9 u
2 ?, O8 @0 ~, J1 O% U7 J3 r4 S-交易签名-* J4 A0 R5 V: X
) l0 e1 ^" y4 M4 K
其中,s = ss + sr,k = ks + kr。
! V9 n# m. P& T8 f0 k5 ^6 X9 o5 x% t6 z& b( Z" M% d
记住这个签名 —— 你很快就知道它的意义了。
9 ^9 I1 J% P; d9 ]$ M2 c, ^) W6 |0 y* d; l. {! H/ @
交易完成# ~- ^# p8 h& b* n& i  w
* g+ T2 M1 Y" C" I8 O9 f: m, y
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?/ n: c" S1 L3 W+ u8 i8 I. k
- |7 v0 F7 ~3 B7 s5 a& [9 l: P. l
在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
: W4 n) ~! j5 R5 r9 B- \8 t* p# M* f4 P3 B; t' a0 X
3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0
5 K- f7 r. O+ S6 I/ B. o4 e- p7 [+ ?, p+ C% E3 }+ X! r4 d
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:/ T  G" Q9 \% ^) S6 K
* j0 z' h: W9 y/ J! t7 x+ d
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)+ ~/ z: J" `( A5 ~
8 q$ C  ?/ F. g! \( t" L
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。
, `+ c7 v+ D/ z
6 a) H; o, M3 Q7 _! l$ V如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
" f5 P9 |6 @& t3 b& m" a4 E4 e6 Q0 b/ F8 d. O
还记得上文得出的签名么?. R7 r1 k; t# H. t

1 u: T4 I7 g. G8 o$ g0 M: f9 C-交易签名-2 Z; u1 f' a/ K9 a5 j+ ^. W

, {- }* p# A) }! f, V该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。! L" n4 q. C" `; ~; h: ~' @' B

7 f6 E4 c7 D8 m$ K- R' ]1 w还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。2 t2 g: b  I( i3 E: L8 V

' b' [* U7 ]! R: j1 v-等式两边同时乘以生成点 G 后 Bob 的部分签名-, L4 X3 X+ q! e, l; S' R  ^# @

& K/ l$ t5 M8 {1 ]同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
2 |8 x# G" w; D$ b/ [
- a3 r' @! k& a& q-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
- _9 C" r. q2 G# l
0 e; {& P8 B  s) d如果把两个等式相加会发生什么呢?你将得到:
7 M: M) i: \3 ?4 L6 C
: _) y" b& T9 B! T( [sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G)), V2 f. e) G+ T( n

# |2 p) A/ K& u8 A" T; \! F其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
, t  d  r- C9 H8 o4 a( A# l9 q' F
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。: L. G* x1 x4 g* T% O& Y

- }( z# E( H% W" h进一步简化这个等式,我们会得到:+ x  }) h- J& E9 \8 V
! f1 H# x) P9 `7 W1 g
sr?G + ss?G = (k?G) + (e ? (r?G))
% P8 {" ]* c4 n" H$ s& g
$ M$ ]! R3 X. o: N$ r1 M' `或:) _0 ?2 Y, U' O* ^! E
5 R9 @6 c1 H  [
sr?G + ss?G = (k?G) + (e ? (25?G))
! e5 c0 {) e1 d4 T$ f( Y- ]+ B% E8 C
那么接下来只需检验等式两边是否相等就行了。) d6 ~3 k" h  E1 j$ j7 _
  n! F4 G+ n$ N! _
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
9 h% D, x+ z5 Q0 c8 t; f6 H1 |! o: o# y
Alice 花费的输入中没有凭空产生多余的 Grin 。
1 D2 Y$ e0 C3 q; ~* C( ]
! [3 l" s1 ^$ t* ?- `6 VAlice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
5 p6 z0 b0 F( a7 n& }, E' z* H6 m! G$ ^0 i
刚才我们用来验证交易的信息被放在 交易内核 当中。. E' w! C6 N; {6 `
8 a) V1 [1 m2 q( c. ~  g$ I9 e% o1 d
交易内核
+ G2 g2 a/ p& f1 E! |( A" ]" f# U2 A( f  u( J* W" E
除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。
/ a. V! B/ J! D9 d" ?# e  [
6 X) J) n* U8 }以下信息将存储在交易内核中:- Q; }  C& p  Q, d7 n3 T4 Z
9 D: |( x  Q# s4 G$ e+ l
交易签名 (s, k ? G)。2 l/ u' M) V, V+ g7 L% E, f; O
. ?  O2 \% g) o3 X0 v
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
" `) `4 _! _; p, a) G/ C) r
. Z1 n4 V# g( \该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。. d- D! z: T3 \3 H. K" S
- g  Y' W+ w1 H/ i8 w1 X. y
总结
, ^& x8 s- Y; s  h# u. Z* `! u# m7 H3 H3 S/ E
在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:2 Z- W/ ?, M/ l  Q
, Q, ]4 l7 Q! A" U
所花费的输入。; N, [/ X6 g/ S# [' n
1 L+ P# L  Y8 h7 U" y4 r& O2 h7 z
新产生的输出。
) H' a! G6 c1 P1 m- `+ B/ Y1 B0 r2 j% I/ b
交易内核。
! D! \+ i" E  }( E
' o/ }. K, E7 W5 U8 f( Z内核偏移(我在这里没有描述)。
1 A% q4 i) N' h5 u& W) @5 h% J  Z0 n; c: i5 Z' z
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。4 R) s) b9 F/ P, _) p
) n+ }' T$ q) N! H
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3