@vbyte/btc-dev 1.1.3 → 1.1.4

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.
Files changed (66) hide show
  1. package/dist/const.d.ts +16 -0
  2. package/dist/const.js +22 -6
  3. package/dist/lib/address/api.d.ts +4 -0
  4. package/dist/lib/address/api.js +32 -0
  5. package/dist/lib/address/encode.d.ts +3 -3
  6. package/dist/lib/address/index.d.ts +1 -15
  7. package/dist/lib/address/index.js +1 -16
  8. package/dist/lib/address/p2pkh.d.ts +14 -7
  9. package/dist/lib/address/p2pkh.js +34 -16
  10. package/dist/lib/address/p2sh.d.ts +14 -7
  11. package/dist/lib/address/p2sh.js +33 -14
  12. package/dist/lib/address/p2tr.d.ts +14 -5
  13. package/dist/lib/address/p2tr.js +34 -11
  14. package/dist/lib/address/p2wpkh.d.ts +14 -7
  15. package/dist/lib/address/p2wpkh.js +32 -15
  16. package/dist/lib/address/p2wsh.d.ts +14 -7
  17. package/dist/lib/address/p2wsh.js +31 -14
  18. package/dist/lib/address/script.d.ts +2 -5
  19. package/dist/lib/address/script.js +12 -12
  20. package/dist/lib/address/util.d.ts +3 -4
  21. package/dist/lib/address/util.js +10 -14
  22. package/dist/lib/script/decode.d.ts +2 -0
  23. package/dist/lib/script/decode.js +8 -1
  24. package/dist/lib/script/index.d.ts +2 -1
  25. package/dist/lib/script/index.js +2 -1
  26. package/dist/lib/script/lock.d.ts +12 -0
  27. package/dist/lib/script/lock.js +52 -0
  28. package/dist/lib/tx/util.d.ts +1 -6
  29. package/dist/lib/tx/util.js +1 -27
  30. package/dist/lib/witness/parse.js +11 -9
  31. package/dist/main.cjs +313 -191
  32. package/dist/main.cjs.map +1 -1
  33. package/dist/module.mjs +313 -191
  34. package/dist/module.mjs.map +1 -1
  35. package/dist/package.json +1 -1
  36. package/dist/script.js +8 -8
  37. package/dist/script.js.map +1 -1
  38. package/dist/types/address.d.ts +6 -10
  39. package/dist/types/index.d.ts +1 -0
  40. package/dist/types/index.js +1 -0
  41. package/dist/types/meta.d.ts +0 -14
  42. package/dist/types/script.d.ts +15 -0
  43. package/dist/types/script.js +1 -0
  44. package/dist/types/witness.d.ts +7 -8
  45. package/package.json +1 -1
  46. package/src/const.ts +25 -7
  47. package/src/lib/address/api.ts +50 -0
  48. package/src/lib/address/encode.ts +9 -9
  49. package/src/lib/address/index.ts +1 -18
  50. package/src/lib/address/p2pkh.ts +54 -25
  51. package/src/lib/address/p2sh.ts +55 -24
  52. package/src/lib/address/p2tr.ts +59 -19
  53. package/src/lib/address/p2wpkh.ts +53 -26
  54. package/src/lib/address/p2wsh.ts +53 -26
  55. package/src/lib/address/script.ts +14 -14
  56. package/src/lib/address/util.ts +16 -31
  57. package/src/lib/script/decode.ts +11 -1
  58. package/src/lib/script/index.ts +3 -1
  59. package/src/lib/script/lock.ts +73 -0
  60. package/src/lib/tx/util.ts +3 -41
  61. package/src/lib/witness/parse.ts +17 -13
  62. package/src/types/address.ts +7 -11
  63. package/src/types/index.ts +1 -0
  64. package/src/types/meta.ts +0 -18
  65. package/src/types/script.ts +18 -0
  66. package/src/types/witness.ts +8 -8
package/dist/const.d.ts CHANGED
@@ -9,6 +9,22 @@ export declare const DEFAULT: {
9
9
  };
10
10
  export declare const TAPLEAF_VERSIONS: number[];
11
11
  export declare const TAPLEAF_DEFAULT_VERSION = 192;
12
+ export declare const LOCK_SCRIPT_TYPE: {
13
+ readonly P2PKH: "p2pkh";
14
+ readonly P2SH: "p2sh";
15
+ readonly P2WPKH: "p2wpkh";
16
+ readonly P2WSH: "p2wsh";
17
+ readonly P2TR: "p2tr";
18
+ readonly OPRETURN: "opreturn";
19
+ };
20
+ export declare const SPEND_SCRIPT_TYPE: {
21
+ readonly P2PKH: "p2pkh";
22
+ readonly P2SH: "p2sh";
23
+ readonly P2WPKH: "p2wpkh";
24
+ readonly P2WSH: "p2wsh";
25
+ readonly P2TR: "p2tr";
26
+ readonly P2TS: "p2ts";
27
+ };
12
28
  export declare const LOCK_SCRIPT_REGEX: Record<string, RegExp>;
