Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Grin 中的交易详解

刘艳琴
105 0 0
Grin 是一种基于 MimbleWimble 协议建立的新型密码学货币。但是,Grin 的教程又是出了名的晦涩难懂。
( o# w- ?, z+ H' |# {" N: _6 X% U+ s: h
本文旨在分享 Grin 交易的运行原理,帮助大家理解 Grin 交易是如何实际运行的。7 p2 k5 n' {' m% v, J& S

- Q/ Q( h( L0 {+ J, o4 iGrin 交易的输出是一个 Pederson 承诺,采用如下形式:
4 p+ n8 b9 u0 R( D
) ^5 Y# }; C5 X1.png/ M3 v1 x: |/ Q, E

4 R$ u2 G/ r$ M-一个 Grin 输出就是一个 Pedersen 承诺。-! _6 M7 n1 }0 M& _- ]- F

; c, c# l" Q) C. D# IPerdersen 承诺是一种隐藏信息的好方法。如果你是第一次听到 Perdersen 承诺的概念,那么每当你看到这个词的时候,就想想 “屏蔽值(shielded value)” 的概念(译者注:就是别人都看不见这个值是什么)。) W/ u  [/ P9 p/ p6 z$ s
$ c9 ^5 ]# S- v# j5 ~, d
以下这段文字摘自 Grin 的 wiki (了解 Grin 交易运行原理的最佳入门资料)。" z! {1 M+ d" [8 G8 X( E

4 v% U1 T* k! d% D3 M2 s  \假设咱们选择一个非常大的数字 k 当做私钥,将 k * H 作为对应公钥。即便有人知道了公钥 k * H 的值,要据此推导出 k 的值也是近乎不可能的……
0 O  f$ O! I: q# G, f6 V
" z( s4 w2 J3 j: K# H& e? r 是被用作致盲因子的私钥,G 是椭圆曲线上的一个固定点,它们的乘积 r * G 就是 r 在这条曲线上的公钥。
7 W3 x7 e0 N2 W+ K. `  U# }" [. ~( k9 R  S; v
? v 是输入值或输出值,H 是椭圆曲线上的另一个固定点……# B0 W6 l+ e2 A( o9 a
  N6 M3 F1 G* L- h% G3 {4 [
已知私钥 k 和 私钥 j ,则 (k+j) * H = k * H + j * H,即两个私钥之和与固定点 H 相乘产生的公钥((k+j) * H) )等于两个私钥分别与固定点 H 相乘产生的两个公钥之和 k * H + j * H 。
" U7 o7 |: `4 l# {5 d! N) Y  [6 s% R! C
若想更深入地研究密码学可以阅读 ECC primer 这篇博客。简而言之,要花费一笔 Grin 输出,必须同时知道致盲因子 ® 以及 Grin 交易金额 (v)。这两个值是不可能通过破解承诺倒推得出的。因此,只有提前知道这些数值才能花费 Grin 的输出。4 R3 N" u' F8 `

% J8 F; B1 `6 q+ j, ]8 [  u6 ^Grin 之所以设置致盲因子,是因为 Grin 的发送者是知道 v 的值的(向你发送的 Grin 数量)。但是该输出的致盲因子只有你知道(连 Grin 的发送者也不知道),因此 只有你 能够花费该输出。  {5 e, p1 O! Q9 r- t

8 H0 ~+ \1 {& f4 A假设这个输出包含 40 Grin,使用的致盲因子为 20 。  w2 Y$ F' l* a9 ]# E; B" r

, x5 |' b% x+ B& g0 W. x! y1 b, K( H(插播:实际发送的 Grin 数量是原子单位 1 NanoGrin 的整数倍。这里为了简单起见,我使用整数个 Grin 来举例):( ^7 [, p, `8 i; {  F5 _9 j+ ^' I
1 H% h3 A. K# W3 X' R3 p
-在该输出中,致盲因子是 20,Grin 数量是 40。-' `( j+ v2 t1 d, g; u

3 L  D/ s: _; Y, @在 Grin 浏览器上查看 Grin 交易的输出,我们会发现实际的输出并非像上图那样通过清晰的公式呈现。下面才是 Grin 输出真正的样子:, Y8 L/ t/ q6 G! H( P* G

, ~8 Y) t5 Y; z; t5 @0 q) L. S-Grin 输出(位于 “commit” 列)。-# x9 M* ^  P4 I+ o0 |; U
0 B7 |$ m9 @3 H" x6 O% ^6 y
再强调一遍,从该输出推出 “20” (致盲因子)或 “40” (Grin 数量)是不可能的。% O5 A- L6 R* A3 J9 A, D7 W) q

7 D- i, ~3 k1 M7 v( w  e- ]$ |. v花费该输出: y/ j6 u2 V$ G$ I& I2 ~+ Y

( r5 h; Z, |. p- R0 h假设我们刚才提到的输出属于 Alice。现在,Alice 想要将这些 40 个 Grin 中的 25 个发送给 Bob 。为了简单起见,咱们先忽略给矿工的交易手续费。
" X( ]/ ~5 M3 v2 R" m7 U6 K* l4 E( K7 y3 U& N$ a9 q
如果你有一张 5 美元的钞票,买了 3 美元的东西,会得到 2 美元的找零。比特币系统中的交易就是这样运作的,Grin 也不例外。如果 Alice 想从她的未花费交易输出 40 Grin 中拿出 25 Grin 发送给 Bob ,她在这笔交易中还要创建一个新的未花费交易输出,将余下的 15 Grin (找零)打回自己的地址。
3 D3 t$ w- O$ u# R6 K
: r) ^5 \4 t$ ]- V$ X- O-Alice 知道她发送给 Bob 的 Grin 数量,以及找零数量。-$ ~; }. s7 s# A( ]1 c4 Y" W& T

5 S$ C% A7 K' E- |2 H$ ~这笔交易中有 15 Grin 将回到 Alice 手中,意味着只有她能够控制并且再次花费这 15 Grin 。换句话说,必须杜绝 Bob 花费 Alice 零钱的可能性。为此,Alice 必须为她的找零输出创建一个新的致盲因子。假设 Alice 选了 34 。( \3 u' G/ D8 t. i& ^7 R2 Q
; p: Z3 [% V1 u" z1 w& u+ F2 n
Alice 同时知道 r (她的找零输出的致盲因子)和 v (找零的 Grin 数量),就拥有了创建零钱输出(co)所需的一切信息,而且将作为一个输出记录在区块链上。Alice 即将向 Bob 发送 的 25 Grin 输出也是如此。
. R0 O" o9 z: ^7 ^! N6 Y
" W' x1 Y* ?! `: n4 C( A. X8 v-Alice 的找零输出。-
1 O$ ?# {. q$ p) T, ?6 ~/ ]0 o2 z4 Q
8 O1 l' j$ Y! n6 R6 U$ C, H! ^6 x正如我前面所提到的,只有知道了输出使用的致盲因子,才能花费这个输出。Alice 知道她想花费的输出的致盲因子 (20) ,但是她需要通过一种方式向 Grin 系统中的其他人证明她知道。
0 ?! ^. x* d; V% q, L0 K* t" I, l0 n$ J* n: K1 v
这就是为什么她需要创建一个完全独立的计算,求解 她的致盲因子总数。这就要把 Alice 刚刚为她的找零输出创建的致盲因子(34),减去她想要花费的输出的致盲因子 (20)。3 z. r" q; N* Y: x! d

6 r- l+ H3 Y6 ^0 H, u- K-Alice 的致盲因子总数。-
: A  H; |1 b1 H& J* U
9 o5 M) m* G3 Q4 V" Z- [7 i( ?rs (s 表示发送者,即 Alice )代表 Alice 的致盲因子总数,在这个例子里是 14。(插播:我有意忽略了内核偏移量(kernel offset)。)
: k. n) D, V, p, M6 y, {" ^
/ x4 v+ I* w$ c最后,Alice 需要创建一个随机 nonce ks (s 同样表示 发送者 Alice)。她将使用该随机 nonce 值,帮助她对这个交易进行签名(见下文)。Alice 不会将实际的 nonce 值发送给 Bob ,而是发送 ks·G(该 nonce 对应的 Pedersen 承诺)。如前所述,通过将该 nonce 值乘以生成点 G,Alice 隐藏了实际的 nonce 值。
6 w  o0 ?7 u- B- c0 ]% M4 y/ f6 F* e$ v- z6 V; }/ k3 Y! ]; g* Q. q
Alice 将以下信息发送给 Bob 。实际上,Grin 数据并不会被分为 “元数据(Metadata)” 和 "数据(Data)”字段,但是为了清晰起见,本文特意将二者区分开来。
) T% @/ J: F: }
' c" a$ I* L. ^* z. h4 VAlice 在 Grin 交易第一步需要发送给 Bob 的所有信息。
/ [, F, w7 K. a0 s4 u5 H( n. u
( r( s+ ~) `9 Q+ q元数据(Metadata)字段:+ A4 M5 t0 v8 F' N* f

0 ?7 M; e' E% |) l. Y- B/ A发送数量(Amount to send):Alice 想要发送给 Bob 的 Grin 数量(这个例子里是 25 )。* n. M( g; i; v" m1 A& u4 S& c

+ w4 E$ K# }) O' R. t2 i交易唯一 ID (TX UUID): Alice 和 Bob 在来回发送数据时使用的唯一标识符,用于标识此交易。# H6 \2 N0 u! ~; S' i% U1 d
- T9 V! `' u5 b0 `5 P8 Y
交易费(TX fee): 交易费(在本教程中咱不讨论了)。& T: J, h9 [9 x& e7 _( g

* T& A7 t9 N5 G1 z( A锁定高度(lock_height):交易生效的区块号。2 j. p3 r$ ^+ e! f
4 J5 d8 A$ n5 `6 A  @) e  C
数据(Data)字段:1 m/ _3 F% G6 r2 |
6 x4 n5 p# v' K
交易输入(TX Inputs): Alice 将单个或多个未花费输出用作发送给 Bob 的交易的输入。5 [$ u" ]/ K) ]
% B  H" Q8 y6 f1 j9 |+ X
找零输出(co): Alice 的找零输出
! D# x$ B% p- v/ }" R0 C6 j6 J; d1 u' G8 A! g
ks ? G: Alice 的 nonce ks 与生成点 G 相乘,得到的值就是这个 nonce 的 Pedersen 承诺。( q+ ]# k# R$ V! a" `
, \! K+ T: n6 E9 Q1 I
rs ? G: Alice 的致盲因子总数 rs 与生成点 G 相乘,得到的值就是这个 rs 的 Pedersen 承诺。& L4 ^! l% R9 k7 D
5 }$ k) e; @: I8 @/ X
Alice 将以上信息发送给 Bob,由 Bob 来完成下一步操作。
& L2 f; G: }$ ^3 B* P( h, v* p( ]8 B+ a; ^( o6 n! k2 {! h4 d: V  i$ c# R
Bob 的操作
1 x  w( a# u% B. {0 c2 s
4 ~# {! ?1 O: L0 D/ ]) ]当接收到 Alice 发送的信息后,Bob 将 TX fee 和 lock_height 这两个变量连起来产生 M(即交易的 “消息(Message)”)。1 m  Y  z6 Z# r, h& }# R: u; C
% g6 G: L& Y: \
-交易 “消息”。-$ t- N! k5 V& l7 V: i
" W1 p. A  u3 u" y) Q
Bob 为他将要从 Alice 处接收的 25 Grin 选择一个致盲因子 rr (r 代表 接收者 ,即 Bob)。假设他选择了 11。与此同时,他也选择了自己的随机 nonce kr(r 代表 接收者)。$ e# c" h0 p9 q0 c

$ V" ]/ F& w1 L与 Alice 的操作相同,Bob 将 rr 和 kr 两个值分别与生成点 G 相乘,创建了一个 Pedersen 承诺。有了这些数据之后,Bob 就可以生成本交易对应的 Schnorr 挑战,用变量 e 表示:! h+ U# b1 M( S2 o( `

# k. t1 N3 _! f& B-交易的 Schnorr 挑战。-
* @* Z6 W( d! U3 ]0 q$ R  D& P1 Q/ o
/ t$ Q, B! A: Q" _2 n8 KSchnorr 挑战按照顺序对以下信息进行了 SHA256 哈希运算:
3 i0 O9 N5 E' {9 ?. @4 L7 a0 y- |% A
交易消息。
& E6 c9 t: s, k. r! {6 e3 i9 ^' G  r& J/ ?
Alice 和 Bob 所选的 nonce 对应的 Pedersen 承诺之和。9 J& \- ~( f" x0 O1 j( l
  |8 Z! }) c) }0 B
Bob (为他的 25 Grin 输出所选)的致盲因子对应的承诺与 Alice 的致盲因子总数对应的承诺之和。. j$ I9 E3 v9 ^' }3 Q: f
* m/ I7 S2 ~& u
Bob 通过 e 为该交易生成自己的 Schnoor 签名,即 sr(r 代表 接收者)。虽然 sr 是 Bob 的完整签名,但是我们称其为 Bob 的 部分签名,因为该签名最终要与 Alice 的 部分签名 一同创建整个交易的 签名。
2 \1 P# G" l# R  J4 l7 x* l
& i3 w/ ~# ^4 z1 g# m-该交易中 Bob 的部分签名。-7 b8 j  g3 N4 V: e6 N* o

, C. t  i  d4 ]+ p当 Alice 最终收到 sr 时,是无法倒推出 kr 或 rr 的实际数值的。Bob 将以下内容发送给 Alice:
) }: Z+ i) i5 {$ W' Y& d" I% j
1 x! @' l8 ^6 K- X& \Bob 将自己的部分签名、nonce 对应的承诺,以及 25 Grin 的致盲因子对应的承诺发送给 Alice。-
- S: t  r. e* M1 e" m! W. O2 C, b- T% o+ q# i2 B' U
按照顺序,发送的内容包括:
/ J; B+ i( m/ g  ^# `0 r1 S* [8 ]9 h+ ?  {
sr: Bob 的部分签名。" f% d7 b* s+ Z8 T6 J( ^# l4 o

: g% q$ p- ~3 a$ vkr ? G: Bob 所选的 nonce 对应的承诺。- ~- N- [7 W! w+ M8 v

% S: Y  j/ ^) D* Nrr ? G: Bob 即将收到的 25 Grin 的致盲因子所对应的承诺。
2 h9 Y- Y7 t3 g
( T, |) f  J9 I8 z- ~最后一步:发送回 Alice
* }7 D3 N! A2 y
) m6 @& t  b5 J8 @! G# y( v4 ?Alice 现在有了计算 e 以及该交易的 Schnorr 挑战所需的一切信息。在本地计算完 e 之后,Alice 就能够验证 Bob 的部分签名。# F3 [. ~  e& N

