Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
175 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
8 Y! h; L- A7 G2 t
/ K$ m2 X/ h" ^+ H. h. v. x. _! I9 ?本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。* E0 p8 `2 L5 A! H" s7 m( P
1 m# p% W% _, W$ B( Y5 X
Grin 交易的输出是一个 Pederson 承诺,采用如下形式:8 t* S5 P# n! P/ [& }

0 d$ }; A0 `/ x" p' I" W# q8 y1.png
( }% z1 D! ]8 g  ]9 M6 K6 b* o' P
-一个 Grin 输出就是一个 Pedersen 承诺。-+ O. e- e. s+ e) l/ u
+ O8 L- u" R  v: S, q0 Z
Perdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。& k) H& k" P. c9 r1 z

9 |6 b. K/ A6 I以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。
- X8 G5 O2 Q4 O( `
! h" k# i6 Y+ E( ~9 r5 o( x假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……
, a6 Z0 v$ r( T! _
5 Y6 i; x0 t8 n7 Y$ c1 z: v? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
% o+ ?7 W6 v! C, o
) P, F  }$ J8 g3 Q8 M% W? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
, m9 j: ?4 b9 g  t, Q$ M. _5 [% \' N5 N
已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。
3 q0 F1 M) r. `8 c% l" D0 |% b6 s) ?6 b
若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。2 L, j7 N* Q  m& S3 `% [

* H3 y9 Y. t" v5 iGrin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。
! I" Q5 ]+ l3 H3 N% @" @/ `
) b0 w) e/ h8 B! N+ z5 A: P5 \8 J假设这个输出包含 40 Grin,使用的致盲因子为 20 。
0 z( V& p" L& c; c; H2 c  V, S+ `# O% d1 G9 x) z
(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):
* n% U9 J- k9 y+ B8 z/ \! O" @, K9 f* |2 I8 ]5 T7 f
-在该输出中,致盲因子是 20,Grin 数量是 40。-6 X) E1 L( f0 N# d. }1 J! P  B# b+ ~
" R: K6 a/ y6 @. i7 e4 b
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:
- g/ G. _* l) h+ v8 Q8 g& ^9 x4 V
-Grin 输出(位于 “commit” 列)。-
% y; K" U/ u$ g5 m* C! q+ c4 k
* B( v. U9 _2 }& }再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。; H' k0 X) u  L5 N! g

7 P/ U* d4 B/ ~) T; j% b4 J# I0 X- |花费该输出
) G0 |8 ]' r# w$ g6 N
. ~8 D/ }* @' z& [" W假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。) ~. U3 b) O, ]4 f3 {- J, D
' y+ z% k& ~- I; B
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。0 ?8 a% N" S  S9 {! ^  o" u+ Q6 A4 ?

