Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
87 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
6 Y$ G0 F- d: l* |4 u* `  a/ l
3 [* Z. i7 o0 f本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。3 a  g, H' Q; V* L* _
6 n, F) Y& u" U: F
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
' i  U2 {# m: g
# \$ c3 M$ g9 e7 ~/ e- r9 }& `, r1.png
4 N) e* k& Y- }7 S8 z( Z8 E7 x6 n/ {# `( T" S8 h
-一个 Grin 输出就是一个 Pedersen 承诺。-* t% s1 {, @0 r4 {2 n3 k

: x0 G: M0 z* w% WPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。
) E, O  N4 u; G1 K# g
" G3 ~6 `" i5 U$ z  _以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。
: A, b7 O( l  @0 p8 j7 D1 H. T) q! P( v
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……* `- L+ g( k8 b4 [- |
/ v& ~- g  H8 a8 B% i
? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。& P3 g* m0 j2 o, f8 c' I4 E

5 Q% M/ D, q; ?? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
% t0 x5 ^6 T/ j" p, @' Z5 B% }  X4 |0 j7 M5 ]: ~
已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。+ b! [0 s1 ?" N. a

# _, m! Y9 Z9 s9 {  t$ {1 D7 f若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。
9 I, a2 J) ~! d5 T$ U$ h* m# }& Z0 W4 I( F3 @2 Y* \  ?  n
Grin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。- v" q% u" u% B$ n2 U) a' H
* R* l$ j$ Y) g
假设这个输出包含 40 Grin,使用的致盲因子为 20 。8 u9 P$ p6 t& a. I* ~

! E, E- }8 w0 z8 d2 ~(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):3 _. T% I3 {2 w5 h) a
0 |7 E7 t* |5 \# O$ u
-在该输出中,致盲因子是 20,Grin 数量是 40。-  I5 ^6 q0 P; g, A
( N* W+ ^6 v! ]# X
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:6 b0 t* K# s) P( d( k9 {
9 |. S2 l& r  y" t0 L  G  F
-Grin 输出(位于 “commit” 列)。-
; L9 J  l9 u$ C7 a& L; }
: |0 N0 U& ]- L. c* Y% I& [+ r再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。
$ N7 G! _% v  E) H# o; `) Y" b- o
花费该输出3 c  ]4 R' s" F3 K
3 d4 R6 p5 r! z
假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。
+ y. V# D3 b+ o: Y( m5 ?  z% d1 O6 |! q4 p, u
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
8 s- `, \" c4 ?9 [7 I2 m6 G
, f+ l4 J. _" e. {-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-
- E; w- i. l1 ^" V
5 o5 j8 _6 g( w6 B% M7 U这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。
1 K1 @" g. M- J3 D+ k1 K- W6 X
. p) ~/ C6 a  K$ x- N4 wAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。. U: \0 i+ @6 }7 j; N
5 H. g' Y- \7 b0 U7 h! N
-Alice 的找零输出。-  ?1 s, r) R! [5 u/ z

9 }' |$ w, p3 ]9 Y- o" ^4 G正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
: u7 z0 B3 q3 |7 ]4 }/ U# g8 o8 h9 P+ V0 \  I' H' u
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。( _) e) S- J( d$ {5 s
4 o8 ?9 L3 W# @/ f+ X1 H: T
-Alice 的致盲因子总数。-0 G' z* z3 L6 O) A& D: v7 c
+ k( L, s* T  a$ D' _
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
8 R7 L4 X  d* f. V- c) i
0 ~( |" {. z1 f( Q1 l/ a; C' N最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。% d9 O$ t% w, m# m! Y

" y" v0 r  C% x7 D/ Q' _# oAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。5 H5 C( U, o& b  [

+ Q" a) {' a: i3 }% J* }* Z: WAlice 在 Grin 交易第一步需要发送给 Bob 的所有信息。. w  a# P$ W7 M* a

3 Z, y( a' X2 `$ T$ V* ^元数据(Metadata)字段:
- L* q2 s) R5 m* J' O3 s% |- T& {' R
发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
8 x9 G. V, x. B& e. u% A$ [
: w, x0 B- O# }6 M& c& X# G交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。
5 ?) [# A" }1 {5 Z& \+ f; ]
; D- o' R, y* m( N1 E. }, N  ~" i交易费(TX fee): 交易费(在本教程中咱不讨论了)。6 `& B$ J( ~0 Y

- r, S9 P7 X; G! m% w. z6 e锁定高度(lock_height):交易生效的区块号。6 }+ g1 Z2 s! R# U! @1 q
; U+ k0 c" W8 t# z- x
数据(Data)字段:
' q( s  n+ n$ v0 @" Z: `3 q, v5 y) N9 z/ L! `
交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。
+ _0 h6 f% u; @) E# w# A% r- D: R; l8 Y" p2 ^3 C
找零输出(co): Alice 的找零输出& l2 {3 i5 w2 ?/ S( ?/ \
) U$ _/ r0 D6 B! @- o
ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。
! H6 ~. F, n& u: j( O; E5 j2 F* |, H# Y0 J, d* N0 L* v8 _
rs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。
+ d0 o$ z/ B( p8 F( X2 |2 w, B; U# {
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
4 Z7 w& h; _/ O  J. {9 \
2 N" b* G: w/ i* z9 t. [) n* u2 cBob 的操作
6 X- i0 q- y* B" h- G, s5 a: ?; q" r
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。  y% `; [- V7 j3 b0 B$ K
: w  i9 ^4 J% s% {: ?  t
-交易 “消息”。-
2 Q! F' l6 r/ M* J5 [/ l1 M% o, h5 j$ h
/ u0 O7 a# r) UBob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
) S7 ^7 Y) _  u
0 q5 m! N/ w* L" N- a& }- J与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:  K# ~6 y9 f! z0 P( O& l% b+ P
1 ]# O8 X3 D" a; ]3 w0 d9 \& @) E+ M
-交易的 Schnorr 挑战。-
3 S+ L! g! Q$ Q' y( h. O0 Z4 g
( @" U/ i9 V8 f+ p' k' I5 ~( U, [Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:. ?4 D6 ^/ k* R0 O1 Z
4 {6 M( Z3 t) {  R
交易消息。
4 A# n. f  T8 V. `" O; Y: a5 e, m4 ?9 y! h1 F9 P' e
Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。6 H8 _- j2 c) V8 @! E
$ v& \, ?# b; {* @- Q3 @
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
3 V* N* `% N; {  ^5 c# J
/ g0 T; H6 A: r; Z. K4 X, `Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。1 J, C1 L  I9 k

2 r0 O7 \; A/ J  y-该交易中 Bob 的部分签名。-. b$ m% ?7 c. F6 n0 J
  s) g. G0 T$ D* k% M
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
6 X2 M( L4 l8 t6 }. c% A, [1 ^
Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-
6 ]8 I% e  Y) I# b  M& f" n" t2 R, o  \5 ?# e  M: w
按照顺序,发送的内容包括:2 }% R% a, Y" @" C5 {

: G$ n+ f0 {5 w0 c, I0 Nsr: Bob 的部分签名。
" G: G8 H! I* f+ w8 }+ s
/ P6 S5 ^! b/ b4 a8 Lkr ? G: Bob 所选的 nonce 对应的承诺。
# v- k* @9 k* K! _  }0 v
. \. @* S. {- o: m0 urr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。
# ?# O' c% B% [& m3 R# b) `+ k* k  W9 T
/ c7 Z' G. C  u' C最后一步:发送回 Alice
) O9 S* }: n2 j: g: Y3 d8 M, S( x' K; J  W7 P6 ]2 w- X" Q8 Q
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
' H9 c1 O7 d% `3 a  \7 t. l( E8 I1 v# G( X! U
相信你还记得,Bob 的部分签名 sr 包括以下内容:* c# Y' ^2 C% A
, O5 l0 i" H: ~7 v5 D, t
-该交易中 Bob 的部分签名。-
, ?5 n) w3 I( R5 L( N; [7 S) D' B. P, o
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。' T# V; q. G* `8 B2 h
2 i$ s& p. x/ W& X/ s
Alice 在等式两边同时乘以生成点 G。-' S4 O. V7 R- A$ h* C3 c$ M1 b
. ?8 T1 P! z; K: B/ f1 |
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。0 Q- P0 g: {+ ^/ X9 x- _& }

0 s) k0 K5 O: c4 c& l- f1 T1 X( u通过完成以上操作,Alice 能够证明:
! B+ ^( D# `, Z
0 q4 u7 y0 P$ e+ oBob 知道他将收到的 Grin 数量(25)。
8 W1 Z' N3 V( p- M% d" q5 ]1 t# r" R
Bob 知道他的 nonce 值。
( o2 l4 _2 S* \& z" X4 `* u
6 a% Y2 B5 Y% e1 H! Q# IBob 知道他为这 25 Grin 选取的致盲因子。
; G4 x% b+ R6 E" e3 c3 p
  K: _7 V/ ]8 q* S% a* H$ [5 f……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。# e, y4 O1 T6 m
3 }( y; d, |( Z& M
之后,Alice 生成她自己的部分签名:) t. b' m. b% `: ?5 A! Y$ Z; G
  m) s$ p! ]- q0 w  p$ T6 S5 e# F8 U
-该交易中 Alice 的部分签名。-
. K2 {1 D& ?: b; H5 T  S- ?6 b1 X( |* y' p2 D
Alice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:. Z4 O: j3 `% Z  Q; @2 G7 [
# ^" o- n% s7 S3 N3 X
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
$ _. c7 x: H( S- C6 @. u) p% {/ ]# J. o2 i' J* V- B5 o
按照顺序,签名 包含:3 y& _  o; Z$ G
1 N* l  e2 X8 x5 B, J) g
Alice 和 Bob 的部分签名之和。( X" I# X1 q: h8 C4 k8 U$ b

# `, C" U& N4 s/ j6 j) }Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。9 ?7 Q- j1 p! [5 D# z* Z' ^0 H

7 k) ~2 F1 y  S6 d6 ^* {合并之后,交易签名可以表示成如下形式:
$ @: X# f4 X! J6 J) j0 p/ n" t1 [6 b& u3 F& s4 t3 I
-交易签名-
' q) P8 U% D. T( u$ `" ]+ y
2 j$ Q& }1 A% ^/ A& e6 p+ n/ V. [其中,s = ss + sr,k = ks + kr。
/ C8 r% e  B. M  \% B: D, Y7 ~
" S2 p- W' `9 e% D- f1 K7 o5 N记住这个签名 —— 你很快就知道它的意义了。0 ^' ]; n/ n3 B6 j- ?( O# {

8 T5 r  W& f! B! ]交易完成
$ r. u$ c4 g" K. C, e% f9 L- b/ Z3 |
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?
4 O- Z! ~. W1 K5 w
) N  k; J9 d( k, s在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
! }* |2 z, k1 A8 e" t) V5 `- V
7 a2 l# U$ }# y+ ^3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0
. @' q6 M5 M+ H/ B! k: t) v
' N: H3 F0 ?$ A4 Z0 `! p同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:
+ n: F6 }7 D3 y2 \' s* O* _$ C4 u* j6 x- O8 ]5 T- J4 V7 M
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)6 B: F8 K: S! u; q9 b4 ~) h
% r1 _( m* u3 z# p' s  }' g
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。
$ R6 z5 |* Q3 X5 b1 f3 x0 h& q2 ]' i& m" e* N! H0 r5 G
如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
9 x' Q- l  N6 N7 e. @; h9 ~! m) {0 O+ r2 m
还记得上文得出的签名么?/ m* t+ ?7 i$ ?
- P8 B' Z9 m3 f" t
-交易签名-
% K) {. g" s+ M( V5 Z  m
4 O: O3 y6 q# E$ Q1 _, ^' z) b该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。
4 e) f. l! U- a) e3 Q# r$ g
; x% t% _  T6 E; c1 `' S9 M4 `, `还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
# }0 t2 }# x( @3 N# z
  P) ^, a# |0 N3 u-等式两边同时乘以生成点 G 后 Bob 的部分签名-+ S9 A, k: P' d3 L& |& u3 J: V
* J' `) {+ n! {3 \  Y& b3 t' \
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。; {4 i2 p/ O! v9 e
- f: z" @( ~' i2 J+ {% F
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-: @6 V5 P% c% k* g& m# [/ p
  G; R" i5 e: Q8 {/ I8 X
如果把两个等式相加会发生什么呢?你将得到:
, z/ @  w4 L- F, y" G
  {- X) Q# U5 o' x, x7 y/ x2 ~% }sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
( B6 e  A5 g- q' r* r" ?
6 G- U& S: N0 K其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
) O+ D" _% s3 |8 z) I2 J# l" O, \0 w5 J2 s" L! a
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
: ]9 X) Q" {/ I% b+ _$ S  s1 C, Y2 |! Q; G- y6 A; L
进一步简化这个等式,我们会得到:
7 M" B% i8 [" ^- i3 A7 }
  z5 f# C% s2 \. ?4 g1 xsr?G + ss?G = (k?G) + (e ? (r?G))
