@@ -8,57 +8,106 @@ import Web3Core
88@testable import web3swift
99
1010final class BIP44Tests : LocalTestCase {
11+ private var accountZeroScannedAddresses : [ String ] !
12+ private var accountZeroAndOneScannedAddresses : [ String ] !
1113 private var mockTransactionChecker : MockTransactionChecker !
1214
1315 override func setUpWithError( ) throws {
1416 try super. setUpWithError ( )
1517 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 " ]
1659 }
1760
1861 override func tearDownWithError( ) throws {
1962 try super. tearDownWithError ( )
2063 mockTransactionChecker = nil
64+ accountZeroScannedAddresses = nil
65+ accountZeroAndOneScannedAddresses = nil
2166 }
22-
23- //MARK: - warns false
2467
2568 func testDeriveNoWarn( ) async throws {
2669 let rootNode = try rootNode ( )
2770
2871 let childNode = try await rootNode. derive ( path: " m/44'/60'/8096'/0/1 " , warns: false , transactionChecker: mockTransactionChecker)
29-
72+
3073 XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 035785d4918449c87892371c0f9ccf6e4eda40a7fb0f773f1254c064d3bba64026 " )
74+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 0 )
3175 }
3276
33- //MARK: - warns true
34-
3577 func testDeriveInvalidPath( ) async throws {
3678 let rootNode = try rootNode ( )
3779
3880 let childNode = try ? await rootNode. derive ( path: " " , warns: true , transactionChecker: mockTransactionChecker)
3981
4082 XCTAssertNil ( childNode)
83+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 0 )
4184 }
4285
86+ //MARK: - address
87+
4388 func testAccountZeroCanBeDerivedAlways( ) async throws {
4489 let rootNode = try rootNode ( )
4590
4691 let childNode = try await rootNode. derive ( path: " m/44'/60'/0'/0/255 " , warns: true , transactionChecker: mockTransactionChecker)
4792
4893 XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 0262fba1af8f149258123265318114066decf50d16c1222a9d657b7de2296c2734 " )
94+ XCTAssertEqual ( mockTransactionChecker. addresses. count, 0 )
4995 }
5096
5197 func testAccountOneWithoutTransactionsInAccountZeroWarns( ) async throws {
5298 do {
5399 let rootNode = try rootNode ( )
54100 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
56104
57105 let _ = try await rootNode. derive ( path: path, warns: true , transactionChecker: mockTransactionChecker)
58106
59107 XCTFail ( " Child must not be created usign warns true for the path: \( path) " )
60108 } catch BIP44Error . warning {
61109 XCTAssertTrue ( true )
110+ XCTAssertEqual ( mockTransactionChecker. addresses, accountZeroScannedAddresses)
62111 }
63112 }
64113
@@ -71,8 +120,9 @@ final class BIP44Tests: LocalTestCase {
71120 mockTransactionChecker. results = results
72121
73122 let childNode = try await rootNode. derive ( path: path, warns: true , transactionChecker: mockTransactionChecker)
74-
123+
75124 XCTAssertEqual ( try XCTUnwrap ( childNode) . publicKey. toHexString ( ) , " 036cd8f1bad46fa7caf7a80d48528b90db2a3b7a5c9a18d74d61b286e03850abf4 " )
125+ XCTAssertEqual ( mockTransactionChecker. addresses, accountZeroScannedAddresses)
76126 } catch BIP44Error . warning {
77127 XCTFail ( " BIP44Error.warning must not be thrown " )
78128 }
@@ -92,6 +142,27 @@ final class BIP44Tests: LocalTestCase {
92142 XCTFail ( " Child must not be created usign warns true for the path: \( path) " )
93143 } catch BIP44Error . warning {
94144 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 " )
95166 }
96167 }
97168
0 commit comments