Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
89 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。) @( u8 a( Z9 i( [  B
0 ?5 J2 d$ e- J; K
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。
  D* z1 z8 b, l6 {1 Z; ~( ?5 v4 e" v% p- u  ?+ {/ I' _+ @
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
/ R6 a& [2 q# G* C
& f0 y' `* h& r3 C8 F1 ~% l1.png6 J  u4 E4 |& F, Z1 i9 j

$ K6 X; x3 P/ t0 R-一个 Grin 输出就是一个 Pedersen 承诺。-6 @& P5 Y& F8 ^+ k( O. W4 Y

, P3 _9 y% K, \2 P7 h4 aPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。/ F5 Q* N6 }# |1 o
) b8 j) b  e; M3 y  _+ x
以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。. y/ {, S5 i- }

  v: w0 Y7 ]  z# p假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……
  N& G9 h0 \3 ?  }
8 L1 f; i' N7 @' B? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。6 w6 ~; Z- t  l2 q8 w5 a

4 N( x5 C5 E3 A* C4 q? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
7 I! t% s. I, ?6 o
0 e1 K/ U& c- D) {0 |已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。3 K0 c, y5 @) Q

8 M; y- t: _1 M4 u若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。9 h! {$ U" A9 y  K5 j- O

2 N- y/ G+ e$ f8 M" Q& F  @Grin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。
3 V6 u2 S! T2 W7 t) E
% v  f& c. G3 x2 a- R% B* j假设这个输出包含 40 Grin,使用的致盲因子为 20 。
4 J5 S: a# n4 y( O) ?' B" g: H. x4 Q/ O) b1 K! O2 a/ o
(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
3 p8 Z' `3 k$ _: b% e% R3 H! U6 }7 c! y2 p/ S9 }/ i
-在该输出中,致盲因子是 20,Grin 数量是 40。-
3 B7 \. v8 L+ a0 ~8 V0 s- T0 J2 A. I4 P. R5 H4 v( I
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:3 w6 {! u3 N9 t7 O
) z' i4 M8 O' @5 t
-Grin 输出(位于 “commit” 列)。-. p1 P$ M7 t0 H( M, @
/ Q- s9 G, u0 ^. A. f  {
再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。, f& ]/ J6 t) u0 s7 D& x

3 N2 J- q& R/ z  [! s花费该输出
- |- H) e: b1 R. j5 {
0 g) u$ w5 l! H假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。& ~  _$ G3 K6 Q" b* E  w

5 K6 v( `8 S, H. E+ n6 _# d如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
) j" J) R/ n  t) Y
0 D* [; k8 y0 c2 j# O6 ?-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-
( \* R6 F) G9 X
& `' ^9 X- X5 b7 }! U" e8 {这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。3 ]0 T  u2 x; L; A- t0 H5 s

/ m  [+ D( G6 ]Alice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。7 v. j/ ^2 W$ p# B, H
4 B1 [1 B4 C. i) l; j  X! \  x
-Alice 的找零输出。-5 k$ b' @5 Q4 c# x' q# M. V/ e
( f3 Q3 s& W  g
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
1 f3 E: U6 Z. q3 T
+ ?$ ]( ?1 [" }* d$ k3 |这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。4 C5 G* D# W4 |0 x+ l3 ?. k; M
4 H- N: W8 K5 j  g
-Alice 的致盲因子总数。-& w  p; b! P/ H- E8 A

% |: b1 J& e! ~5 T& `rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)( J- X( m1 ?% [7 T! L; ^: ~
8 i8 U! u" _9 a% y, P! t$ c, @
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
$ d& E( S5 y' r( n
% j! q$ s+ `0 q7 y- R) j* ]0 F1 A1 S; TAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
3 t. S* ~+ l2 m( c9 K8 [/ H- m* @
! b) v% U% e" x9 C0 VAlice 在 Grin 交易第一步需要发送给 Bob 的所有信息。
8 J, p) Q$ K, E3 @  j7 f% f' A5 ?% d$ P1 ~' z( }# ?; o' Q
元数据(Metadata)字段:) V3 t, }2 v+ n) U' O9 }- O$ G, u

. G$ l5 R! a4 {- {发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。# y& V; p: Y3 s- W% p4 g

0 l$ q+ P. Z# d$ K8 D  F交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。
$ I6 o! {& z1 v* p: Y1 U- L' t6 ~
; I- h* W; D' }) ]交易费(TX fee): 交易费(在本教程中咱不讨论了)。0 b  A$ L9 F" `) [

* ^' C" {" J  ~( w& M锁定高度(lock_height):交易生效的区块号。' d2 O8 |& E: {

, S1 H# R. b" U  ?; B5 K数据(Data)字段:
: {/ F. H. E" f" R9 r+ C- W) G# j& L9 }2 f3 F+ e* X
交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。+ p  i/ A( N* u6 p# \
) p# w7 M" \# a
找零输出(co): Alice 的找零输出
/ U  ^# f& h. N, V6 a# Y
! s6 `7 X! F0 K  d6 w- z. ?& Uks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。, j  `- [) A, l, c

4 u6 L; v" _8 Ers ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。+ a; ?" H3 ^1 n3 G2 u  q
9 @& M. G! y& \2 h  D4 d' {
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。1 c$ H) Y( _9 Q! V3 N
6 f  A/ M! g: X% y* S" X
Bob 的操作5 C% _/ j6 F5 \
- N8 g9 `9 W# Q
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。* x' _; n8 t) V* I" P' t
4 `$ y5 _1 m/ ?8 [/ j0 I5 a: u
-交易 “消息”。-
$ `- y$ [% g8 [0 {( Y5 z7 M7 g% P2 O/ B
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。& D- U6 {0 g9 N8 U

1 M* S: Q! u0 s8 N与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:
6 c! v: L6 J% l
) K7 r, P) L# ?3 B2 s-交易的 Schnorr 挑战。-8 M: ]# e2 r- h7 r; i# }( l' n$ m8 M
- _5 O9 ~1 u) b- c9 H# d+ i
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
9 B% L0 R9 l& t) i, H, |
* D( V! L" ]3 ~( L交易消息。5 U! T; b$ |9 p2 K6 w) Z& O

# c! V1 A0 W4 z; K5 S" ?Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
8 |6 `2 Y8 D9 C2 B0 f3 k+ p/ ^0 g% u
. _6 _% A( L& tBob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
+ [* r2 B% C. Z& I4 x+ P" B% i4 ~
" S% b% i% @. l- `" }Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。( J% @% X/ u4 b8 g' ^

* W! e  k% P, T* I4 o0 |) G: l& k-该交易中 Bob 的部分签名。-! o( g" r/ X& p- b  z
  U# [8 b, z3 ]. ~3 }  A6 ]; h
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
3 P5 \8 k" a& f4 z, c: f' Y
) T' i( X) ]8 [) @Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-
3 _. U5 m" L2 N" H& Y; h. e$ I7 [: s/ v6 i. J4 N
按照顺序,发送的内容包括:, R. q4 Z8 }# Q5 F

; k' q2 ]4 S  D! ?sr: Bob 的部分签名。
# N: N  X6 w, s% t4 y. E
( K6 A" z: }& J# E  i( Q3 `kr ? G: Bob 所选的 nonce 对应的承诺。  ]4 N* \- L- d. z) @* U2 s% e% E
- _. q3 s; ~$ C$ h
rr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。
$ P  x* v2 O, l. P( A7 ]* F# M% s7 |; J
最后一步:发送回 Alice
) H# F; W  |# p  o0 z/ O) _8 h$ c% v& K& V( s+ E
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
5 h! g6 ?! t' P& \* w; a  u, ~. z( t$ N: G3 t0 d  I+ o
相信你还记得,Bob 的部分签名 sr 包括以下内容:6 m  u/ T. T; L7 D7 I
; p9 ]$ _0 T7 I: y
-该交易中 Bob 的部分签名。-
; X* a' f# X* X4 ^! a- m. d" m( C% L( I0 X0 z4 l
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。. W& \8 C) ~8 }+ m' u6 t! y% m2 p( I

2 M. p1 {$ n/ b" zAlice 在等式两边同时乘以生成点 G。-( B4 m( P8 s& _8 b& E

$ U% Q7 t/ l# S1 c" S7 G5 C因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。
9 i7 q' v& K/ U: F. M0 m
% D1 a: a! \& [3 `, x" I$ J. u; _! Z5 C通过完成以上操作,Alice 能够证明:0 X& c1 ^5 [0 A1 b  w$ u1 O. w: ~
; V4 a* {3 k2 ?/ h* H
Bob 知道他将收到的 Grin 数量(25)。! h* N  Y) R9 H) R" K+ V
  t; @+ }% Q. h3 Z
Bob 知道他的 nonce 值。
" z2 i4 b4 d( x( B! t1 H; K3 R% C& s9 G
Bob 知道他为这 25 Grin 选取的致盲因子。
$ a$ T* f5 I' v( W; g$ v0 j  @4 e5 n# F* ~3 u" R
……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。, Q+ M2 e* s% \( h( ~
  m/ `5 _+ X+ H# E$ D/ C5 c
之后,Alice 生成她自己的部分签名:5 C) Z" @( ?9 H; ~1 d) z' c1 r7 j

, \0 k5 @; S. }8 p-该交易中 Alice 的部分签名。-% C5 L$ v5 H) ]& T5 M

( s$ P" |, t1 UAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:) Z5 O7 g/ O. n1 b

" W8 y# L  F$ p& o3 S1 M9 p交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。8 z8 F# o4 A" ?& E( _8 l- [9 j6 v6 U

3 V% S4 C6 e# {# V4 Q按照顺序,签名 包含:
) _- K/ h5 N6 q. L/ x
# s* O$ Q3 @  N* j4 `+ R3 ~% kAlice 和 Bob 的部分签名之和。: i( u5 ?3 k1 k  ~! r' z
1 z& P  T9 X  K& e( x3 _7 a1 K
Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
4 A& X$ G, g, |% r. n% I( {4 [, ^# Z
3 ~( p6 N% h, A& x' z9 \合并之后,交易签名可以表示成如下形式:# u$ W. M7 W( L

* i9 _& f9 M, M- W2 a/ i-交易签名-, l! i$ ?2 \4 h4 ?5 v+ q% {

9 B1 X2 U9 l* N; k其中,s = ss + sr,k = ks + kr。' o8 t2 M5 \4 F9 J& N: t
1 y% q/ @0 J1 x) b+ _0 G
记住这个签名 —— 你很快就知道它的意义了。
+ @" {' i2 D' r1 }5 t  a# l& X1 S2 Q7 r) v/ Z& O6 ^# e
交易完成* Y  u4 f$ W( i: R
5 D+ m3 q3 f2 T2 K, {1 a0 N
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?1 ?: }2 I+ r4 H: n$ J

1 w- q- `- U' }, Z9 p, t1 A. h! k6 S在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:9 ^7 [6 C& h" {% d

5 a: D6 Y8 k5 E! E2 n3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0. I% j. `+ F4 i7 i9 \
5 I# X8 K9 g9 X$ Y' g, y5 r
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:$ X; U2 y, A! \& k( l0 ]- }# C9 m
  r  g4 i+ b: {! b0 S' o
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)
+ j: F& @3 b( j  l0 p' j4 p
1 h/ y! o6 K3 F; H( [. h这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。0 A" T9 S+ C5 [5 Y5 _( y& |

6 Y9 W" z# T- b* b% L如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
9 P3 T) d/ N' L
/ Z- a: @% Q& U5 y9 t. e还记得上文得出的签名么?
! Y% V" y: p9 ]4 Y3 d7 i7 h" E2 N" ?/ ^: Z* ~
-交易签名-
4 E! i6 b2 w* L+ R3 A
, @) R" L) V+ o2 q. F6 b% t3 y该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。/ p1 A- r$ T/ g! s9 [' @
, U5 \6 r( _. q& N
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
' R5 T& \' m9 ^! _4 K, b! M: Z
/ Z1 B" Y& l" O; i$ m. ?, s/ N! g-等式两边同时乘以生成点 G 后 Bob 的部分签名-
1 Z; k7 ~, J3 _/ A: X3 a# J: v  I2 i6 E
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。' R$ Y1 S# u3 I# e

" @0 h7 p. O4 ^/ ?% U-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
% C1 ]: c6 k- l$ m( ^8 s" o- h. ~! m8 Z$ G4 g# u% F; J  x
如果把两个等式相加会发生什么呢?你将得到:
8 S7 p7 y( [, }- d4 j. {" @
' X! {: X0 W4 U5 w+ p8 E6 Tsr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
( X$ P/ b3 I. j1 P3 O) ^
" G4 ^0 o4 P1 H其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。/ k5 d: r+ Q, p3 s/ O( {7 ~

' m7 s9 F& z- ~Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。- X# A: U) ^/ s9 I0 \5 t1 V
7 K4 q  J& _) m' V! N5 g
进一步简化这个等式,我们会得到:" R! z* D1 X4 P4 |2 B4 b

5 Q+ e# z/ V5 p1 K1 Q0 j$ ?sr?G + ss?G = (k?G) + (e ? (r?G))
( T4 v& L& w% K' ]9 ]0 m* R9 G  W( q& t9 T+ q" n
或:5 F! Q' g0 l- J+ @
+ l6 N4 Q0 a, j5 y
sr?G + ss?G = (k?G) + (e ? (25?G)): V/ \4 r' q/ J2 O8 ~' c1 ^  ^: a
. ]9 X9 G$ J7 b
那么接下来只需检验等式两边是否相等就行了。% w; u6 G5 K% w5 P6 \
7 G8 s( |* Y! U- `
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:$ T& G0 r' v4 o, o  ~
. N1 U, I  _2 S4 v6 y1 z0 e: z
Alice 花费的输入中没有凭空产生多余的 Grin 。
3 ^; h& @8 p$ ^$ b/ _- a  z, ?& r' t6 {) c) Z; Q
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
0 g/ w) U& g! E2 W; W: j8 x! t- ~' H6 p9 n; j2 d0 _$ t$ r
刚才我们用来验证交易的信息被放在 交易内核 当中。: M8 _4 D; P1 t6 H* C" b

) |% ^2 |' C! p4 I交易内核) `& p9 Q8 e/ [) v2 I" F& C% N/ ~' r- ~

9 \/ \+ Y% D' b; r' |0 ~除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。$ h3 X1 u8 v6 U
: G- K+ h# _/ t5 b- ]" h3 c
以下信息将存储在交易内核中:
; [) \" ~( @4 G  g3 ~! e5 ]1 t5 m9 y
交易签名 (s, k ? G)。+ ^( _- w4 T$ P8 m0 {  h- n" t- Z

) c- {) T* b9 c. b/ ?" ]. d7 ]' O与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
* @+ Z/ Q( K; u( B3 a: e$ G9 `) i! Y9 d1 P5 k4 ~! n+ l
该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。6 y' O; T1 E) i/ j( c  \7 A. ?
8 H, z. k$ P" |% x' S. Z
总结4 G; U" C+ l8 ~

( s; l/ f! S$ e- {在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
+ V9 Z6 r  F) [$ x  V6 j9 N/ J. n  k  Z& ~
所花费的输入。: \+ n+ H3 ^# ~; c! ?6 d
! p  u8 M% o: i* p" O" b7 X+ X
新产生的输出。0 K" h# j! I' L/ ^

/ u! I& C! H: o" n  K交易内核。
3 }  z' S7 y' ^5 Q7 k! M; e, H( D1 n2 X' P9 @! n/ R% d, }+ D8 ^$ |- C
内核偏移(我在这里没有描述)。9 c# M- C8 I, V2 S* t# n" j
" j1 S  J! r, I# L) U
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。. }4 R/ f0 u4 ~  _1 ^

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

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3