Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
88 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
9 [- L$ i8 Z' c& k" U. @' M& j/ `, F; v" E! Y
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。
' d/ E& Y  \# X. b9 f4 z8 |; F4 b: a2 v- I
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
# H: \3 U% {& ]  y2 ?9 F# b
% q) q7 J4 g- r; s1.png; C( _! c* O" }5 x5 R/ D$ D- f

) z% X) B7 G$ Q) D7 u$ t1 ^# ~1 R-一个 Grin 输出就是一个 Pedersen 承诺。-
% x; V3 s1 c' Q, m5 ]5 u% V# T: K: R" q( ]% S3 Z1 @0 E# ]
Perdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。+ J( H' ?. D7 y1 C

1 s' [6 p- l: ]  L# P以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。3 f* x  O9 q5 l. t
; z# B1 Q' J0 N2 V& _! {
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……8 J7 @  V7 g8 o: T/ j% P
# g6 J0 D9 ]9 @; U( a
? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。" _$ o& W0 _# l* `$ E
7 B" v0 ~2 ?; g1 e0 r
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……2 |  v% `, v* g

' d( I: \# B' W$ Q0 ?& x. U已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。5 z$ `1 E% J9 H9 \, N$ K

% ^' B8 @2 V3 D# Y$ Q若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。
" I- b: K1 E- u1 \" O' o, j  F
+ d5 ~+ z, C. O/ `$ k* YGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。! x& ^7 L0 C) T' K8 ?1 s
: q" l2 G$ ?' E5 u' e
假设这个输出包含 40 Grin,使用的致盲因子为 20 。1 Y2 X7 e0 D( Y1 l: p6 [. Y  r

. i: L/ m) |+ \) n9 R$ F- k. U(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
( f  |% t3 F" @' o- Y5 `) K- {1 u, A  G  h. n8 o( e6 P. j6 u
-在该输出中,致盲因子是 20,Grin 数量是 40。-
9 H  ^( M' b6 J! a3 B1 ~0 I. W
. q7 L( M1 O* L0 J" C在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:
6 q4 s8 |: k+ T+ w, e" T- s3 N9 \6 h
-Grin 输出(位于 “commit” 列)。-
* k4 I( m* [( k, R: k
3 Q/ W- y; n/ s( Q& m再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。
6 W! Y- k5 _  H; d9 r4 L! J! y% b
% b$ m  }4 w4 i4 j花费该输出
: ?* w' U. n" X, H! Y6 g6 c* J7 C  {8 j7 I, N/ d0 U
假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。1 N9 G  A0 A1 ^  C# N

& b& t6 f, F, J% r" t如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
& E3 f1 n3 z6 V" g* M. {$ b! {1 b  t' M; m9 X2 b
-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-
2 V& O; e3 c7 r& F: \
/ j: q9 S" X+ J9 h3 W" v6 i' L$ z这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。
) P- _2 ]6 P0 w1 |% @
+ n/ I1 V$ M% B" j# qAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。" P# ?; V8 P) G$ L* C

' C' q7 j5 x' d/ A) ?! r-Alice 的找零输出。-
. W$ k, T5 F4 B/ C/ E( p# p7 H8 |( V; ]$ J5 d3 r9 ~" S
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
: z$ e$ Z4 |. Z, q) x
5 u& y, x! r! T+ n' {3 L7 b这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。
7 M/ h' R  Q; B
) _4 z4 R5 V5 M-Alice 的致盲因子总数。-$ d# r& h* \9 E7 {: W% h1 n
) L/ U) [, L$ Y1 r. |
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。). d1 |3 }. |4 d; T

5 m4 ?; X0 D/ a) Z8 D最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
) V- l, g0 R" i4 N( {! ]' M* W, Q! E! L( n( p
Alice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
, V/ x) u; T8 F/ m& j- I; d$ K/ @+ A) i
Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。
; ?+ D$ ~/ K  [* F8 m6 t: G. }4 J/ h9 d- ^; v  ?$ Z7 H
元数据(Metadata)字段:7 d, r7 N: ]4 m

