Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
61 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
% ~) c5 U! l( D# _5 S; n! D4 ?4 q9 Z- m
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。
2 c7 e+ W6 a  N, C1 G% ~: ]8 t  K/ \$ ?
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
- T% [9 n3 L# [: K( d% h1 Q5 i
1.png
0 ~/ H9 i1 v' k4 b7 p
- e) i3 T, p3 c; M3 ^/ m-一个 Grin 输出就是一个 Pedersen 承诺。-3 _' I0 V# A" ^& y8 Y

/ N& Z! n" o; \% uPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。% C% X# ^2 w6 y. y+ u0 L
3 h8 S3 D& _  \- Q: }* D. h* j
以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。4 K6 ^2 ~2 U, U4 X3 X, u
$ J1 Q# D& @1 G+ r0 l0 N
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……
3 |4 J' g( l9 [
) m3 M: w$ N; {# q( b? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
6 c3 i: z2 w' v& s* E3 o7 m' _' L4 @8 P5 j  H
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
# g+ J/ E$ X; \) |
) O  H1 C' R' e7 j" c已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。* }$ A# P1 N4 q) |0 k4 ]) G

% K8 ]! M% x8 e/ \: h' U3 `8 G; [6 @( ?& s若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。4 |9 o5 S8 e! p

$ Q8 V0 l6 O  ?8 x3 d& }# L% cGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。
( \7 {4 Q: z* Q7 ]6 W! F& Z; Y# w4 ~1 h  e
假设这个输出包含 40 Grin,使用的致盲因子为 20 。5 Z5 p" B; p  i! H# {$ ^
, O- q+ w0 g2 v  R- T' c6 \* ]1 w
(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
) x1 r) j- n* p. O* J: Y- ^4 U9 \( _
-在该输出中,致盲因子是 20,Grin 数量是 40。-, M4 [1 i: O1 v/ X6 J1 T3 S( I2 w* C* O2 a3 |

( Q# e+ f' Y: J) ^, Q+ e. J/ D在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:
# k  [) O; T* z/ o  M9 b. `2 [' q( y, ]' T* c, Q7 w- b( y
-Grin 输出(位于 “commit” 列)。-3 ?. N1 B7 Z, @0 t& g; G6 p! q
" a; J4 L1 w2 ~* \& p$ i
再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。$ U) ?* I$ A9 h

& ^( C* b, Q7 S. d花费该输出2 `9 j# z( F: v' w; ^- M7 I' q5 q- r

* N( _# b4 R( U/ x! J假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。; U' t3 ~- \- W% c0 E
- p( Y/ k. M4 g; X: v# T' M. e
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
& ?6 q' {# _' {" `4 Q+ d; q$ j8 _; n% U# P/ ]  y% }) m
-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-: A5 \; f; G) A
! p+ M) M" w, X# ]
这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。$ E+ ~4 E: k6 H" _: D

& H2 W0 t0 O" x3 j8 @# h, NAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。/ T: R0 E+ ]8 V- A; D
! \+ @1 A/ Z, s% H% H& K0 W
-Alice 的找零输出。-/ S$ j9 u7 R  U! v
+ V, j+ H# }' ^1 G; u& H0 J
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
  X5 A) c, \1 u# t  x1 }+ ^, h( c# _9 i7 l# D: V6 Y
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。( g) J4 j+ T' }- j3 z; V, u

4 y6 j* I- Q( g1 M-Alice 的致盲因子总数。-0 \0 a# u; Y% }3 p
+ N: {4 P3 m, M6 @7 R' r, t
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)1 T2 I) X. S: [! `7 p, p& A) n
6 q; {( i/ P6 }1 P6 C6 l/ p
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。6 z$ z2 I* [! k- h/ {- `+ L

9 k$ [$ [) t% L( `. ~% AAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
  T$ H8 y7 v8 \7 R; Q+ A9 J
/ R( W3 \0 w( C5 N" ?Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。. F" }/ N% C3 n8 S

: M- Y: h. |! o7 B) o元数据(Metadata)字段:7 W! v1 R! |! G8 C9 X: p& z

* u( u8 S9 d) e! R- ~, I' E6 N发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
. Z6 l+ B, [1 \3 z9 g4 L
3 g2 t! `4 _2 Z3 |2 |  ?交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。9 j" r3 o  H, g  u( @& F" V

$ n+ N+ ]9 ~" z5 b8 v2 k交易费(TX fee): 交易费(在本教程中咱不讨论了)。
' o* E9 L  E7 j
0 O% m/ G# [8 J0 o2 k锁定高度(lock_height):交易生效的区块号。
! Y! B& G, G( n7 a' K+ z0 F7 p2 n* |% [5 I, M% L- d  v
数据(Data)字段:, e3 k- L- q8 q& W1 T3 q4 X# w

' U# B! Q8 p9 `8 Q" ^交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。. A8 U- ~4 S& H* F$ ?" N) S. L: E% I

* p' ^' i7 J* M% T0 i+ |找零输出(co): Alice 的找零输出
4 D) H6 P( t/ H, D0 i# C7 q; P
% J- y2 i: P( |% Vks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。# z9 }9 O* a! _6 V; _9 K- m9 _! _1 x

; X: _4 Z; h( n& I! Jrs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。2 `/ l9 n  m  l
5 e2 t( g5 H* @8 r# s" w. h
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。: S9 ?8 U, ^# t
5 y6 \8 i6 Q1 {5 Z1 a3 u
Bob 的操作" f: Z! ], \8 o* a3 R

' m. i  ], ~  c/ c当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。
7 w; I# [% \4 y) k8 x, a. L; X( _) F" H3 t
-交易 “消息”。-
2 j1 F6 L, y' E* T( U
; P. Z/ B4 |' N& G; ~' pBob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
" y, `4 f- ]+ H( \1 l, m% n! Y) ?7 O8 u4 @
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:4 E4 G2 K' G, v( M* p% d/ h" H/ b
6 @0 w- K& J1 x
-交易的 Schnorr 挑战。-0 c5 E6 ^8 D" |  C0 i) \- k

, @4 F0 ?5 \8 @7 f: ^6 i2 \Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
  l, B+ y3 S2 y" z9 h* H" E
9 l# F* O5 a2 O. ?; w3 I0 z7 X2 s交易消息。
& S  D, R7 o  s/ z/ R
4 c5 t0 M7 w3 e  a( o  zAlice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
# e+ ]; C6 R' W
4 {' D- L' i0 s) [: p# G: SBob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
( g% n2 J( P9 o. A4 n& j; U8 C! G8 |. W4 @6 ^
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。9 p" u4 i/ x1 T; b0 n6 o

& M5 v7 e* F6 g" s3 j; m-该交易中 Bob 的部分签名。-
& ?" I4 U9 x% p! c" W
' Y+ Y! P. B" Y, V- d  u, W当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:( x3 m6 |& q, B( n# W% b! t

) _" k! [+ q0 Q( dBob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-8 o8 ^9 B+ X1 G: Z3 G
$ y- @5 `; R* R3 o. `6 H' K' Y
按照顺序,发送的内容包括:( G! N1 ?! J! _- o, H

- X( d4 T+ [0 e% i& p3 }  Y; gsr: Bob 的部分签名。
/ \# K6 m; @+ G" v8 `6 Y0 t6 J! C9 M2 |( P8 H) n/ j* ?) n% I/ J
kr ? G: Bob 所选的 nonce 对应的承诺。2 L( S; C3 t0 v. P4 a1 |3 e2 e
1 P8 S$ u6 f$ w2 l
rr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。. T0 p0 p& A$ \

8 @* B8 y* @. j# ?' m3 U. w最后一步:发送回 Alice, e, K4 P# j1 D: K
2 e, Y) N0 a1 G" z- d7 d
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
# q* S+ C: v) s; g7 U1 y, [* x/ a
) Z7 E+ t& M; J. r0 r8 E5 B相信你还记得,Bob 的部分签名 sr 包括以下内容:5 b1 V: l+ J" D. R. r

2 J4 ?* z$ c- _: t  Q-该交易中 Bob 的部分签名。-6 H9 [! E' n9 E1 g
0 z7 ?+ ]  x# F
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。) n) h  C+ u* S% a7 r
: w! ~' e: l% }7 _0 Q% `
Alice 在等式两边同时乘以生成点 G。-6 G% y( r7 C" D& w

% u. q* J9 L" P, y1 T4 V  Y因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。
9 f5 H' O, V! T: P0 J" x, `; z# u, z  b
通过完成以上操作,Alice 能够证明:' N8 n" ^. C( ~7 G

- t3 c0 Q5 M1 S0 Z- x" D0 ^2 X/ _Bob 知道他将收到的 Grin 数量(25)。+ a0 V1 x1 q) w3 i
3 x" z5 U& `* A- k. I7 {' m- D
Bob 知道他的 nonce 值。+ f  G( f/ ?$ i* ?( V8 f

. d+ j# ^& a0 }4 @! E/ PBob 知道他为这 25 Grin 选取的致盲因子。5 s1 K& f" Z. n( t8 W
8 {- ?6 q- u; P8 j4 y9 _! p
……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。' a: `& A/ M) f3 L, Q2 d) t8 M# c1 A
* K, ?1 m) A; v9 R1 x
之后,Alice 生成她自己的部分签名:
: A7 \, X/ t" h1 C4 B
1 h5 _' G+ Q' |( G2 [1 S# c( G( \" q-该交易中 Alice 的部分签名。-" P, Q) `' L5 {& U6 @( t
3 w" [0 v; A- P5 f5 F
Alice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:$ S3 }3 G: J9 f$ G' Z/ @$ _
9 W/ A7 F3 a5 A6 v
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
" o" ~; z$ Q, p
4 ~* [; |& g) g( E按照顺序,签名 包含:% G1 a& c& G) o* v4 B" I' v
+ ^8 B+ h9 c" A6 \/ {6 _1 r' h. g) w
Alice 和 Bob 的部分签名之和。
8 N$ E: B+ ]" F: c, U
# |; Y' D( V" o- @Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
9 ?& j0 e* g0 Z& s% G$ t& B
  r1 G3 j, k! ]  n合并之后,交易签名可以表示成如下形式:& E: {, b' C" W
: u  \' t  a2 @& T( u% Y) a. y' D4 o! O
-交易签名-
# f- L# Q, }7 \% ~# Z
) A3 |3 g( L7 e# L$ F其中,s = ss + sr,k = ks + kr。8 P0 D: ^: W1 k) C' T: y) \# s
; v4 A& W6 w% N; k- v0 {! [; B+ S/ x' B
记住这个签名 —— 你很快就知道它的意义了。
# b; ~6 }) `5 s' r% T0 `8 ~$ U  U$ S; q4 ]7 b: `; y
交易完成
8 A# H# T  e7 Y' `* ?0 N4 l
; p. u+ T# J  p7 u& S, |数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?* x5 I* H: B* N% ~+ Q, N. d2 \

" z8 w$ u. u$ v, m  s' C* G在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
* M" l  J9 [% c2 z. n& K" O/ q. D' f$ \5 }0 H2 I4 {
3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0! T+ O3 ~) B$ ?$ s  k

. I9 U1 \6 P1 G" F同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:4 q) u! g1 J* f$ x+ @, |

% Z& [3 D8 Q) l$ s( I6 `2 u) }9 y(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)
. I% |- b* Z  N; @2 T) U0 \6 `$ j, j4 e) W4 [0 a% S$ S% ^6 }9 \, v
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。% r/ H6 G9 W+ e: k7 h% q

: {' d- v& A; N( p. r  V8 u如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
* v7 ]% B$ a8 H+ V. r# }' p
: U" x5 E) J! v  w4 F, O0 C8 a: F还记得上文得出的签名么?" P' F- ^8 r( y0 U, ^
$ J" F4 i" S; t
-交易签名-0 L, O" e, s$ Z  U8 Y$ f
2 d5 `  C; S) Q. e- `1 ]" I/ a
该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。
! u/ r( f& L$ R
- U, s3 d6 e; @还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。% n  @0 _4 o* o+ W0 i( ~0 Y
: d9 P* A% u* g& C& ?% u9 F5 z
-等式两边同时乘以生成点 G 后 Bob 的部分签名-  ?& J/ g- L5 U6 Q7 z
# x! u" i% l) d6 @/ I. m. \+ m
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
- R6 n( k. Q! X2 _; D) J' @. F; f( E) C
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-2 P8 q& X- V% _. d' b  o$ U$ t- A
5 l6 o$ \* j+ j- `! i
如果把两个等式相加会发生什么呢?你将得到:! p2 I, v7 s) b4 `7 m' F$ R. f

+ f. ~, B$ M# y" o7 P7 L! p3 O- Psr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
" C& u/ H( d( a7 `' B
, N- ?) X4 Q1 n, O  w其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
, L( {, _( ^! u( q# m6 H$ v4 B' Z! k: p2 K8 o( H7 z: f$ ~
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
; `2 j8 O" v- N) t' M9 {$ S1 ]5 U. |' J( m0 |9 N" q3 _& B! B
进一步简化这个等式,我们会得到:! {3 t$ p/ B7 f5 M% b

' M7 i2 @$ f3 c0 x3 N- t" I' l! Esr?G + ss?G = (k?G) + (e ? (r?G))1 o/ B% q0 K9 Q; O3 C' i% G  h
  w9 U1 v/ S; p$ v
或:% D  B3 Z9 @( t; A. Z8 F" u6 j

! O8 T" z- g( g2 {8 f2 p3 C8 `sr?G + ss?G = (k?G) + (e ? (25?G))
/ P2 E3 k/ A* Y- M. b+ R1 ]$ p
: I1 I" v! b; f那么接下来只需检验等式两边是否相等就行了。
* i, S+ @5 c+ U0 X8 S* ], |6 `8 s2 z
4 P+ u- t* r4 I( W  }- T记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
  f- Y  `- t, h# K4 [: v* {. c) A- x$ B& D% g8 }+ _
Alice 花费的输入中没有凭空产生多余的 Grin 。# u' T0 d6 O1 M
. U* @" o  v5 G7 n
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
- Y5 x9 g8 i" l) A( g
& T8 W- r% y" i2 S) i! d1 A刚才我们用来验证交易的信息被放在 交易内核 当中。, J* J, t) @& a/ i

4 L. G* X2 |% H交易内核
2 |: V4 ?$ |" m; U) ]/ i2 o0 D- M
除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。- G. m9 D% t4 G! B

2 _2 H% W7 H5 j, s以下信息将存储在交易内核中:5 B+ C7 t/ z, C7 ~, D

: l" o8 Q4 U4 z' F7 X6 {, F交易签名 (s, k ? G)。, S& }2 n% J: g& p
1 E$ ?( N. q8 Y' m! [$ R3 L
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
; A5 L2 q1 Y& ?* C1 R* z$ z8 ?0 O2 r: Z7 q2 W- n
该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。$ V. e  @& b% Y6 a* {' l+ X5 Q

& T3 d1 O+ U1 o7 y3 H总结
0 ?* d7 `' k# a2 t, m
3 v5 H$ t8 ]8 r$ Z在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:) r/ w( P* _) ?( Y6 o) g; q
5 N# e- g$ S6 |% }, R( G% e
所花费的输入。
5 h/ M% ]. T# U- p" E) c* e. f! S4 p7 M1 e5 ]
新产生的输出。
( x6 e( k; q' M% N( ]# S- M7 b- J8 z" B: i; j3 I2 s
交易内核。
1 ~( T6 N6 x$ B% T5 g* S
' _3 {9 F: b# ^+ H$ X2 _. x内核偏移(我在这里没有描述)。
$ d' G: T7 B3 ]' L4 q
* A, N4 {! |- F$ H上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。9 E* x1 R, f' G0 F5 `% @2 b

( W2 c2 _! d9 z  p2 a' H" J, {希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3