Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
137 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。8 ~2 m- K4 U/ P4 i# o) d

# T- W% q$ R* b本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。, g, |# J: i7 Q  C
1 z6 P& J/ U2 `: ~; H
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
* w, z' q! @+ I9 D' x' q7 _5 k3 Q& z- o: R' f8 q
1.png, x! T3 }3 [7 a  K; @. o

, Y1 P* u* D3 [5 {-一个 Grin 输出就是一个 Pedersen 承诺。-. k* X$ B. ?/ M# p9 S) f

- G- D' T  Q6 X6 n) F& _0 ~Perdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。
* o/ M* r! X- \0 m* f8 v. _/ J' q3 a" B8 Y" m7 m
以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。6 f/ p( P1 O7 W" w9 C) A% b3 j
2 j$ ]& V5 G' G% w8 o
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……% j" t8 z. ~- {1 V
6 C8 b! A2 O* @* L, J. ]4 Q
? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。. [6 w6 ~. Y8 E; h5 O9 U, M4 f' W
) j( q3 g  s$ P
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……# x9 y$ G* K2 f

: t: B7 u$ A& @# H已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。, z- A1 j0 y; N2 {8 ^5 h; n

( W2 M( E1 ~6 [若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。3 d, o6 j* e4 M7 ~0 K& n! }
. O# V9 {  B9 w+ L* A) ~' v' }: e8 N
Grin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。- K  B! L) a6 [) q; z
; n$ o% C& W' k; v& u0 h) v( i" L
假设这个输出包含 40 Grin,使用的致盲因子为 20 。2 j8 B: X# x( l3 p

0 u' [& ~; l! M7 x/ c: O(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
' x% R. H5 H  O) u) s, {/ q# p2 S# U% a2 N/ }* T) H# `7 W
-在该输出中,致盲因子是 20,Grin 数量是 40。-: p! m$ c6 _1 _% b
$ N% }3 a8 T& @! B
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:
" E6 G. v1 n: t# p# T& R0 T. j' x9 P6 x# y2 Q; l- ~/ p
-Grin 输出(位于 “commit” 列)。-
+ |, R% H  Q: W. L  R) M/ C. o
- Y- r5 Z* @8 p再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。
9 M7 v! w% }, F* |) f5 O% I
9 V* P6 |2 b; j; @, t花费该输出% W+ B* Q- H  }# F" ?& ^

0 V- D  N: X' v- @4 V假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。0 P6 Q  a" O, t+ D2 }- G9 w
1 ^/ L. S# l, y7 ?' @/ s& d) Y% h1 C
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
& a( C" \5 J- `  K4 d8 X: I' y' e7 M2 u8 x% U
-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-" T, r" d" k+ O1 X9 V/ a
, @+ N2 ]: ~. M  ~
这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。
4 l" K: d+ w. }8 l
  o$ y' w* f/ OAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。1 g% a, V8 M1 ^: d# ]

