s( X7 d% [, k& v/ G) `, d
单设备钱包:该类型钱包仅由单一设备控制,它与特定设备地址是绑定的,钱包中的地址为单签名地址;
/ g" l6 x( Y1 N7 G; P& [- W8 ~
多设备钱包:该类型钱包由多个设备共同控制,它与若干个设备地址绑定,钱包中的地址为多签名地址。- @+ k. e; k3 z0 U- `9 r' P5 z
6 P* Y0 e2 B" D& `; j5 F7 h: Z
在之前的文章中,我们提到,Dagx的地址分为三种:
3 e I" ] l! c5 C4 U. J- S9 Y+ t5 W
普通地址:地址定义中不包含其它地址,采用BASE32编码,长度为32,比如A2WWHN7755YZVMXCBLMFWRSLKSZJN3FU;
" x0 c! h4 I; Z
+ N- {" g# H% q/ Y8 p$ N
共享地址:地址定义中包含了其它地址,地址格式与普通地址相同,通常用作智能合约地址;
# D! f% D4 q. r _0 b) E1 `
$ S0 m3 p: i, a) k5 o: d
设备地址:生成方法及地址格式类似普通地址,但在设备地址在头部添加了一个0,长度为33,比如05FV4WNIEU4OHIAIF7XEIRC2QRRLFPAC3。设备地址:生成方法及地址格式类似普通地址,但在设备地址在头部添加了一个0,长度为33,比如05FV4WNIEU4OHIAIF7XEIRC2QRRLFPAC3。
9 Z7 v! j. k8 o( {
因此,Dagx的钱包与地址可以总结为下面这张图:
其中:设备具有唯一的设备地址;普通地址包括单签名地址和多签名地址,单设备钱包生成单签名地址,多设备钱包生成多签名地址;多个普通地址可以共同构成共享地址。
单签名地址
单设备钱包由单一设备生成,假设设备地址为 DEVICE_ADDRESS,单设备钱包中单签名地址定义的模板为:. h1 j, Z0 I( ~. {8 c
>
["sig", {pubkey: '$pubkey@DEVICE_ADDRESS'}]9 Z+ q+ [+ _) `: h
> ["sig", {pubkey: '$pubkey@DEVICE_ADDRESS'}]
具体在生成地址时,$pubkey@DEVICE_ADDRESS会替换成相应的公钥。具体在生成地址时,$pubkey@DEVICE_ADDRESS会替换成相应的公钥。% F: D- B1 J* A8 y& Y
多签名地址
多设备钱包由多个设备共同控制。假设3个设备的地址分别为DEVICE_A_ADDRESS、DEVICE_B_ADDRESS以及DEVICE_C_ADDRESS。我们需要生成一个2-3的多设备钱包,即3个设备中至少需要2个设备签名才可以生效,则相应的多设备钱包中多签名地址定义的模板为:4 ^. m+ i8 o& w0 t1 q
> ["r of set", {
required: 2,% b7 f; H5 [) [+ H( K
set: [
["sig", {pubkey: '$pubkey@DEVICE_A_ADDRESS'}],
["sig", {pubkey: '$pubkey@DEVICE_B_ADDRESS'}],8 a9 a/ L8 F e; W" T i
["sig", {pubkey: '$pubkey@DEVICE_C_ADDRESS'}],
]
}]}]) x7 k l1 r$ t" b, L" C3 f* f
在创建多设备钱包时,设备之间会通过加密消息相互交换xPubKey。这样,不同的设备可以依据相同的地址路径生成相同的地址。
共享地址
共享地址本质上可以认为是智能合约的地址,例如 flight delay insurance的地址定义(或者智能合约)示例为:# _, n; f; I* s- Y
["or",[( [. [: [8 e: d, d- u6 |3 L& E4 N
["and",[
["seen",{"what":"output","address":"this address","asset":"base","amount":22664}],$ A2 \$ w% f4 J# }- z
["or",[6 _% T" G M, V$ j' [ Z' x
["and",[
["address","TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ"],8 c+ _) }; |9 X! V" c& Y/ I+ k
["in data feed",[["GFK3RDAPQLLNCMQEVGGD2KCPZTLSG3HN"],"MU5152-2018-06-18",">","60",2810590]]]],
["and",[
["address","4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"],! L2 P# u) [0 q6 _% b1 i
["in data feed",[["I2ADHGP4HL6J37NQAD73J7E5SKFIXJOT"],"timestamp",">",1529442000000]]]],; r8 k6 q) q8 r0 Q3 L$ s
["and",[
["address","4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"],
["in data feed",[["GFK3RDAPQLLNCMQEVGGD2KCPZTLSG3HN"],"MU5152-2018-06-18","",1529034037936]]]]]
上述地址定义中共涉及到两个地址TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ及4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ,它是这两个地址的共享地址。
通过上述地址定义,可以得到该共享地址为 WDCIIWRDHSNNE2DQZ7YVU53USELZBLGV。其中,地址的签名路径包括:5 O/ Z! z2 I3 j! W0 X4 p* z% c: V1 O
{
r.0.1.0.0: "TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ",
r.0.1.1.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"! y0 {& m. m) {+ R; n
r.0.1.2.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"3 }' W' D# s+ C& p9 j* p0 X
r.1.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"
}# c3 `4 d- r% H9 K0 o4 C: b0 h# y1 f
只有满足合约中相应的条件,且具有相应路径的签名,才可以对共享地址中的资产进行操作。
成为第一个吐槽的人