Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
86 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。$ F, a: y- o, w
4 w8 h# X+ q% o3 G
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。' O1 a  y& M  ]- x( A) I; D+ z

6 ~2 C! W2 v0 _$ W; EGrin 交易的输出是一个 Pederson 承诺,采用如下形式:4 A, I" y! [( {! w9 `* B' \# |& }
. a. b4 _2 f0 k5 _8 e
1.png8 P$ k5 D# P6 o. X

/ n8 M, Z  m' t8 V7 s-一个 Grin 输出就是一个 Pedersen 承诺。-
# q6 g7 `% v8 T' ]' V$ G+ c
3 F+ f8 i) ~/ w2 KPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。
7 [: z7 B( ~) }+ t% U5 R2 z, s6 Y
, T" @. w, F$ E以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。9 g% L. E: A# ?  h) I$ w
* K- p5 P/ T' i0 ^) X
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……) N/ P/ l, C. |* R4 E# u

& F% f/ p+ s' H( a# E4 G: U; f0 O? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。! a0 A- b* ?1 X2 Z' }4 S
0 k# a, P5 c' T8 H: x' W
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
/ Q# W* r3 s  n$ j7 j2 U2 a' u
+ Q, v& g' t5 A- W" i已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。( T! w; Q# D* e: t; _
* @8 b% Z" E2 J
若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。. c4 _2 K' t+ Z: b1 A1 @0 |

4 _# y! o* C2 h( B7 N3 y  bGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。1 A' ]9 t9 s/ y2 l. I9 U& P

3 i7 R* u  q5 G' U假设这个输出包含 40 Grin,使用的致盲因子为 20 。
6 I# v' `. l8 k# h/ ]. G, j2 z2 i7 e* ?  q2 g, E$ A0 E
(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
5 V( m9 S7 I/ z# Z# n. ]# z: `/ |$ H8 N" }
-在该输出中,致盲因子是 20,Grin 数量是 40。-2 \, G; E) i  O% n* ?' q  M, j
9 a7 n; ]( m# k
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:) H3 }- N* A- b  T5 ^$ M4 Q7 W) o7 F' ]8 ^
0 e% Y9 ]5 W5 w% k
-Grin 输出(位于 “commit” 列)。-( a5 \1 a$ B# A' i& u
+ n4 |% E" @) T/ G1 J7 X/ s4 r
再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。" l3 ?$ e( M: D1 l* z

! u6 H8 Z: Y7 C) e3 g% k! b花费该输出# L1 a  _8 J6 D& g- g2 B

