@rosen-bridge/address-codec 0.6.0-c7768928 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/const.d.ts +1 -0
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +2 -1
- package/dist/decoder.d.ts.map +1 -1
- package/dist/decoder.js +5 -4
- package/dist/encoder.d.ts.map +1 -1
- package/dist/encoder.js +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/lib/const.d.ts +1 -0
- package/dist/lib/const.d.ts.map +1 -1
- package/dist/lib/const.js +2 -1
- package/dist/lib/decoder.d.ts.map +1 -1
- package/dist/lib/decoder.js +5 -4
- package/dist/lib/encoder.d.ts.map +1 -1
- package/dist/lib/encoder.js +4 -3
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +4 -1
- package/dist/lib/validator.d.ts.map +1 -1
- package/dist/lib/validator.js +12 -2
- package/dist/tests/decoder.spec.js +15 -2
- package/dist/tests/encoder.spec.js +15 -2
- package/dist/tests/testData.d.ts +2 -1
- package/dist/tests/testData.d.ts.map +1 -1
- package/dist/tests/testData.js +3 -2
- package/dist/tests/validator.spec.js +28 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +12 -2
- package/lib/const.ts +1 -0
- package/lib/decoder.ts +4 -2
- package/lib/encoder.ts +3 -3
- package/lib/index.ts +5 -0
- package/lib/validator.ts +10 -0
- package/package.json +4 -3
- package/tests/decoder.spec.ts +18 -0
- package/tests/encoder.spec.ts +15 -0
- package/tests/testData.ts +4 -2
- package/tests/validator.spec.ts +29 -1
- package/tsconfig.build.tsbuildinfo +1 -1
package/dist/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../lib/validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../lib/validator.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,eAAO,MAAM,eAAe,UAAW,MAAM,WAAW,MAAM,KAAG,OAqChE,CAAC"}
|
package/dist/validator.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BINANCE_CHAIN, BITCOIN_CHAIN, CARDANO_CHAIN, DOGE_CHAIN, DOGE_NETWORK, ERGO_CHAIN, ETHEREUM_CHAIN, } from './const';
|
|
1
|
+
import { BINANCE_CHAIN, BITCOIN_CHAIN, CARDANO_CHAIN, DOGE_CHAIN, DOGE_NETWORK, ERGO_CHAIN, ETHEREUM_CHAIN, RUNES_CHAIN, } from './const';
|
|
2
2
|
import { UnsupportedAddressError, UnsupportedChainError } from './types';
|
|
3
3
|
import * as ergoLib from 'ergo-lib-wasm-nodejs';
|
|
4
4
|
import * as cardanoLib from '@emurgo/cardano-serialization-lib-nodejs';
|
|
@@ -35,8 +35,18 @@ export const validateAddress = (chain, address) => {
|
|
|
35
35
|
throw new UnsupportedAddressError(chain, address);
|
|
36
36
|
}
|
|
37
37
|
return true;
|
|
38
|
+
case RUNES_CHAIN:
|
|
39
|
+
try {
|
|
40
|
+
bitcoinLib.address.toOutputScript(address);
|
|
41
|
+
if (address.slice(0, 4) != 'bc1p')
|
|
42
|
+
throw new UnsupportedAddressError(chain, address);
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
throw new UnsupportedAddressError(chain, address);
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
38
48
|
default:
|
|
39
49
|
throw new UnsupportedChainError(chain);
|
|
40
50
|
}
|
|
41
51
|
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsY0FBYyxFQUNkLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekUsT0FBTyxLQUFLLE9BQU8sTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssVUFBVSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxXQUFXLE1BQU0sUUFBUSxDQUFDO0FBRXRDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFXLEVBQUU7SUFDekUsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxhQUFhO1lBQ2hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxhQUFhO1lBQ2hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTTtnQkFDL0IsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssYUFBYSxDQUFDO1FBQ25CLEtBQUssY0FBYztZQUNqQixJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDckUsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLElBQUksQ0FBQztnQkFDSCxVQUFVLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLFdBQVc7WUFDZCxJQUFJLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTTtvQkFDL0IsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLElBQUksdUJBQXVCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkO1lBQ0UsTUFBTSxJQUFJLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCSU5BTkNFX0NIQUlOLFxuICBCSVRDT0lOX0NIQUlOLFxuICBDQVJEQU5PX0NIQUlOLFxuICBET0dFX0NIQUlOLFxuICBET0dFX05FVFdPUkssXG4gIEVSR09fQ0hBSU4sXG4gIEVUSEVSRVVNX0NIQUlOLFxuICBSVU5FU19DSEFJTixcbn0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEFkZHJlc3NFcnJvciwgVW5zdXBwb3J0ZWRDaGFpbkVycm9yIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyBlcmdvTGliIGZyb20gJ2VyZ28tbGliLXdhc20tbm9kZWpzJztcbmltcG9ydCAqIGFzIGNhcmRhbm9MaWIgZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgKiBhcyBiaXRjb2luTGliIGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0ICogYXMgZXRoZXJldW1MaWIgZnJvbSAnZXRoZXJzJztcblxuLyoqXG4gKiB2YWxpZGF0ZXMgYWRkcmVzcyBvZiBhIGNoYWluXG4gKiBAcGFyYW0gY2hhaW5cbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFkZHJlc3MgPSAoY2hhaW46IHN0cmluZywgYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHN3aXRjaCAoY2hhaW4pIHtcbiAgICBjYXNlIEVSR09fQ0hBSU46XG4gICAgICBlcmdvTGliLkFkZHJlc3MuZnJvbV9iYXNlNTgoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIENBUkRBTk9fQ0hBSU46XG4gICAgICBjYXJkYW5vTGliLkFkZHJlc3MuZnJvbV9iZWNoMzIoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIEJJVENPSU5fQ0hBSU46XG4gICAgICBiaXRjb2luTGliLmFkZHJlc3MuZnJvbUJlY2gzMihhZGRyZXNzKTtcbiAgICAgIGlmIChhZGRyZXNzLnNsaWNlKDAsIDQpICE9ICdiYzFxJylcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQWRkcmVzc0Vycm9yKGNoYWluLCBhZGRyZXNzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgQklOQU5DRV9DSEFJTjpcbiAgICBjYXNlIEVUSEVSRVVNX0NIQUlOOlxuICAgICAgaWYgKGFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPSBhZGRyZXNzIHx8ICFldGhlcmV1bUxpYi5pc0FkZHJlc3MoYWRkcmVzcykpXG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NFcnJvcihjaGFpbiwgYWRkcmVzcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIERPR0VfQ0hBSU46XG4gICAgICB0cnkge1xuICAgICAgICBiaXRjb2luTGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgRE9HRV9ORVRXT1JLKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQWRkcmVzc0Vycm9yKGNoYWluLCBhZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgUlVORVNfQ0hBSU46XG4gICAgICB0cnkge1xuICAgICAgICBiaXRjb2luTGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkcmVzcyk7XG4gICAgICAgIGlmIChhZGRyZXNzLnNsaWNlKDAsIDQpICE9ICdiYzFwJylcbiAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRBZGRyZXNzRXJyb3IoY2hhaW4sIGFkZHJlc3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRBZGRyZXNzRXJyb3IoY2hhaW4sIGFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZENoYWluRXJyb3IoY2hhaW4pO1xuICB9XG59O1xuIl19
|
package/lib/const.ts
CHANGED
package/lib/decoder.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
DOGE_NETWORK,
|
|
7
7
|
ERGO_CHAIN,
|
|
8
8
|
ETHEREUM_CHAIN,
|
|
9
|
+
RUNES_CHAIN,
|
|
9
10
|
} from './const';
|
|
10
11
|
import { UnsupportedAddressError, UnsupportedChainError } from './types';
|
|
11
12
|
import * as ergoLib from 'ergo-lib-wasm-nodejs';
|
|
@@ -27,12 +28,13 @@ export const decodeAddress = (
|
|
|
27
28
|
switch (chain) {
|
|
28
29
|
case ERGO_CHAIN:
|
|
29
30
|
return ergoLib.Address.from_public_key(
|
|
30
|
-
Buffer.from(encodedAddress, 'hex')
|
|
31
|
+
Uint8Array.from(Buffer.from(encodedAddress, 'hex'))
|
|
31
32
|
).to_base58(ergoLib.NetworkPrefix.Mainnet);
|
|
32
33
|
case CARDANO_CHAIN:
|
|
33
34
|
return cardanoLib.Address.from_bytes(
|
|
34
|
-
Buffer.from(encodedAddress, 'hex')
|
|
35
|
+
Uint8Array.from(Buffer.from(encodedAddress, 'hex'))
|
|
35
36
|
).to_bech32();
|
|
37
|
+
case RUNES_CHAIN:
|
|
36
38
|
case BITCOIN_CHAIN:
|
|
37
39
|
return bitcoinLib.address.fromOutputScript(
|
|
38
40
|
Buffer.from(encodedAddress, 'hex')
|
package/lib/encoder.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
DOGE_NETWORK,
|
|
7
7
|
ERGO_CHAIN,
|
|
8
8
|
ETHEREUM_CHAIN,
|
|
9
|
+
RUNES_CHAIN,
|
|
9
10
|
} from './const';
|
|
10
11
|
import { UnsupportedAddressError, UnsupportedChainError } from './types';
|
|
11
12
|
import * as ergoLib from 'ergo-lib-wasm-nodejs';
|
|
@@ -31,10 +32,9 @@ export const encodeAddress = (chain: string, address: string): string => {
|
|
|
31
32
|
cardanoLib.Address.from_bech32(address).to_bytes()
|
|
32
33
|
).toString('hex');
|
|
33
34
|
break;
|
|
35
|
+
case RUNES_CHAIN:
|
|
34
36
|
case BITCOIN_CHAIN:
|
|
35
|
-
encoded =
|
|
36
|
-
bitcoinLib.address.toOutputScript(address)
|
|
37
|
-
).toString('hex');
|
|
37
|
+
encoded = bitcoinLib.address.toOutputScript(address).toString('hex');
|
|
38
38
|
break;
|
|
39
39
|
case BINANCE_CHAIN:
|
|
40
40
|
case ETHEREUM_CHAIN:
|
package/lib/index.ts
CHANGED
package/lib/validator.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
DOGE_NETWORK,
|
|
7
7
|
ERGO_CHAIN,
|
|
8
8
|
ETHEREUM_CHAIN,
|
|
9
|
+
RUNES_CHAIN,
|
|
9
10
|
} from './const';
|
|
10
11
|
import { UnsupportedAddressError, UnsupportedChainError } from './types';
|
|
11
12
|
import * as ergoLib from 'ergo-lib-wasm-nodejs';
|
|
@@ -43,6 +44,15 @@ export const validateAddress = (chain: string, address: string): boolean => {
|
|
|
43
44
|
throw new UnsupportedAddressError(chain, address);
|
|
44
45
|
}
|
|
45
46
|
return true;
|
|
47
|
+
case RUNES_CHAIN:
|
|
48
|
+
try {
|
|
49
|
+
bitcoinLib.address.toOutputScript(address);
|
|
50
|
+
if (address.slice(0, 4) != 'bc1p')
|
|
51
|
+
throw new UnsupportedAddressError(chain, address);
|
|
52
|
+
} catch (e) {
|
|
53
|
+
throw new UnsupportedAddressError(chain, address);
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
46
56
|
default:
|
|
47
57
|
throw new UnsupportedChainError(chain);
|
|
48
58
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/address-codec",
|
|
3
|
-
"version": "0.6.0
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "A Typescript package for encoding and decoding of addresses in Rosen bridge supported chains",
|
|
5
5
|
"repository": "https://github.com/rosen-bridge/utils",
|
|
6
6
|
"license": "GPL-3.0",
|
|
@@ -33,9 +33,10 @@
|
|
|
33
33
|
"node": ">=20.11.0"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@emurgo/cardano-serialization-lib-nodejs": "^
|
|
36
|
+
"@emurgo/cardano-serialization-lib-nodejs": "^13.2.1",
|
|
37
37
|
"bitcoinjs-lib": "^6.1.5",
|
|
38
38
|
"ergo-lib-wasm-nodejs": "^0.24.1",
|
|
39
|
-
"ethers": "^6.13.2"
|
|
39
|
+
"ethers": "^6.13.2",
|
|
40
|
+
"tiny-secp256k1": "^2.2.3"
|
|
40
41
|
}
|
|
41
42
|
}
|
package/tests/decoder.spec.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
DOGE_CHAIN,
|
|
11
11
|
ERGO_CHAIN,
|
|
12
12
|
ETHEREUM_CHAIN,
|
|
13
|
+
RUNES_CHAIN,
|
|
13
14
|
} from '../lib/const';
|
|
14
15
|
|
|
15
16
|
describe('decodeAddress', () => {
|
|
@@ -110,4 +111,21 @@ describe('decodeAddress', () => {
|
|
|
110
111
|
const res = decodeAddress(DOGE_CHAIN, testData.encodedDogeAddress);
|
|
111
112
|
expect(res).toEqual(testData.dogeAddress);
|
|
112
113
|
});
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @target `decodeAddress` should decode Runes address successfully
|
|
117
|
+
* @dependencies
|
|
118
|
+
* @scenario
|
|
119
|
+
* - run test
|
|
120
|
+
* - check returned value
|
|
121
|
+
* @expected
|
|
122
|
+
* - it should be address in hex format
|
|
123
|
+
*/
|
|
124
|
+
it('should decode Runes address successfully', () => {
|
|
125
|
+
const res = decodeAddress(
|
|
126
|
+
RUNES_CHAIN,
|
|
127
|
+
testData.encodedTaprootBitcoinAddress
|
|
128
|
+
);
|
|
129
|
+
expect(res).toEqual(testData.taprootBitcoinAddress);
|
|
130
|
+
});
|
|
113
131
|
});
|
package/tests/encoder.spec.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
DOGE_CHAIN,
|
|
11
11
|
ERGO_CHAIN,
|
|
12
12
|
ETHEREUM_CHAIN,
|
|
13
|
+
RUNES_CHAIN,
|
|
13
14
|
} from '../lib/const';
|
|
14
15
|
|
|
15
16
|
describe('encodeAddress', () => {
|
|
@@ -125,4 +126,18 @@ describe('encodeAddress', () => {
|
|
|
125
126
|
const res = encodeAddress(DOGE_CHAIN, testData.dogeAddress);
|
|
126
127
|
expect(res).toEqual(testData.encodedDogeAddress);
|
|
127
128
|
});
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @target `encodeAddress` should encode Runes address successfully
|
|
132
|
+
* @dependencies
|
|
133
|
+
* @scenario
|
|
134
|
+
* - run test
|
|
135
|
+
* - check returned value
|
|
136
|
+
* @expected
|
|
137
|
+
* - it should be output script of given address in hex
|
|
138
|
+
*/
|
|
139
|
+
it('should encode Runes address successfully', () => {
|
|
140
|
+
const res = encodeAddress(RUNES_CHAIN, testData.taprootBitcoinAddress);
|
|
141
|
+
expect(res).toEqual(testData.encodedTaprootBitcoinAddress);
|
|
142
|
+
});
|
|
128
143
|
});
|
package/tests/testData.ts
CHANGED
|
@@ -15,8 +15,10 @@ export const invalidCardanoAddress =
|
|
|
15
15
|
export const bitcoinAddress = 'bc1qkgp89fjerymm5ltg0hygnumr0m2qa7n22gyw6h';
|
|
16
16
|
export const invalidBitcoinAddress =
|
|
17
17
|
'bc1qkgp89fjerymm5ltg0hygnumr0m2qa7n22gyw6';
|
|
18
|
-
export const
|
|
19
|
-
'
|
|
18
|
+
export const taprootBitcoinAddress =
|
|
19
|
+
'bc1px0ad45qrfwc20yfd9wljeytrvfa6tmrcxv6pgxze2svvx00tp7mstj5rpk';
|
|
20
|
+
export const encodedTaprootBitcoinAddress =
|
|
21
|
+
'512033fadad0034bb0a7912d2bbf2c9163627ba5ec7833341418595418c33deb0fb7';
|
|
20
22
|
export const encodedBitcoinAddress =
|
|
21
23
|
'0014b20272a6591937ba7d687dc889f3637ed40efa6a';
|
|
22
24
|
|
package/tests/validator.spec.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
DOGE_CHAIN,
|
|
11
11
|
ERGO_CHAIN,
|
|
12
12
|
ETHEREUM_CHAIN,
|
|
13
|
+
RUNES_CHAIN,
|
|
13
14
|
} from '../lib/const';
|
|
14
15
|
|
|
15
16
|
describe('validateAddress', () => {
|
|
@@ -90,7 +91,7 @@ describe('validateAddress', () => {
|
|
|
90
91
|
*/
|
|
91
92
|
it('should throw error for Bitcoin taproot address', () => {
|
|
92
93
|
expect(() => {
|
|
93
|
-
validateAddress(BITCOIN_CHAIN, testData.
|
|
94
|
+
validateAddress(BITCOIN_CHAIN, testData.taprootBitcoinAddress);
|
|
94
95
|
}).toThrow(UnsupportedAddressError);
|
|
95
96
|
});
|
|
96
97
|
|
|
@@ -203,4 +204,31 @@ describe('validateAddress', () => {
|
|
|
203
204
|
validateAddress(DOGE_CHAIN, testData.invalidDogeAddress);
|
|
204
205
|
}).toThrow(UnsupportedAddressError);
|
|
205
206
|
});
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* @target `validateAddress` should validate Runes address successfully
|
|
210
|
+
* @dependencies
|
|
211
|
+
* @scenario
|
|
212
|
+
* - run test
|
|
213
|
+
* @expected
|
|
214
|
+
* - to validate correct Runes address
|
|
215
|
+
*/
|
|
216
|
+
it('should validate Runes address successfully', () => {
|
|
217
|
+
const res = validateAddress(RUNES_CHAIN, testData.taprootBitcoinAddress);
|
|
218
|
+
expect(res).toEqual(true);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* @target `validateAddress` should throw error for wrong Runes address
|
|
223
|
+
* @dependencies
|
|
224
|
+
* @scenario
|
|
225
|
+
* - run test
|
|
226
|
+
* @expected
|
|
227
|
+
* - to throw error for wrong Runes address
|
|
228
|
+
*/
|
|
229
|
+
it('should throw error for wrong Runes address', () => {
|
|
230
|
+
expect(() => {
|
|
231
|
+
validateAddress(RUNES_CHAIN, testData.bitcoinAddress);
|
|
232
|
+
}).toThrow(UnsupportedAddressError);
|
|
233
|
+
});
|
|
206
234
|
});
|