make constructor of cython HDNode struct more explicit

pull/25/head
Pavol Rusnak 10 years ago
parent 0331a1c454
commit 5cd4531312

@ -5,12 +5,14 @@ cdef class HDNode:
cdef c.HDNode node cdef c.HDNode node
def __init__(self, initializer): def __init__(self, str serialized = None, HDNode copyfrom = None):
if isinstance(initializer, HDNode): if copyfrom is not None:
self.node = (<HDNode>initializer).node self.node = copyfrom.node
elif isinstance(initializer, str) : elif serialized is not None:
if c.hdnode_deserialize(initializer, cython.address(self.node)) != 0: if c.hdnode_deserialize(serialized, cython.address(self.node)) != 0:
raise Exception('Invalid xpub/xprv provided') raise Exception('Invalid xpub/xprv provided')
else:
raise Exception('Need to provide serialized or node parameter')
def xpub(self): def xpub(self):
cdef char[120] string cdef char[120] string
@ -28,11 +30,11 @@ cdef class HDNode:
return str(string) return str(string)
def public_ckd(self, int i): def public_ckd(self, int i):
x = HDNode(self) x = HDNode(copyfrom=self)
c.hdnode_public_ckd(cython.address(x.node), i) c.hdnode_public_ckd(cython.address(x.node), i)
return x return x
def private_ckd(self, int i): def private_ckd(self, int i):
x = HDNode(self) x = HDNode(copyfrom=self)
c.hdnode_private_ckd(cython.address(x.node), i) c.hdnode_private_ckd(cython.address(x.node), i)
return x return x

Loading…
Cancel
Save