" A/ B8 a8 s( D. M1 {8 P# m( S* ?  F$ P+ g) ~% @
或:
. l1 s: Z; ^$ a3 ]# A3 K! r( f3 A/ @$ G6 S0 _
sr?G + ss?G = (k?G) + (e ? (25?G))$ A$ `& j1 _9 e0 a4 z

2 P" U, ^! z* j8 T" l那么接下来只需检验等式两边是否相等就行了。: r* l; [* d- o* }$ |

; y1 y0 y* P  O; z8 a. M4 t" S记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:7 t9 ?* z) t2 q1 B, X) p
* h( `5 r/ d7 ^3 H) T: S7 E
Alice 花费的输入中没有凭空产生多余的 Grin 。! U( m- y1 W! U/ H

% Z/ ]6 B2 \  Y+ |6 n; RAlice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
! A: \$ n4 O. K
1 z& v% x5 c& K) |/ f: o刚才我们用来验证交易的信息被放在 交易内核 当中。# Z  E( E1 z9 {8 a+ u4 D

, a+ `3 ?- F( W9 r交易内核* Z; ?" x" Z& b: v6 w& ^8 D

2 _6 ~" V# c, |6 ^6 w' A( x除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。, I  `8 a+ t# P
+ p+ }% T/ W+ k
以下信息将存储在交易内核中:
+ L; F/ {; I4 ?% n9 ?
' D6 O1 M! C1 s0 m! C7 l1 n/ \8 x交易签名 (s, k ? G)。
0 e- V/ C& ]+ L4 _7 ^9 b% V& w3 r( e' k
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。# c5 q; r# N. N+ W

9 l; T( K) U+ D0 Q7 H该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
- v5 c0 v/ ~/ U, |; `( |# Y1 e- x
0 x8 i& o. q( J% T  o& b总结# B7 F( b6 j! E1 V+ V4 p

/ w/ S$ N! {  x! J* j1 D在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
& A! T4 h0 e: ^' X7 c3 ]3 k3 T" W6 s# Q% y7 x- @: w$ x% t' O" L
所花费的输入。6 B9 M5 z/ A1 g( }- K; h0 ^

5 w& D( m2 Q( Y  B新产生的输出。
' L; q, R" A# q
) N  ~7 e9 C$ H! w交易内核。1 ~! d1 E" U; d

6 F9 x  p! \! t# e内核偏移(我在这里没有描述)。* Z* z4 T; R5 t+ @, [
# h! M/ l/ w( R& }& ~8 E: B
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。
" k1 x; ~/ |+ g1 t/ s) g/ z  _$ Z; V1 W4 M" J# |# R: o' a
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3