Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
174 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
, b+ w# V6 ^; j, v  J- L3 F/ Q4 g$ x- o2 b9 m+ X
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。
3 Y2 l- M3 {! E. R- l
6 g% ^" R; d- Q: b$ m0 O7 JGrin 交易的输出是一个 Pederson 承诺,采用如下形式:% k1 M! G$ ]" ?4 A, p
+ |" d* P4 s' }2 s# _% b
1.png
) n. ?, f& h, l0 C" `# Z/ c+ d8 r. o" ?
-一个 Grin 输出就是一个 Pedersen 承诺。-
6 f5 _, y0 V  @8 w7 a; c5 p
; _" e$ ?/ |3 f" W/ P4 sPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。6 O6 k/ g# X  z/ u
' c, p" ~/ T5 E  F( F# O
以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。) @- I: C$ [" y& j
1 E2 n# x5 K$ I* V
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……/ T7 B( P- c# x  \1 O4 e( f% o
9 f1 O' V( [2 K5 M! Q" g$ D. u
? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
+ u/ V; L5 t+ x) d* v; u7 K
3 q/ H6 l( i- ]. U0 W, F/ c# Y? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
+ P  \: J0 w* Z  E- e5 u% o% I9 n' J/ \2 M7 M; ?. s
已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。
1 C4 E) _2 v% |8 U! C+ H2 t
% l2 ]- E$ w3 l) T, o- o8 r若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。
* r. z) b, U# ^$ ~3 {" A) y
1 Z( a  n* _9 k, bGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。
. n6 [  }& q! k4 e: H4 C; @& K$ i0 p/ I9 y8 ?
假设这个输出包含 40 Grin,使用的致盲因子为 20 。5 p; r& r! Z8 y5 N: Q

( y( H* J. J. t6 ~  u: Z! X, m' l6 T7 P(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):; V3 b" o6 j2 X7 z+ w5 b3 |9 M) N( \
) e6 I& i( Z- D9 I
-在该输出中,致盲因子是 20,Grin 数量是 40。-% }( X- t7 P* r. a5 V
/ |4 S8 v8 l/ m9 B4 I+ t& A
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:% [, g* e0 |5 z- Q1 J: T+ I
: W  |$ |* b6 {9 R+ J
-Grin 输出(位于 “commit” 列)。-  o1 K/ k& s+ |' {" I' O

- L  h  ^0 K0 m6 T4 C7 ^+ @再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。9 z- {4 J' W& e; [/ {; i6 g
2 Z& {% e4 y* w/ G
花费该输出
9 Q" |* B6 l# |0 L9 u) j% a
' Y* p- u1 {( H, |- d假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。9 H3 S/ D# u0 i8 P
& ]8 |* a# ~. b4 k. T$ n5 ^
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
9 g4 h- U7 t( I: Q* u' h+ B  r
( r# W" i5 o; V% p' [-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-# r5 l( }1 S+ c3 H* d
# N. i/ W8 ^2 ]' k
这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。
  t& c7 r& m% L3 x. _. L
- F8 g3 ^* t, x7 G: P. eAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。1 \1 [8 `1 A/ o0 J: G- A- ^0 Z

$ W% Z: R0 c: V& e-Alice 的找零输出。-  Z' B) U( ]  ~* e+ z
' P7 c2 _0 c0 _8 q
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
: k. I+ {0 I0 W
2 @7 b9 z! z: F- y/ m+ }# ~6 W/ `这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。
. q9 n* ]6 ~! K2 B6 Q9 G" ]0 V. {3 O$ Z% B9 g) J
-Alice 的致盲因子总数。-1 b( E. I$ }/ b: r9 P. k
* @  h/ H; o* b9 p
rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
# w, z' S& A' B( M1 C& O) S' M  o! x) u- p# H5 `
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
9 {/ E! ?  a- ~, c# x3 P6 F+ e( n/ ~$ P" [/ q" q! b
Alice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
4 z8 W- U" y" h: }1 \6 w# @1 y- k; }
Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。
/ e# X! y9 _4 n! P9 h! n
3 w" }2 X+ l9 v( }, o/ ]元数据(Metadata)字段:* H0 e" V# t+ n4 ?
, n+ }0 l) ~2 |
发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。2 t% t( }' f5 O) `& Q
" m; `# E/ T. L6 O" \. q9 t
交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。
6 \- c( u1 i& s! N0 u' z: B1 b4 @+ r8 u& e# ~8 ^7 z
交易费(TX fee): 交易费(在本教程中咱不讨论了)。" A$ D- m) I+ \) {1 c+ O1 J
0 I1 i" P* a5 Y5 L" ~# q5 J
锁定高度(lock_height):交易生效的区块号。
0 z3 \) x/ z* T! }% I3 I
6 F- X3 r7 _. {: d3 D6 D2 |. Q数据(Data)字段:8 W7 d2 i2 k9 l# u, I. K

! P( d1 y  p: _$ M6 s' k# I交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。
- C/ {7 H) `5 ^  @
5 h+ s. Q3 {2 Z+ H- E9 {# _, D找零输出(co): Alice 的找零输出" B* ?# M8 l! t

; |3 V; N5 {' Y+ aks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。
! j# Z0 b9 Q; y; `9 `4 J' o! v2 e
rs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。
0 X9 U& r! m" p2 b1 F) x' {2 M3 r; T$ D
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。0 ?# Z$ L* [) V" B
, T, O  D" A8 I# a6 r. P, ^
Bob 的操作
- Y) X/ W, T; O- ]2 h
" R3 j5 I2 w) S" B& c" E当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。
- r9 ?) i; x7 l& e% v
% S. F/ _( ?3 ]$ p' M-交易 “消息”。-- i- e& b8 N, y  O
& ^2 {7 f3 z# r5 ^
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
: D* Q$ S! P% C" H) a1 M, \, O6 v7 \4 v0 p8 H  y) I
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:; m! z# d% J8 {. X# q

" F$ A4 T2 y; `; B7 o/ V/ ]. ~-交易的 Schnorr 挑战。-$ @' d' B- B  _$ j6 E
6 s/ X4 n  Q% m, h( n( X4 @8 a
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
8 m3 ~; S- S* G- e! U9 ~  {3 F$ k' j4 G; U
交易消息。
0 w; I: l2 g3 t2 x' C' ?
( o7 _0 D. y  R- c$ m9 ~6 a& sAlice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。/ ?0 e8 {5 C' I% ~
7 ?( T4 a- T* Q+ w, e
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。% v; f& I4 P& S$ i( T- t
; E  e) Y" N, r, [# h- i( d
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。! ?+ W/ W" {# R1 c1 U# ^

" A# d4 @4 L4 c6 O6 k-该交易中 Bob 的部分签名。-- J) ?- P% O8 a- b; r7 y
9 w! e6 O- z, m% t* Z- M7 I3 b
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
/ Q$ c) v4 ?9 |4 c
8 W, z9 o0 I% e" k6 i: zBob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-' G/ ]* `/ Q; S; [0 }1 a; }+ n+ Q
1 \/ M1 I  v* G# s) G# Y" I+ K7 `
按照顺序,发送的内容包括:
3 Y7 ^2 A, o. [! b; \. P7 p3 [2 b4 ?( U7 x, }% f
sr: Bob 的部分签名。
- K: U* {9 i& v. w* e- E5 S% I: i8 J
kr ? G: Bob 所选的 nonce 对应的承诺。; l' \+ j1 r& L6 _! ~
& F: \: k  p% P9 D7 [0 G
rr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。1 ]6 M% d9 P# m) f
" L. o: H2 _- E2 r1 D/ V# {& A  i+ }
最后一步:发送回 Alice
* o3 H& `2 k" g: H, ~* v  r( ~% C) \7 l8 p; x1 t3 s
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
+ S. v1 K( e4 D3 }. R9 u8 n& [# l; o% I/ A( K
相信你还记得,Bob 的部分签名 sr 包括以下内容:
% q- x$ s" Z, j4 V; V* T  C$ U) N- }! A7 C1 Z1 K
-该交易中 Bob 的部分签名。-
7 _0 y  I. F4 z; q1 K
, R$ M! V! G: ?0 f( W基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。) \3 z" E1 {6 N7 Y/ i$ ~: j

& t( A( c; O# MAlice 在等式两边同时乘以生成点 G。-0 [8 w( O9 b. H7 v; h

9 W6 X  p/ \2 G4 O3 w2 [! `因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。: [- C$ Q5 w6 T: P" _7 v) l7 M
4 Z: G+ b+ `# A- L
通过完成以上操作,Alice 能够证明:
+ E* _; i: i3 L! A
& N, X9 X& C4 r/ ]  k# q! j( DBob 知道他将收到的 Grin 数量(25)。
" x; _/ B$ |  d, O5 _1 W6 A3 D# K' k1 F- j. L" d# I  `
Bob 知道他的 nonce 值。( R0 J2 `9 u5 ?- z
7 R2 W0 I- @$ V% z( t
Bob 知道他为这 25 Grin 选取的致盲因子。
6 n/ A0 q/ J6 ]1 k
2 `  k! B' ]# i+ p9 D3 x……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。
& w/ Y3 m4 [# n5 E# \/ |3 y
, V* q0 ]- z1 G9 P之后,Alice 生成她自己的部分签名:
9 p6 b, }0 X! H* |: D8 G5 E1 ^, L, R
6 M3 u0 s6 E% s! m, B9 ?+ B7 F-该交易中 Alice 的部分签名。-
5 G- I7 K9 j0 e- p1 n
* n' a8 B$ X1 H4 J+ w3 oAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:
( }0 J6 z: R) z7 L/ K2 ^) j3 H
4 t4 A: S$ v: m% G2 y: f. h交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
0 c6 x* Y7 S- v- H, X- ~
& P& x- r) s$ b( |; _# i按照顺序,签名 包含:" p: U5 I0 C' w5 ^% l6 v0 O
& s; ^6 e/ O7 J# [) E
Alice 和 Bob 的部分签名之和。
7 y" x: w9 ^+ P) Z5 l  a+ K! e& k6 j0 e2 o9 B/ m
Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
9 t$ }. K! o2 v* E1 v4 q! T, d2 B
合并之后,交易签名可以表示成如下形式:  l2 S+ a1 Y4 z% M$ ], l; @

2 [5 t3 }0 [: o4 ~# \-交易签名-( Q$ f% a& y& f+ P

+ m) Z% [8 X2 v8 ^( W其中,s = ss + sr,k = ks + kr。
0 n% _' O: \+ L7 }: Y$ r4 L7 N. [3 a/ Q% E9 j8 u/ v
记住这个签名 —— 你很快就知道它的意义了。# R: h2 c( ~" q7 d- G' [( q8 }
8 e- y/ _' M/ v
交易完成
, K) P7 W; B- s
# H: c) N1 I6 w* K数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?2 b- g$ @( q+ ?

  g* ?8 \3 }  b; J  r7 r在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:- O+ L8 R# x0 z! M

3 y2 H+ n& p) ?- h! R3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 09 r# L& h! Y1 a9 z0 m% E1 y

9 l% b2 ~. h& X) _同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:
; ^' n8 Y  v7 @) l
3 ?. P5 y  o6 x' F3 C& U! L(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H): r- z5 G/ i4 H8 N
0 r! T6 y) n, o. O7 J; U
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。# ~/ h) U1 @. w

6 A; z  j" J: x2 x2 f/ b9 U  V如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。8 m% X9 |' I) I6 J7 G

, r: \. C; z+ j还记得上文得出的签名么?: F+ n/ U/ K- L# {' d

+ {2 R5 R  c- ^-交易签名-
0 d7 }: Q7 E; X% R/ y6 t1 w7 C8 S) F- O, W, z
该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。
( j# t) {; ~, Y* g+ u; i1 h) R+ I1 L5 `
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。( ?- y5 L5 E4 w7 Z
% ?5 j1 G, a9 J- z
-等式两边同时乘以生成点 G 后 Bob 的部分签名-
5 N5 Y7 h& D. A/ P7 L. M; }7 L1 q0 O+ \2 b0 o+ U" k% s% ~; M
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。/ r1 p, h( e" n- s1 @) @. D
2 G1 R) `- Y7 M' n, E; N+ H
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
, L: P1 |1 b: A# t% S
4 c/ t  u9 f5 C7 P+ t$ t7 c如果把两个等式相加会发生什么呢?你将得到:3 u3 e* B) V! Q/ j: r$ M9 ^

4 H; M1 `2 q/ \9 C- Dsr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))7 C- q! U' Y( s2 R8 e8 u7 d% ]
8 s* e3 J# d3 \7 m
其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。7 F3 x% ~2 m, m! U. x4 s' ^& r

* k3 t4 w4 [  C/ S! n% eBob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
) Q& ^+ M- c- N& X8 P3 Z! |- _) K6 w& K7 ]) C
进一步简化这个等式,我们会得到:
% H. o: j$ k( z9 ^# d4 Q4 ]% c" ?# w/ [- X" E. f; r* a( w& ~
sr?G + ss?G = (k?G) + (e ? (r?G))
4 O+ P, P) w6 _5 C7 d: Y9 v7 z+ g( f* A
或:) r7 b! `! U' V& }/ B8 N
! s$ P8 @) m4 e, Y
sr?G + ss?G = (k?G) + (e ? (25?G))
% c% H5 ^- \& S/ y/ W6 a2 g* b  {
; v; D: B: N4 o) R( ?那么接下来只需检验等式两边是否相等就行了。
+ [1 Z9 o& d" `. m  y( z, j, d( ^
- [! o1 ?4 l$ _/ O9 `/ k记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:) P/ c3 }7 ?; J  k
5 e! R1 p7 W. o$ q
Alice 花费的输入中没有凭空产生多余的 Grin 。9 g, O' @8 `4 n  ^) P$ y

) J  O2 r4 m& n, M4 N; H9 `7 g' PAlice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。: y2 O" \* X( _( P# W1 ]; e8 Z

) _8 t5 z; j" z/ P刚才我们用来验证交易的信息被放在 交易内核 当中。
6 V% d4 X0 ~' d- h; W& k+ p: b
+ v9 U* s1 T! P2 q% p* x交易内核- G2 }2 g# n* Z8 u4 A& w' Z6 u8 `1 a) d

2 S* \- X' S7 H7 v除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。7 S6 C" n# E+ q+ ]' R

: k- N" Z- Y+ G2 ~. @以下信息将存储在交易内核中:$ c0 W$ i# F! j: g4 ~9 F& Q
/ `- s, F8 _& a5 w! Z: `# g$ ^
交易签名 (s, k ? G)。
% r  W) e6 c4 `. R- h# i9 _8 D8 b3 |# }4 U
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
" ?  F) S( J0 a- E4 }
6 X* i: z! f: a4 O$ [& K该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。2 M/ \0 T7 f) [9 a, g6 A: j
8 U+ X0 N1 o: p! T8 e
总结  W+ V; f# f- T3 D% {

4 H3 U, f+ o8 B5 J在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:1 ?% w; C. Z& s  ]- h

. A7 T4 g6 Z0 w9 H3 ^8 x/ Y所花费的输入。9 L) A  |0 c1 a; w: I# K' ^
$ O% s* a' A0 [
新产生的输出。
1 s  B9 P0 [9 s$ G3 e! }. n% y. e" [  P1 q
交易内核。/ V' P1 [' O: m7 f
" m+ Y* Y6 U9 A% D
内核偏移(我在这里没有描述)。
4 s/ ]' n" d# z+ a8 i& }! k/ j+ y  p& I. |, {3 ^1 F
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。' ^  r' y; D0 [+ z- V

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

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3