@@ -8,57 +8,106 @@ import Web3Core
8
8
@testable import web3swift
9
9
10
10
final class BIP44Tests : LocalTestCase {
11
+ private var accountZeroScannedAddresses : [ String ] !
12
+ private var accountZeroAndOneScannedAddresses : [ String ] !
11
13
private var mockTransactionChecker : MockTransactionChecker !
12
14
13
15
override func setUpWithError( ) throws {
14
16
try super. setUpWithError ( )
15
17
mockTransactionChecker = MockTransactionChecker ( )
18
+ accountZeroScannedAddresses = [ " 0x31a4aD7593D06D049b3Cc07aB5430264Bf7e069f " ,
19
+ " 0x2b4fb04d485446ade5889e77b0cbC2c71075209c " ,
20
+ " 0x93DDC6583D4BF6e9b309cfBdC681A78F8B5f37Ff " ,
21
+ " 0xab2bBC1392f957F7A5DDCE89b64f30064D39C08b " ,
22
+ " 0x5Ae1794fFD14bebF34e0BA65815dF9DCB0FD11a8 " ,
23
+ " 0x4894C017C7fEfB53A9dc3Cf707d098EBCFD8BdF1 " ,
24
+ " 0x29cC28Cd30e21e73B51389792453818DaCe33f65 " ,
25
+ " 0x6B3cB8CFBC89ab7A1D9Ccb53537020c53dD4f6E0 " ,
26
+ " 0xD5FD55fcB93a47Ef176062ac8265E28A5f09887D " ,
27
+ " 0xa8A99549A522aF52a2050e081100ef3D42228B55 " ,
28
+ " 0x2007f83D32cd82b013b9d0d33Ac9e5Ae725367C5 " ,
29
+ " 0x80a9A6Dd42D67Dd2EEC5c3D6568Fd16e7c964948 " ,
30
+ " 0xC7781cd86F6336CfE56Fc243f1a9544595dC984E " ,
31
+ " 0x7E3eDEB0201D5A5cAF2b50749a7C7843374c312F " ,
32
+ " 0x800853194B31Bf5D621Be0b402E8c2b3b402a2Ed " ,
33
+ " 0x73BE98d0a3702E8279ca087B2564b6977389C242 " ,
34
+ " 0x3eFC4765C5BaB65947864fDf4669b7fb8073d89B " ,
35
+ " 0xd521A57ea2bAA6396AE916aD2bC4972a9b3635EB " ,
36
+ " 0x561192570145C499f0951dEc0a4Df80D0D0A96bb " ,
37
+ " 0x4DdBe17BB1b0056941A1425739978e44D462D7DD " ]
38
+ accountZeroAndOneScannedAddresses = [ " 0x31a4aD7593D06D049b3Cc07aB5430264Bf7e069f " ,
39
+ " 0x3C7b0FadC415d0be5EBa971DC7Dcc39DdDcd4AF7 " ,
40
+ " 0x73C13e421eF367c4F55BBC02a8e2a2b12e82f717 " ,
41
+ " 0xE9D8f89452CF0a0d501B9C798cE696C3a1BAE535 " ,
42
+ " 0x662e78FD3C77A9B8e693f5DC75398C9c0E7233a6 " ,
43
+ " 0xBEDF61A3466b40f2591702c91cF888843C81e576 " ,
44
+ " 0xb406aD2666D36716a847c27BAA6d742ECdA85F23 " ,
45
+ " 0x069c7bF73d17aeb7b8Ff490177A6eefB7aCcb4a8 " ,
46
+ " 0xa9dbD111007cAfF0804b98195F7f9231bcBEdf86 " ,
47
+ " 0x2DDDf0447Eb85ae4B16815B010a7007cd30f0A64 " ,
48
+ " 0x35ff1f3dcb02B6F137A654a419bFb66FE74dFDFE " ,
49
+ " 0xd3A77dE492A58386129546469D0E3D3C67Dd520E " ,
50
+ " 0x1c011fEfb24210EB1415DD87C161591f5040d71A " ,
51
+ " 0x6C289DCE390863ed58bBd56948950f4D96c7Ab8f " ,
52
+ " 0xbB13176bf7571D15E1600077F4da6eD22075676b " ,
53
+ " 0x618c1ddD96a3Dc2Bd1E90F7053bCc48986A412f7 " ,
54
+ " 0x5220836980697693fE2137b64e545f926856feAe " ,
55
+ " 0xC49D7d886CA02C438c413ceabE6C1f8138ED6ef8 " ,
56
+ " 0x049e9466CD2417A615e98DD7233eeec4Fcf5632D " ,
57
+ " 0x111FbB56b0B5c97F2896Ee722A917b261bCC77fC " ,
58
+ " 0xF3F66e5C119620eBDbD7Fb48B4b5d365De5c9750 " ]
16
59
}
17
60
18
61
override func tearDownWithError( ) throws {
19
62
try super. tearDownWithError ( )
20
63
mockTransactionChecker = nil
64
+ accountZeroScannedAddresses = nil
65
+ accountZeroAndOneScannedAddresses = nil
21
66
}
22
-
23
- //MARK: - warns false
24
67
25
68
func testDeriveNoWarn( ) async throws {
26
69
let rootNode = try rootNode ( )
27
70
28
71
let childNode = try await rootNode. derive ( path: " m/44'/60'/8096'/0/1 " , warns: false , transactionChecker: mockTransactionChecker)
29
-
72
+
30
73
XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 035785d4918449c87892371c0f9ccf6e4eda40a7fb0f773f1254c064d3bba64026 " )
74
+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 0 )
31
75
}
32
76
33
- //MARK: - warns true
34
-
35
77
func testDeriveInvalidPath( ) async throws {
36
78
let rootNode = try rootNode ( )
37
79
38
80
let childNode = try ? await rootNode. derive ( path: " " , warns: true , transactionChecker: mockTransactionChecker)
39
81
40
82
XCTAssertNil ( childNode)
83
+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 0 )
41
84
}
42
85
86
+ //MARK: - address
87
+
43
88
func testAccountZeroCanBeDerivedAlways( ) async throws {
44
89
let rootNode = try rootNode ( )
45
90
46
91
let childNode = try await rootNode. derive ( path: " m/44'/60'/0'/0/255 " , warns: true , transactionChecker: mockTransactionChecker)
47
92
48
93
XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 0262fba1af8f149258123265318114066decf50d16c1222a9d657b7de2296c2734 " )
94
+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 0 )
49
95
}
50
96
51
97
func testAccountOneWithoutTransactionsInAccountZeroWarns( ) async throws {
52
98
do {
53
99
let rootNode = try rootNode ( )
54
100
let path = " m/44'/60'/1'/0/0 "
55
- mockTransactionChecker. results = false . times ( n: 20 )
101
+ var results = false . times ( n: 20 )
102
+ results. append ( true )
103
+ mockTransactionChecker. results = results
56
104
57
105
let _ = try await rootNode. derive ( path: path, warns: true , transactionChecker: mockTransactionChecker)
58
106
59
107
XCTFail ( " Child must not be created usign warns true for the path: \( path) " )
60
108
} catch BIP44Error . warning {
61
109
XCTAssertTrue ( true )
110
+ XCTAssertEqual ( mockTransactionChecker. addresses, accountZeroScannedAddresses)
62
111
}
63
112
}
64
113
@@ -71,8 +120,9 @@ final class BIP44Tests: LocalTestCase {
71
120
mockTransactionChecker. results = results
72
121
73
122
let childNode = try await rootNode. derive ( path: path, warns: true , transactionChecker: mockTransactionChecker)
74
-
123
+
75
124
XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 036cd8f1bad46fa7caf7a80d48528b90db2a3b7a5c9a18d74d61b286e03850abf4 " )
125
+ XCTAssertEqual ( mockTransactionChecker. addresses, accountZeroScannedAddresses)
76
126
} catch BIP44Error . warning {
77
127
XCTFail ( " BIP44Error.warning must not be thrown " )
78
128
}
@@ -92,6 +142,27 @@ final class BIP44Tests: LocalTestCase {
92
142
XCTFail ( " Child must not be created usign warns true for the path: \( path) " )
93
143
} catch BIP44Error . warning {
94
144
XCTAssertTrue ( true )
145
+ XCTAssertEqual ( mockTransactionChecker. addresses, accountZeroAndOneScannedAddresses)
146
+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 21 )
147
+ }
148
+ }
149
+
150
+ //MARK: - change + addressIndex
151
+
152
+ func testAccountOneAndInternalAndNotZeroAddressIndexWithTransactionsInAccountZeroNotWarns( ) async throws {
153
+ do {
154
+ let rootNode = try rootNode ( )
155
+ let path = " m/44'/60'/1'/1/128 "
156
+ var results = false . times ( n: 19 )
157
+ results. append ( true )
158
+ mockTransactionChecker. results = results
159
+
160
+ let childNode = try await rootNode. derive ( path: path, warns: true , transactionChecker: mockTransactionChecker)
161
+
162
+ XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 0282134e44d4c040a4b4c1a780d8302955096cf1d5e738b161c83f0ce1b863c14e " )
163
+ XCTAssertEqual ( mockTransactionChecker. addresses, accountZeroScannedAddresses)
164
+ } catch BIP44Error . warning {
165
+ XCTFail ( " BIP44Error.warning must not be thrown " )
95
166
}
96
167
}
97
168
0 commit comments