" V2 P" @( z- @! p6 x4 s假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。, P! }$ Y" ]% h: S. J$ c8 d+ _
' E  {) b1 Y% d" Z; E# ^0 ~
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。3 V4 `1 D, L- m2 m; E9 N7 G7 T
3 N: ~/ h, q9 t3 a8 C# m, p
-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-
+ M7 d6 s( {. C, m; E7 g  L; p+ Q# S  ?: _
这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。" t( D; i7 `) V" L1 ]# D$ H4 z
) G' R& l; G; M+ J
Alice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。
9 D0 [( O+ g, B  {' A
/ b+ I6 z' \$ L-Alice 的找零输出。-$ m) ?0 A8 ^5 M2 y

7 _* G: M; V- o( |2 _: m0 A正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
/ b' C$ j8 D4 R) F$ _# `2 y8 O+ D6 o  u" j
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。, j7 @6 i8 L; w( }: p9 _7 d  ]* J

% v' \' }; K3 R; O-Alice 的致盲因子总数。-$ b( t7 Z8 R2 L- t5 m7 E

3 b) D9 g% G" R1 i5 ~" Q. Nrs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)" v* E1 l1 f' K' B" Y
( u( ^9 T! }& S4 d5 d0 q
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
& p* s. I4 N5 S8 O* C5 ?" Y9 b) E! {9 l0 C
/ x: e  v2 Y# Z' L1 nAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。4 C# j1 F/ d4 C& r+ M! ]  c
# z0 y  y* p* f8 c
Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。! H: E, @7 y. M' r# r
+ r& C  z3 ^0 g5 Z
元数据(Metadata)字段:
* v3 y" D0 f0 Y2 N% k8 P# K
0 e1 `3 a; f5 n, [2 y2 W7 ]0 t( y发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
8 x) J( v8 N$ `! g) S& ^1 S
7 X; V/ [& \3 \, C: }交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。" B2 m7 p% p. ]; c5 }$ N) R
8 E5 `8 P  s6 M9 C$ Z' k
交易费(TX fee): 交易费(在本教程中咱不讨论了)。
/ A$ K1 C% D  R. X* X3 X
; {! R! k! j- n9 d锁定高度(lock_height):交易生效的区块号。
! K& g4 x" M2 \4 Z$ U
  G/ ~# U7 R3 t9 j4 @9 T. Z5 |数据(Data)字段:/ }6 u/ H3 w. t+ a
3 f6 Q( L& q6 u# h8 F) T
交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。# p6 _& I3 Z. ^( v0 e! g" n

/ r+ w9 n* v' x1 A  s* S) U- s0 R2 w( t4 e找零输出(co): Alice 的找零输出8 C, I: U8 J. x8 {8 |

' w" u  p6 N, Sks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。
8 N" w2 Z6 a2 K5 f1 H+ d, q; k" ?9 F& b% J5 T) p4 ?" ~
rs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。0 D1 m. p) P1 v2 n" W

+ G/ @+ e; T$ VAlice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
% _9 B0 B8 x8 l6 d( F) Q
( L& P. {% Y( d2 V( h; ^Bob 的操作
; F, \; @3 ~+ {4 r3 t" [2 J6 E% e8 O( t! a9 C8 F- G
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。1 e1 e; E: r1 Q  ?0 i/ |
$ J' b: Z  |: s, C$ H
-交易 “消息”。-
" p# q* h! d+ x8 h! ]! {% F# N! {% _
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
) x. ^7 x+ H5 s5 h. I5 o6 O
( ]) z+ Z1 s# f. R8 i: J与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:8 a5 w% S* d7 X+ S6 u; T7 U
7 R+ c, ?5 N" h9 N9 @- ^
-交易的 Schnorr 挑战。-
% `% n# t/ i) P
$ j9 ]6 w) d# w1 {6 I" @7 N& k: F1 DSchnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:# z# |+ c7 z: E$ t. V8 ?

