Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
153 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。7 X$ D" ]3 N8 o4 x! G# E

& I7 }3 P+ Y; a7 A9 \本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。" W( B" u4 B6 ]2 B  J

3 s0 K% j3 D3 _* XGrin 交易的输出是一个 Pederson 承诺,采用如下形式:; B5 g7 ~  J1 H9 \! l5 \0 R' {

. L1 j. H# c0 V1.png/ ]' X: l9 c, F+ {7 t. j2 @
7 B" X0 B$ _. c
-一个 Grin 输出就是一个 Pedersen 承诺。-; o) d0 @; g0 h) X

: _! e3 Q" @4 O! I( KPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。
2 A/ C3 h! `8 p) g+ j- k9 f6 H
4 g' p" O6 w4 A3 U以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。
, K/ X7 L' P  Q# `7 j$ F" ?$ j% Q; F7 J) U. W( _9 P! q
假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……) w' ]- u) n/ {7 u& a( Y: I

/ X1 h8 F& C* a1 n6 l; V: i? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
4 i9 I3 R7 o5 @+ X4 T+ S. `
8 ^/ {) F; y5 F' Z% H? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……
3 o+ [5 D+ I. J+ |& u
9 n; V8 Z! h/ |已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。
( R" U3 S6 R. u4 F9 }# \3 O2 d3 K, w6 V
若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。7 p, z# j! r; d4 f( c; W

3 }9 O$ ^, X3 Q( |Grin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。
$ y. y* y. J0 i% x- P+ g9 |$ S# K. |/ @. K- W* |# O
假设这个输出包含 40 Grin,使用的致盲因子为 20 。1 p5 J8 ~, I+ L4 C* v8 \$ \

' e3 `; ?' w/ v. G  r7 ^(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):5 k- z2 c) x$ @* U2 A7 z8 k

! W0 e2 M. L- l4 Y1 R" _-在该输出中,致盲因子是 20,Grin 数量是 40。-3 f' z0 F( ]4 v5 p1 u  E. ?: A( D' ~
! w# ~% G! |1 ^7 H) A
在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:6 J- F$ q' e0 ]8 i6 f* {0 U

, P4 Y5 K3 o* p8 x# Y; {- A-Grin 输出(位于 “commit” 列)。-
0 `' C* }* s1 a% B& X, ^0 g" w' j& Z5 o$ m, w6 A
再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。
# w) @! V' j( H# x+ Q
) y/ |6 O! n& b% ~! T, X8 `花费该输出
& O! L. K" V6 R( {5 w4 ^* S% o1 D0 h" \: k
假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。$ [0 E" r. A( V5 q0 S
1 o- M' s- q6 }9 I
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。4 ?- y& N' w, W3 b& N) t; w

: I9 r" C5 w6 W" Y& V1 x-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-
+ t3 b5 K3 ^# X% b5 B- }" O' I
7 n& w6 |+ R" `5 H这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。
, _  a& \9 W- M5 d( R# R- V; B1 u' p
Alice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。: Y0 p4 R+ F% W  f5 h

8 t; S0 |/ Y( D2 J$ ^-Alice 的找零输出。-
  F7 U* a4 Z1 j+ n0 N$ X2 ~" ]# B5 b% U/ |5 S5 d6 L  b1 \: @2 s
正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。" z* t/ X) `, r. i

# {0 x) R: b; `2 `1 n/ o: L' Q8 V这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。6 c+ `  a- F  a3 K( d* P

' C* R9 v( @% R& I8 A-Alice 的致盲因子总数。-
4 `# s& M$ j+ ]. B& w
  D( ?9 {5 W1 I# E! O. v7 Urs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)" s8 P! ~) l: k+ y. r) |2 s
: p0 v& S9 r, U# x) n
最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
$ h: B7 M- V0 T3 `: L" w9 D" D8 F2 ?" M8 C( k7 b. E/ ?; g/ u9 O
Alice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。6 Y# ]$ a; {  x
( V3 c8 m) q/ `$ K  d) a1 ?& ?
Alice 在 Grin 交易第一步需要发送给 Bob 的所有信息。- p7 s: }6 I* T4 z
) M  Q+ f+ y4 i
元数据(Metadata)字段:
) _4 I2 H+ n4 Q
5 `/ A- e9 H& f1 Z1 E发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。+ h+ I) w* W. @- e/ C( e
1 {4 D+ \0 i- t) F8 P
交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。! I* h0 @- u3 u

/ T. x; V2 N* }; p2 H+ A交易费(TX fee): 交易费(在本教程中咱不讨论了)。
! ^6 @0 t+ D$ a5 R) i/ k' D- O6 s" `4 y* X4 E- d2 r5 u, m. Y# U
锁定高度(lock_height):交易生效的区块号。" k& [  z1 q) @7 ~9 P" R

5 c. Q* X' d- C: S+ p8 A0 e+ e数据(Data)字段:
: O3 c3 l6 _# e0 |4 J- {
. i, C- e* F# A+ X交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。
4 a! H/ z$ c( U6 D( t8 M, t. G) j6 ]8 }
找零输出(co): Alice 的找零输出
0 `. |$ H$ _* s+ H. W5 Y, K7 z  _5 b# v3 @$ j
ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。: N1 D$ j) I1 _0 p) O' n9 `, q

