@@ -48,11 +48,15 @@ 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 , tweakedSeed []byte
53+ birthday time.Time
54+ seedType SeedType
55+ )
56+
5357 if recovery != nil {
5458 if recovery .UseLocalSeed {
55- wd , err := RetreiveWalletData (params .DataDir )
59+ wd , err := retrieveWalletData (params .DataDir )
5660 if err != nil {
5761 return nil , fmt .Errorf ("unable to get wallet data: %v" , err )
5862 }
@@ -65,22 +69,29 @@ func CreateWallet(ctx context.Context, params CreateWalletParams, recovery *Reco
6569 return nil , fmt .Errorf ("unable to decrypt wallet seed: %v" , err )
6670 }
6771 birthday = time .Unix (wd .Birthday , 0 )
72+ seedType = wd .SeedType
6873 } else {
69- seed , birthday = recovery .Seed , recovery .Birthday
74+ seed , birthday , seedType = recovery .Seed , recovery .Birthday , recovery . SeedType
7075 }
7176 } else {
7277 seed , err = hdkeychain .GenerateSeed (entropyBytes )
7378 if err != nil {
7479 return nil , fmt .Errorf ("unable to generate random seed: %v" , err )
7580 }
7681 birthday = time .Now ()
82+ // Seed type is default fifteen words.
7783 }
7884
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 )
85+ if seedType == STFifteenWords {
86+ // Adjust seed to create the same wallet as dex.
87+ b := make ([]byte , len (seed )+ 4 )
88+ copy (b , seed )
89+ binary .BigEndian .PutUint32 (b [len (seed ):], 42 )
90+ ts := blake256 .Sum256 (b )
91+ copy (tweakedSeed , ts [:])
92+ } else {
93+ copy (tweakedSeed , seed )
94+ }
8495
8596 _ , _ , _ , acctKeySLIP0044Priv , err := udb .HDKeysFromSeed (tweakedSeed [:], chainParams )
8697 if err != nil {
@@ -89,9 +100,9 @@ func CreateWallet(ctx context.Context, params CreateWalletParams, recovery *Reco
89100 defer acctKeySLIP0044Priv .Zero ()
90101 xpub := acctKeySLIP0044Priv .Neuter ()
91102
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 )
@@ -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