Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
161 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
1 T  ]2 [8 Y  I3 ~+ L/ T9 A
. z: W6 y1 q  a本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。* v9 n) Q' p5 E1 X% K6 B; ^% r
6 ^) Z& v; p6 g0 O) I; q
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
* X$ S3 [6 F; Z
2 A" \" b1 l. u1.png' N9 x" F2 ^$ z+ r( }" b' F+ T5 P1 @
6 i- Y2 B& n" \+ i" [
-一个 Grin 输出就是一个 Pedersen 承诺。-
' S. F3 `: y" x9 S6 h
! I9 h. s) j8 w7 @& G& `1 c) \Perdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。
- d% H* C9 j! t9 \! \8 j1 x
7 n9 _% {) J; k, t9 Q% h以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。1 a5 v7 c- D! {  m* G* }, E

' x& o5 e' A( G/ L) r7 V5 X假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……- i! a. u! d6 @' P4 T! H$ ~, R1 p
/ I* G) L* s# W, }0 E0 ]
? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
8 Y* v" [% W. m: X0 O; n+ Y, f% f( q2 D; Y, r/ [" H
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
' ?2 D& O* d+ ]. M/ Z& U; Z- `) C% K5 H
已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。6 C. z9 U& M! K( H& O
3 H/ B6 S! t$ R+ p% ]4 R3 ^& A
若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。2 h8 E4 U; j7 H  i

% [5 N9 a; i5 g8 b) DGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。3 n- H7 e  `5 n) q
* h* ?5 o$ U3 O. D
假设这个输出包含 40 Grin,使用的致盲因子为 20 。
2 A$ ~% E) c& u6 E! ]% \2 G+ ^" [7 {/ C2 m$ H9 s
(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
0 y4 K6 \8 G( a% N, r4 E: [& H) \0 ?$ z9 x
-在该输出中,致盲因子是 20,Grin 数量是 40。-8 ]7 o0 s7 u; ^8 z* |% _
' ~3 o0 v# x. W+ w: R5 t; |! |+ A
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:, v$ v& e+ R% Y  U2 n# m

5 j/ ]! T3 D( n1 \" |& L-Grin 输出(位于 “commit” 列)。-
0 k: U/ M3 K6 U5 l/ x
- N  N  d! h) w: E- n5 O再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。& i  w- u" \7 _& `! r

9 ^5 U# S, v+ P花费该输出
& v6 a% M( z5 O+ I5 i9 C" O
6 A( I! T0 J6 }7 q* v8 P假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。
; G. f5 g5 w- k9 j! |
6 G, ]: w4 _) Y& }5 R4 i2 r如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
  o7 L2 X& O1 H# J1 h: Q7 D% j