: a/ V6 T: ]' ?3 i发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
  l; H/ j! k$ i9 a& @- R" V' _8 J4 h* K* V; t& z$ f
交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。* r! e  a* {. h: B: G, Z# p3 C

& @! M9 z- R9 Y1 k6 B) E; N% {% e交易费(TX fee): 交易费(在本教程中咱不讨论了)。) R" e# K( _" T( R; u) G! b' U1 ^

: p/ n8 }, q8 ?0 B* `$ b/ T锁定高度(lock_height):交易生效的区块号。
" n# ]) w4 d, m8 b1 p' n
1 K, ^& z# v- R7 p6 W数据(Data)字段:
' ~+ C; `& J9 h! M0 Z2 t+ D  t
/ k6 F- h4 |" N' ^3 v* g" J$ ^* i交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。, _7 Z% i3 I5 e; ]2 ]8 {

# q) J1 q; v- M$ K+ ?& N找零输出(co): Alice 的找零输出
* c  {* E  X$ `- e% I+ H( d1 T  ^
: [$ k2 C! P9 h9 ~ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。$ I5 @' W- \& M2 @
& K9 ~2 V; V  q; M' V: W
rs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。4 |. h7 D& K: y# n

6 k" ]+ B2 i) C2 N- s, jAlice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
( d1 E9 C6 m  }; B; \7 s' f6 E  x$ t5 _
Bob 的操作
9 V# E9 \8 t1 |/ {
8 U/ R+ C/ U0 ^, r* r当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。( H  V* c2 g0 ~# P# }* w. N

4 A$ G% J8 H% u7 i-交易 “消息”。-! t; t+ F  e/ n0 h

4 e5 O6 p7 m. v! X* r: ]1 P7 aBob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
) Q/ {$ {( B& d; n# [$ B. \! g- |7 p: \
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:
( p% w% r3 e+ W$ i- Y1 v
' D: T+ S" t7 B) E6 f7 h% q-交易的 Schnorr 挑战。-  I! k" V( y( `% h+ h) i1 w9 H
/ k" R$ e- j# k6 w
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
2 E. i' j. g- r' O4 ~* x& ^* q+ O! T, H; c
交易消息。7 Q( R  o$ W/ f0 C8 I" b/ D

( B) w6 \( ?" |0 Z3 Z. {Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。) V/ A8 @6 X/ E0 S

6 }# ?8 ~: p4 v8 `8 g7 H7 [Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
: i0 e- g; [) ]: c7 T* k$ d4 Z- r7 E" Y0 A4 D
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。7 V5 S9 h# Q8 Q+ @4 U
4 S7 C8 y1 V+ @3 ^
-该交易中 Bob 的部分签名。-
2 s. d3 b2 u3 B
7 P6 k; h  `5 t当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
. F9 i6 V  o; e2 q, C. k
1 A% G+ b0 S% z0 ~5 uBob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-' [) e5 j& X; C

7 q3 L0 s  `8 [# c- b: ?按照顺序,发送的内容包括:
& j- [7 l/ |; q! |3 ^
  W. F# X1 V. T4 Ysr: Bob 的部分签名。
/ p1 J1 V% K" M5 \3 j% u/ W
& [- W$ ~2 \6 i* O3 y& }kr ? G: Bob 所选的 nonce 对应的承诺。
; R& _: t% C! I4 f: J3 h
) Y+ c: t& a0 \: Brr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。* U5 N6 ?# ~( S: V' L0 q9 w/ [
: t2 T" Y1 ?' e- x; `
最后一步:发送回 Alice
9 }+ N  ?8 t( v# X
7 o: d  `5 X8 C. ?% ]# c3 D& a' T- [Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
/ |7 ^" F; @, @( ?+ R7 p' q# l( t, G5 s
相信你还记得,Bob 的部分签名 sr 包括以下内容:
+ s/ G+ k% j- [0 @& m2 B' {
3 N" M3 D/ e2 a7 p4 \/ d-该交易中 Bob 的部分签名。-
$ D1 }- m! Q0 r* s" x, b; }, \* ^! Y" v
' N6 o8 W# ]6 t- m4 S基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。5 [) i7 ]' [% I+ i' o

! M7 V+ J* k" n" J  qAlice 在等式两边同时乘以生成点 G。-/ y% v7 a9 p2 r0 |
* K6 L' x- _& e9 \( a  M/ C
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。
$ o, n0 O. K2 _  ~, _2 s. w
4 [' ]8 \! c6 T& V. _: W  Z3 O7 }通过完成以上操作,Alice 能够证明:! l" e, F! W: \" z* |: K0 O
- U- i2 M5 A9 l7 X; n
Bob 知道他将收到的 Grin 数量(25)。# Z5 Q! l1 W5 q
  f1 C" }- M8 Y& ?# J
Bob 知道他的 nonce 值。, p* e: n( E+ y9 Q& \

1 Q7 r- b! {: j7 oBob 知道他为这 25 Grin 选取的致盲因子。
- T9 }$ A6 _8 j  t+ P8 u7 ^% q& a7 y" p. ?% w; y( g9 L! x
……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。1 j2 q9 h( B: X
* H) ]( w: Z% m0 B
之后,Alice 生成她自己的部分签名:
: W8 z' `3 W7 d  f( J! @. H. J- m
, G: w# Z4 j- F& @-该交易中 Alice 的部分签名。-: [7 D  g4 b5 w* G3 v

7 N4 E, X5 m! y3 L" zAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:
: B" e3 h% r) l. p: h9 ~% \
* S. B4 P5 C- u交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。# q* @0 @4 c/ u6 y) S0 k

) ?( j  i1 i, c' ?按照顺序,签名 包含:
- n+ l. W: d0 n) v
# ]: J+ o# Y6 r2 r$ S- LAlice 和 Bob 的部分签名之和。
: w* ]' s+ `8 |! \, d" B$ r- U! n% X1 R, V! O1 A
Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。6 U# \* d# J/ o/ T. k, x7 U0 v
# |: k; Z; I- r3 v3 z) i; p
合并之后,交易签名可以表示成如下形式:
$ o/ Q9 T8 n; v$ _% o% j( q) z+ m1 ^$ f; p1 I' E
-交易签名-
) G* t- h) ?% b9 z5 Z2 n& N% S
. Y) i( Z; q/ I其中,s = ss + sr,k = ks + kr。
' K1 H/ z1 ^" v2 W0 q" S. ]1 d; a' W4 Q+ N" I* A
记住这个签名 —— 你很快就知道它的意义了。
" i. ]" B7 e8 c: m' N) W" x
4 Q9 L( l# D4 d3 f2 u$ M: Z  `交易完成
7 m0 `! H3 w" K% h9 H
  @9 N3 S- O0 t2 M8 p* [% i" ~数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?8 n3 n" I6 C% h6 V8 Y* h
: o9 C4 L+ @3 m$ \+ f2 O
在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:( B+ B+ \! n( Y. D
; f+ g% A$ x: U: N, I9 r* D
3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0+ J! E$ J2 g  a/ T! ?5 H

  [& y6 \) T6 ?- }* d; o同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:& G! |' [! E6 l' T8 {8 [1 V

6 @4 a/ b: R/ |/ w3 @; t(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)% T& B- `+ _5 {; p5 G/ ^& X+ f
! E1 q$ x5 I; G6 x3 u5 q- p  ~
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。6 `: J' a" d& E* }1 I, [* r+ x3 K6 Q
- d8 D  }5 i' s
如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
  ]- P! B( u$ c1 l% ]; M. U  |9 n; w& G6 _$ U" ]& h; r6 _
还记得上文得出的签名么?
- L, S2 L/ }$ a6 v6 V) j' E
3 M1 B' i5 Q9 y. {  C% N( W9 q-交易签名-
# M3 y+ H! ]3 k2 X5 `' d6 q; h" n0 g$ }2 _9 k
该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。7 n  Q1 ^) N( H. u* X9 @0 z; a; N
& l) Q3 l' Z  Y
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。" k) r- P: A4 a) @- S* P# K( Z

% x! Q) O9 N. |-等式两边同时乘以生成点 G 后 Bob 的部分签名-
( E  }) T6 u1 F8 ?% Y$ _7 V" W$ Y! d6 N  P& J' R/ R
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。! @; Y% }6 m  }! E5 K$ a) }  Q

) x$ s& D# h: r/ R! \' F9 K- e-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
) p. Y8 s* V/ z. c* A" V6 X* ^; c( L, h$ l
如果把两个等式相加会发生什么呢?你将得到:
3 [$ `) w1 M1 ^) z/ }1 L, K; P& E4 d
* b$ Q1 [' R/ g4 a& csr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))0 @( S1 l0 \* U# q
, w3 m. w& i1 n6 a; ~7 b
其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
8 A5 l4 |1 X; C  g7 f% p
+ B- m7 D- C0 uBob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
+ }6 z8 C- ~; S4 v( B6 [: s5 @- a1 Q! O7 z
进一步简化这个等式,我们会得到:
) _2 ]) R) D8 E- l2 ^& U, Z7 ]! |' [. L( u8 ~
sr?G + ss?G = (k?G) + (e ? (r?G))
4 ^9 n8 V# Y0 U: R: a, C! Q5 O* ^' g
或:
( M1 A) E9 l# n7 @( C' T4 N4 H0 `  A8 H4 A+ K! h
sr?G + ss?G = (k?G) + (e ? (25?G))
  F$ ~& T% W$ J# h  o( I: A3 p- \$ R  {' V- q
那么接下来只需检验等式两边是否相等就行了。& E" q  q; E/ g3 ^' ?% X
6 w$ p% n! J  l+ A) f. @
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:' M/ Z/ ]  |+ E/ w  ?& R
! R+ U: x4 y' H; x5 n9 s6 O
Alice 花费的输入中没有凭空产生多余的 Grin 。) ]3 R+ b3 A1 p+ N. B
+ C( m1 Z& z0 A; B8 Y" H
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。: g2 z" ?0 A5 k: n# @: z, e4 @9 s9 i
- E  R( O6 w6 i# X0 T& I0 \3 o
刚才我们用来验证交易的信息被放在 交易内核 当中。; v' j) f6 ?/ p& N0 l
& W2 G+ \8 P8 d9 K8 K# j. Z
交易内核6 Y0 F0 w& S; ]5 k3 @* R& [' O8 x& P6 y

  b1 B) B1 B$ `2 |, r除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。0 D- W8 Q* ?& `0 Z1 @+ m

' j  A" h/ E, ?/ l# a8 o6 r以下信息将存储在交易内核中:" y* ~: g. E/ \5 f/ q  c

7 Q6 _; x. b* v交易签名 (s, k ? G)。
$ t3 r% R8 U" t. Z* n! _5 \- |: g1 C; \& w; Y7 a9 G3 h; Q
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。9 D/ ~$ H+ b6 x" T3 }

2 B9 H  }1 |& u/ l/ t8 u该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
; }: r* p* D  P9 T: Z+ @, v/ y" c# r/ O3 R
总结
, M) l# o/ V1 C% N4 T7 o7 q  O2 F* u! Y, w
在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
8 g3 f4 ]( \, z. M) G6 i: c6 \( |- w
所花费的输入。
4 M7 D, Z; g5 Y, ^0 u
6 G! `2 F( r" c# v) y/ @$ R" w新产生的输出。9 b7 G4 h5 Z/ V, Z- J: a3 I( n
+ W6 y% u, ]: c7 w
交易内核。
3 P! f3 F1 g* R( w) x6 J* {0 [7 c: o! X' G& Z
内核偏移(我在这里没有描述)。; t6 R9 k8 U- n
' T5 z; i6 u+ P8 I/ \# W$ v
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。
9 r( k$ X2 c2 h$ L( {$ D; C+ o& Y: p) {  {- |# N
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3