; S3 h, ~  a, `3 crs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。6 P( J3 G- n" {7 \7 t. P
+ ~% F/ D. w& y; B
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
, e/ ]: m! P2 b9 Z2 v. Z; Q2 s* v1 H( i3 ~
Bob 的操作
, `4 h1 z# g, K. W$ X0 n+ D- t% _! t
当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。
0 o5 s6 |( W, a, r( l  j0 H5 G; y, d; c
-交易 “消息”。-4 [& |1 {0 `8 B# y

3 o& V' T7 d* K+ ^# aBob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。% w3 C! B) Z$ r4 X

! f( R+ S* D- c9 }- `$ X  A与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:
  o5 y, w$ Q/ v: v( F. S
' a, Z2 L! Y! c3 O3 Z2 |-交易的 Schnorr 挑战。-
+ D6 E9 `" P* W3 y) b" K4 |; f6 i; E* w) u) J
Schnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
0 \* I: V/ \- x  N5 j0 l  x( ]
  E5 `% l) f: D3 {5 V  @交易消息。% F$ U$ `6 |& ~4 d

/ Y0 B, B9 @% r. W8 Q- kAlice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。* X9 X% I+ X" r- o+ F( [5 D( b, ]$ \9 O
* j9 p  h+ ?8 k5 {$ ?5 ?! S; i
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。$ r# b  b1 I9 X; Y0 D# G% Y6 X8 J
  R7 O* J# S9 `: Y9 ~; e" J
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。, a, T8 b& i7 Y2 X% b

" n9 L8 o) Y' m-该交易中 Bob 的部分签名。-+ K5 a2 D* f+ o" k

) e7 f( L$ m3 S& U5 A! j" z( u当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:  X! r4 z( C8 ^
7 o! W/ ]. |' |+ V. U' |! k# ?3 W
Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-4 R# p6 O: \7 b, a4 b: l8 p

& C+ O; }5 N9 B- X: o" h$ o7 r, T按照顺序,发送的内容包括:* a% S* ^# W4 U; S# ^! T, D% D

) z$ x* s( l) D0 f( p" L1 dsr: Bob 的部分签名。
6 a7 o. a, x6 p0 m8 c4 r; _! k0 s& B! K- ]: W' T3 G* o
kr ? G: Bob 所选的 nonce 对应的承诺。
1 Z# G+ R8 N" A' F* S: l5 W' E
8 E/ J9 d/ i3 I: Mrr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。
) Q7 X4 d; ?+ [) _- ?  ?  m6 A& ^  ~1 I1 g1 q  B+ ?
最后一步:发送回 Alice
0 r6 s$ b( c3 @# d$ m+ q5 y/ _/ B- v
Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。
) l# _4 k6 {' a: Q. j
  y* x& ?+ @% @0 p; W  C相信你还记得,Bob 的部分签名 sr 包括以下内容:' H* X6 r% I1 |# w# ?, ]2 E- {

3 w7 @. f/ @! \( t-该交易中 Bob 的部分签名。-
% }* M/ L5 r) Y: n
# l8 Z7 Q: X9 u) d  n基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。8 W+ U+ g+ O- y$ }4 n