$ r; K- e7 |# c4 L3 p# }2 p# G相信你还记得,Bob 的部分签名 sr 包括以下内容:8 y- J2 x- Z5 \' E

: [5 d4 m) _& O# d-该交易中 Bob 的部分签名。-, E3 o+ F0 b$ R) Z0 h
, |9 ~  |2 @$ X5 A5 ?+ u: Q5 ?
基于我们先前描述的椭圆曲线的性质,Alice 在等式两边同时乘以生成点 G 后,该等式依旧成立。2 G5 E1 Y( Z" G5 O9 g0 j" G) E" U7 \! j

$ W4 ^" h1 `/ ~Alice 在等式两边同时乘以生成点 G。-; j' N% ?8 K" W$ w7 V$ y

* b# o. P3 s; B: ^1 K* M因为 Alice 等于已经从 Bob 处收到了 kr ? G (Bob 所选的 nonce 对应的承诺)与 rr ? G(Bob 即将收到的 25 Grin 的致盲因子所对应的承诺),并且已经在本地计算出了 e,她只需要简单地将 sr 乘以生成点 G ,确保与等式右边的值相等,就能够验证 Bob 的部分签名了。$ a# P2 u" z$ h) x% L9 [
& R: q/ H$ j, t  @* }
通过完成以上操作,Alice 能够证明:
5 S: Y* J9 G" \. V9 D2 j6 L
( c2 t5 ~, Y+ WBob 知道他将收到的 Grin 数量(25)。
% W) T! c8 |) h' a# L4 [0 o4 e0 V0 O& a
Bob 知道他的 nonce 值。
' f0 A+ g' [& J# E. G4 }- U: {
. c  c3 K: R) e! A0 m+ ZBob 知道他为这 25 Grin 选取的致盲因子。
5 b* [0 Q8 n$ ~" @: E* }, t/ T; u. j! K% B* ?. d
……至此,Alice 在不知道 Bob 选择的 nonce 和致盲因子的情况下验证了 Bob 的部分签名。* H' k! B( b! C( [) h6 v! X

4 _$ ]4 Q% K1 ^& a之后,Alice 生成她自己的部分签名:
" U$ r! J! _. y: f
$ ]5 S; D& F* X# K: r; S-该交易中 Alice 的部分签名。-7 ?. E2 M. }( f
) x6 \, l+ I+ g* r' `! Q
Alice 现在可以生成该交易的签名,其中包含她和 Bob 的 部分签名:/ f. g9 m/ N5 |& U