7 F  Y# ]9 w- U-Alice 的找零输出。-$ y* }+ {. U( U3 K3 K, D

) ^" v5 ]5 @) ]/ p% v& a正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。/ v3 |; K! s* O3 M0 R
) P! U  }- ]7 i3 R- D
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。
1 b' M# t8 e! @+ U) i; T0 u6 e. A/ B3 @- L/ l& ^5 W" A
-Alice 的致盲因子总数。-
" {8 Y  o7 k* E* W8 Q, y, ^% ^; a* b6 F9 e! ~8 R+ u1 l9 I$ o5 G
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
( \& ^; z0 v5 D! @3 z+ Q
8 ]& L/ B2 z- m& \: [: r最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
* E% Q% Y2 A# ^+ \  Q
+ ], m& V6 g- Q3 G+ T1 [& A0 F5 @1 @Alice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
9 b( b) P% X0 @
+ b" K0 \) q  w+ zAlice 在 Grin 交易第一步需要发送给 Bob 的所有信息。3 y, l5 l. ]# F; |% ]& {
% r9 {. u" B% z7 _6 \/ h# x
元数据(Metadata)字段:' ^. i! u$ `% v" y( X" O* V. M

7 D( O# Z5 V+ \( S8 `8 t! H2 o发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。4 q7 y, {/ z8 M2 e7 A

! {  |3 A6 f& M6 q: H. y交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。: R4 i+ q6 p1 B; Q% h
  h8 `& @9 N$ @! O6 C/ V6 Y8 E
交易费(TX fee): 交易费(在本教程中咱不讨论了)。8 ]9 w1 P0 g/ d* c) k0 E$ }2 t
6 D3 h6 U: z6 B( C# B9 U5 j
锁定高度(lock_height):交易生效的区块号。
9 ~5 P) B& g1 \+ F  }) M
9 ^% I* s* v- S" j1 f& ^- c$ X7 j数据(Data)字段:
. W7 n- p7 d" q) V5 t( i
5 O7 o) Q8 W& p* Y: \交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。
+ j& n8 ~/ |6 V+ x2 i% U
; H8 \" ^3 y1 [) \: `找零输出(co): Alice 的找零输出
; H3 z/ y* K7 o
8 T! _/ q5 b6 c% l! }ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。
6 _2 _0 k' U! P  B9 Z4 i
2 o" l4 t- h8 S- p* S" v) hrs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。
* t) U5 g+ Y; Q
' i2 `/ B' K$ y( w$ eAlice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
( T: `, R0 t8 m( y) A
" q/ W5 R3 q9 @8 tBob 的操作
8 ~4 k# {/ b  \5 l) [* f% l. a  n0 B% y0 V- n  l. I. `7 r
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。+ K6 T7 p, F5 O
' v& b! Z' f  ^: k% S
-交易 “消息”。-
3 {. F" I2 A; n/ G" T
: s, P7 L$ |8 ?* @) ]1 k+ H7 SBob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
% ?/ D7 t( y' d( E" F6 M% F  ]! O8 P) d6 }. C; f# O# f
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:
  a& ~( \# F0 j) \; c7 n, M2 I- `+ x; {
-交易的 Schnorr 挑战。-
) t8 M3 c( o2 _7 X' @' x5 X+ V0 }! v( f4 W
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:( J$ `# J( [  k& A* A: D
' ?9 W6 O0 g! n8 @
交易消息。
* w4 F7 Y. R6 e8 Y3 K% c9 i
' V1 t5 H& `5 n/ H; @$ p" c, }  lAlice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
' \# U5 x' J4 X2 ~  v& B3 F0 _  F1 C0 l8 E4 \. ]* @9 e
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
3 t. R1 g9 u9 o" z) }0 `
; _( n% ~1 q# I9 FBob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。
# Z1 Z0 d2 ~; q
3 _( X6 U6 o# [0 `# Z-该交易中 Bob 的部分签名。-8 k7 O$ `1 K4 [1 y! r
. @+ c# `: {# ]" [* O  a
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:2 T. r6 U* W5 d' [$ Y9 b" `! b  \
' y4 ?1 R+ W9 p! A# b
Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-! B4 H5 C# e7 f, X( a4 J

1 y: |  o& T- R, r$ Q" j按照顺序,发送的内容包括:  {, O3 W- @. f" A* t8 k

* Y  V' U8 P6 O2 N; Q$ m  B: _& {sr: Bob 的部分签名。# g! v5 [9 k: c, {5 S
; T3 m: n$ m* y4 O1 t: d, _
kr ? G: Bob 所选的 nonce 对应的承诺。
) x+ ?& y. H2 e+ ^. g: c2 g( O
; W$ C# R" F9 irr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。- s1 r: J, N! ~7 _& q! o8 J
% \. a1 O, L0 O1 ~/ A* |
最后一步:发送回 Alice3 ~$ w; f' K6 p: V: |

) L0 X7 G2 u1 \Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。" B. i* ^; ~' l2 z# G9 x
0 I' o: n. b! \
相信你还记得,Bob 的部分签名 sr 包括以下内容:
1 B/ e8 _- }& g1 @
; ?# k# F9 U5 d+ \: Z-该交易中 Bob 的部分签名。-
  w1 v3 d4 _; y8 h" \6 b% p6 }* b  u
' z! |5 \2 @* H+ h& c2 A% L基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。
8 ~+ z4 X+ S9 \4 ^$ ]* M8 T
8 ~# P- j4 B6 }% w6 xAlice 在等式两边同时乘以生成点 G。-
, f' ^3 R& K( C5 N4 E( ~% S6 E+ R- {6 R" u9 V7 S
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。" ^  ]0 o) c4 \6 H% g/ [' _& `% }5 C
; H' Y! j: E1 M- g2 ~# \2 c5 P
通过完成以上操作,Alice 能够证明:
) ?8 e" w0 w9 g/ C4 e/ |
* f/ B, o. X, z$ Z! P) x3 UBob 知道他将收到的 Grin 数量(25)。
( _. v7 a' j: M. W4 z8 R2 |
, H. }8 c5 N% y0 {Bob 知道他的 nonce 值。) X! t1 p" R* [  q5 _! P1 g$ @

" e# b' W* Q( D0 JBob 知道他为这 25 Grin 选取的致盲因子。
" P" y0 _; G* d3 G3 E
$ H* t9 Z" ]8 ~: ?+ q' I/ R$ s……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。
* K0 V. C: D& J! l6 b
8 p* D5 d. B& V) `7 O: Y) \7 O之后,Alice 生成她自己的部分签名:
" t  K/ o7 D( u! ^& l! F3 K
7 {4 k* j! U$ r3 t5 I! q/ X-该交易中 Alice 的部分签名。-
% G/ g0 u  N+ N. v, t( T1 y+ l8 _& [  n2 ?) U$ V
Alice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:
; o( Z# P1 K* I# N) f6 b3 z0 F" i, y) ]' ?8 Q
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
( X" {2 Y: z1 c3 E/ a8 h6 j8 a  c# y  D$ K( |" X
按照顺序,签名 包含:
/ W! b) R+ E' `; T0 `8 t
' j; I( P& o- m$ bAlice 和 Bob 的部分签名之和。
* E0 _9 q3 @: J9 z
+ l4 |$ ^4 _$ P% @5 t8 N0 x6 RAlice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
8 i5 m- w/ `9 B* n) E- d$ V+ q' ~8 G& A2 f3 W1 T
合并之后,交易签名可以表示成如下形式:6 p9 V) \/ u, ]8 B

