Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
79 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
2 ]! b* i$ z1 \, R7 @1 N$ ?7 W3 C% P( s' }7 {/ e
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。& W7 ^1 G, J0 U
) B5 V/ x/ R0 U2 y% O1 @1 ]- B
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:
/ B$ Q$ y% g% w& t6 }( @
, c' J' g. j4 _6 U1.png" K3 W* [9 k4 G& {9 k, ?
: E0 R! ?! e" s1 f3 ]: B7 W9 W9 E
-一个 Grin 输出就是一个 Pedersen 承诺。-* c9 x# O( a; o

1 y0 y( M7 ~! t/ [" {9 g! E* QPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。3 v" y3 Q5 S2 M( o$ N

) Q! ]( A8 J. d2 b以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。6 R- e+ `) @1 J
' j9 ?! @/ C5 @" m" p0 Q
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……' d' }' C8 a# O4 |: J

! f2 G8 Y" x& u, q1 u- n? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
6 t1 E; v# Q5 X* W$ e3 L' N6 }" u8 {. l7 u8 w  K
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
# X& H' \$ J" ?4 [; L& ]% [8 f# ?$ o
已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。; I& u1 x. L& B  j. m

' }- K9 q. w$ z9 |  t: J. k9 z若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。: I$ [1 O. `8 L; N1 e# \, c. {- E

* d  C: r! K+ R& T6 M! u2 `$ vGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。, |0 f6 j. `  Z# ?. V3 T
: G' O- Y& @7 f0 R& _9 G% R
假设这个输出包含 40 Grin,使用的致盲因子为 20 。* \$ P1 p0 K. @4 N, u

% x8 I" F4 s1 |4 a(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):; c1 c+ n+ l* ]3 F

# Q  ?7 ]3 K4 b& M  Z+ I-在该输出中,致盲因子是 20,Grin 数量是 40。-
/ D4 E2 n; o" Z3 P) G  h* i7 L9 o& n7 L; l4 L' w3 @* F. L
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:" F1 g' i2 c1 e7 C% {2 U
1 H1 J3 [  N' @9 v; K8 a
-Grin 输出(位于 “commit” 列)。-) ^' [" t/ k& F& i1 U
) d# V8 N8 U7 w) b  \6 M
再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。) b6 t' X1 A5 U% U8 `" H2 z) d8 F

( q1 R9 p+ r5 R6 B( E; q花费该输出7 e2 C2 ^! B' m. E5 V
3 G- U) H5 b$ f4 p" j$ X
假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。
8 A5 C+ W2 c/ x4 d3 T
4 j! D! W/ I( r* V) ^如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。) Z6 P7 D  J2 M

0 t% W$ R) c: D8 ~+ ]-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-
) L& G* L/ n  h$ v3 Z; n2 k
. Z6 Z; P* W/ v  M. x这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。  j3 Q& X( j/ h8 B; w% d
! m4 o- F! s- A! T
Alice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。
" u# J& K  D) E! u& V9 E. }. e& w
-Alice 的找零输出。-' p  L5 z$ t; l) x) f; s. n* [
' @: C! j! g8 W7 f
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
; P1 ]7 k. Z5 ^8 W/ V& h  n, t) n3 q4 y  t3 Q9 ?. F9 {, e
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。6 H4 f" `2 z( B* z; h* m
) T& v; w. h1 ]0 w: Z7 b
-Alice 的致盲因子总数。-
) v2 E% m" G  x, ~
$ q7 {+ N9 A# C4 _3 `- f! ors (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
$ |. X- R% I% t$ N# P4 m' G: W4 ~/ [/ c6 G0 @& j$ {2 G* G
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
9 ^! ?! E$ U3 V7 U( q( k' B
9 f- \  L# w+ v* g, Y2 @; o4 MAlice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
, T1 R$ k) i5 Y8 M6 i% Y
; \& }+ A+ @& A2 S8 DAlice 在 Grin 交易第一步需要发送给 Bob 的所有信息。2 M& T3 o9 T( A

$ U/ h3 R" ~5 }% Z元数据(Metadata)字段:% g* _2 ~9 ~0 d- K+ }7 B- o, r4 u

3 \+ A7 t3 X+ a* \( D8 M! V发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
7 l: v5 x. {" O# Y
" ]; I$ L  v/ n- F2 \交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。8 J: y) T8 x2 a
  m* z% _+ H- n. Q5 b3 c
交易费(TX fee): 交易费(在本教程中咱不讨论了)。
3 h, w2 X* r5 V/ g
) H* q$ t, n. R6 r, k, I锁定高度(lock_height):交易生效的区块号。
0 m# h4 [6 _: h; \: o2 Y$ Q" u* J+ f
数据(Data)字段:+ S; u3 s( u! s" l1 k, Y6 B

) Z* W. @: _( k: t3 g5 u交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。
8 m0 v" |2 A) n. ^- t0 g1 [8 v
4 A) D4 P! r+ H  z, j; p- [& h" L2 m. K找零输出(co): Alice 的找零输出" C* Q& L1 l7 s) s7 n
8 _, q" u3 W0 `; }" M0 T
ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。
. V3 p: W$ S, \/ X$ ?
& B+ V/ c7 \9 Q' T7 _' ars ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。7 M, T6 J! D" B- y
8 D1 Q' @: M3 b) O; g4 C
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
! q* C* C8 R8 q0 i4 G
6 ]& ?$ N) i$ DBob 的操作6 ^, R+ `& D5 @9 s7 k  ?

, _/ _0 r6 G, T6 x: U0 ^当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。
8 u  A+ d1 f7 r1 V% i# e" ]7 G- @/ u7 T6 g' ?- \5 k3 s6 ]
-交易 “消息”。-/ Y) @/ \. i. k9 y  b4 R: d) r
/ q1 s, ~, I) w! `( r- a
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。
7 F* r; a$ h5 [  n' j' _' {
7 U; Z) P& U5 M& L- U与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:
. H- O4 W6 |2 B. s
% {/ e# W6 ?1 J6 m! C3 k; s-交易的 Schnorr 挑战。-
9 l  w* p& {" `# M* a9 K; ^/ G/ v+ [9 J' M5 }- x* W. t
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
6 K" J) c# e$ A
  N7 n, N( y+ P& h, f6 ~0 {交易消息。& p' [2 \$ m/ n: ^9 M+ J, k

# B# ~1 V* M2 y* F% q$ X& N% hAlice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
9 ]" H' I$ m& @' i; g. B% C6 d! v+ T* O4 n. y9 s0 P# E/ R# ~
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
9 \% G8 z. V* e- n7 H
8 L- S- f  r0 o' wBob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。1 J0 ]6 X4 C! X  ^5 n& [
. m0 s+ Q% J3 D5 n! _3 `
-该交易中 Bob 的部分签名。-! H2 |# I  {0 ^5 E) @0 o* a
  J, @: B4 g4 K+ x* d! F# j
当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
& A0 e# c) g  Z
5 H( R5 B8 V: YBob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-9 Y% Q& d  q$ G- ^. T( o- u- O2 t
% ]: f: m5 W/ p% I% t* S* W
按照顺序,发送的内容包括:! U- X; f3 P! b) U; r9 z9 r
+ C% Y0 i/ x" V
sr: Bob 的部分签名。% {$ d& l; l& \: S

( D# }6 t4 Q( `) l  X! q$ vkr ? G: Bob 所选的 nonce 对应的承诺。  f7 F& k% E" E9 n; h
2 Y6 J) M) i2 i6 k
rr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。
% U; x# ~$ p4 m7 D6 t
  L0 n0 |' s" v7 b8 E- _' V3 a最后一步:发送回 Alice
) e8 }; {9 z5 P% E; [
. }" F3 X4 W! y* M' r$ X: GAlice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。; w( _0 b4 b/ u' o

' d6 c5 w9 E  ~$ S, J4 [8 @/ r相信你还记得,Bob 的部分签名 sr 包括以下内容:
5 b+ b- E' _7 a+ R& ^* u. ]' V  ?0 Z1 o4 A3 \
-该交易中 Bob 的部分签名。-. q/ ^9 }: Z. K% d6 |