/ F9 n, h$ h* h7 n-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-% V) j$ Z: i$ r8 A
: `' [9 m4 S; u$ j9 n: A, N3 u" P
这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。+ g. Z( B3 a; q3 H  l2 n8 F

6 x8 c) K6 n0 S. a& oAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。- V% n: q6 u. y, Y9 E% W

, ~1 O; u5 g" D) S4 X4 N3 J5 R, b-Alice 的找零输出。-% W% G# m9 q( K/ P* p, T9 j
" L1 ~% M+ d) Q7 t' u4 [
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。. B/ Y. I3 }+ B4 A
8 ]: J+ v9 O0 n- k) T$ w9 {" @
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。( M. l1 i8 }) Z: l) P0 }

6 n4 l; F, Z8 g9 n-Alice 的致盲因子总数。-( y$ o9 y, L1 b1 |& O* e, f+ G# f
4 b* _. M" F# u1 l8 G- F
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
# h: x% N0 ]$ P- i) E8 N. Z# D/ v8 |4 R; g2 J: B7 m- L5 l
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。3 ]( h) S9 B3 z

- N. m/ z" q% B. F5 M% z, `! oAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
& b8 |/ l: e9 r# z9 e/ g0 U$ x& z3 e/ Z
Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。
" D5 B8 X' b2 y' j( d. C8 B1 ?
4 h: S" J9 G8 g% \7 p# t元数据(Metadata)字段:- H' R, l. n6 N$ `! Y  `; |
. t3 ~# [7 Z/ F. {
发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。* v2 p- D+ N6 Q0 I: L
. G9 `9 N2 r& L6 @+ I' |
交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。4 i( h5 Q) X# K+ y/ Y. V
; q1 o6 F. [. Y
交易费(TX fee): 交易费(在本教程中咱不讨论了)。
9 m2 h& F& ~$ G4 g; F. T3 J) R9 j+ |! G, [
锁定高度(lock_height):交易生效的区块号。$ t0 @1 Q: P: e$ d/ O7 F" H

' N' {' r% T6 ^% ?0 M* \, p数据(Data)字段:
2 U% v* D  l" A" |. S& b% \5 v: d! A. b/ v9 E" R9 Q
交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。6 Y  Z  h4 ^( H9 G: o. |

4 S0 {6 O, y5 W0 w$ K找零输出(co): Alice 的找零输出
% U' ]) F* `2 i. H
$ X$ `" n6 d0 \7 V% h+ nks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。0 D1 L1 a8 g% Z  [7 U

! j: k- Z5 m5 u, W2 srs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。6 H" k$ b* E# g5 ^: [& v

0 ]( }( o. S7 V& {( q$ n' PAlice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
8 K1 x$ {; j( @$ |" v/ P$ l4 v. R: P( S1 t8 e) n' }) A
Bob 的操作6 l2 R2 `2 v: G9 j- D  l
- w6 ?9 s) b+ X9 w& M1 F; Y2 K
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。( e# f9 M% S4 b8 K/ `: }# S
7 [4 v2 ]. X; J5 e8 N% \+ E
-交易 “消息”。-
& q9 E, ?9 Q: I) W/ E0 o3 }: ]/ @3 |5 [( j- l
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。4 h$ I& ^- n$ v* M: E
' c5 |- M- y" o
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:
8 T# X9 C$ d7 J' B& `- H! U0 C/ y/ q; C5 R3 X, H- @  q* b$ u
-交易的 Schnorr 挑战。-# H( q2 W" K* m# G" a6 y
( Z0 T  U7 D: D" y
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
+ J5 F. a: {  Z; D& _
9 J  Z5 k% R. j; {$ d; Z3 V) f交易消息。
# N) b1 l9 S, z6 M
6 ?" I3 f$ R. y. u) [Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
" s# {% J0 L4 Q
- y, x" _8 t0 W, m9 r  l: ?Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
5 S8 B$ H& a6 C/ e, Y
9 M' Y& @% h$ t. _$ DBob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。% u: K- Z) V; y$ t( A
7 Y; g* R+ \/ d' g3 u( D6 L
-该交易中 Bob 的部分签名。-
# Q0 K* }0 n  F- F5 d3 r$ o' T9 @% l1 f9 e; B
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
8 T' Z2 _9 x: h' p. A' B5 c# n) `
Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-5 ~* o& u, d  [1 A6 D% w: m- e6 w
5 |3 A7 y: K" C& G2 D
按照顺序,发送的内容包括:
  ]4 K# d7 Q2 G  K: L, S
) ]% {" F' x7 e1 d" M7 X  \sr: Bob 的部分签名。
: r. P% O6 C7 {0 p2 j1 r" m* `2 ?4 V% o8 M( t9 O% V
kr ? G: Bob 所选的 nonce 对应的承诺。
; y( F( Z. g. _% i8 Y8 p) \$ m
6 ^. _, [  }1 ]5 E! C9 `5 Hrr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。; x3 u. T* m5 k) Y; U( ^) J

# P* c( r: \6 Q7 K% T/ \最后一步:发送回 Alice/ y  W4 j$ ?/ w0 U0 c: }
/ w- L; p  U, M2 D; [* ]* Z5 ^
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
  }( M9 i' B. @" J+ T# G. g" a6 |
相信你还记得,Bob 的部分签名 sr 包括以下内容:0 f# r: {% D$ S$ z- o6 t1 \
9 O# j9 M9 f% l7 h3 y$ [. j
-该交易中 Bob 的部分签名。-
% S: H" k3 r- o; ~
! q6 P- F& A; y& F7 [% I基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。
& F, {( G4 n& O7 @0 j% U4 t* P! _. k9 w* D+ A
Alice 在等式两边同时乘以生成点 G。-
# j9 h' R6 F1 R, x8 K  ?0 v
- ]3 r, e. e! h: m* W! b因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。: |. R. V& y3 i6 \7 b$ Y2 n

. ?" r: I1 @: |5 w, A通过完成以上操作,Alice 能够证明:3 \0 g; k+ I( X/ V5 V$ A' k6 U
$ {; K, v9 Z; {/ ?% w9 W5 F. m
Bob 知道他将收到的 Grin 数量(25)。
8 X4 N+ w& C9 ^. C. `2 i; a' s/ T% P8 H" A3 ~# J; B
Bob 知道他的 nonce 值。
3 p1 M8 F( p6 R5 J
$ `2 l+ S& |" l; cBob 知道他为这 25 Grin 选取的致盲因子。6 I5 Y4 ^$ t5 Q4 Y2 ~- K: t
6 a7 v( e$ G# V2 J% D- n& _5 i
……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。
7 D2 c2 T5 U3 c/ k8 B  ^6 M1 J# r! s/ B4 J' L  D- F
之后,Alice 生成她自己的部分签名:
" W+ |+ @" @' _- W* v, `- o) u! s  |1 v9 O3 i/ [9 ?6 F
-该交易中 Alice 的部分签名。-  J" i8 W% r0 y) u* n# N8 S6 A
! h0 ?9 o" x1 H/ ~' a: V) V7 s2 G
Alice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:* {1 ^  Q: V6 F9 P' d

# A1 f0 l& j5 i; I. g& ]交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
' c' Y' w8 E8 I* q3 N& t3 {
8 r& ~0 G. Z# }2 H8 E( X按照顺序,签名 包含:7 x& [0 L. w8 }6 k- _9 m  F' P

$ T  b0 x( x) c2 Q6 ^3 Z3 p$ WAlice 和 Bob 的部分签名之和。4 \! s1 u" \- b; T/ [

! Y8 [; C; V' B  P0 I7 IAlice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
' [$ t) Q( N4 ^! A* B, U$ z; g* Z, n0 O- K  r! S* Q4 n
合并之后,交易签名可以表示成如下形式:
% o3 }. f2 ?8 |
5 d, [- v, _  h6 i* N% p- f# S-交易签名-
. s% }' t9 C) `# `' l" p" t: c  U
+ E/ H( m& p  ?- I% L其中,s = ss + sr,k = ks + kr。) N8 u' ]& ?  {- u$ J  g$ v
, d, L& g, }6 F8 _; D6 `% W( k
记住这个签名 —— 你很快就知道它的意义了。
# R. D4 d" ]/ Z, T1 i- ^* }6 {8 m! B1 i2 {- {
交易完成
/ z% r% Z5 X  J3 I) X0 N6 J5 S0 n* a) r: @7 v
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?) R" m4 j7 Q# P8 r
$ y4 X1 P8 @4 g+ o4 K# ~; t5 J8 k3 Q
在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:  P9 Y+ |2 v' G# I
, N4 ?! a% k8 U8 B
3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0
6 m& ?% ?$ r& k4 P) d2 a1 r$ y  i$ ?* ^8 B# y( Y" ^5 z! X
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:/ H) J" z! |0 e  b% I
  k6 e7 H  {1 G, ^- T0 Y
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)! d/ B/ [) g' o) M

4 l2 z# r3 h9 u, Q这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。
- h6 ~3 v: ]0 O! a, e) ?$ ?6 F# Z, w4 R# \* S4 i0 b. S+ k- v& w# ~7 V0 P
如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
$ r: ?, k) j, X: R, X  w$ O3 o& _7 O% `: V; h, B  Y1 ^
还记得上文得出的签名么?& _8 O. S' E- n& _. m7 K7 y" U

, f$ p. H& m/ G! d" ]-交易签名-
  v& W" q6 L! w& s' L% p2 g) Y& U2 ^1 F6 l5 u" ?7 _
该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。
+ M. \6 k3 Y* f% U1 E; t( W2 d) A+ p  `9 b' b4 x. q
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。6 j7 I) C5 G& y; A& N0 N

! G! a- m9 D) v1 Z  E  `, i/ r4 X' x-等式两边同时乘以生成点 G 后 Bob 的部分签名-- a, B2 x) o6 D$ P0 ]
# V% T; C8 u9 _( [% ?& R
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
& |: [. `% I) K; `
6 ~# O& }- d: q4 v4 {-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
9 L; B2 @; j( E$ k+ O( O* L
  T7 u" i) V) |5 c4 |+ E: M9 S如果把两个等式相加会发生什么呢?你将得到:
! T+ @+ |. ^5 M) X4 N9 J( W) Y/ U8 b: [; B
sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
+ k3 f+ T; ~, e# p; {. A& o  {6 e0 j* E" m8 ?
其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
& F5 K) }, h8 I4 J7 f
! m# @4 C) T# u: ?  w3 LBob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
, \% u5 e$ c) S
" i+ r- c$ m# B/ B进一步简化这个等式,我们会得到:5 l7 s5 i2 r/ r; }
$ k' v0 m4 y$ e' Z) z
sr?G + ss?G = (k?G) + (e ? (r?G))
3 M$ g' _8 J9 E; `  C& R' |
: `; C1 ]6 i  ~$ L' m7 P$ M. f2 x或:
5 y; }% n( `% b  V/ f  ?* {+ H3 e" M6 g- \: M- p8 ~
sr?G + ss?G = (k?G) + (e ? (25?G))
0 v: G( F' c" J9 N+ C4 z! K( I
+ g3 P% {( \: ]3 I; }3 o2 y那么接下来只需检验等式两边是否相等就行了。
& i, u+ B5 \* ?! q# |$ j% p; j, J! f2 q2 X* d& p; _
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
3 y) }* Q( X; F# `: t9 r- f  V9 b; T; A8 g4 O- `2 h
Alice 花费的输入中没有凭空产生多余的 Grin 。
- [5 P, J2 N3 g! \% D# i8 O% j& a" ]# B7 n# \) @3 Y9 O4 e- v
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。/ d7 q/ G0 `5 y- }; D4 x
. S# P$ b* X! x& i. n
刚才我们用来验证交易的信息被放在 交易内核 当中。5 c6 i) I& N% w

! o/ Q3 r1 p; {, s! ^& A交易内核( k; L) r4 T" f4 l' g! c, e9 o$ U6 |

; ?; m4 r/ r4 {/ h/ a3 u# S( L0 |除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。
; m0 J! W) L* d* r  r
7 L+ ^' T* ?9 C, ^( U以下信息将存储在交易内核中:1 E, a/ Q- Y5 l2 r9 ^# v  H( `

  s8 Z1 g. R# {2 R, m* |2 n6 ~. ^交易签名 (s, k ? G)。( ]( H( W% M% D- Z9 ^
+ ~+ S' G: C" ^/ D( Y$ c' w" D" x
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
5 }* [" U, b8 n  s0 n' ~; [0 i$ s( U2 l
该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。) n. |' K4 Z; C7 G
- M( g! K0 w/ `8 u% _1 G9 \8 w* b
总结
2 m1 v/ O$ x7 ^- l* R. ?2 H5 }/ a
. c$ v, t. t. E: J; I$ M2 D在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:5 p' P$ L+ g) Z
5 E2 j+ R6 u' C9 M! P+ f
所花费的输入。
4 K9 [5 m" B0 n. p) s( C
# n8 B! y, i6 X2 g3 j& @0 g新产生的输出。
8 C1 g; O  R" O2 d
& \8 y, T' J3 @# s1 C9 i9 w) M交易内核。3 k# t% l8 T* V% L0 s- }
1 i, ^: u! _: J1 s2 x$ T7 g1 L
内核偏移(我在这里没有描述)。
& P" t! J# w+ Q3 X5 d
" I5 r, J/ q" M* d% Y! x上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。2 f8 l! l8 f! O, v
" `- F4 O4 k; d2 [. b  e) J4 P
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3