单设备钱包:该类型钱包仅由单一设备控制,它与特定设备地址是绑定的,钱包中的地址为单签名地址;3 X" i* {& _6 I, `( O( S6 _/ B" c
; A5 `# R$ M+ n/ D) x/ N# G" J* Q
; b8 _/ `( Z" G6 `4 H- ]: x
多设备钱包:该类型钱包由多个设备共同控制,它与若干个设备地址绑定,钱包中的地址为多签名地址。
在之前的文章中,我们提到,Dagx的地址分为三种:. L* Z( D. Z% e
普通地址:地址定义中不包含其它地址,采用BASE32编码,长度为32,比如A2WWHN7755YZVMXCBLMFWRSLKSZJN3FU;
6 d. F) a9 X! b1 U3 I
共享地址:地址定义中包含了其它地址,地址格式与普通地址相同,通常用作智能合约地址;
8 `+ |$ a \- B5 L: ]
设备地址:生成方法及地址格式类似普通地址,但在设备地址在头部添加了一个0,长度为33,比如05FV4WNIEU4OHIAIF7XEIRC2QRRLFPAC3。设备地址:生成方法及地址格式类似普通地址,但在设备地址在头部添加了一个0,长度为33,比如05FV4WNIEU4OHIAIF7XEIRC2QRRLFPAC3。: o9 U/ g/ c. v1 }
因此,Dagx的钱包与地址可以总结为下面这张图:8 y5 A V! q4 o: U1 Z2 j
其中:设备具有唯一的设备地址;普通地址包括单签名地址和多签名地址,单设备钱包生成单签名地址,多设备钱包生成多签名地址;多个普通地址可以共同构成共享地址。# j; Y5 l' c, g! X
单签名地址 L& p- T# H/ v- F' E0 ^
单设备钱包由单一设备生成,假设设备地址为 DEVICE_ADDRESS,单设备钱包中单签名地址定义的模板为:
>
["sig", {pubkey: '$pubkey@DEVICE_ADDRESS'}]
> ["sig", {pubkey: '$pubkey@DEVICE_ADDRESS'}], m1 I- Q4 l" n9 i6 n: g: v
具体在生成地址时,$pubkey@DEVICE_ADDRESS会替换成相应的公钥。具体在生成地址时,$pubkey@DEVICE_ADDRESS会替换成相应的公钥。, i; I% }7 M3 x' m5 F6 {7 j' p
多签名地址
多设备钱包由多个设备共同控制。假设3个设备的地址分别为DEVICE_A_ADDRESS、DEVICE_B_ADDRESS以及DEVICE_C_ADDRESS。我们需要生成一个2-3的多设备钱包,即3个设备中至少需要2个设备签名才可以生效,则相应的多设备钱包中多签名地址定义的模板为:4 `9 Q9 }- m# b% ^4 b) _1 n
> ["r of set", {$ A$ `& f9 v3 }# s: U
required: 2,
set: [
["sig", {pubkey: '$pubkey@DEVICE_A_ADDRESS'}],/ o7 i5 [/ y: \. E# p/ Q
["sig", {pubkey: '$pubkey@DEVICE_B_ADDRESS'}],9 T' Q# b. _$ m3 ^
["sig", {pubkey: '$pubkey@DEVICE_C_ADDRESS'}],: [, S6 O" A$ V0 Q$ _% _/ s
]
}]}]) }+ R8 @" m6 u/ M _+ F' j+ d
在创建多设备钱包时,设备之间会通过加密消息相互交换xPubKey。这样,不同的设备可以依据相同的地址路径生成相同的地址。
共享地址; ^, `2 s: Z; F" @
共享地址本质上可以认为是智能合约的地址,例如 flight delay insurance的地址定义(或者智能合约)示例为:
["or",[ w1 ^; f; C0 B- B( O# k' w
["and",[
["seen",{"what":"output","address":"this address","asset":"base","amount":22664}],7 z( F- c' d4 T i# h; {- D) L. w
["or",[5 i, N1 i( d0 e# O
["and",[3 B' O& s F+ }3 q0 D+ W9 r! n; T
["address","TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ"],
["in data feed",[["GFK3RDAPQLLNCMQEVGGD2KCPZTLSG3HN"],"MU5152-2018-06-18",">","60",2810590]]]], y. U* p+ V4 F5 t2 c* _
["and",[
["address","4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"],
["in data feed",[["I2ADHGP4HL6J37NQAD73J7E5SKFIXJOT"],"timestamp",">",1529442000000]]]],: z" R+ x: I0 F; Y8 S
["and",[
["address","4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"],: }( I/ _7 w9 b6 b& r( S
["in data feed",[["GFK3RDAPQLLNCMQEVGGD2KCPZTLSG3HN"],"MU5152-2018-06-18","",1529034037936]]]]]# [& O3 X, @# E5 _9 U
上述地址定义中共涉及到两个地址TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ及4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ,它是这两个地址的共享地址。9 P0 V! X5 B& O$ b$ O
通过上述地址定义,可以得到该共享地址为 WDCIIWRDHSNNE2DQZ7YVU53USELZBLGV。其中,地址的签名路径包括:9 L% E K e/ f9 a. v
{6 x# a& F1 j C9 i
r.0.1.0.0: "TTD2AVY4W2VH62NJXIP7R67XBHWZRQRJ",
r.0.1.1.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"
r.0.1.2.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"7 X; X+ K( Q% r, x2 B, K* Z7 @; W
r.1.0: "4JZOKE43GALLZA4P63NXT7NYAJLSMNYZ"! N& ]4 @: V6 |% v& p
}# \) ]* A+ A2 }, [, ?( i
只有满足合约中相应的条件,且具有相应路径的签名,才可以对共享地址中的资产进行操作。
成为第一个吐槽的人