1+ import assert from 'node:assert/strict' ;
2+
13import { BitGoAPI } from '@bitgo/sdk-api' ;
24import { TestBitGo , TestBitGoAPI } from '@bitgo/sdk-test' ;
35
46import { Bch , Tbch } from '../../../../../src/impl/bch' ;
57
8+ function eq ( actual : string , expected : string ) {
9+ assert . strictEqual ( actual , expected ) ;
10+ }
11+
612describe ( 'Custom BCH Tests' , function ( ) {
713 const bitgo : TestBitGoAPI = TestBitGo . decorate ( BitGoAPI , { env : 'test' } ) ;
814 bitgo . initializeTestVars ( ) ;
@@ -15,145 +21,117 @@ describe('Custom BCH Tests', function () {
1521 // we use mainnet bch so we can reuse the mainnet address examples
1622 it ( 'should correctly convert addresses' , function ( ) {
1723 // P2PKH cashaddr -> cashaddr
18- bch
19- . canonicalAddress ( 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'cashaddr' )
20- . should . equal ( 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' ) ;
21- bch
22- . canonicalAddress ( 'qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'cashaddr' )
23- . should . equal ( 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' ) ;
24-
24+ eq (
25+ bch . canonicalAddress ( 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'cashaddr' ) ,
26+ 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a'
27+ ) ;
28+ eq (
29+ bch . canonicalAddress ( 'qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'cashaddr' ) ,
30+ 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a'
31+ ) ;
2532 // P2PKH base58 -> cashaddr
26- bch
27- . canonicalAddress ( '1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu' , 'cashaddr' )
28- . should . equal ( 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' ) ;
29-
33+ eq (
34+ bch . canonicalAddress ( '1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu' , 'cashaddr' ) ,
35+ 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a'
36+ ) ;
3037 // P2SH cashaddr -> cashaddr
31- bch
32- . canonicalAddress ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' , 'cashaddr' )
33- . should . equal ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' ) ;
34- bch
35- . canonicalAddress ( 'ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' , 'cashaddr' )
36- . should . equal ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' ) ;
37-
38+ eq (
39+ bch . canonicalAddress ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' , 'cashaddr' ) ,
40+ 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq'
41+ ) ;
42+ eq (
43+ bch . canonicalAddress ( 'ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' , 'cashaddr' ) ,
44+ 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq'
45+ ) ;
3846 // P2SH base58 -> cashaddr
39- bch
40- . canonicalAddress ( '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' , 'cashaddr' )
41- . should . equal ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' ) ;
42-
47+ eq (
48+ bch . canonicalAddress ( '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' , 'cashaddr' ) ,
49+ 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq'
50+ ) ;
4351 // no 'bitcoincash:' prefix
44- bch
45- . canonicalAddress ( 'ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' , 'cashaddr' )
46- . should . equal ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' ) ;
47-
52+ eq (
53+ bch . canonicalAddress ( 'ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' , 'cashaddr' ) ,
54+ 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq'
55+ ) ;
4856 // P2PKH cashaddr -> base58
49- bch
50- . canonicalAddress ( 'bitcoincash:qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r' , 'base58' )
51- . should . equal ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' ) ;
52- bch
53- . canonicalAddress ( 'qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r' , 'base58' )
54- . should . equal ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' ) ;
55-
57+ eq (
58+ bch . canonicalAddress ( 'bitcoincash:qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r' , 'base58' ) ,
59+ '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb'
60+ ) ;
61+ eq (
62+ bch . canonicalAddress ( 'qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r' , 'base58' ) ,
63+ '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb'
64+ ) ;
5665 // P2PKH base58 -> base58
57- bch
58- . canonicalAddress ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' , 'base58' )
59- . should . equal ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' ) ;
60-
66+ eq ( bch . canonicalAddress ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' , 'base58' ) , '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' ) ;
6167 // P2SH cashaddr -> base58
62- bch
63- . canonicalAddress ( 'bitcoincash:pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' )
64- . should . equal ( '3LDsS579y7sruadqu11beEJoTjdFiFCdX4' ) ;
65- bch
66- . canonicalAddress ( 'pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' )
67- . should . equal ( '3LDsS579y7sruadqu11beEJoTjdFiFCdX4' ) ;
68-
68+ eq (
69+ bch . canonicalAddress ( 'bitcoincash:pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ,
70+ '3LDsS579y7sruadqu11beEJoTjdFiFCdX4'
71+ ) ;
72+ eq (
73+ bch . canonicalAddress ( 'pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ,
74+ '3LDsS579y7sruadqu11beEJoTjdFiFCdX4'
75+ ) ;
6976 // P2SH base58 -> base58
70- bch
71- . canonicalAddress ( '3LDsS579y7sruadqu11beEJoTjdFiFCdX4' , 'base58' )
72- . should . equal ( '3LDsS579y7sruadqu11beEJoTjdFiFCdX4' ) ;
73-
77+ eq ( bch . canonicalAddress ( '3LDsS579y7sruadqu11beEJoTjdFiFCdX4' , 'base58' ) , '3LDsS579y7sruadqu11beEJoTjdFiFCdX4' ) ;
7478 // undefined version defaults to base58
75- bch
76- . canonicalAddress ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' )
77- . should . equal ( '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' ) ;
78- bch
79- . canonicalAddress ( 'ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' )
80- . should . equal ( '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' ) ;
81-
79+ eq (
80+ bch . canonicalAddress ( 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' ) ,
81+ '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC'
82+ ) ;
83+ eq ( bch . canonicalAddress ( 'ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' ) , '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' ) ;
8284 // all capitalized
83- bch
84- . canonicalAddress ( 'BITCOINCASH:QQQ3728YW0Y47SQN6L2NA30MCW6ZM78DZQRE909M2R' , 'base58' )
85- . should . equal ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' ) ;
86- bch
87- . canonicalAddress ( 'QQQ3728YW0Y47SQN6L2NA30MCW6ZM78DZQRE909M2R' , 'base58' )
88- . should . equal ( '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb' ) ;
89-
85+ eq (
86+ bch . canonicalAddress ( 'BITCOINCASH:QQQ3728YW0Y47SQN6L2NA30MCW6ZM78DZQRE909M2R' , 'base58' ) ,
87+ '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb'
88+ ) ;
89+ eq (
90+ bch . canonicalAddress ( 'QQQ3728YW0Y47SQN6L2NA30MCW6ZM78DZQRE909M2R' , 'base58' ) ,
91+ '16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb'
92+ ) ;
9093 // testnet addresses
91- tbch
92- . canonicalAddress ( '2NCEDmmKNNnqKvnWw7pE3RLzuFe5aHHVy1X' , 'cashaddr' )
93- . should . equal ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' ) ;
94- tbch
95- . canonicalAddress ( 'n3jYBjCzgGNydQwf83Hz6GBzGBhMkKfgL1' , 'cashaddr' )
96- . should . equal ( 'bchtest:qremgr9dr9x5swv82k69qdjzrvdxgkaaesftdp5xla' ) ;
97- tbch
98- . canonicalAddress ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'cashaddr' )
99- . should . equal ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' ) ;
100- tbch
101- . canonicalAddress ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'cashaddr' )
102- . should . equal ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' ) ;
103- tbch
104- . canonicalAddress ( 'prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'base58' )
105- . should . equal ( '2NCEDmmKNNnqKvnWw7pE3RLzuFe5aHHVy1X' ) ;
106- tbch
107- . canonicalAddress ( 'prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'base58' )
108- . should . equal ( '2NCEDmmKNNnqKvnWw7pE3RLzuFe5aHHVy1X' ) ;
109- tbch
110- . canonicalAddress ( 'prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'cashaddr' )
111- . should . equal ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' ) ;
94+ eq (
95+ tbch . canonicalAddress ( '2NCEDmmKNNnqKvnWw7pE3RLzuFe5aHHVy1X' , 'cashaddr' ) ,
96+ 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f'
97+ ) ;
98+ eq (
99+ tbch . canonicalAddress ( 'n3jYBjCzgGNydQwf83Hz6GBzGBhMkKfgL1' , 'cashaddr' ) ,
100+ 'bchtest:qremgr9dr9x5swv82k69qdjzrvdxgkaaesftdp5xla'
101+ ) ;
102+ eq (
103+ tbch . canonicalAddress ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'cashaddr' ) ,
104+ 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f'
105+ ) ;
106+ eq (
107+ tbch . canonicalAddress ( 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'cashaddr' ) ,
108+ 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f'
109+ ) ;
110+ eq (
111+ tbch . canonicalAddress ( 'prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'base58' ) ,
112+ '2NCEDmmKNNnqKvnWw7pE3RLzuFe5aHHVy1X'
113+ ) ;
114+ eq (
115+ tbch . canonicalAddress ( 'prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'base58' ) ,
116+ '2NCEDmmKNNnqKvnWw7pE3RLzuFe5aHHVy1X'
117+ ) ;
118+ eq (
119+ tbch . canonicalAddress ( 'prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f' , 'cashaddr' ) ,
120+ 'bchtest:prgrnjengs555k3cff2s3gqxg3xyyr9uzyh9js5m8f'
121+ ) ;
112122 } ) ;
113123
114124 it ( 'should reject invalid addresses' , function ( ) {
115- // improperly short data segment
116- ( ( ) => {
117- bch . canonicalAddress ( 'bitcoincash:sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ;
118- } ) . should . throw ( ) ;
119-
120- // mismatched data segment (cashaddr)
121- ( ( ) => {
122- bch . canonicalAddress ( 'bitcoincash:yr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ;
123- } ) . should . throw ( ) ;
124-
125- // double prefix
126- ( ( ) => {
127- bch . canonicalAddress ( 'bitcoincash:bitcoincash:pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ;
128- } ) . should . throw ( ) ;
129-
130- // mismatched data segment (base58)
131- ( ( ) => {
132- bch . canonicalAddress ( '3DDsS579y7sruadqu11beEJoTjdFiFCdX4' , 'base58' ) ;
133- } ) . should . throw ( ) ;
134-
135- // improper prefix
136- ( ( ) => {
137- bch . canonicalAddress ( ':qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'base58' ) ;
138- } ) . should . throw ( ) ;
139-
140- ( ( ) => {
141- bch . canonicalAddress ( 'bitcoin:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'base58' ) ;
142- } ) . should . throw ( ) ;
143-
144- // mismatched capitalization
145- ( ( ) => {
146- bch . canonicalAddress ( 'bitcoincash:QPM2Qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'cashaddr' ) ;
147- } ) . should . throw ( ) ;
148-
149- // improper version
150- ( ( ) => {
151- bch . canonicalAddress ( 'bitcoincash:qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r' , 'blah' ) ;
152- } ) . should . throw ( ) ;
153-
154- // undefined address
155- ( ( ) => {
156- bch . canonicalAddress ( undefined as any , 'blah' ) ;
157- } ) . should . throw ( ) ;
125+ assert . throws ( ( ) => bch . canonicalAddress ( 'bitcoincash:sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ) ;
126+ assert . throws ( ( ) => bch . canonicalAddress ( 'bitcoincash:yr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' ) ) ;
127+ assert . throws ( ( ) =>
128+ bch . canonicalAddress ( 'bitcoincash:bitcoincash:pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e' , 'base58' )
129+ ) ;
130+ assert . throws ( ( ) => bch . canonicalAddress ( '3DDsS579y7sruadqu11beEJoTjdFiFCdX4' , 'base58' ) ) ;
131+ assert . throws ( ( ) => bch . canonicalAddress ( ':qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'base58' ) ) ;
132+ assert . throws ( ( ) => bch . canonicalAddress ( 'bitcoin:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'base58' ) ) ;
133+ assert . throws ( ( ) => bch . canonicalAddress ( 'bitcoincash:QPM2Qsznhks23z7629mms6s4cwef74vcwvy22gdx6a' , 'cashaddr' ) ) ;
134+ assert . throws ( ( ) => bch . canonicalAddress ( 'bitcoincash:qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r' , 'blah' ) ) ;
135+ assert . throws ( ( ) => bch . canonicalAddress ( undefined as any , 'blah' ) ) ;
158136 } ) ;
159137} ) ;
0 commit comments