/ [1 n$ v7 i$ u' X-交易签名-  A4 N! Q8 a' R; M% J
2 M  d. N  g6 C& m! Y0 l
其中,s = ss + sr,k = ks + kr。
; |3 m* |3 s# d/ Q
' A. j) l2 Z8 P: x/ d记住这个签名 —— 你很快就知道它的意义了。- g0 F% I( Q" k! R

8 v& Z6 N" L1 s交易完成
: m0 N8 r$ w; @; D6 {( r
4 U) Y) B- h! r3 i1 E+ W+ N1 k数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?: U9 \) T) C, [9 v

) r# F' g- |1 X. O* y9 s' i  a在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
! |, Q2 k1 w, G8 p7 U& F: p; S
* `  W; h# d- `5 m) b$ g! V* B( Q3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0" G- y% Z6 @6 S
; b8 T9 b9 j! C
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:
: D9 d$ j8 X/ z) D$ ?9 [) p7 j! U7 Z: A" T- H' Q- p9 \
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)
! h6 S- \$ i/ {2 @8 c1 k+ f, ^6 s1 S; O% s" N6 r6 `% z
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。
2 y/ u+ k; f7 c3 R# c/ J3 U! u
7 g8 f( {$ r9 v) U如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。! j, D# |, d1 M8 f+ t, m2 i0 Z: I; j
- w  |! `4 f( X; o$ v
还记得上文得出的签名么?: m/ b9 h: V% \) t# \; l+ r2 f9 N- R' k+ y
2 z" k, K  T# ?: C! [
-交易签名-% X" [% P7 G+ d) @5 u) @# m

6 H6 M: `- K4 A3 i6 [- F该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。" y6 `+ h  |& _# i
7 Q2 I) }) ~+ ]& s7 W/ C
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。  Z# X2 f  ]5 c! W) d, u
$ e2 E6 ~" c* N! U
-等式两边同时乘以生成点 G 后 Bob 的部分签名-8 b/ Z( s& }0 W- H  E% M9 e
) S3 I6 D3 w3 S  @* C% Q0 a. ]
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。! e0 C" c1 w2 A6 ^" ~3 j
# ?. n4 S) z. r
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-' r0 `5 k, M. n: y
/ w3 I; ~2 c+ `9 R$ m1 C/ v
如果把两个等式相加会发生什么呢?你将得到:
- r7 k' m# L' s( N7 z4 Q# q4 U% K7 x- x) @) |
sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
5 @0 ?4 i; f+ H
6 i8 D0 a( R6 k, t$ d其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。& _" C) _. Q9 }6 }0 L

/ o- U3 r$ ^( b- K7 W% QBob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。0 p2 V8 d  }5 a( x! q
# j" |% y% c8 z7 S
进一步简化这个等式,我们会得到:% l  b, f, h2 r% H# r
; k! d3 F8 U7 }
sr?G + ss?G = (k?G) + (e ? (r?G))
: E% ?; `" E7 k' S3 s0 }7 k. y4 m' q  Y, N5 T$ k" q4 H
或:: v2 s1 l, z& l: ]1 M, O

  z: c" w; E' j5 F% e" w3 osr?G + ss?G = (k?G) + (e ? (25?G))