13
29
  export declare const SCRIPT_INT_KEY = "";
14
30
  export declare const TX_SIZE: {
package/dist/const.js CHANGED
@@ -16,13 +16,29 @@ export const TAPLEAF_VERSIONS = [
16
16
  0xbe
17
17
  ];
18
18
  export const TAPLEAF_DEFAULT_VERSION = 0xc0;
19
+ export const LOCK_SCRIPT_TYPE = {
20
+ P2PKH: 'p2pkh',
21
+ P2SH: 'p2sh',
22
+ P2WPKH: 'p2wpkh',
23
+ P2WSH: 'p2wsh',
24
+ P2TR: 'p2tr',
25
+ OPRETURN: 'opreturn',
26
+ };
27
+ export const SPEND_SCRIPT_TYPE = {
28
+ P2PKH: 'p2pkh',
29
+ P2SH: 'p2sh',
30
+ P2WPKH: 'p2wpkh',
31
+ P2WSH: 'p2wsh',
32
+ P2TR: 'p2tr',
33
+ P2TS: 'p2ts',
34
+ };
19
35
  export const LOCK_SCRIPT_REGEX = {
20
- 'p2pkh': /^76a914[0-9a-f]{40}88ac$/i,
21
- 'p2sh': /^a914[0-9a-f]{40}87$/i,
22
- 'p2wpkh': /^0014[0-9a-f]{40}$/i,
23
- 'p2wsh': /^0020[0-9a-f]{64}$/i,
24
- 'p2tr': /^5120[0-9a-f]{64}$/i,
25
- 'opreturn': /^6a[0-9a-f]{2,}$/i,
36
+ [LOCK_SCRIPT_TYPE.P2PKH]: /^76a914[0-9a-f]{40}88ac$/i,
37
+ [LOCK_SCRIPT_TYPE.P2SH]: /^a914[0-9a-f]{40}87$/i,
38
+ [LOCK_SCRIPT_TYPE.P2WPKH]: /^0014[0-9a-f]{40}$/i,
39
+ [LOCK_SCRIPT_TYPE.P2WSH]: /^0020[0-9a-f]{64}$/i,
40
+ [LOCK_SCRIPT_TYPE.P2TR]: /^5120[0-9a-f]{64}$/i,
41
+ [LOCK_SCRIPT_TYPE.OPRETURN]: /^6a[0-9a-f]{2,}$/i,
26
42
  };
27
43
  export const SCRIPT_INT_KEY = '';
28
44
  export const TX_SIZE = {
@@ -0,0 +1,4 @@
1
+ import { Bytes } from '@vbyte/buff';
2
+ import type { AddressInfo, ChainNetwork } from '../../types/index.js';
3
+ export declare function create_address(script: Bytes, network?: ChainNetwork): string;
4
+ export declare function parse_address(address: string): AddressInfo;
@@ -0,0 +1,32 @@
1
+ import { Buff } from '@vbyte/buff';
2
+ import { get_lock_script_type } from '../../lib/script/lock.js';
3
+ import { get_address_info } from './util.js';
4
+ import { LOCK_SCRIPT_TYPE } from '../../const.js';
5
+ import { P2PKH } from './p2pkh.js';
6
+ import { P2SH } from './p2sh.js';
7
+ import { P2TR } from './p2tr.js';
8
+ import { P2WPKH } from './p2wpkh.js';
9
+ import { P2WSH } from './p2wsh.js';
10
+ export function create_address(script, network = 'main') {
11
+ const bytes = Buff.bytes(script);
12
+ const type = get_lock_script_type(bytes);
13
+ if (type === null)
14
+ throw new Error('unrecognized script type: ' + bytes.hex);
15
+ switch (type) {
16
+ case LOCK_SCRIPT_TYPE.P2PKH:
17
+ return P2PKH.create_address(script, network);
18
+ case LOCK_SCRIPT_TYPE.P2SH:
19
+ return P2SH.create_address(script, network);
20
+ case LOCK_SCRIPT_TYPE.P2WPKH:
21
+ return P2WPKH.create_address(script, network);
22
+ case LOCK_SCRIPT_TYPE.P2WSH:
23
+ return P2WSH.create_address(script, network);
24
+ case LOCK_SCRIPT_TYPE.P2TR:
25
+ return P2TR.create_address(script, network);
26
+ default:
27
+ throw new Error('unrecognized script type: ' + type);
28
+ }
29
+ }
30
+ export function parse_address(address) {
31
+ return get_address_info(address);
32
+ }
@@ -1,3 +1,3 @@
1
- import type { DecodedAddress } from '../../types/address.js';
2
- export declare function decode_address(address: string): DecodedAddress;
3
- export declare function encode_address(config: DecodedAddress): string;
1
+ import type { EncoderConfig } from '../../types/address.js';
2
+ export declare function decode_address(address: string): EncoderConfig;
3
+ export declare function encode_address(config: EncoderConfig): string;
@@ -1,20 +1,6 @@
1
- import { P2PKH as P2PKH_TOOL } from './p2pkh.js';
2
- import { P2SH as P2SH_TOOL } from './p2sh.js';
3
- import { P2WPKH as P2WPKH_TOOL } from './p2wpkh.js';
4
- import { P2WSH as P2WSH_TOOL } from './p2wsh.js';
5
- import { P2TR as P2TR_TOOL } from './p2tr.js';
6
- import { parse_address } from './util.js';
7
1
  export { P2PKH } from './p2pkh.js';
8
2
  export { P2SH } from './p2sh.js';
9
3
  export { P2WPKH } from './p2wpkh.js';
10
4
  export { P2WSH } from './p2wsh.js';
11
5
  export { P2TR } from './p2tr.js';
12
- export { parse_address } from './util.js';
13
- export declare namespace AddressTool {
14
- const P2PKH: typeof P2PKH_TOOL;
15
- const P2SH: typeof P2SH_TOOL;
16
- const P2WPKH: typeof P2WPKH_TOOL;
17
- const P2WSH: typeof P2WSH_TOOL;
18
- const P2TR: typeof P2TR_TOOL;
19
- const parse: typeof parse_address;
20
- }
6
+ export * from './api.js';
@@ -1,21 +1,6 @@
1
- import { P2PKH as P2PKH_TOOL } from './p2pkh.js';
2
- import { P2SH as P2SH_TOOL } from './p2sh.js';
3
- import { P2WPKH as P2WPKH_TOOL } from './p2wpkh.js';
4
- import { P2WSH as P2WSH_TOOL } from './p2wsh.js';
5
- import { P2TR as P2TR_TOOL } from './p2tr.js';
6
- import { parse_address } from './util.js';
7
1
  export { P2PKH } from './p2pkh.js';
8
2
  export { P2SH } from './p2sh.js';
9
3
  export { P2WPKH } from './p2wpkh.js';
10
4
  export { P2WSH } from './p2wsh.js';
11
5
  export { P2TR } from './p2tr.js';
12
- export { parse_address } from './util.js';
13
- export var AddressTool;
14
- (function (AddressTool) {
15
- AddressTool.P2PKH = P2PKH_TOOL;
16
- AddressTool.P2SH = P2SH_TOOL;
17
- AddressTool.P2WPKH = P2WPKH_TOOL;
18
- AddressTool.P2WSH = P2WSH_TOOL;
19
- AddressTool.P2TR = P2TR_TOOL;
20
- AddressTool.parse = parse_address;
21
- })(AddressTool || (AddressTool = {}));
6
+ export * from './api.js';
@@ -1,10 +1,17 @@
1
- import type { AddressData, ChainNetwork } from '../../types/index.js';
1
+ import { Buff, Bytes } from '@vbyte/buff';
2
+ import type { AddressInfo, ChainNetwork } from '../../types/index.js';
2
3
  export declare namespace P2PKH {
3
- const create: typeof create_p2pkh_address;
4
- const encode: typeof encode_p2pkh_address;
5
- const decode: typeof decode_p2pkh_address;
4
+ const create_address: typeof create_p2pkh_address;
5
+ const create_script: typeof create_p2pkh_script;
6
+ const encode_address: typeof encode_p2pkh_address;
7
+ const encode_script: typeof encode_p2pkh_script;
8
+ const decode_address: typeof decode_p2pkh_address;
9
+ const decode_script: typeof decode_p2pkh_script;
6
10
  }
7
- declare function create_p2pkh_address(script: string | Uint8Array, network?: ChainNetwork): string;
8
- declare function encode_p2pkh_address(pk_hash: string | Uint8Array, network?: ChainNetwork): string;
9
- declare function decode_p2pkh_address(address: string): AddressData;
11
+ declare function create_p2pkh_address(pubkey: Bytes, network?: ChainNetwork): string;
12
+ declare function create_p2pkh_script(pubkey: Bytes): Buff;
13
+ declare function encode_p2pkh_script(pk_hash: Bytes): Buff;
14
+ declare function encode_p2pkh_address(script: Bytes, network?: ChainNetwork): string;
15
+ declare function decode_p2pkh_address(address: string): AddressInfo;
16
+ declare function decode_p2pkh_script(script: Bytes): Buff;
10
17
  export {};
@@ -2,32 +2,50 @@ import { Buff } from '@vbyte/buff';
2
2
  import { Assert } from '@vbyte/micro-lib';
3
3
  import { hash160 } from '@vbyte/micro-lib/hash';
4
4
  import { encode_address } from './encode.js';
5
- import { get_address_config, parse_address } from './util.js';
6
- const ADDR_TYPE = 'p2pkh';
5
+ import { is_p2pkh_script } from '../../lib/script/lock.js';
6
+ import { LOCK_SCRIPT_TYPE } from '../../const.js';
7
+ import { get_address_config, get_address_info } from './util.js';
8
+ const ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2PKH;
7
9
  export var P2PKH;
8
10
  (function (P2PKH) {
9
- P2PKH.create = create_p2pkh_address;
10
- P2PKH.encode = encode_p2pkh_address;
11
- P2PKH.decode = decode_p2pkh_address;
11
+ P2PKH.create_address = create_p2pkh_address;
12
+ P2PKH.create_script = create_p2pkh_script;
13
+ P2PKH.encode_address = encode_p2pkh_address;
14
+ P2PKH.encode_script = encode_p2pkh_script;
15
+ P2PKH.decode_address = decode_p2pkh_address;
16
+ P2PKH.decode_script = decode_p2pkh_script;
12
17
  })(P2PKH || (P2PKH = {}));
13
- function create_p2pkh_address(script, network = 'main') {
14
- const bytes = Buff.bytes(script);
18
+ function create_p2pkh_address(pubkey, network = 'main') {
19
+ const script = create_p2pkh_script(pubkey);
20
+ return encode_p2pkh_address(script, network);
21
+ }
22
+ function create_p2pkh_script(pubkey) {
23
+ const bytes = Buff.bytes(pubkey);
24
+ Assert.size(bytes, 33, 'invalid pubkey size');
15
25
  const hash = hash160(bytes);
16
- return encode_p2pkh_address(hash, network);
26
+ return encode_p2pkh_script(hash);
27
+ }
28
+ function encode_p2pkh_script(pk_hash) {
29
+ return Buff.join(['76a914', pk_hash, '88ac']);
17
30
  }
18
- function encode_p2pkh_address(pk_hash, network = 'main') {
19
- const bytes = Buff.bytes(pk_hash);
20
- const config = get_address_config(network, ADDR_TYPE);
21
- Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}`);
22
- Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}`);
31
+ function encode_p2pkh_address(script, network = 'main') {
32
+ const pk_hash = decode_p2pkh_script(script);
33
+ const config = get_address_config(network, ADDRESS_TYPE);
34
+ Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}`);
35
+ Assert.size(pk_hash, config.size, `invalid payload size: ${pk_hash.length} !== ${config.size}`);
23
36
  return encode_address({
24
- data: bytes,
37
+ data: pk_hash,
25
38
  format: 'base58',
26
39
  version: config.version
27
40
  });
28
41
  }
29
42
  function decode_p2pkh_address(address) {
30
- const parsed = parse_address(address);
31
- Assert.ok(parsed.type === 'p2pkh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`);
43
+ const parsed = get_address_info(address);
44
+ Assert.ok(parsed.type === 'p2pkh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`);
32
45
  return parsed;
33
46
  }
47
+ function decode_p2pkh_script(script) {
48
+ const bytes = Buff.bytes(script);
49
+ Assert.ok(is_p2pkh_script(script), `invalid p2pkh script`);
50
+ return bytes.slice(3, 23);
51
+ }
@@ -1,10 +1,17 @@
1
- import type { ChainNetwork, AddressData } from '../../types/index.js';
1
+ import { Buff, Bytes } from '@vbyte/buff';
2
+ import type { AddressInfo, ChainNetwork } from '../../types/index.js';
2
3
  export declare namespace P2SH {
3
- const create: typeof create_p2sh_address;
4
- const encode: typeof encode_p2sh_address;
5
- const decode: typeof decode_p2sh_address;
4
+ const create_address: typeof create_p2sh_address;
5
+ const create_script: typeof create_p2sh_script;
6
+ const encode_address: typeof encode_p2sh_address;
7
+ const encode_script: typeof encode_p2sh_script;
8
+ const decode_address: typeof decode_p2sh_address;
9
+ const decode_script: typeof decode_p2sh_script;
6
10
  }
7
- declare function create_p2sh_address(script: string | Uint8Array, network?: ChainNetwork): string;
8
- declare function encode_p2sh_address(script_hash: string | Uint8Array, network?: ChainNetwork): string;
9
- declare function decode_p2sh_address(address: string): AddressData;
11
+ declare function create_p2sh_address(script: Bytes, network?: ChainNetwork): string;
12
+ declare function create_p2sh_script(script: Bytes): Buff;
13
+ declare function encode_p2sh_script(script_hash: Bytes): Buff;
14
+ declare function encode_p2sh_address(script_pk: Bytes, network?: ChainNetwork): string;
15
+ declare function decode_p2sh_address(address: string): AddressInfo;
16
+ declare function decode_p2sh_script(script: Bytes): Buff;
10
17
  export {};
@@ -2,32 +2,51 @@ import { Buff } from '@vbyte/buff';
2
2
  import { Assert } from '@vbyte/micro-lib';
3
3
  import { hash160 } from '@vbyte/micro-lib/hash';
4
4
  import { encode_address } from './encode.js';
5
- import { get_address_config, parse_address } from './util.js';
6
- const ADDR_TYPE = 'p2sh';
5
+ import { is_p2sh_script } from '../../lib/script/lock.js';
6
+ import { LOCK_SCRIPT_TYPE } from '../../const.js';
7
+ import { get_address_config, get_address_info } from './util.js';
8
+ const ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2SH;
7
9
  export var P2SH;
8
10
  (function (P2SH) {
9
- P2SH.create = create_p2sh_address;
10
- P2SH.encode = encode_p2sh_address;
11
- P2SH.decode = decode_p2sh_address;
11
+ P2SH.create_address = create_p2sh_address;
12
+ P2SH.create_script = create_p2sh_script;
13
+ P2SH.encode_address = encode_p2sh_address;
14
+ P2SH.encode_script = encode_p2sh_script;
15
+ P2SH.decode_address = decode_p2sh_address;
16
+ P2SH.decode_script = decode_p2sh_script;
12
17
  })(P2SH || (P2SH = {}));
13
18
  function create_p2sh_address(script, network = 'main') {
14
19
  const bytes = Buff.bytes(script);
15
20
  const hash = hash160(bytes);
16
- return encode_p2sh_address(hash, network);
21
+ const p2sh_script = encode_p2sh_script(hash);
22
+ return encode_p2sh_address(p2sh_script, network);
17
23
  }
18
- function encode_p2sh_address(script_hash, network = 'main') {
19
- const bytes = Buff.bytes(script_hash);
20
- const config = get_address_config(network, ADDR_TYPE);
21
- Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}`);
22
- Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}`);
24
+ function create_p2sh_script(script) {
25
+ const bytes = Buff.bytes(script);
26
+ const hash = hash160(bytes);
27
+ return encode_p2sh_script(hash);
28
+ }
29
+ function encode_p2sh_script(script_hash) {
30
+ return Buff.join(['a914', script_hash, '87']);
31
+ }
32
+ function encode_p2sh_address(script_pk, network = 'main') {
33
+ const script_hash = decode_p2sh_script(script_pk);
34
+ const config = get_address_config(network, ADDRESS_TYPE);
35
+ Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}`);
36
+ Assert.size(script_hash, config.size, `invalid payload size: ${script_hash.length} !== ${config.size}`);
23
37
  return encode_address({
24
- data: bytes,
38
+ data: script_hash,
25
39
  format: 'base58',
26
40
  version: config.version
27
41
  });
28
42
  }
29
43
  function decode_p2sh_address(address) {
30
- const parsed = parse_address(address);
31
- Assert.ok(parsed.type === 'p2sh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`);
44
+ const parsed = get_address_info(address);
45
+ Assert.ok(parsed.type === 'p2sh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`);
32
46
  return parsed;
33
47
  }