3 Y" f8 ^% O' J! BAlice 在等式两边同时乘以生成点 G。-6 d3 P. v5 ?( l  l- r* z* D! W( l
& Q) D' Q" X2 y" W9 n* t/ _
因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。# m3 u4 b3 r" L  U
. R" @+ L, J4 `( B
通过完成以上操作,Alice 能够证明:% t2 K' Z/ U& n  ?6 t; j* D; a$ p

9 N) W" s' E1 j1 ]9 V  VBob 知道他将收到的 Grin 数量(25)。) n) V/ A4 {7 F1 B8 y+ H

/ r* y* j# J& _' ^Bob 知道他的 nonce 值。" e5 d) a! W2 A  {. {
0 R3 D& F6 ~1 h) Q4 y. s  N. Y
Bob 知道他为这 25 Grin 选取的致盲因子。
# p, E) A& m3 Y4 c' P  Y8 s5 l
) x4 U. n3 a/ W- K- [0 f  b% A……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。
' o2 Z5 C& M. a+ S
8 J1 q3 l0 q! P  p6 K% D之后,Alice 生成她自己的部分签名:( l( {# K, z1 I8 X2 O  l

% \$ P. f, ]7 L4 m; H7 O- C6 t-该交易中 Alice 的部分签名。-
' Z1 T+ f: @! l: d8 |) K. n
' d- M" H& j' C; R  H3 V! {$ dAlice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:
. w9 Y" o9 ~: H3 i& ~5 i6 ~: i7 H- Z& B, n5 K4 D) E
交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。" R+ ~4 r, b' ^, |9 e
  w& X1 X* L9 y) |' {
按照顺序,签名 包含:
- \8 K& P  Z$ p( q( L: Q) }1 q% W" E
Alice 和 Bob 的部分签名之和。" }. P! T! _) K6 ^0 _

/ t0 ?# ]; O( Q1 K! ^8 @Alice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。( k/ X% _7 ]$ k$ N# z/ I$ B5 g$ S

& Y) \" d# \  B7 t- g: B* Z合并之后,交易签名可以表示成如下形式:
& F& F. a$ l* G( f5 r2 q
4 e: b3 @* |- q- z: f& F' V9 }9 h-交易签名-7 ]$ }* c7 W: ?7 s1 D" e

+ O# N# C% h2 o8 I其中,s = ss + sr,k = ks + kr。
9 }  @7 E+ U2 Z9 E& Y$ }3 b6 u' }: S5 }  b6 n$ y' e& u2 M  U" G
记住这个签名 —— 你很快就知道它的意义了。
5 l0 i8 n: d. w" S) m
1 D! @* K5 O% I! G交易完成6 Q0 U+ L: @& f, T4 T5 Z

2 l% `/ A4 R1 `2 w0 u' W1 R数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?
! S1 k4 J- v) N4 L& q- H/ w/ Q3 U  `2 w0 ~
在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:
& c/ c5 e6 S$ k0 K5 w0 d/ S  A% b2 r0 p
3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0
  U. P. i6 t  _/ G1 @9 I& {( N& k
同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:
$ V. N* A6 J' ~% v2 _' p$ L2 ]2 O9 T6 u, E6 c6 l0 K
(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)4 h2 ~4 J3 y7 a& o7 f7 p

( t& ^2 N0 l; c  w) k2 K0 E这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。
; A# G* R, ?* ]6 _" v9 ~& u- m! x  z% Y# Z
如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。
8 ^0 y8 c6 Q  I5 l/ q  ]+ ?$ t8 a6 P
( K, _& n3 H  }还记得上文得出的签名么?1 R6 y' W7 f2 r1 [0 q9 [

! h4 m& `9 ^1 }, B& m-交易签名-% F0 ~" r3 P+ W4 g4 C* _, f