, Y: v) |; t$ i' `, R" s- [4 L9 S) P, W6 @! g  W
那么接下来只需检验等式两边是否相等就行了。
6 q2 v, z( e4 ^( q
# t( b: _6 K( r$ Z7 A( ?9 w9 ~, S5 a记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
3 o: Y( g0 Y$ g/ M. g7 c9 i+ G$ j, }1 j
Alice 花费的输入中没有凭空产生多余的 Grin 。
/ z1 x9 y% J" _: T6 W9 y; ~; O' q5 ]9 w/ P3 h3 J
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
/ p- T: y) P5 B% `; M9 U& C/ `9 I: d$ v- v- N$ t. K
刚才我们用来验证交易的信息被放在 交易内核 当中。/ s! h/ J% j) b0 g9 O

! V" S2 c  n  h/ {) v+ F交易内核6 y# K5 q. C' o/ r2 }0 Y) J

' x8 w, P8 H: A$ Y  n# h4 N# g  @除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。
+ V$ Q" A4 x( y" I, [5 K" t' J5 E6 p2 h
以下信息将存储在交易内核中:
) U) R# ?; [$ ~# A- E6 P  O9 C0 _9 l. A! o3 ^
交易签名 (s, k ? G)。+ r! j. G( R; P3 p) Z+ f5 ?
& o) o( c6 i" t) q! r) V. Q
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。, A$ c! M( P# H0 W  z5 P* G9 |' P

  i5 b# I% W" R+ l- a, D该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
  x, e' Y% z( W6 b! n* S, B  k
! r' m9 k% t# U  N总结0 Z( a: Q( z% X
  v% q0 n* }6 e' }+ g! S
在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
# n( E) u! f, F, Y& @
# s! c, J' T& j5 u  m0 B所花费的输入。
# W% W0 D/ X  a8 C9 u5 z- J/ S5 v  Z$ k
新产生的输出。
5 A& o, C8 E% C7 ?& `' Q* X. ~, e* r9 {; f
交易内核。. p& V3 l+ J) F) |' i

6 t$ h$ x  Z: d- E, u内核偏移(我在这里没有描述)。0 Y0 D6 l8 r8 L( S0 Y3 x/ v( U' I

$ I6 d9 F% w  E5 R& t* V上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。+ Y* h) U2 l: s9 i& G

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

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3