48
+ function decode_p2sh_script(script) {
49
+ Assert.ok(is_p2sh_script(script), `invalid p2sh script`);
50
+ const bytes = Buff.bytes(script);
51
+ return bytes.slice(2, 22);
52
+ }
@@ -1,8 +1,17 @@
1
- import type { ChainNetwork, AddressData } from '../../types/index.js';
1
+ import { Buff, Bytes } from '@vbyte/buff';
2
+ import type { AddressInfo, ChainNetwork } from '../../types/index.js';
2
3
  export declare namespace P2TR {
3
- const encode: typeof encode_p2tr_address;
4
- const decode: typeof decode_p2tr_address;
4
+ const create_address: typeof create_p2tr_address;
5
+ const create_script: typeof create_p2tr_script;
6
+ const encode_address: typeof encode_p2tr_address;
7
+ const encode_script: typeof encode_p2tr_script;
8
+ const decode_address: typeof decode_p2tr_address;
9
+ const decode_script: typeof decode_p2tr_script;
5
10
  }
6
- declare function encode_p2tr_address(pubkey: string | Uint8Array, network?: ChainNetwork): string;
7
- declare function decode_p2tr_address(address: string): AddressData;
11
+ declare function create_p2tr_address(pubkey: Bytes, network?: ChainNetwork): string;
12
+ declare function create_p2tr_script(pubkey: Bytes): Buff;
13
+ declare function encode_p2tr_script(pubkey: Bytes): Buff;
14
+ declare function encode_p2tr_address(script_pk: Bytes, network?: ChainNetwork): string;
15
+ declare function decode_p2tr_address(address: string): AddressInfo;
16
+ declare function decode_p2tr_script(script: Bytes): Buff;
8
17
  export {};