' |  p8 t' L6 ^8 h9 ~交易签名由 Alice 和 Bob 的部分签名之和以及他们各自的 nonce 所对应的承诺之和组成。. ?: ^% |! Q' V  L; |, Z, H
) {4 K# i, _8 U1 o4 z
按照顺序,签名 包含:# ~6 V$ x% b8 H) r- |
  g5 L/ m1 g8 m- `
Alice 和 Bob 的部分签名之和。
6 X: F; t) b+ b6 ?
9 w* A$ ?, J/ P! r9 e( OAlice 和 Bob 的 nonce 所对应的承诺之和 (他们彼此都不知道对方的 nonce 值)。
( k% G! o) z6 n' f9 `7 g- g& d
+ O$ o' ?* {9 p) ?& G. j合并之后,交易签名可以表示成如下形式:3 ~$ b3 s: w" u2 M

! E+ d8 Z: M3 X5 }4 ]-交易签名-% Q+ X5 q- ?3 v
; v8 Y% x( ^# g4 t4 x
其中,s = ss + sr,k = ks + kr。
& `" ?  W2 j; Z( t4 ]. h. A8 j: ?( P: `" b% V8 v+ J; ^
记住这个签名 —— 你很快就知道它的意义了。( @; l9 w: \7 h" V- K

% H3 R: }1 U: j9 k4 d9 D交易完成
+ J0 E+ y8 B3 \, H6 q& _$ [; ~( S( C* t# V0 y. y4 Z! u
数字货币需要 “记忆” —— 也就是说,当你向某个人发送一笔钱的时候,你不能把同一笔钱发送给其他人。通过使用 Grin,我们隐藏了 Grin 的发送数量以及接收方。那么,我们怎么证明这笔钱没有被 “双花” 或凭空造出来的呢?
, c! V0 k3 k2 f6 {* E8 O' X: g
: v, a1 C9 b7 D- F在一笔 Grin 交易中,从输入中减去所有输出之后,剩余 Grin 的数量应该等于 0。再以 5 美元钞票举例:2 R, P- z) {- a

+ E$ w" q6 b/ Z3 美元给收银员(输出)+ 2 美元找零返还给我(输出)- 5 美元钞票(输入) = 0+ [3 h0 p4 O' o: M3 W

/ u  F" u4 x/ A9 |3 f5 v6 e同理,一笔合法的 Grin 交易也符合上述等式。那么,在不暴露具体值的情况下,我们可以如何验证呢?来了解一下 Alice 和 Bob 之间交易的输入和输出情况:! H$ _' T  Y2 ], s$ T; ~8 P$ Q

. k- z6 o1 w0 A0 s* E/ o9 _9 t$ P(34?G) + (15?H) + (11?G) + (25?H) - (20?G) - (40?H) = (25?G) + (0?H)
( {: Z8 J: M  c% Y7 ?4 u- q9 H  ^5 ~7 x+ m
这里的巧妙之处在于,当 Grin 数量抵消时(没有多余的 Grin 凭空产生),用输入减去输出后剩余的是 “过剩致盲因子” 或 “过剩内核” 所对应的承诺。在我们现在的例子中,过剩致盲因子对应的承诺为 25?G,即椭圆曲线上的一个公钥。$ s4 I" X  h/ {* D" L7 I3 ^

/ r4 q4 d3 R+ j. ~9 X如果一笔 Grin 交易的输出之和减去输入之和后能够产生一个有效的椭圆曲线公钥,那么你就能知道 v 值一定被抵消了。如果等式右侧不是某些已知数值 n 的 n?G + 0?H 形式,你就能知道这笔交易是非法的了。这意味着,要么输出总量大于输入总量(例如,你支付了 5 美元,收银员收取了 3 美元,却倒找了你 10 美元),要么输入总量大于输出总量(例如,你支付了 5 美元,收银员收了 3 美元,但是没有找你钱)。4 M) I/ l) ~4 K9 C/ `

5 v$ L& C/ J+ D0 q7 w还记得上文得出的签名么?
+ @, A) U# F+ g$ x
& r  ^& ~1 @5 l' J9 f+ o. O" M-交易签名-
; [* @: U) J1 g9 I4 ?1 D" c! V6 K# F& q
该签名实际上签署了我刚才提到过的过剩致盲因子对应的承诺,下面我们来解释一下。
3 I- a- i6 }5 y4 B' s9 E
. C" Z3 i) |' k2 Z2 C4 h3 ~* E3 q还记得吧,当你把 Bob 的部分签名的等式两边同时乘以 G 后,会得到如下等式。
0 W, |0 H: t$ G* v) e- x0 P8 s5 L: z3 P. [! W1 M
-等式两边同时乘以生成点 G 后 Bob 的部分签名-
% S" y2 E- q5 O8 ]. Q! y. Q8 `0 o- O9 _/ X
同样,当你把 Alice 的部分签名的等式两边同时乘以 G 后,会得到如下等式。% n, `4 w- [- s) v+ [, f; _! a9 i4 g

* P# }' E; @+ m# P-等式两边同时乘以生成点 G 后 Alice 的部分签名。-
  Z& G! a- j8 L
% I, h4 K; ?+ O: t: i+ x如果把两个等式相加会发生什么呢?你将得到:
+ V& p; s2 n% ?- d6 W/ P: R
$ P: ^& c8 L7 }. |, _sr?G + ss?G = (kr ? G) + (ks ? G) + (e ? (rr?G + rs?G))/ a4 K; s" ]+ b' [

4 q5 D. o4 w4 X% j/ b& a) w+ J- N其中, rr 是 Bob 的致盲因子,rs 是 Alice 的致盲因子总数, rr?G + rs?G 等于 (rr + rs)?G 。
7 n- }/ \4 N& d; q8 l: `6 f0 s* {
* \) M& h+ d& z4 H+ GBob 的致盲因子对应的承诺是 11?G。Alice 的致盲因子总数对应的承诺是 14?G,两者相加之后得到 25?G(代表整个交易的过剩致盲因子的承诺)。因此, sr(Bob 的部分签名) 和 ss(Alice 的部分签名) 相加之和若等于过剩致盲因子对应的承诺,即可证明整个交易是合法的。) W  J. C, E; U" r+ j( ?
, M" E. }* z' c; U- A/ Z- u
进一步简化这个等式,我们会得到:- o) w, w$ Y$ L. }( v

  e1 C5 [9 y4 W5 Msr?G + ss?G = (k?G) + (e ? (r?G))
- n3 A# S$ {; u. l2 Q0 p$ F" d/ g( b! @$ W( G
或:, n  J1 {! k* V
, o& |9 R4 Z0 b& y$ z' B9 P7 ~6 ]
sr?G + ss?G = (k?G) + (e ? (25?G))
" s/ g( v# ?& s$ S5 Q
6 g$ T4 S' _5 V; k那么接下来只需检验等式两边是否相等就行了。
# c% {) w& m) Y, s7 A$ ?! c% i# n1 G1 a# M' ^5 a
记住,等式中的所有变量(部分签名之和、e 中各部分、过剩致盲因子所对应的承诺、nonce 之和对应的承诺)对于所有人都是可见的,因此任何人都能进行验证。我们可以在既不知道 Alice 的致盲因子也不知道 Bob 的致盲因子的情况下验证该交易。通过将他们的部分签名相加,并验证其总和是否等于过剩致盲因子对应的承诺,我们能够证明:
# h8 n! [0 X) {1 _
% q2 h. U3 V5 O" T' R* p  s* m0 ]Alice 花费的输入中没有凭空产生多余的 Grin 。0 l1 g2 K& D/ V* v) \1 p: x
- w$ k4 E, F8 {$ o
Alice 和 Bob 在创建该交易的时候,都知道各自输出的致盲因子。这意味着新他们能够花费交易产生的新输出,使得该输出不被锁定。7 h; @5 E+ [( i, B! H5 ]2 Q

) t0 _+ J7 Z3 {& L9 |刚才我们用来验证交易的信息被放在 交易内核 当中。. E- U0 n7 A; X' v: d7 b4 P

$ y3 |( g& T6 w" U8 |交易内核
8 ^7 K" T, q" v& {0 T
- t7 Y$ n4 O5 V% X* g1 l) b除了输出,交易内核 是 Grin 交易生成的另一部分信息。每笔交易生成一个交易内核,但是无法通过查询 Grin 区块链上的某一输出找到与之关联的交易内核。每笔 Grin 交易都包含一个交易内核,以及没有凭空产生多余 Grin 的证明。
& u& Q' a( m$ C7 V( J4 b. r3 {) @
6 d: s; L# j6 ^4 r5 l& o. o以下信息将存储在交易内核中:
8 w9 I3 `, t5 [$ F3 H
0 n' L$ X% C- H交易签名 (s, k ? G)。1 B5 j# f' p6 w; J/ O: F( t5 ^
1 K& y3 _0 M% ~* n
与 “过剩致盲因子” 关联的公钥(本例中为 25?G)。如上所述,该公钥可以用于验证 s。
5 u6 A: R1 y7 a0 U1 f6 |8 K; W; j4 X! n
该交易的交易费(transaction fee)与锁定高度(lock_height)。(插播:如果是 Coinbase 交易,不会包含这两部分信息)。4 v% q( L" r1 c; S. o
- L! V+ V! v+ C- \" F
总结8 w' ^8 |. L4 w7 v" S' ]3 G

. B$ T- q( U8 N$ w7 x在完成所有这些操作之后,只有如下交易相关信息会广播到网络中:
( Q8 W: r! Q/ w8 ^
! a, }7 H$ e$ {# {所花费的输入。/ e! t  Q5 ^6 Y
/ T: \) M3 Q5 e7 G+ [& B! M( U, U
新产生的输出。1 Z& X+ V. S7 m$ {  D9 k: }2 r
, c# `1 G; {4 {( c' Y+ ^
交易内核。. D, k7 h6 o, }1 {) p
! a+ Z8 Y( e) H
内核偏移(我在这里没有描述)。" [1 a" ?; d2 k( |" @% q" ^

8 z8 b. r: K! s$ D5 d, C; q上文所述的交易元数据不会被广播。更好的是,其中一些信息也可以丢弃 —— 我们将在另一篇博客中讲述。
9 Q* G, O! `/ c: @6 B: ]1 m# [" W9 h1 w' U
希望本文能对了解 Grin 交易工作原理有所帮助。我刻意略去了范围证明(range proof)、内核偏移以及交易费的内容。更多信息请阅读有关 Grin 中交易合并机制(cut-through)工作原理、多方参与交易原理以及一些实验性的博客。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

刘艳琴 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3