% x4 c( P: h% \% Q该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。8 V% P4 N) m7 L
$ M0 |! U9 j4 Q. h, \; V4 \
还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。; G4 K) e' h" D2 @
* w" o- D( ?6 x  R# ]3 G
-等式两边同时乘以生成点 G 后 Bob 的部分签名-- u+ C; c" b5 L5 N- D- P0 h

: U" P. p4 a! u( `" c- L4 {同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
4 n; d  Y) Z3 \0 ]0 _+ D( `& y$ Y9 K5 u8 J- H
-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
* h6 ?9 z+ w3 c/ T) c9 }0 T4 v
- s' j3 y2 S" d8 L. m如果把两个等式相加会发生什么呢?你将得到:
. v& O8 E2 y' n! r" u, N. k+ s8 Q+ g/ ^, V! w
sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))- L% `6 E* S6 ?$ b
8 G6 r, n! @9 q  U
其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
0 ^: ^( C7 ?+ t$ q( ^( u+ n+ p4 f; _8 f
Bob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。4 T: T' `3 X% N
& b: \0 u$ @2 e, m2 {8 \
进一步简化这个等式,我们会得到:
8 T( ~" p7 }" X0 O" h# _1 ]* ]7 v  I2 @; T
sr?G + ss?G = (k?G) + (e ? (r?G))
3 q0 ]$ U  F6 B) q6 s* v: |
7 r5 ]% q; [6 J/ O) W5 p5 G或:: Z$ y+ [* Z4 _% U
  w6 x2 G2 _# u# c" y
sr?G + ss?G = (k?G) + (e ? (25?G))
& [8 s( U$ @, n: A5 T! Z" H
, Q$ j- g) ?7 V$ R, E; E. B8 L那么接下来只需检验等式两边是否相等就行了。
$ X3 d! r7 J' m2 G
2 B! E2 F7 k8 H6 r记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:/ x5 U# I& m5 h2 G. e

7 M+ F+ `, m6 K, q6 ~  yAlice 花费的输入中没有凭空产生多余的 Grin 。4 H& D+ a  T: Y( \& n: ]( W
( j  G8 x1 R& R+ J& h# U) ?( v
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。
3 Z5 Z- U/ R7 k. A) u1 i6 i' e! n8 g0 Y* }
刚才我们用来验证交易的信息被放在 交易内核 当中。( }  z% p# D9 A( Y* I

$ S% z( K% H# i# d/ Y交易内核
, F7 y; H; @! [/ ^9 s/ C! O8 t$ ?9 d' s7 Y, M
除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。0 {; T+ a0 L; {
$ V. @  c. ^- c/ x7 I
以下信息将存储在交易内核中:
$ G! o- f( P1 E
/ }$ v- s- X9 ~0 Y交易签名 (s, k ? G)。
" y6 t; \0 ], W! ^9 r. ?2 g2 D
8 F/ _" m) b- L5 S( [( Q与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
4 d4 L% H* _$ S( \
8 {" {0 [" p$ n2 C. j3 L4 ~4 r2 n该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。
" K' n$ k! U  b  g, A
2 g6 S* c5 z0 M" Q0 s+ A! h2 J总结
3 K7 b7 T7 j3 ^# a  I
% z9 Q" K8 F8 x+ c在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
3 w/ I. g4 C2 j% W3 @! V8 g, D6 Z$ O! m* [9 n9 q- D& O" V* ~. a
所花费的输入。
( X6 {. E* J# P0 W7 _5 \- V4 @" ?6 ?
新产生的输出。
5 \9 ]3 X. \, v% \! R% _; S
$ }, b3 c7 |9 U) a! E# d交易内核。
5 K% z: E: L1 g- s
+ l; t0 t+ u5 Q, K' b内核偏移(我在这里没有描述)。
2 n1 z! k1 Q* X) T. g# k4 p7 g* \1 S* S4 Q2 b8 I
上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。8 q5 ^2 e4 ~. M9 \0 O

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

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3