1 g2 M- u% Z; o交易消息。
7 ]- z! j; H% c8 c! j4 X2 n8 v& u, c8 m6 ]( s5 g
Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
2 D* q& p, J% R. r. _, x' v5 G6 w/ D, i! Y4 z$ P: M# L
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。% P- _6 \0 R, X

; W8 X, D4 `& j- @+ U% xBob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。! e  N% l& u4 b! [) Q
5 t- j/ p' G3 m3 n4 C$ L; }
-该交易中 Bob 的部分签名。-: P, p( ^. ^  ]& b2 A; D8 P
0 V8 Y2 E/ y. c9 i6 F
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:1 v! p  W# v& ]: s# p4 k9 q
* N, s5 f: A# o! ~( Q
Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-" |. k# G$ `5 \; z! H" ?

- d( X. G6 ?; J* o, ^& p按照顺序,发送的内容包括:  k, O: I- |2 G; R# K" E: b4 a
3 B+ b$ `5 K& i1 A0 [
sr: Bob 的部分签名。
1 m4 w- X( g0 c- f/ Y+ ]2 x- T
% I+ L$ {0 c" J; A+ W& {) r; ckr ? G: Bob 所选的 nonce 对应的承诺。2 T0 F% P6 U4 c# j! L3 ^
  N; v/ e( g* T" n
rr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。7 G; D/ g2 M. z3 t# H' V& x
5 d3 M$ I+ s# c/ u
最后一步:发送回 Alice
; A. e  \. r* ?' u4 H0 `* d' X9 J1 r) h5 `
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
. a$ y) ]% ^$ R/ w  X) a; S' U0 O  V) G- f5 {3 x" N2 M1 Q( `
相信你还记得,Bob 的部分签名 sr 包括以下内容:1 a' |# z8 \: u5 E
9 b, J/ W4 e5 w. C$ q8 O) K
-该交易中 Bob 的部分签名。-3 N+ X) \' I& c0 ^0 Q( P# \
. d6 X( N3 N" ~# H1 E6 {
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。
/ J4 V) W6 P- Z- z- T+ J0 T, u2 e4 E) y4 [, ?- N: a/ H
Alice 在等式两边同时乘以生成点 G。-
# ?% C$ x7 u+ H1 ]* a' P* \+ @# r: e9 K+ M! ^" I
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。
1 q4 t. p; D6 P/ p: M( b9 \5 F
) w5 b" ^' \9 {  i0 H; T$ N通过完成以上操作,Alice 能够证明:' s. J6 t8 e$ G4 G
: g- L/ q: V" V; a5 V1 h
Bob 知道他将收到的 Grin 数量(25)。- P- D* c  h4 E& }- x5 `

+ J2 D& ?6 \: w  bBob 知道他的 nonce 值。
& L' E2 v, g. o4 k* u3 B; y3 Z! Q0 U: @& J! m+ S
Bob 知道他为这 25 Grin 选取的致盲因子。. N% a6 r3 c; g& y" |3 z! i

9 i& b3 z+ O1 S! |% h- t+ ~: p5 I- W5 d……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。9 T( q0 F, [# m
2 g) y! g8 N& t' ~( Y
之后,Alice 生成她自己的部分签名:
) Y7 s8 H5 V4 N9 B) o4 t8 u+ Z+ @5 c4 L
-该交易中 Alice 的部分签名。-  `2 O: ]% w4 N( `5 u

5 N; ^" z! \7 f& s2 s: MAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:; C# T' h) m- F  |* m8 w
: R7 y) |* y; g' J1 ]  z; \
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
- d  i' m  F' `7 {! t: Z# \$ k0 @- g. a
按照顺序,签名 包含:, B) N$ @; J3 X% H. b4 o! }

  e' t* C* W/ g1 w4 \9 ?+ }" }# G/ EAlice 和 Bob 的部分签名之和。
