% x0 s/ R& r4 e2 r( _& W
单设备钱包:该类型钱包仅由单一设备控制,它与特定设备地址是绑定的,钱包中的地址为单签名地址;/ X' x7 n4 j8 U/ A) e$ t+ {7 x) [0 J
0 f# ?- ?" T2 c' r- u: Q
多设备钱包:该类型钱包由多个设备共同控制,它与若干个设备地址绑定,钱包中的地址为多签名地址。
9 E) f D! E) n9 x5 @4 S) z
在之前的文章中,我们提到,Dagx的地址分为三种:
普通地址:地址定义中不包含其它地址,采用BASE32编码,长度为32,比如A2WWHN7755YZVMXCBLMFWRSLKSZJN3FU;
. b- S. y; ]2 H4 G4 O W
共享地址:地址定义中包含了其它地址,地址格式与普通地址相同,通常用作智能合约地址;% i. m8 L1 q0 r# d: V3 R; L3 ?
g# ~9 A8 z e4 u' |, e
" ~; q1 R! R: L
设备地址:生成方法及地址格式类似普通地址,但在设备地址在头部添加了一个0,长度为33,比如05FV4WNIEU4OHIAIF7XEIRC2QRRLFPAC3。设备地址:生成方法及地址格式类似普通地址,但在设备地址在头部添加了一个0,长度为33,比如05FV4WNIEU4OHIAIF7XEIRC2QRRLFPAC3。
$ c6 [8 a0 I% x* ~/ a
因此,Dagx的钱包与地址可以总结为下面这张图:
其中:设备具有唯一的设备地址;普通地址包括单签名地址和多签名地址,单设备钱包生成单签名地址,多设备钱包生成多签名地址;多个普通地址可以共同构成共享地址。% }$ o) x' K& R' I! @
单签名地址& x! ?. }6 A$ j
单设备钱包由单一设备生成,假设设备地址为 DEVICE_ADDRESS,单设备钱包中单签名地址定义的模板为:
> + y% E6 k: V% J! O! p) k7 l
["sig", {pubkey: '$pubkey@DEVICE_ADDRESS'}]: y9 J$ t! \- t
> ["sig", {pubkey: '$pubkey@DEVICE_ADDRESS'}]0 }% T U8 ~( y; D2 {* m1 x3 g
具体在生成地址时,$pubkey@DEVICE_ADDRESS会替换成相应的公钥。具体在生成地址时,$pubkey@DEVICE_ADDRESS会替换成相应的公钥。
多签名地址
多设备钱包由多个设备共同控制。假设3个设备的地址分别为DEVICE_A_ADDRESS、DEVICE_B_ADDRESS以及DEVICE_C_ADDRESS。我们需要生成一个2-3的多设备钱包,即3个设备中至少需要2个设备签名才可以生效,则相应的多设备钱包中多签名地址定义的模板为:
> ["r of set", {
required: 2,
set: [
["sig", {pubkey: '$pubkey@DEVICE_A_ADDRESS'}],
["sig", {pubkey: '$pubkey@DEVICE_B_ADDRESS'}],$ w* g# y2 j2 {" h8 q
["sig", {pubkey: '$pubkey@DEVICE_C_ADDRESS'}],
]
}]}]; s% w0 h$ i( @; I" q
在创建多设备钱包时,设备之间会通过加密消息相互交换xPubKey。这样,不同的设备可以依据相同的地址路径生成相同的地址。
共享地址5 ^1 X/ [% p- H2 _7 X
共享地址本质上可以认为是智能合约的地址,例如 flight delay insurance的地址定义(或者智能合约)示例为:
["or",[4 H* q% F. ~) U/ ~7 E9 l" f
["and",[3 E. _! H. C# e' T+ g% B! J
["seen",{"what":"output","address":"this address","asset":"base","amount":22664}], b6 j+ H& \" M& ~* ?8 B8 S/ v
["or",[
["and",[2 ~' R# B: V! r5 a" k$ `
["address","TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ"],8 K! B0 \7 C+ t9 C
["in data feed",[["GFK3RDAPQLLNCMQEVGGD2KCPZTLSG3HN"],"MU5152-2018-06-18",">","60",2810590]]]],1 p- N6 D+ o; z; \' z$ `
["and",[
["address","4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"],0 [$ w1 a8 E3 h' n% m5 \( W, T
["in data feed",[["I2ADHGP4HL6J37NQAD73J7E5SKFIXJOT"],"timestamp",">",1529442000000]]]],9 y# {, S& W: b$ k$ U/ f
["and",[+ a+ q; ~' P4 X5 \! c" v4 E* v
["address","4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"],) o" l4 _& M& N# d$ o+ ?
["in data feed",[["GFK3RDAPQLLNCMQEVGGD2KCPZTLSG3HN"],"MU5152-2018-06-18","",1529034037936]]]]]
上述地址定义中共涉及到两个地址TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ及4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ,它是这两个地址的共享地址。& m4 z+ W! g; Y- S2 _3 W+ ?
通过上述地址定义,可以得到该共享地址为 WDCIIWRDHSNNE2DQZ7YVU53USELZBLGV。其中,地址的签名路径包括:- V5 u' i9 x: ?2 G. J' L( ?
{
r.0.1.0.0: "TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ", c( o+ h' E% |7 Z. O
r.0.1.1.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"
r.0.1.2.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"
r.1.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"
}9 b0 p2 X* _% _( p+ j0 p
只有满足合约中相应的条件,且具有相应路径的签名,才可以对共享地址中的资产进行操作。
成为第一个吐槽的人