@agoric/cosmic-proto 0.4.1-upgrade-18-dev-6ddbef0.0 → 0.4.1-upgrade-19-dev-2a71f04.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/dist/address-hooks.d.ts +44 -0
- package/dist/address-hooks.js +217 -0
- package/dist/address-hooks.js.map +1 -0
- package/dist/codegen/agoric/bundle.d.ts +173 -162
- package/dist/codegen/agoric/swingset/swingset.d.ts +53 -2
- package/dist/codegen/agoric/swingset/swingset.js +86 -0
- package/dist/codegen/agoric/swingset/swingset.js.map +1 -1
- package/dist/codegen/agoric/vbank/vbank.d.ts +7 -0
- package/dist/codegen/agoric/vbank/vbank.js +18 -0
- package/dist/codegen/agoric/vbank/vbank.js.map +1 -1
- package/dist/codegen/circle/bundle.d.ts +1363 -0
- package/dist/codegen/circle/bundle.js +40 -0
- package/dist/codegen/circle/bundle.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/attester.d.ts +31 -0
- package/dist/codegen/circle/cctp/v1/attester.js +63 -0
- package/dist/codegen/circle/cctp/v1/attester.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/burn_message.d.ts +47 -0
- package/dist/codegen/circle/cctp/v1/burn_message.js +117 -0
- package/dist/codegen/circle/cctp/v1/burn_message.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/burning_and_minting_paused.d.ts +31 -0
- package/dist/codegen/circle/cctp/v1/burning_and_minting_paused.js +63 -0
- package/dist/codegen/circle/cctp/v1/burning_and_minting_paused.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/events.d.ts +730 -0
- package/dist/codegen/circle/cctp/v1/events.js +1612 -0
- package/dist/codegen/circle/cctp/v1/events.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/genesis.d.ts +60 -0
- package/dist/codegen/circle/cctp/v1/genesis.js +295 -0
- package/dist/codegen/circle/cctp/v1/genesis.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/max_message_body_size.d.ts +31 -0
- package/dist/codegen/circle/cctp/v1/max_message_body_size.js +69 -0
- package/dist/codegen/circle/cctp/v1/max_message_body_size.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/message.d.ts +69 -0
- package/dist/codegen/circle/cctp/v1/message.js +160 -0
- package/dist/codegen/circle/cctp/v1/message.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/nonce.d.ts +39 -0
- package/dist/codegen/circle/cctp/v1/nonce.js +80 -0
- package/dist/codegen/circle/cctp/v1/nonce.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/per_message_burn_limit.d.ts +39 -0
- package/dist/codegen/circle/cctp/v1/per_message_burn_limit.js +73 -0
- package/dist/codegen/circle/cctp/v1/per_message_burn_limit.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/query.d.ts +1101 -0
- package/dist/codegen/circle/cctp/v1/query.js +2421 -0
- package/dist/codegen/circle/cctp/v1/query.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/remote_token_messenger.d.ts +33 -0
- package/dist/codegen/circle/cctp/v1/remote_token_messenger.js +77 -0
- package/dist/codegen/circle/cctp/v1/remote_token_messenger.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/sending_and_receiving_messages_paused.d.ts +31 -0
- package/dist/codegen/circle/cctp/v1/sending_and_receiving_messages_paused.js +63 -0
- package/dist/codegen/circle/cctp/v1/sending_and_receiving_messages_paused.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/signature_threshold.d.ts +33 -0
- package/dist/codegen/circle/cctp/v1/signature_threshold.js +63 -0
- package/dist/codegen/circle/cctp/v1/signature_threshold.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/token_pair.d.ts +45 -0
- package/dist/codegen/circle/cctp/v1/token_pair.js +91 -0
- package/dist/codegen/circle/cctp/v1/token_pair.js.map +1 -0
- package/dist/codegen/circle/cctp/v1/tx.d.ts +1102 -0
- package/dist/codegen/circle/cctp/v1/tx.js +3264 -0
- package/dist/codegen/circle/cctp/v1/tx.js.map +1 -0
- package/dist/codegen/cosmos/bundle.d.ts +4005 -4005
- package/dist/codegen/cosmos/bundle.js +126 -126
- package/dist/codegen/cosmos_proto/bundle.d.ts +21 -21
- package/dist/codegen/cosmos_proto/bundle.js +2 -2
- package/dist/codegen/gogoproto/bundle.js +2 -2
- package/dist/codegen/google/bundle.d.ts +277 -277
- package/dist/codegen/google/bundle.js +10 -10
- package/dist/codegen/google/bundle.js.map +1 -1
- package/dist/codegen/ibc/bundle.d.ts +1662 -1662
- package/dist/codegen/ibc/bundle.js +64 -64
- package/dist/codegen/ibc/bundle.js.map +1 -1
- package/dist/codegen/icq/bundle.d.ts +85 -85
- package/dist/codegen/icq/bundle.js +10 -10
- package/dist/codegen/ics23/bundle.d.ts +113 -113
- package/dist/codegen/ics23/bundle.js +2 -2
- package/dist/codegen/index.d.ts +2 -0
- package/dist/codegen/index.js +2 -0
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/stride/bundle.d.ts +2607 -0
- package/dist/codegen/stride/bundle.js +71 -0
- package/dist/codegen/stride/bundle.js.map +1 -0
- package/dist/codegen/stride/epochs/genesis.d.ts +60 -0
- package/dist/codegen/stride/epochs/genesis.js +227 -0
- package/dist/codegen/stride/epochs/genesis.js.map +1 -0
- package/dist/codegen/stride/epochs/query.d.ts +132 -0
- package/dist/codegen/stride/epochs/query.js +398 -0
- package/dist/codegen/stride/epochs/query.js.map +1 -0
- package/dist/codegen/stride/records/callbacks.d.ts +45 -0
- package/dist/codegen/stride/records/callbacks.js +136 -0
- package/dist/codegen/stride/records/callbacks.js.map +1 -0
- package/dist/codegen/stride/records/genesis.d.ts +41 -0
- package/dist/codegen/stride/records/genesis.js +186 -0
- package/dist/codegen/stride/records/genesis.js.map +1 -0
- package/dist/codegen/stride/records/params.d.ts +23 -0
- package/dist/codegen/stride/records/params.js +50 -0
- package/dist/codegen/stride/records/params.js.map +1 -0
- package/dist/codegen/stride/records/query.d.ts +494 -0
- package/dist/codegen/stride/records/query.js +1552 -0
- package/dist/codegen/stride/records/query.js.map +1 -0
- package/dist/codegen/stride/records/records.d.ts +228 -0
- package/dist/codegen/stride/records/records.js +939 -0
- package/dist/codegen/stride/records/records.js.map +1 -0
- package/dist/codegen/stride/stakedym/genesis.d.ts +92 -0
- package/dist/codegen/stride/stakedym/genesis.js +312 -0
- package/dist/codegen/stride/stakedym/genesis.js.map +1 -0
- package/dist/codegen/stride/stakedym/query.d.ts +302 -0
- package/dist/codegen/stride/stakedym/query.js +887 -0
- package/dist/codegen/stride/stakedym/query.js.map +1 -0
- package/dist/codegen/stride/stakedym/stakedym.d.ts +303 -0
- package/dist/codegen/stride/stakedym/stakedym.js +909 -0
- package/dist/codegen/stride/stakedym/stakedym.js.map +1 -0
- package/dist/codegen/stride/stakedym/tx.d.ts +595 -0
- package/dist/codegen/stride/stakedym/tx.js +1661 -0
- package/dist/codegen/stride/stakedym/tx.js.map +1 -0
- package/dist/codegen/stride/stakeibc/address_unbonding.d.ts +35 -0
- package/dist/codegen/stride/stakeibc/address_unbonding.js +135 -0
- package/dist/codegen/stride/stakeibc/address_unbonding.js.map +1 -0
- package/dist/codegen/stride/stakeibc/callbacks.d.ts +357 -0
- package/dist/codegen/stride/stakeibc/callbacks.js +1191 -0
- package/dist/codegen/stride/stakeibc/callbacks.js.map +1 -0
- package/dist/codegen/stride/stakeibc/epoch_tracker.d.ts +29 -0
- package/dist/codegen/stride/stakeibc/epoch_tracker.js +115 -0
- package/dist/codegen/stride/stakeibc/epoch_tracker.js.map +1 -0
- package/dist/codegen/stride/stakeibc/genesis.d.ts +37 -0
- package/dist/codegen/stride/stakeibc/genesis.js +135 -0
- package/dist/codegen/stride/stakeibc/genesis.js.map +1 -0
- package/dist/codegen/stride/stakeibc/gov.d.ts +61 -0
- package/dist/codegen/stride/stakeibc/gov.js +212 -0
- package/dist/codegen/stride/stakeibc/gov.js.map +1 -0
- package/dist/codegen/stride/stakeibc/host_zone.d.ts +184 -0
- package/dist/codegen/stride/stakeibc/host_zone.js +544 -0
- package/dist/codegen/stride/stakeibc/host_zone.js.map +1 -0
- package/dist/codegen/stride/stakeibc/ica_account.d.ts +43 -0
- package/dist/codegen/stride/stakeibc/ica_account.js +165 -0
- package/dist/codegen/stride/stakeibc/ica_account.js.map +1 -0
- package/dist/codegen/stride/stakeibc/packet.d.ts +42 -0
- package/dist/codegen/stride/stakeibc/packet.js +113 -0
- package/dist/codegen/stride/stakeibc/packet.js.map +1 -0
- package/dist/codegen/stride/stakeibc/params.d.ts +62 -0
- package/dist/codegen/stride/stakeibc/params.js +317 -0
- package/dist/codegen/stride/stakeibc/params.js.map +1 -0
- package/dist/codegen/stride/stakeibc/query.d.ts +492 -0
- package/dist/codegen/stride/stakeibc/query.js +1372 -0
- package/dist/codegen/stride/stakeibc/query.js.map +1 -0
- package/dist/codegen/stride/stakeibc/trade_route.d.ts +170 -0
- package/dist/codegen/stride/stakeibc/trade_route.js +377 -0
- package/dist/codegen/stride/stakeibc/trade_route.js.map +1 -0
- package/dist/codegen/stride/stakeibc/tx.d.ts +1210 -0
- package/dist/codegen/stride/stakeibc/tx.js +3392 -0
- package/dist/codegen/stride/stakeibc/tx.js.map +1 -0
- package/dist/codegen/stride/stakeibc/validator.d.ts +39 -0
- package/dist/codegen/stride/stakeibc/validator.js +170 -0
- package/dist/codegen/stride/stakeibc/validator.js.map +1 -0
- package/dist/codegen/stride/staketia/genesis.d.ts +92 -0
- package/dist/codegen/stride/staketia/genesis.js +312 -0
- package/dist/codegen/stride/staketia/genesis.js.map +1 -0
- package/dist/codegen/stride/staketia/query.d.ts +302 -0
- package/dist/codegen/stride/staketia/query.js +887 -0
- package/dist/codegen/stride/staketia/query.js.map +1 -0
- package/dist/codegen/stride/staketia/staketia.d.ts +285 -0
- package/dist/codegen/stride/staketia/staketia.js +819 -0
- package/dist/codegen/stride/staketia/staketia.js.map +1 -0
- package/dist/codegen/stride/staketia/tx.d.ts +611 -0
- package/dist/codegen/stride/staketia/tx.js +1671 -0
- package/dist/codegen/stride/staketia/tx.js.map +1 -0
- package/dist/codegen/tendermint/bundle.d.ts +716 -716
- package/dist/codegen/tendermint/bundle.js +22 -22
- package/dist/codegen/varint.d.ts +1 -1
- package/package.json +34 -10
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default maximum number of characters in a bech32-encoded hooked address.
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_HOOKED_ADDRESS_CHAR_LIMIT: 1024;
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {Record<string, string | (string | null)[] | null>} HookQuery A
|
|
7
|
+
* record of query keys mapped to query values. `null` values denote valueless
|
|
8
|
+
* keys. Array values denote multiple occurrences of a key:
|
|
9
|
+
*
|
|
10
|
+
* { key: null } // '?key'
|
|
11
|
+
* { key: 'value' } // '?key=value'
|
|
12
|
+
* { key: ['value1', 'value2', 'value3'] } // '?key=value1&key=value2&key=value3'
|
|
13
|
+
* { key: ['value1', null, 'value3'] } // '?key=value1&key&key=value3'
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* How many bytes are used to store the length of the base address.
|
|
17
|
+
*/
|
|
18
|
+
export const BASE_ADDRESS_LENGTH_BYTES: 2;
|
|
19
|
+
export function decodeBech32(specimen: string, charLimit?: number): {
|
|
20
|
+
prefix: string;
|
|
21
|
+
bytes: Uint8Array;
|
|
22
|
+
};
|
|
23
|
+
export function encodeBech32(humanReadablePart: string, bytes: ArrayLike<number>, charLimit?: number): string;
|
|
24
|
+
export function joinHookedAddress(baseAddress: string, hookData: ArrayLike<number>, charLimit?: number): string;
|
|
25
|
+
export function encodeAddressHook(baseAddress: string, query: HookQuery, charLimit?: number): string;
|
|
26
|
+
export function decodeAddressHook(addressHook: string, charLimit?: number): {
|
|
27
|
+
baseAddress: string;
|
|
28
|
+
query: HookQuery;
|
|
29
|
+
};
|
|
30
|
+
export function splitHookedAddress(specimen: string, charLimit?: number): {
|
|
31
|
+
baseAddress: string;
|
|
32
|
+
hookData: Uint8Array;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* A
|
|
36
|
+
* record of query keys mapped to query values. `null` values denote valueless
|
|
37
|
+
* keys. Array values denote multiple occurrences of a key:
|
|
38
|
+
*
|
|
39
|
+
* { key: null } // '?key'
|
|
40
|
+
* { key: 'value' } // '?key=value'
|
|
41
|
+
* { key: ['value1', 'value2', 'value3'] } // '?key=value1&key=value2&key=value3'
|
|
42
|
+
* { key: ['value1', null, 'value3'] } // '?key=value1&key&key=value3'
|
|
43
|
+
*/
|
|
44
|
+
export type HookQuery = Record<string, string | (string | null)[] | null>;
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides functions for encoding and decoding address hooks
|
|
3
|
+
* which are comprised of a bech32 base address with an HTTP query string, all
|
|
4
|
+
* wrapped in a bech32 envelope.
|
|
5
|
+
*
|
|
6
|
+
* @module address-hooks.js
|
|
7
|
+
* @example
|
|
8
|
+
*
|
|
9
|
+
* import {
|
|
10
|
+
* encodeAddressHook,
|
|
11
|
+
* decodeAddressHook,
|
|
12
|
+
* } from '@agoric/cosmic-proto/address-hooks.js';
|
|
13
|
+
*
|
|
14
|
+
* const baseAddress = 'agoric1qqp0e5ys';
|
|
15
|
+
* const query = { key: 'value', foo: ['bar', 'baz'] };
|
|
16
|
+
*
|
|
17
|
+
* const addressHook = encodeAddressHook(baseAddress, query);
|
|
18
|
+
* // 'agoric10rchqqplvehk70tzv9ezven0du7kyct6ye4k27faweskcat9qqqstnf2eq'
|
|
19
|
+
*
|
|
20
|
+
* addressHook.startsWith('agoric10rch');
|
|
21
|
+
* // true
|
|
22
|
+
*
|
|
23
|
+
* const decoded = decodeAddressHook(addressHook);
|
|
24
|
+
* // {
|
|
25
|
+
* // baseAddress: 'agoric1qqp0e5ys',
|
|
26
|
+
* // query: { foo: [ 'bar', 'baz' ], key: 'value' }
|
|
27
|
+
* // }
|
|
28
|
+
*/
|
|
29
|
+
/* eslint-disable no-bitwise */
|
|
30
|
+
import { bech32 } from 'bech32';
|
|
31
|
+
import queryString from 'query-string';
|
|
32
|
+
/* global globalThis */
|
|
33
|
+
/** @type {<T>(x: T) => T} */
|
|
34
|
+
const harden = globalThis.harden || Object.freeze;
|
|
35
|
+
// ADDRESS_HOOK_VERSION is the version of the address hook format used in this
|
|
36
|
+
// module.
|
|
37
|
+
const ADDRESS_HOOK_VERSION = 0;
|
|
38
|
+
if ((ADDRESS_HOOK_VERSION & 0x0f) !== ADDRESS_HOOK_VERSION) {
|
|
39
|
+
throw Error(`ADDRESS_HOOK_VERSION ${ADDRESS_HOOK_VERSION} exceeds 0x0f`);
|
|
40
|
+
}
|
|
41
|
+
// ADDRESS_HOOK_BYTE_PREFIX is a magic prefix that identifies a hooked address.
|
|
42
|
+
// Chosen to make bech32 address hooks that look like "agoric10rch..."
|
|
43
|
+
const ADDRESS_HOOK_BYTE_PREFIX = [
|
|
44
|
+
0x78,
|
|
45
|
+
0xf1,
|
|
46
|
+
0x70, // | ADDRESS_HOOK_VERSION
|
|
47
|
+
];
|
|
48
|
+
harden(ADDRESS_HOOK_BYTE_PREFIX);
|
|
49
|
+
/**
|
|
50
|
+
* The default maximum number of characters in a bech32-encoded hooked address.
|
|
51
|
+
*/
|
|
52
|
+
export const DEFAULT_HOOKED_ADDRESS_CHAR_LIMIT = 1024;
|
|
53
|
+
/**
|
|
54
|
+
* @typedef {Record<string, string | (string | null)[] | null>} HookQuery A
|
|
55
|
+
* record of query keys mapped to query values. `null` values denote valueless
|
|
56
|
+
* keys. Array values denote multiple occurrences of a key:
|
|
57
|
+
*
|
|
58
|
+
* { key: null } // '?key'
|
|
59
|
+
* { key: 'value' } // '?key=value'
|
|
60
|
+
* { key: ['value1', 'value2', 'value3'] } // '?key=value1&key=value2&key=value3'
|
|
61
|
+
* { key: ['value1', null, 'value3'] } // '?key=value1&key&key=value3'
|
|
62
|
+
*/
|
|
63
|
+
/**
|
|
64
|
+
* How many bytes are used to store the length of the base address.
|
|
65
|
+
*/
|
|
66
|
+
export const BASE_ADDRESS_LENGTH_BYTES = 2;
|
|
67
|
+
/**
|
|
68
|
+
* @param {string} specimen
|
|
69
|
+
* @param {number} [charLimit]
|
|
70
|
+
* @returns {{ prefix: string; bytes: Uint8Array }}
|
|
71
|
+
*/
|
|
72
|
+
export const decodeBech32 = (specimen, charLimit = DEFAULT_HOOKED_ADDRESS_CHAR_LIMIT) => {
|
|
73
|
+
const { prefix, words } = bech32.decode(specimen, charLimit);
|
|
74
|
+
const rawBytes = bech32.fromWords(words);
|
|
75
|
+
const bytes = new Uint8Array(rawBytes);
|
|
76
|
+
return harden({ prefix, bytes });
|
|
77
|
+
};
|
|
78
|
+
harden(decodeBech32);
|
|
79
|
+
/**
|
|
80
|
+
* @param {string} humanReadablePart
|
|
81
|
+
* @param {ArrayLike<number>} bytes
|
|
82
|
+
* @param {number} [charLimit]
|
|
83
|
+
* @returns {string}
|
|
84
|
+
*/
|
|
85
|
+
export const encodeBech32 = (humanReadablePart, bytes, charLimit = DEFAULT_HOOKED_ADDRESS_CHAR_LIMIT) => {
|
|
86
|
+
const words = bech32.toWords(bytes);
|
|
87
|
+
return bech32.encode(humanReadablePart, words, charLimit);
|
|
88
|
+
};
|
|
89
|
+
harden(encodeBech32);
|
|
90
|
+
/**
|
|
91
|
+
* Join raw base address bytes and hook data into a bech32-encoded hooked
|
|
92
|
+
* address. The bech32-payload is:
|
|
93
|
+
*
|
|
94
|
+
* | offset | 0 | 3 | 3+len(baseAddress) | len(payload)-2 |
|
|
95
|
+
* | ------ | ----- | ----------- | ------------------ | ---------------- |
|
|
96
|
+
* | data | magic | baseAddress | hookData | len(baseAddress) |
|
|
97
|
+
*
|
|
98
|
+
* `magic` is a 3-byte prefix that identifies a hooked address and its version
|
|
99
|
+
* nibble, whose value is 4 bits (between 0 and 0xf (15)). Currently, the only
|
|
100
|
+
* supported version is 0.
|
|
101
|
+
*
|
|
102
|
+
* 0x78, 0xf1, (0x70 | ADDRESS_HOOK_VERSION),
|
|
103
|
+
*
|
|
104
|
+
* This magic prefix encodes as `0rch`, regardless of the version or HRP (e.g.
|
|
105
|
+
* `agoric10rch<rest of payload as bech32><bech32 checksum>`).
|
|
106
|
+
*
|
|
107
|
+
* @param {string} baseAddress
|
|
108
|
+
* @param {ArrayLike<number>} hookData
|
|
109
|
+
* @param {number} [charLimit]
|
|
110
|
+
* @returns {string}
|
|
111
|
+
*/
|
|
112
|
+
export const joinHookedAddress = (baseAddress, hookData, charLimit = DEFAULT_HOOKED_ADDRESS_CHAR_LIMIT) => {
|
|
113
|
+
const { prefix, bytes } = decodeBech32(baseAddress, charLimit);
|
|
114
|
+
const baseAddressLength = bytes.length;
|
|
115
|
+
const b = baseAddressLength;
|
|
116
|
+
const hd = hookData.length;
|
|
117
|
+
const maxBaseAddressLength = 2 ** (BASE_ADDRESS_LENGTH_BYTES * 8);
|
|
118
|
+
if (b >= maxBaseAddressLength) {
|
|
119
|
+
throw RangeError(`Base address length 0x${b.toString(16)} exceeds maximum 0x${maxBaseAddressLength.toString(16)}`);
|
|
120
|
+
}
|
|
121
|
+
if (!Number.isSafeInteger(hd) || hd < 0) {
|
|
122
|
+
throw RangeError(`Hook data length ${hd} is not a non-negative integer`);
|
|
123
|
+
}
|
|
124
|
+
const prefixLength = ADDRESS_HOOK_BYTE_PREFIX.length;
|
|
125
|
+
const hookBuf = new Uint8Array(prefixLength + b + hd + BASE_ADDRESS_LENGTH_BYTES);
|
|
126
|
+
hookBuf.set(ADDRESS_HOOK_BYTE_PREFIX, 0);
|
|
127
|
+
hookBuf[prefixLength - 1] |= ADDRESS_HOOK_VERSION;
|
|
128
|
+
hookBuf.set(bytes, prefixLength);
|
|
129
|
+
hookBuf.set(hookData, prefixLength + b);
|
|
130
|
+
// Append the address length bytes, since we've already ensured these do not
|
|
131
|
+
// exceed maxBaseAddressLength above. These are big-endian because the length
|
|
132
|
+
// is at the end of the payload, so if we want to support more bytes for the
|
|
133
|
+
// length, we just need encroach further into the payload. We can do that
|
|
134
|
+
// without changing the meaning of the bytes at the end of existing payloads.
|
|
135
|
+
let len = b;
|
|
136
|
+
for (let i = 0; i < BASE_ADDRESS_LENGTH_BYTES; i += 1) {
|
|
137
|
+
hookBuf[hookBuf.length - 1 - i] = len & 0xff;
|
|
138
|
+
len >>>= 8;
|
|
139
|
+
}
|
|
140
|
+
return encodeBech32(prefix, hookBuf, charLimit);
|
|
141
|
+
};
|
|
142
|
+
harden(joinHookedAddress);
|
|
143
|
+
/**
|
|
144
|
+
* @param {string} baseAddress
|
|
145
|
+
* @param {HookQuery} query
|
|
146
|
+
* @param {number} [charLimit]
|
|
147
|
+
*/
|
|
148
|
+
export const encodeAddressHook = (baseAddress, query, charLimit) => {
|
|
149
|
+
const queryStr = queryString.stringify(query);
|
|
150
|
+
const te = new TextEncoder();
|
|
151
|
+
const hookData = te.encode(`?${queryStr}`);
|
|
152
|
+
return joinHookedAddress(baseAddress, hookData, charLimit);
|
|
153
|
+
};
|
|
154
|
+
harden(encodeAddressHook);
|
|
155
|
+
/**
|
|
156
|
+
* @param {string} addressHook
|
|
157
|
+
* @param {number} [charLimit]
|
|
158
|
+
* @returns {{ baseAddress: string; query: HookQuery }}
|
|
159
|
+
* @throws {Error} if no hook string or hook string does not start with `?`
|
|
160
|
+
*/
|
|
161
|
+
export const decodeAddressHook = (addressHook, charLimit) => {
|
|
162
|
+
const { baseAddress, hookData } = splitHookedAddress(addressHook, charLimit);
|
|
163
|
+
const hookStr = new TextDecoder().decode(hookData);
|
|
164
|
+
if (hookStr && !hookStr.startsWith('?')) {
|
|
165
|
+
throw Error(`Hook data does not start with '?': ${hookStr}`);
|
|
166
|
+
}
|
|
167
|
+
const parsedQuery = queryString.parse(hookStr);
|
|
168
|
+
/**
|
|
169
|
+
* @type {HookQuery}
|
|
170
|
+
*/
|
|
171
|
+
const query = harden({ ...parsedQuery });
|
|
172
|
+
return harden({ baseAddress, query });
|
|
173
|
+
};
|
|
174
|
+
harden(decodeAddressHook);
|
|
175
|
+
/**
|
|
176
|
+
* @param {string} specimen
|
|
177
|
+
* @param {number} [charLimit]
|
|
178
|
+
* @returns {{ baseAddress: string; hookData: Uint8Array }}
|
|
179
|
+
*/
|
|
180
|
+
export const splitHookedAddress = (specimen, charLimit = DEFAULT_HOOKED_ADDRESS_CHAR_LIMIT) => {
|
|
181
|
+
const { prefix, bytes } = decodeBech32(specimen, charLimit);
|
|
182
|
+
const prefixLength = ADDRESS_HOOK_BYTE_PREFIX.length;
|
|
183
|
+
let version = 0xff;
|
|
184
|
+
for (let i = 0; i < prefixLength; i += 1) {
|
|
185
|
+
let maybeMagicByte = bytes[i];
|
|
186
|
+
if (i === prefixLength - 1) {
|
|
187
|
+
// Final byte has a low version nibble and a high magic nibble.
|
|
188
|
+
version = maybeMagicByte & 0x0f;
|
|
189
|
+
maybeMagicByte &= 0xf0;
|
|
190
|
+
}
|
|
191
|
+
if (maybeMagicByte !== ADDRESS_HOOK_BYTE_PREFIX[i]) {
|
|
192
|
+
return harden({ baseAddress: specimen, hookData: new Uint8Array() });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (version !== ADDRESS_HOOK_VERSION) {
|
|
196
|
+
throw TypeError(`Unsupported address hook version ${version}`);
|
|
197
|
+
}
|
|
198
|
+
let len = 0;
|
|
199
|
+
for (let i = BASE_ADDRESS_LENGTH_BYTES - 1; i >= 0; i -= 1) {
|
|
200
|
+
const byte = bytes.at(-i - 1);
|
|
201
|
+
if (byte === undefined) {
|
|
202
|
+
throw TypeError(`Cannot get base address length from byte ${-i - 1} of ${bytes.length}`);
|
|
203
|
+
}
|
|
204
|
+
len <<= 8;
|
|
205
|
+
len |= byte;
|
|
206
|
+
}
|
|
207
|
+
const b = len;
|
|
208
|
+
if (b > bytes.length - BASE_ADDRESS_LENGTH_BYTES - prefixLength) {
|
|
209
|
+
throw TypeError(`Base address length 0x${b.toString(16)} is longer than specimen length ${bytes.length - BASE_ADDRESS_LENGTH_BYTES - prefixLength}`);
|
|
210
|
+
}
|
|
211
|
+
const baseAddressBuf = bytes.subarray(prefixLength, prefixLength + b);
|
|
212
|
+
const baseAddress = encodeBech32(prefix, baseAddressBuf, charLimit);
|
|
213
|
+
const hookData = bytes.subarray(prefixLength + b, -BASE_ADDRESS_LENGTH_BYTES);
|
|
214
|
+
return harden({ baseAddress, hookData });
|
|
215
|
+
};
|
|
216
|
+
harden(splitHookedAddress);
|
|
217
|
+
//# sourceMappingURL=address-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address-hooks.js","sourceRoot":"","sources":["../src/address-hooks.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,+BAA+B;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,uBAAuB;AACvB,6BAA6B;AAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;AAElD,8EAA8E;AAC9E,UAAU;AACV,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,oBAAoB,EAAE,CAAC;IAC3D,MAAM,KAAK,CAAC,wBAAwB,oBAAoB,eAAe,CAAC,CAAC;AAC3E,CAAC;AAED,+EAA+E;AAC/E,sEAAsE;AACtE,MAAM,wBAAwB,GAAG;IAC/B,IAAI;IACJ,IAAI;IACJ,IAAI,EAAE,yBAAyB;CAChC,CAAC;AACF,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,CAAC;AAEtD;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,QAAQ,EACR,SAAS,GAAG,iCAAiC,EAC7C,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC;AACF,MAAM,CAAC,YAAY,CAAC,CAAC;AAErB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,iBAAiB,EACjB,KAAK,EACL,SAAS,GAAG,iCAAiC,EAC7C,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC5D,CAAC,CAAC;AACF,MAAM,CAAC,YAAY,CAAC,CAAC;AAErB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,WAAW,EACX,QAAQ,EACR,SAAS,GAAG,iCAAiC,EAC7C,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE/D,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC;IACvC,MAAM,CAAC,GAAG,iBAAiB,CAAC;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE3B,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAC9B,MAAM,UAAU,CACd,yBAAyB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,sBAAsB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CACjG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,UAAU,CAAC,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,UAAU,CAC5B,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,yBAAyB,CAClD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,oBAAoB,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IAExC,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QAC7C,GAAG,MAAM,CAAC,CAAC;IACb,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC,CAAC;AACF,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC3C,OAAO,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC,CAAC;AACF,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE;IAC1D,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AACF,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAQ,EACR,SAAS,GAAG,iCAAiC,EAC7C,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC;IACrD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;YAC3B,+DAA+D;YAC/D,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC;YAChC,cAAc,IAAI,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,cAAc,KAAK,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,oBAAoB,EAAE,CAAC;QACrC,MAAM,SAAS,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,yBAAyB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,SAAS,CACb,4CAA4C,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,CACxE,CAAC;QACJ,CAAC;QACD,GAAG,KAAK,CAAC,CAAC;QACV,GAAG,IAAI,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,GAAG,CAAC;IACd,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,yBAAyB,GAAG,YAAY,EAAE,CAAC;QAChE,MAAM,SAAS,CACb,yBAAyB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mCAAmC,KAAK,CAAC,MAAM,GAAG,yBAAyB,GAAG,YAAY,EAAE,CACpI,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC;IAE9E,OAAO,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AACF,MAAM,CAAC,kBAAkB,CAAC,CAAC"}
|