2 d& U, a4 y% q- q-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-7 [0 ]1 y  h  D+ O1 E& E
% a' ^  Q3 y/ a# N- p2 P2 h
这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。2 d* @5 {0 [) A, t2 a

7 \/ I/ b1 D+ BAlice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。
4 n/ y, Q3 E& {4 Q9 A$ e6 m/ c5 @6 ~
9 C# \: q3 l& q4 @. J* Z4 u& f-Alice 的找零输出。-
3 \( `& ]' O( C4 O3 c3 R/ R0 Q2 R3 i3 a3 [7 }) o7 G& Z+ k
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
5 M2 B  f" t: o/ x' [' T
* B' D2 D: \# V) M这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。
4 q$ Q' S7 P# _* m, _$ M" O& t  N' N" ^& k# c/ U2 V. }; x
-Alice 的致盲因子总数。-
& o( \3 P1 x7 |0 N0 Z3 k7 L
$ ^0 g. {" M7 W; D" ~6 qrs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
& |+ s; b6 b, H8 Y- M" Q+ i9 v* W, L+ R0 J* X$ l7 y6 @7 r) X8 F
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
1 U8 \, Z' ^5 k/ s- P
, y4 l% t, O: t) `Alice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。& P; X) `7 J  Q0 a

% k& z4 T5 p5 a$ {! K6 H! ?Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。4 ]% a( D2 l2 \
0 I  v* x2 i8 ~" L
元数据(Metadata)字段:  h( _+ [& Q8 U# T$ R9 C6 d6 |

% Q1 P3 @( R$ G3 c4 S( u发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。
  G. G/ V; O" C: ]; M6 H' R' F, Y/ g. x9 ^/ S1 K
交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。
9 p2 \! Q8 R! Q) O8 R8 T+ q- @; y' H- s' S4 V
交易费(TX fee): 交易费(在本教程中咱不讨论了)。; A. l$ E# [; j3 c) A3 y% J( A' y

' {3 u$ ^# f) l- g1 f( v& l% a9 K' A锁定高度(lock_height):交易生效的区块号。
: m9 y) [' w; C
8 t. ^2 ~5 k0 f+ G8 g1 O数据(Data)字段:/ f1 O8 w! c$ w0 ]
3 y% J* S7 A6 D0 A6 K1 B
交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。
8 @4 o+ N$ @+ t2 u7 Z0 u
, i- |2 N% m$ c. s* ]9 s9 O& P/ {$ R0 s找零输出(co): Alice 的找零输出: L& }6 m% r; S- S; I

2 H$ |1 y) V9 \ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。" s- o" K7 y6 B+ P. j

, n0 g" b; t9 D6 u  f: jrs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。
! e2 Q) @; Q- @2 l  [
! }3 \! J, X9 CAlice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。% W/ L( f  [% q7 P# X1 V$ q1 S0 s
! E, ]. S9 B0 m& Z4 `" r1 e
Bob 的操作0 X. |% _4 p6 |$ P2 ^" N
5 o& R6 j0 i& U& s2 L% G5 s: }# F. f5 n
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。4 ?4 t0 Q  Z' \2 h8 Q: y

- X2 w( ]: U& R# o8 a! y-交易 “消息”。-7 s* @# `! Y- s& S+ }5 p: ]9 ?: j. [
" H$ a- }" g' x3 S
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。) H$ \. f1 L7 q7 Y2 Y& [0 [! w
) B2 p2 [7 M9 U% ~+ W( `
与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:/ l4 l4 S" n) {( ^
2 |0 W: S4 W* g8 @* q
-交易的 Schnorr 挑战。-
5 }% Z6 r3 p* a9 ^" ?+ t7 L  p9 N
+ Q1 i8 }2 {& U+ t8 rSchnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
5 ]# o- v8 V4 b; J4 i+ W, K3 N3 D1 P4 H
交易消息。
0 H8 C; R/ x$ U, q" O
% W( x6 [. x. l+ S' B2 IAlice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。
: w  s2 {; S" v1 [: S
" z- B1 k- V( ABob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。
9 ?) q* u4 ^" s. K8 L+ Y9 j4 B0 X( ]2 t8 z6 M! A$ ]  ^8 D; Q
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。
: O- ]0 j( S) s: q( p6 x
9 h% d% l, b6 [3 h/ p-该交易中 Bob 的部分签名。-
3 c& \2 r% v3 L/ u
0 U: j( L$ {& a# I. z当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
& g+ t9 B+ {6 ~" V3 U& j& l9 e
( }# `! }8 M  Q  r1 KBob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-
, K' N; v& T& ]; Y  y" v
- \3 a8 R. Z3 a. g0 N按照顺序,发送的内容包括:
; s( a1 p0 }! U+ N) M4 u1 a
1 h- N9 w9 @! V. Ssr: Bob 的部分签名。: h: o8 G: K6 _# n

' d7 t2 o' C! ^% V  okr ? G: Bob 所选的 nonce 对应的承诺。
) @% O9 s9 m' j$ M
# s2 v, [+ g- h' J; C/ ~+ U2 o7 Trr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。; j( d: U- b" g" G& x) t3 \" n6 {
# Q* }2 ^/ B. `, k, e8 B# G4 e
最后一步:发送回 Alice
* O4 ?/ N& P" P/ T+ C$ T3 Z7 W6 h! ?+ P$ _& Y' {% `7 C
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
! k# B9 m: [) Y  l0 j
% }, u5 n0 Q  m+ e相信你还记得,Bob 的部分签名 sr 包括以下内容:
4 t% `( z0 h5 y3 Y/ C0 N2 h( e( q' e; I
-该交易中 Bob 的部分签名。-7 T: p7 s4 D. }$ {
7 n! s9 G8 Y: u0 C5 B
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。6 _: u% @$ F* u

; V5 l: m0 ]& {* SAlice 在等式两边同时乘以生成点 G。-. a7 j* ]. o- o: _$ G/ I/ G
3 ^0 X6 x. F6 d
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。
& F$ b0 S* V. Z; ]
& u1 Z8 v; Q" d4 {: B, I, S: a3 w通过完成以上操作,Alice 能够证明:0 v* b9 ~( Y( u- Q
* }4 |/ ]% J+ [8 x9 t9 [; D
Bob 知道他将收到的 Grin 数量(25)。8 e8 Y$ P7 d" w" I) b  W1 u& y
: L5 E" V$ e% Q, x4 T+ m9 E
Bob 知道他的 nonce 值。
5 a7 Y. T! M1 l8 @5 u
7 v; f8 y+ S+ ~' J8 c, V' m# R, H' vBob 知道他为这 25 Grin 选取的致盲因子。, P: C# m: H, l! [, J% |  _; U
- i+ h9 L. o9 i5 e+ h% j
……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。
( k! ?1 @$ N0 K4 L6 \: L. K/ b
  c( i% g( S# U* H$ O% k1 b之后,Alice 生成她自己的部分签名:( [8 v. h6 S/ C8 V. Z% g; e
5 V0 E7 b2 y4 H/ Q/ m. ^) S
-该交易中 Alice 的部分签名。-
3 t6 V: d" e4 Q- D0 i1 y! n, T. i
& `# C1 ~! O/ j( ]% ]Alice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:8 V9 b+ d8 d) g
: a5 D$ w6 n8 a5 N  R% {7 D/ b
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。
' P# p0 P5 V! b
" D+ g; t  r6 \- x7 E) i! i按照顺序,签名 包含:9 C* v# {; _/ v' Z  y$ ^
& f+ K. `; R1 K0 v) f. {  K
Alice 和 Bob 的部分签名之和。7 s3 r/ m: |; Y, o$ r
' d3 G) I$ d1 N8 ~$ N
Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。' A' c5 N6 Z- X% z

2 a3 c2 I+ S, k3 Y7 r( B6 Z. s合并之后,交易签名可以表示成如下形式:
9 p0 T; B* c3 @3 x9 @) T, `: M( {% a# u* L; ?0 {( E
-交易签名-& D2 b/ x" I1 j5 L% G7 L

7 ~" y5 u8 q5 A! u" Y2 y6 v' G其中,s = ss + sr,k = ks + kr。
) c+ k' {  D2 h! `8 F' u3 i/ a% v. r6 m. ^% P1 l7 c8 |7 I7 J
记住这个签名 —— 你很快就知道它的意义了。
! g- h: z- w+ a3 r7 I& ?% w
: h9 D' J$ Q* U. w3 I: s交易完成
5 C" G) F7 W& _; p$ |- W3 N% d, C1 P% m
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?8 e" B( _. A, x: m+ A
7 _" r9 Z0 S% m. {3 M0 s
在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
" w5 A/ y7 ~/ I
) R0 k) d, E  V4 f0 N: O" K3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0
3 v2 r7 r4 c1 f, A# Z' G' F: T* `, Y; U3 U* f7 n" f: y6 f
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:* _8 U1 r) c' o2 V1 `' ^