2 w/ k+ B% \5 x7 d( f
" _& b  b4 B& ]# m- ^' H" X3 cAlice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。& Q+ i" K- S% R
) J! y% h( L' @0 R
合并之后,交易签名可以表示成如下形式:
" X" m) p. z; Y% k6 X" Y; }" b! d2 m9 Q0 W/ i, ~* U! G- B
-交易签名-
2 U1 X. `% P. `  {* ~! [4 L9 T$ y. y+ q$ A( R
其中,s = ss + sr,k = ks + kr。
# t) w/ v, ~+ h/ r( i
5 S, r! ], E$ J  E  @记住这个签名 —— 你很快就知道它的意义了。- O, ~# B; E+ E  T  H5 x) L! s) l* o
/ B% G" I# H' F- h
交易完成
' t. `# b/ y+ S% g2 L. H# \9 T0 |: b; ~; i& ]5 l( T- z
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?/ q; o0 b( T: e/ a* m
) g" ?$ I6 R/ ^  L- l
在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
, r! o: Z6 R7 g9 q: J3 m% q% y+ x
8 f! ^( X$ ?! I: k! X3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 01 c! y5 \+ k5 V

/ E- x" X( h7 |# L4 m2 {同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:
/ R: N/ V( ^; Y. D; h) p9 C+ k% q  `- H; _0 k
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)
# q9 c2 z0 j* w: [6 F+ M5 x  m) F$ F. p
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。
" B# F) ^! Z! c* r& E- p+ |  P, `- L
+ b6 k! `0 s" S+ Q如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
% G# W, v1 O2 t# {- S0 g: X+ o! E- _9 H: s9 Q
还记得上文得出的签名么?
# d3 g! G& y! @8 m+ X' ~0 l) C+ a0 `/ b
: t: ^# P6 Q$ v; H! s8 I-交易签名-
7 T% l/ q! S$ N9 _/ o
# B/ l. q3 _; M/ g$ U该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。0 Z( L3 R/ u8 \4 w8 j
! p! ^* d1 o; `
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。, b' ^5 x6 e: `- W

/ U( v$ `0 E4 ~  t; y-等式两边同时乘以生成点 G 后 Bob 的部分签名-
- }/ `- `2 Z! B( ^; P
/ C' H2 ]3 ^+ U' _6 O同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。& s6 U/ i9 x" x
5 h5 I' a8 d- S6 Y) a. S
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
- ^/ r% S6 P. E/ m2 b2 r9 _( w$ t
如果把两个等式相加会发生什么呢?你将得到:
2 Y, {9 K/ i# {2 k5 }+ e8 X$ A- e6 S% F1 i7 L( m$ @# o6 U* J
sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))/ `4 G% ^  B& G9 V7 x' }
; e. v2 M" s: U% I5 _
其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
/ R" `( @8 K% [* l2 }) F7 N2 z, [6 ^; E, l
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
6 J: ^+ A5 S; M1 l+ R' @
4 M3 I. e. I, ^+ d. Y. J8 u5 X- v进一步简化这个等式,我们会得到:1 |9 {( I. F! p  ], C

8 H+ m' J- D& Z  |$ dsr?G + ss?G = (k?G) + (e ? (r?G))+ m- m5 p# ~  a
; F5 m0 `$ w+ T5 I/ C' k' f# m
或:% B6 R* F% q1 U9 V

9 N. M' }; B9 Osr?G + ss?G = (k?G) + (e ? (25?G))
9 G$ \  S# ?/ l- H! G- _2 L) d4 I; G0 D
那么接下来只需检验等式两边是否相等就行了。
$ `( a' Z0 D$ T
9 K9 p$ @1 J! M- |/ |6 Z记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:4 S/ h1 _8 c3 [$ A+ f

) f3 v1 V+ U) h7 y! m9 D  kAlice 花费的输入中没有凭空产生多余的 Grin 。
* L- t* G4 o( n7 U7 O
% K# {8 F* p+ m7 ]; g" M! {Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。8 [. u0 T& L8 p, K
* j! y( X) L1 H8 [: l7 S$ u
刚才我们用来验证交易的信息被放在 交易内核 当中。
. I8 ?, D$ v! J" C
- X7 c- H+ g( U) h交易内核
% @" e7 I/ d1 u& A, I, `4 O
8 Z- r, W- d& {除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。6 u1 ], |) u8 m5 Z5 a

- }. b9 _2 T4 Z4 m以下信息将存储在交易内核中:$ r+ s9 g, _0 |$ A' c0 q  c6 ]3 S

2 H& ?0 ~8 ?4 j' A* n# Q- ]交易签名 (s, k ? G)。) Y9 \% r1 U/ D9 k# @0 |* H1 x

, ]* M! M5 ]& F* `与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。6 u( i" ^6 F/ H. Q) L6 w
( \4 T# E5 c- ]0 F
该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
  ^) t' N- r5 t& p2 \4 t( X0 D4 P9 a# p
总结
  |: u# U" Y# u! ?3 Y+ {5 q6 B4 |4 s3 |" G, @
在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:3 V) Z6 I& c# ]  t. H( k: D
% H) ^/ @6 b1 Q. g7 Y; l) S
所花费的输入。) C! ~8 \4 u& ~0 Y, y4 c# B: ^$ P
& e& n9 C8 F3 \8 ~
新产生的输出。
8 K  a( W. Q! F# V, U! j% F! D7 w5 A  i
交易内核。
7 m/ C5 k- T: E% R- r0 C) E! v7 b( B! b  B+ X
内核偏移(我在这里没有描述)。: G8 u* B. I. _' [3 N$ {  [
- t/ {% U! m. s5 T  }) y
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。# w. Q/ Y- h. p& [& P6 }: @8 Q
) c+ N4 c1 C/ l" Q/ P/ x7 `
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3