UNPKG

8.13 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const index_1 = require("./index");
4const testCases = [
5 [
6 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
7 false,
8 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ',
9 'T719a5UwUCnEs54UsxG9CJYYDhwmFCqkr7wxCcNcfZ6p5GZ'
10 ],
11 [
12 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
13 1,
14 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaGZMhc9YTE92ehJ2Fu',
15 'T719a5UwUCnEs54UsxG9CJYYDhwmFCvbJNZbi37gBGkRkbE'
16 ],
17 [
18 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
19 14,
20 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaGo2K5VpXpmCqbV2gS',
21 'T719a5UwUCnEs54UsxG9CJYYDhwmFCvqXVCALUGJGSbNV3x'
22 ],
23 [
24 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
25 11747,
26 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaLFuhLRuNXPrDeJd9A',
27 'T719a5UwUCnEs54UsxG9CJYYDhwmFCziiNHtUukubF2Mg6t'
28 ],
29 [
30 'rLczgQHxPhWtjkaQqn3Q6UM8AbRbbRvs5K',
31 false,
32 'XVZVpQj8YSVpNyiwXYSqvQoQqgBttTxAZwMcuJd4xteQHyt',
33 'TVVrSWtmQQssgVcmoMBcFQZKKf56QscyWLKnUyiuZW8ALU4'
34 ],
35 [
36 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo',
37 false,
38 'X7YenJqxv3L66CwhBSfd3N8RzGXxYqPopMGMsCcpho79rex',
39 'T77wVQzA8ntj9wvCTNiQpNYLT5hmhRsFyXDoMLqYC4BzQtV'
40 ],
41 [
42 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo',
43 58,
44 'X7YenJqxv3L66CwhBSfd3N8RzGXxYqV56ZkTCa9UCzgaao1',
45 'T77wVQzA8ntj9wvCTNiQpNYLT5hmhR9kej6uxm4jGcQD7rZ'
46 ],
47 [
48 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW',
49 23480,
50 'X7d3eHCXzwBeWrZec1yT24iZerQjYL8m8zCJ16ACxu1BrBY',
51 'T7YChPFWifjCAXLEtg5N74c7fSAYsvSokwcmBPBUZWhxH5P'
52 ],
53 [
54 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW',
55 11747,
56 'X7d3eHCXzwBeWrZec1yT24iZerQjYLo2CJf8oVC5CMWey5m',
57 'T7YChPFWifjCAXLEtg5N74c7fSAYsvTcc7nEfwuEEvn5Q4w'
58 ],
59 [
60 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
61 false,
62 'XVLhHMPHU98es4dbozjVtdWzVrDjtV5fdx1mHp98tDMoQXb',
63 'TVE26TYGhfLC7tQDno7G8dGtxSkYQn49b3qD26PK7FcGSKE'
64 ],
65 [
66 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
67 0,
68 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8AqEL4xcZj5whKbmc',
69 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnSy8RHqGHoGJ59spi2'
70 ],
71 [
72 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
73 1,
74 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8xvjGQTYPiAx6gwDC',
75 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnSz1uDimDdPYXzSpyw'
76 ],
77 [
78 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
79 2,
80 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8zpDURx7DzBCkrQE7',
81 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnTryP9tG9TW8GeMBmd'
82 ],
83 [
84 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
85 32,
86 'XVLhHMPHU98es4dbozjVtdWzVrDjtVoYiC9UvKfjKar4LJe',
87 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnT2oqaCDzMEuCDAj1j'
88 ],
89 [
90 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
91 276,
92 'XVLhHMPHU98es4dbozjVtdWzVrDjtVoKj3MnFGMXEFMnvJV',
93 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnTMgJJYfAbsiPsc6Zg'
94 ],
95 [
96 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
97 65591,
98 'XVLhHMPHU98es4dbozjVtdWzVrDjtVozpjdhPQVdt3ghaWw',
99 'TVE26TYGhfLC7tQDno7G8dGtxSkYQn7ryu2W6njw7mT1jmS'
100 ],
101 [
102 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
103 16781933,
104 'XVLhHMPHU98es4dbozjVtdWzVrDjtVqrDUk2vDpkTjPsY73',
105 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnVsw45sDtGHhLi27Qa'
106 ],
107 [
108 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
109 4294967294,
110 'XVLhHMPHU98es4dbozjVtdWzVrDjtV1kAsixQTdMjbWi39u',
111 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnX8tDFQ53itLNqs6vU'
112 ],
113 [
114 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
115 4294967295,
116 'XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi',
117 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnXoy6kSDh6rZzApc69'
118 ],
119 [
120 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY',
121 false,
122 'XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD2gYsjNFQLKYW33DzBm',
123 'TVd2rqMkYL2AyS97NdELcpeiprNBjwLZzuUG5rZnaewsahi'
124 ],
125 [
126 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY',
127 0,
128 'XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD2m4Er6SnvjVLpMWPjR',
129 'TVd2rqMkYL2AyS97NdELcpeiprNBjwRQUBetPbyrvXSTuxU'
130 ],
131 [
132 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY',
133 13371337,
134 'XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD2qwGkhgc48zzcx6Gkr',
135 'TVd2rqMkYL2AyS97NdELcpeiprNBjwVUDvp3vhpXbNhLwJi'
136 ]
137];
138[false, true].forEach(isTestAddress => {
139 const MAX_32_BIT_UNSIGNED_INT = 4294967295;
140 const network = isTestAddress ? ' (test)' : ' (main)';
141 for (const i in testCases) {
142 const testCase = testCases[i];
143 const classicAddress = testCase[0];
144 const tag = testCase[1] !== false ? testCase[1] : false;
145 const xAddress = isTestAddress ? testCase[3] : testCase[2];
146 test(`Converts ${classicAddress}${tag ? ':' + tag : ''} to ${xAddress}${network}`, () => {
147 expect(index_1.classicAddressToXAddress(classicAddress, tag, isTestAddress)).toBe(xAddress);
148 const myClassicAddress = index_1.xAddressToClassicAddress(xAddress);
149 expect(myClassicAddress).toEqual({
150 classicAddress,
151 tag,
152 test: isTestAddress
153 });
154 expect(index_1.isValidXAddress(xAddress)).toBe(true);
155 });
156 }
157 {
158 const classicAddress = 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf';
159 const tag = MAX_32_BIT_UNSIGNED_INT + 1;
160 test(`Converting ${classicAddress}:${tag}${network} throws`, () => {
161 expect(() => {
162 index_1.classicAddressToXAddress(classicAddress, tag, isTestAddress);
163 }).toThrowError(new Error('Invalid tag'));
164 });
165 }
166 {
167 const classicAddress = 'r';
168 test(`Invalid classic address: Converting ${classicAddress}${network} throws`, () => {
169 expect(() => {
170 index_1.classicAddressToXAddress(classicAddress, false, isTestAddress);
171 }).toThrowError(new Error('invalid_input_size: decoded data must have length >= 5'));
172 });
173 }
174 {
175 const highAndLowAccounts = [
176 Buffer.from('00'.repeat(20), 'hex'),
177 Buffer.from('00'.repeat(19) + '01', 'hex'),
178 Buffer.from('01'.repeat(20), 'hex'),
179 Buffer.from('FF'.repeat(20), 'hex')
180 ];
181 highAndLowAccounts.forEach(accountId => {
182 [false, 0, 1, MAX_32_BIT_UNSIGNED_INT].forEach(t => {
183 const tag = t;
184 const xAddress = index_1.encodeXAddress(accountId, tag, isTestAddress);
185 test(`Encoding ${accountId.toString('hex')}${tag ? ':' + tag : ''} to ${xAddress} has expected length`, () => {
186 expect(xAddress.length).toBe(47);
187 });
188 });
189 });
190 }
191});
192{
193 const xAddress = 'XVLhHMPHU98es4dbozjVtdWzVrDjtV5fdx1mHp98tDMoQXa';
194 test(`Invalid X-address (bad checksum): Converting ${xAddress} throws`, () => {
195 expect(() => {
196 index_1.xAddressToClassicAddress(xAddress);
197 }).toThrowError(new Error('checksum_invalid'));
198 });
199}
200{
201 const xAddress = 'dGzKGt8CVpWoa8aWL1k18tAdy9Won3PxynvbbpkAqp3V47g';
202 test(`Invalid X-address (bad prefix): Converting ${xAddress} throws`, () => {
203 expect(() => {
204 index_1.xAddressToClassicAddress(xAddress);
205 }).toThrowError(new Error('Invalid X-address: bad prefix'));
206 });
207}
208test(`Invalid X-address (64-bit tag) throws`, () => {
209 expect(() => {
210 // Encoded from:
211 // {
212 // classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf',
213 // tag: MAX_32_BIT_UNSIGNED_INT + 1
214 // }
215 index_1.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8zeUygYrCgrPh');
216 }).toThrowError('Unsupported X-address');
217});
218test(`Invalid Account ID throws`, () => {
219 expect(() => {
220 index_1.encodeXAddress(Buffer.from('00'.repeat(19), 'hex'), false, false);
221 }).toThrowError('Account ID must be 20 bytes');
222});
223test(`isValidXAddress returns false for invalid X-address`, () => {
224 expect(index_1.isValidXAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8zeUygYrCgrPh')).toBe(false);
225});
226//# sourceMappingURL=index.test.js.map
\No newline at end of file