4 t; C& i! I( ~* u# y4 F(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)& o+ h' r8 V! b! ^) ]# b
4 l) d, R1 x7 c% `, C
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。+ b& a  t0 i$ M0 m' l

* j$ N& Z3 u$ {+ |0 o$ U" z( f如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。$ Y. t$ D1 l, r# i. {

4 S- P3 |* d% |还记得上文得出的签名么?
& C% J  o' n% Q( v  {& j: R3 v: w3 J# |. s% p& j
-交易签名-5 t+ T: Z$ P2 ]4 A
0 i" {# U! ?' j7 @
该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。
. w+ a& \3 x; l- B( y& R* ]6 H4 `4 h# k, {; q( k  @: d* d
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。. O3 F. n$ Y7 b; U& j' m
5 K3 E& B, P  Y/ `& F- f6 _+ }; G
-等式两边同时乘以生成点 G 后 Bob 的部分签名-2 Y) [8 L5 A! k* }+ e

6 l  z. x1 `. g# w3 b) \同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
' P$ l, v# g! m# |6 a7 C- @' x; r. j
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-7 {3 ?5 a- ~, t

: T. P2 R$ N$ m6 U7 `  K如果把两个等式相加会发生什么呢?你将得到:' b0 r1 y) U! _8 p2 @* V

, ^, ?3 b' l% _9 z% ?3 `: dsr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))
7 t- K$ b+ K3 C; V% m5 L4 N" y& J, |* y5 k, h8 G' r
其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
; S" w8 ~: g0 d* s/ ?1 ]8 n( N- E
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。
, H' ^' g& D  x0 a
2 }$ Y' z; h  E" O: V' m2 N进一步简化这个等式,我们会得到:5 S7 w# S0 e& E! r/ h% Q4 S+ a
# N. w6 T4 R# a: n: [& M8 `
sr?G + ss?G = (k?G) + (e ? (r?G))
% N' H, ~* j- o. k; v: D2 X& M2 q  ~
& g& V9 b' y& v9 l. h9 T或:; J6 b' H- T* F; v3 U' @3 z
: ^" d/ R5 ^+ a4 r
sr?G + ss?G = (k?G) + (e ? (25?G))
2 E8 j" S* k2 a! j6 ~; j2 p: ^1 G( f# W
那么接下来只需检验等式两边是否相等就行了。+ I$ A$ r# o; S/ A- k/ Y
. e( ]5 m# N) j) r9 B1 T# f0 \
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
& a' Z) z6 x: e
# N% k2 t: x& D5 P  I; T5 d: @; TAlice 花费的输入中没有凭空产生多余的 Grin 。
4 K, V# n% g' B- h% l9 p' W  ]9 _
5 e/ i7 x9 |1 R, E0 y" @  h0 aAlice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
$ W. j) z! f4 \  H, x
. g! A2 h% ]% ?, b刚才我们用来验证交易的信息被放在 交易内核 当中。- e& ]0 }6 [5 z5 [$ j
( C) L& }  J/ m
交易内核
- X" ^1 G6 J6 G) l4 w1 q8 t8 M2 k6 R3 }$ I+ A/ Z
除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。
4 t& n3 N' s7 _& j
. A. R, H2 i& l* E以下信息将存储在交易内核中:+ h5 {7 ^' t" u& x8 Y

, l( m6 P$ F$ X% w  f交易签名 (s, k ? G)。7 b4 y$ z, p3 Z2 B" @5 n0 ^
0 L3 Y' Y6 g  D
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。6 K, H5 B( h* y5 K
) Q2 T! n7 B8 e! N, I: {& w
该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
  J) H! e( T" Q
9 O& q+ P. M( L) \9 [& Y. m3 b总结
. k9 P2 e" g7 h- l
- m7 w, G5 q# {* p' |; M: y在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
; K3 _! v, Z8 F" u+ U
% R. w$ z" g9 }- D' ^所花费的输入。
3 o7 f; f+ j' [1 J  _6 ~
6 I0 A) |- x) P: K3 k% e! p" f( J新产生的输出。
# X3 a7 m( g' R4 I
3 e, a" v# q% c4 Z4 {交易内核。3 ?" g0 e: N& V! M
) C* g8 Y# o1 O: n. U6 r
内核偏移(我在这里没有描述)。
4 d! t' q! m# a* s% C
: }, e: n5 Y) v0 v5 m上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。" V+ O- L1 `  _0 _+ \! z, W, |$ e

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

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3