@@ -1,26 +1,49 @@
1
1
  import { Buff } from '@vbyte/buff';
2
2
  import { Assert } from '@vbyte/micro-lib';
3
3
  import { encode_address } from './encode.js';
4
- import { get_address_config, parse_address } from './util.js';
5
- const ADDR_TYPE = 'p2tr';
4
+ import { is_p2tr_script } from '../../lib/script/lock.js';
5
+ import { LOCK_SCRIPT_TYPE } from '../../const.js';
6
+ import { get_address_config, get_address_info } from './util.js';
7
+ const ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2TR;
6
8
  export var P2TR;
7
9
  (function (P2TR) {
8
- P2TR.encode = encode_p2tr_address;
9
- P2TR.decode = decode_p2tr_address;
10
+ P2TR.create_address = create_p2tr_address;
11
+ P2TR.create_script = create_p2tr_script;
12
+ P2TR.encode_address = encode_p2tr_address;
13
+ P2TR.encode_script = encode_p2tr_script;
14
+ P2TR.decode_address = decode_p2tr_address;
15
+ P2TR.decode_script = decode_p2tr_script;
10
16
  })(P2TR || (P2TR = {}));
11
- function encode_p2tr_address(pubkey, network = 'main') {
17
+ function create_p2tr_address(pubkey, network = 'main') {
18
+ const script = create_p2tr_script(pubkey);
19
+ return encode_p2tr_address(script, network);
20
+ }
21
+ function create_p2tr_script(pubkey) {
12
22
  const bytes = Buff.bytes(pubkey);
13
- const config = get_address_config(network, ADDR_TYPE);
14
- Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}`);
15
- Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}`);
23
+ Assert.size(bytes, 32, 'invalid pubkey size');
24
+ return encode_p2tr_script(bytes);
25
+ }
26
+ function encode_p2tr_script(pubkey) {
27
+ return Buff.join(['5120', pubkey]);
28
+ }
29
+ function encode_p2tr_address(script_pk, network = 'main') {
30
+ const pubkey = decode_p2tr_script(script_pk);
31
+ const config = get_address_config(network, ADDRESS_TYPE);
32
+ Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}`);
33
+ Assert.size(pubkey, config.size, `invalid payload size: ${pubkey.length} !== ${config.size}`);
16
34
  return encode_address({
17
- data: bytes,
35
+ data: pubkey,
18
36
  format: 'bech32m',
19
37
  prefix: config.prefix
20
38
  });
21
39
  }
22
40
  function decode_p2tr_address(address) {
23
- const parsed = parse_address(address);
24
- Assert.ok(parsed.type === 'p2tr', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`);
41
+ const parsed = get_address_info(address);
42
+ Assert.ok(parsed.type === 'p2tr', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`);
25
43
  return parsed;
26
44
  }
45
+ function decode_p2tr_script(script) {
46
+ Assert.ok(is_p2tr_script(script), `invalid p2tr script`);
47
+ const bytes = Buff.bytes(script);
48
+ return bytes.slice(2, 34);
49
+ }
@@ -1,10 +1,17 @@
1
- import type { AddressData, ChainNetwork } from '../../types/index.js';
1
+ import { Buff, Bytes } from '@vbyte/buff';
2
+ import type { AddressInfo, ChainNetwork } from '../../types/index.js';
2
3
  export declare namespace P2WPKH {
3
- const create: typeof create_p2wpkh_address;
4
- const encode: typeof encode_p2wpkh_address;
5
- const decode: typeof decode_p2wpkh_address;
4
+ const create_address: typeof create_p2wpkh_address;
5
+ const create_script: typeof create_p2wpkh_script;
6
+ const encode_address: typeof encode_p2wpkh_address;
7
+ const encode_script: typeof encode_p2wpkh_script;
8
+ const decode_address: typeof decode_p2wpkh_address;
9
+ const decode_script: typeof decode_p2wpkh_script;
6
10
  }
7
- declare function create_p2wpkh_address(pubkey: string | Uint8Array, network?: ChainNetwork): string;
8
- declare function encode_p2wpkh_address(pk_hash: string | Uint8Array, network?: ChainNetwork): string;
9
- declare function decode_p2wpkh_address(address: string): AddressData;
11
+ declare function create_p2wpkh_address(pubkey: Bytes, network?: ChainNetwork): string;
12
+ declare function create_p2wpkh_script(pubkey: Bytes): Buff;
13
+ declare function encode_p2wpkh_script(pk_hash: Bytes): Buff;
14
+ declare function encode_p2wpkh_address(script_pk: Bytes, network?: ChainNetwork): string;
15
+ declare function decode_p2wpkh_address(address: string): AddressInfo;
16
+ declare function decode_p2wpkh_script(script: Bytes): Buff;
10
17
  export {};
@@ -2,33 +2,50 @@ import { Buff } from '@vbyte/buff';
2
2
  import { Assert } from '@vbyte/micro-lib';
3
3
  import { hash160 } from '@vbyte/micro-lib/hash';
4
4
  import { encode_address } from './encode.js';
5
- import { get_address_config, parse_address } from './util.js';
6
- const ADDR_TYPE = 'p2w-pkh';
5
+ import { is_p2wpkh_script } from '../../lib/script/lock.js';
6
+ import { LOCK_SCRIPT_TYPE } from '../../const.js';
7
+ import { get_address_config, get_address_info } from './util.js';
8
+ const ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2WPKH;
7
9
  export var P2WPKH;
8
10
  (function (P2WPKH) {
9
- P2WPKH.create = create_p2wpkh_address;
10
- P2WPKH.encode = encode_p2wpkh_address;
11
- P2WPKH.decode = decode_p2wpkh_address;
11
+ P2WPKH.create_address = create_p2wpkh_address;
12
+ P2WPKH.create_script = create_p2wpkh_script;
13
+ P2WPKH.encode_address = encode_p2wpkh_address;
14
+ P2WPKH.encode_script = encode_p2wpkh_script;
15
+ P2WPKH.decode_address = decode_p2wpkh_address;
16
+ P2WPKH.decode_script = decode_p2wpkh_script;
12
17
  })(P2WPKH || (P2WPKH = {}));
13
18
  function create_p2wpkh_address(pubkey, network = 'main') {
19
+ const script = create_p2wpkh_script(pubkey);
20
+ return encode_p2wpkh_address(script, network);
21
+ }
22
+ function create_p2wpkh_script(pubkey) {
14
23
  const bytes = Buff.bytes(pubkey);
15
- Assert.size(bytes, 33, `invalid payload size: ${bytes.length} !== 33`);
24
+ Assert.size(bytes, 33, 'invalid pubkey size');
16
25
  const hash = hash160(bytes);
17
- return encode_p2wpkh_address(hash, network);
26
+ return encode_p2wpkh_script(hash);
27
+ }
28
+ function encode_p2wpkh_script(pk_hash) {
29
+ return Buff.join(['0014', pk_hash]);
18
30
  }
19
- function encode_p2wpkh_address(pk_hash, network = 'main') {
20
- const bytes = Buff.bytes(pk_hash);
21
- const config = get_address_config(network, ADDR_TYPE);
22
- Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}`);
23
- Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}`);
31
+ function encode_p2wpkh_address(script_pk, network = 'main') {
32
+ const pk_hash = decode_p2wpkh_script(script_pk);
33
+ const config = get_address_config(network, ADDRESS_TYPE);
34
+ Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}`);
35
+ Assert.size(pk_hash, config.size, `invalid payload size: ${pk_hash.length} !== ${config.size}`);
24
36
  return encode_address({
25
- data: bytes,
37
+ data: pk_hash,
26
38
  format: 'bech32',
27
39
  prefix: config.prefix
28
40
  });