2 o4 z0 e7 b8 Y0 z; V+ X基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。" p1 m2 u' P; w1 w( }

; F  D5 e: b. R2 J+ e: qAlice 在等式两边同时乘以生成点 G。-
4 b0 {' h5 W4 B3 e! n& u" z3 m. s! `  f. c/ g
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。! U. x- Q, A, X
% b+ P8 ]% n0 ^! |+ |4 {2 R
通过完成以上操作,Alice 能够证明:
+ ]$ I6 [# N6 O) @# d7 H/ g2 q7 e' c
Bob 知道他将收到的 Grin 数量(25)。
! X  Q: A% B+ G. a% V
, Y" b- S* t; d; x7 U2 i( L6 A7 kBob 知道他的 nonce 值。
' X* D9 \& w9 H# [3 c  d: {6 f& Z9 @) r* B' k, `
Bob 知道他为这 25 Grin 选取的致盲因子。
$ j# K7 h1 R" L, l
2 t; y5 b0 }& ~; U4 }+ S……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。; `, D3 L  p, C9 o/ @: O. d$ q" l
8 U" T. F( U0 K$ Y% k8 I8 _
之后,Alice 生成她自己的部分签名:
: l  R& T% n1 r( z9 _" G# i: V% u- t' ]7 ~( Z( k* ^
-该交易中 Alice 的部分签名。-
% K2 m8 L9 i. x7 ]
1 _# l  l" W+ P% PAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:6 D% g" W: Q& `- k
. Q+ u* N" ?8 ~
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
. c5 m$ o) ]0 A, Z. e# ^6 b0 l" y' k4 n5 {6 Z; E8 B' S1 a
按照顺序,签名 包含:
: l- }$ W0 u1 L' ?. D
/ V1 z+ w2 j& \Alice 和 Bob 的部分签名之和。
$ q2 d8 m% a% N0 n) o( _
4 B: q6 M0 Z2 X6 ?$ Z5 ]0 UAlice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
( r. `7 Z. X$ M- h5 Y* y: g+ `3 R8 Y  `& e: ?
合并之后,交易签名可以表示成如下形式:
: }. A( Q' h% _" `9 l6 ]: U
% R( g) X6 E) C6 E' S$ l( F& V-交易签名-
/ E, u: [- H; Y; L1 Q7 W# t* l8 c- X7 A& G7 E
其中,s = ss + sr,k = ks + kr。
) ^. _8 f' @; ^! u
! I4 W/ e* w: y! G, b! c, c记住这个签名 —— 你很快就知道它的意义了。
& t) M( i( h) D0 U4 ^0 B
2 V) S% a5 y! Q. \" Y1 k' E交易完成
5 I; Y3 I. \/ E5 A' X( `& ?/ @9 h9 Q/ f# u
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?
* s3 y- R- f# `4 Q$ a; T! D  L- Y7 H
+ b8 b5 h, L2 Z9 A; S$ ?! N7 q在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:; s8 e5 r. B( l/ m+ o

. Y! g) P5 k% h# M, ?3 J3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0% Y9 M4 _* a$ x2 P* I2 X
7 Z$ t; _' f5 F) p
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:6 P5 P0 }1 K6 ?1 X: n
: _& e4 N) x4 b* c8 j/ p+ R: R
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)( v$ M3 G  F# x* u4 {( }( @  M
. f5 a, I  `# Y# H
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。# w  v4 Z7 {( X: n2 `
2 Y3 @+ S( U+ g' y4 W. J& g5 d
如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
: P; R8 Z. F) c9 s4 r1 n. c' S
8 ?) R; J6 o& w! L还记得上文得出的签名么?
: F' k, q& c5 t; }
7 M; I/ S9 Z7 T- E-交易签名-. h# Q& i' }& |, s

  C/ J. ~+ P: S该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。" H3 R7 p, p2 S, B% K" G7 G

) ^/ |6 E( F  V& q还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
$ p: Q3 v7 f1 w! H
; w: Y; h0 ]; J' ~0 E-等式两边同时乘以生成点 G 后 Bob 的部分签名-, E0 X( c7 @. o) f7 m0 C
8 e5 v/ Q/ {& d
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
1 g" a5 W7 w/ [9 ]
" J2 T  }1 W0 i" X1 _. |/ B-等式两边同时乘以生成点 G 后 Alice 的部分签名。-2 M) U, P# N# }
$ @& j8 Z, J/ u# B: [
如果把两个等式相加会发生什么呢?你将得到:- J6 ?, O; H8 t
+ \3 d, |; a+ \4 m7 E* k4 x
sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
9 f2 K  L) k7 F1 E
8 U# }0 D3 T& T/ g# Q+ a8 N其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。' c' v- c9 Y! H6 g
4 I! q/ A& b  ^# F- ^- a
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
8 ?+ Z7 v+ z1 M$ `" r# r$ y( d* @* @. F& s2 z
进一步简化这个等式,我们会得到:# L; k$ Y6 P, ?
% y* @! P) J( T( r5 G! g  |
sr?G + ss?G = (k?G) + (e ? (r?G))
  m6 D6 b+ H9 t9 ~+ K1 ~6 C) O- I6 P
或:& Q  x3 @( F' j4 ?0 z+ S9 I4 R
' b5 u3 g* m- o4 |( j+ ^
sr?G + ss?G = (k?G) + (e ? (25?G))
3 ~6 _) ?) d# Y2 I
" A2 c8 g6 o- Y  ^* z4 s5 ]那么接下来只需检验等式两边是否相等就行了。
7 [) S2 ?! i2 W2 v. r6 h* S4 V0 Y  |
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
* v1 d/ W0 W9 Y; f3 V6 l/ f
; o9 ]6 ~7 a' g  S, tAlice 花费的输入中没有凭空产生多余的 Grin 。) H0 ]. b' P; N' h5 D

- f. q0 J% i" n4 C" hAlice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。, E. K" ~) A3 R& i; p! M( c
! F& \9 T  @3 U) s
刚才我们用来验证交易的信息被放在 交易内核 当中。- G( h$ j# h4 l8 D4 _$ Y

+ B  r% N3 L9 m  p# P* r0 S交易内核. ~: s: q2 A6 A% J- w, B4 v
# V- F% |) ?# A
除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。. o0 R2 ^$ |( E

. p- q! S' L4 N" x  c/ D+ t1 I2 q以下信息将存储在交易内核中:
/ n& U6 n& o8 `! n. t, [7 Q, o
; W; I+ K/ c+ m% O交易签名 (s, k ? G)。8 s# ?  O1 p6 ]

' h; r3 b* g. q4 f* f与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
8 H0 Y+ ^) E2 L
( Q' J* T2 p' q, P2 l/ p% N4 g1 ]+ j该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
( g9 a: z  }' p3 |! n" K% N/ I# ~) p  N9 h
总结
6 k% {! i+ J; R! F6 v. t
) Z0 C/ c8 ~/ _  Q在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
9 ^+ L5 Z& I% h/ `9 ^6 z2 e4 h/ L0 e9 n# Z- m, N
所花费的输入。9 n  _: {5 e6 W: ?+ u
  Q  x5 N+ [: e
新产生的输出。
- w% D3 W, W- H& l9 ~4 @& d  P/ X
交易内核。% u( E& n8 K/ r# S3 q
8 @( o" S4 i3 T0 E  n. u
内核偏移(我在这里没有描述)。, H, M8 n( ~% g
2 G5 h. I+ J: a- \# Y% m( u! g
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。6 Y! E- \% g, \# m  |9 U
) y* i, f: F1 T& N6 G
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3