@@ -48,11 +48,16 @@ func CreateWallet(ctx context.Context, params CreateWalletParams, recovery *Reco
4848 return nil , fmt .Errorf ("check new wallet data directory error: %w" , err )
4949 }
5050
51- var seed []byte
52- var birthday time.Time
51+ var (
52+ seed []byte
53+ tweakedSeed func () []byte
54+ birthday time.Time
55+ seedType SeedType
56+ )
57+
5358 if recovery != nil {
5459 if recovery .UseLocalSeed {
55- wd , err := RetreiveWalletData (params .DataDir )
60+ wd , err := retrieveWalletData (params .DataDir )
5661 if err != nil {
5762 return nil , fmt .Errorf ("unable to get wallet data: %v" , err )
5863 }
@@ -65,33 +70,39 @@ func CreateWallet(ctx context.Context, params CreateWalletParams, recovery *Reco
6570 return nil , fmt .Errorf ("unable to decrypt wallet seed: %v" , err )
6671 }
6772 birthday = time .Unix (wd .Birthday , 0 )
73+ seedType = wd .SeedType
6874 } else {
69- seed , birthday = recovery .Seed , recovery .Birthday
75+ seed , birthday , seedType = recovery .Seed , recovery .Birthday , recovery . SeedType
7076 }
7177 } else {
7278 seed , err = hdkeychain .GenerateSeed (entropyBytes )
7379 if err != nil {
7480 return nil , fmt .Errorf ("unable to generate random seed: %v" , err )
7581 }
7682 birthday = time .Now ()
83+ // Seed type is default fifteen words.
7784 }
7885
79- // Adjust seed to create the same wallet as dex.
80- b := make ([]byte , len (seed )+ 4 )
81- copy (b , seed )
82- binary .BigEndian .PutUint32 (b [len (seed ):], 42 )
83- tweakedSeed := blake256 .Sum256 (b )
86+ if seedType == STFifteenWords {
87+ // Adjust seed to create the same wallet as dex.
88+ b := make ([]byte , len (seed )+ 4 )
89+ copy (b , seed )
90+ binary .BigEndian .PutUint32 (b [len (seed ):], 42 )
91+ ts := blake256 .Sum256 (b )
92+ tweakedSeed = func () []byte { return ts [:] }
93+ } else {
94+ tweakedSeed = func () []byte { return seed }
95+ }
8496
85- _ , _ , _ , acctKeySLIP0044Priv , err := udb .HDKeysFromSeed (tweakedSeed [:] , chainParams )
97+ _ , _ , _ , acctKeySLIP0044Priv , err := udb .HDKeysFromSeed (tweakedSeed () , chainParams )
8698 if err != nil {
8799 return nil , err
88100 }
89101 defer acctKeySLIP0044Priv .Zero ()
90102 xpub := acctKeySLIP0044Priv .Neuter ()
91-
92- wd , err := SaveWalletData (seed , xpub .String (), birthday , params .DataDir , params .Pass )
103+ wd , err := saveWalletData (seed , xpub .String (), birthday , params .DataDir , params .Pass , seedType )
93104 if err != nil {
94- return nil , fmt .Errorf ("SaveWalletData error: %v" , err )
105+ return nil , fmt .Errorf ("saveWalletData error: %v" , err )
95106 }
96107
97108 ctx , cancel := context .WithTimeout (ctx , time .Minute )
@@ -119,7 +130,7 @@ func CreateWallet(ctx context.Context, params CreateWalletParams, recovery *Reco
119130 }()
120131
121132 // Initialize the newly created database for the wallet before opening.
122- err = wallet .Create (ctx , db , nil , params .Pass , tweakedSeed [:] , chainParams )
133+ err = wallet .Create (ctx , db , nil , params .Pass , tweakedSeed () , chainParams )
123134 if err != nil {
124135 return nil , fmt .Errorf ("wallet.Create error: %w" , err )
125136 }
@@ -185,7 +196,7 @@ func CreateWatchOnlyWallet(ctx context.Context, extendedPubKey string, params Cr
185196 }
186197
187198 if useLocalSeed {
188- wd , err := RetreiveWalletData (params .DataDir )
199+ wd , err := retrieveWalletData (params .DataDir )
189200 if err != nil {
190201 return nil , fmt .Errorf ("unable to get wallet data: %v" , err )
191202 }
@@ -197,9 +208,9 @@ func CreateWatchOnlyWallet(ctx context.Context, extendedPubKey string, params Cr
197208 return nil , fmt .Errorf ("unable to parse extended key: %w" , err )
198209 }
199210
200- wd , err := SaveWalletData (nil , xpub .String (), time.Time {}, params .DataDir , nil ) // password not required
211+ wd , err := saveWalletData (nil , xpub .String (), time.Time {}, params .DataDir , nil , 0 ) // password not required
201212 if err != nil {
202- return nil , fmt .Errorf ("SaveWalletData error: %v" , err )
213+ return nil , fmt .Errorf ("saveWalletData error: %v" , err )
203214 }
204215
205216 ctx , cancel := context .WithTimeout (ctx , time .Minute )
@@ -266,7 +277,7 @@ func LoadWallet(ctx context.Context, params OpenWalletParams) (*Wallet, error) {
266277 return nil , fmt .Errorf ("error parsing chain params: %w" , err )
267278 }
268279
269- wd , err := RetreiveWalletData (params .DataDir )
280+ wd , err := retrieveWalletData (params .DataDir )
270281 if err != nil {
271282 return nil , err
272283 }
0 commit comments