29
41
  }
30
42
  function decode_p2wpkh_address(address) {
31
- const parsed = parse_address(address);
32
- Assert.ok(parsed.type === 'p2w-pkh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`);
43
+ const parsed = get_address_info(address);
44
+ Assert.ok(parsed.type === 'p2wpkh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`);
33
45
  return parsed;
34
46
  }
47
+ function decode_p2wpkh_script(script) {
48
+ Assert.ok(is_p2wpkh_script(script), `invalid p2wpkh script`);
49
+ const bytes = Buff.bytes(script);
50
+ return bytes.slice(2, 22);
51
+ }
@@ -1,10 +1,17 @@
1
- import type { ChainNetwork, AddressData } from '../../types/index.js';
1
+ import { Buff, Bytes } from '@vbyte/buff';
2
+ import type { AddressInfo, ChainNetwork } from '../../types/index.js';
2
3
  export declare namespace P2WSH {
3
- const create: typeof create_p2wsh_address;
4
- const encode: typeof encode_p2wsh_address;
5
- const decode: typeof decode_p2wsh_address;
4
+ const create_address: typeof create_p2wsh_address;
5
+ const create_script: typeof create_p2wsh_script;
6
+ const encode_address: typeof encode_p2wsh_address;
7
+ const encode_script: typeof encode_p2wsh_script;
8
+ const decode_address: typeof decode_p2wsh_address;
9
+ const decode_script: typeof decode_p2wsh_script;
6
10
  }
7
- declare function create_p2wsh_address(script: string | Uint8Array, network?: ChainNetwork): string;
8
- declare function encode_p2wsh_address(script_hash: string | Uint8Array, network?: ChainNetwork): string;
9
- declare function decode_p2wsh_address(address: string): AddressData;
11
+ declare function create_p2wsh_address(script: Bytes, network?: ChainNetwork): string;
12
+ declare function create_p2wsh_script(script: Bytes): Buff;
13
+ declare function encode_p2wsh_script(script_hash: Bytes): Buff;
14
+ declare function encode_p2wsh_address(script_pk: Bytes, network?: ChainNetwork): string;
15
+ declare function decode_p2wsh_address(address: string): AddressInfo;
16
+ declare function decode_p2wsh_script(script: Bytes): Buff;
10
17
  export {};
@@ -2,32 +2,49 @@ import { Buff } from '@vbyte/buff';
2
2
  import { Assert } from '@vbyte/micro-lib';
3
3
  import { sha256 } from '@vbyte/micro-lib/hash';
4
4
  import { encode_address } from './encode.js';
5
- import { get_address_config, parse_address } from './util.js';
6
- const ADDR_TYPE = 'p2w-sh';
5
+ import { is_p2wsh_script } from '../../lib/script/lock.js';
6
+ import { LOCK_SCRIPT_TYPE } from '../../const.js';
7
+ import { get_address_config, get_address_info } from './util.js';
8
+ const ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2WSH;
7
9
  export var P2WSH;
8
10
  (function (P2WSH) {
9
- P2WSH.create = create_p2wsh_address;
10
- P2WSH.encode = encode_p2wsh_address;
11
- P2WSH.decode = decode_p2wsh_address;
11
+ P2WSH.create_address = create_p2wsh_address;
12
+ P2WSH.create_script = create_p2wsh_script;
13
+ P2WSH.encode_address = encode_p2wsh_address;
14
+ P2WSH.encode_script = encode_p2wsh_script;
15
+ P2WSH.decode_address = decode_p2wsh_address;
16
+ P2WSH.decode_script = decode_p2wsh_script;
12
17
  })(P2WSH || (P2WSH = {}));
13
18
  function create_p2wsh_address(script, network = 'main') {
19
+ const wsh_script = create_p2wsh_script(script);
20
+ return encode_p2wsh_address(wsh_script, network);
21
+ }
22
+ function create_p2wsh_script(script) {
14
23
  const bytes = Buff.bytes(script);
15
24
  const hash = sha256(bytes);
16
- return encode_p2wsh_address(hash, network);
25
+ return encode_p2wsh_script(hash);
26
+ }
27
+ function encode_p2wsh_script(script_hash) {
28
+ return Buff.join(['0020', script_hash]);
17
29
  }
18
- function encode_p2wsh_address(script_hash, network = 'main') {
19
- const bytes = Buff.bytes(script_hash);
20
- const config = get_address_config(network, ADDR_TYPE);
21
- Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}`);
22
- Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}`);
30
+ function encode_p2wsh_address(script_pk, network = 'main') {
31
+ const script_hash = decode_p2wsh_script(script_pk);
32
+ const config = get_address_config(network, ADDRESS_TYPE);
33
+ Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}`);
34
+ Assert.size(script_hash, config.size, `invalid payload size: ${script_hash.length} !== ${config.size}`);
23
35
  return encode_address({
24
- data: bytes,
36
+ data: script_hash,
25
37
  format: 'bech32',
26
38
  prefix: config.prefix
27
39
  });
28
40
  }
29
41
  function decode_p2wsh_address(address) {
30
- const parsed = parse_address(address);
31
- Assert.ok(parsed.type === 'p2w-sh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`);
42
+ const parsed = get_address_info(address);
43
+ Assert.ok(parsed.type === 'p2wsh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`);
32
44
  return parsed;
33
45
  }
46
+ function decode_p2wsh_script(script) {
47
+ Assert.ok(is_p2wsh_script(script), `invalid p2wsh script`);
48
+ const bytes = Buff.bytes(script);
49
+ return bytes.slice(2, 34);
50
+ }
@@ -1,5 +1,2 @@
1
- import type { AddressType } from '../../types/index.js';
2
- export declare function get_address_script(script_key: string, script_type: AddressType): {
3
- script_hex: string;
4
- script_asm: string[];
5
- };
1
+ import type { AddressType, ScriptInfo } from '../../types/index.js';
2
+ export declare function get_address_script(script_key: string, script_type: AddressType): ScriptInfo;