@agoric/vats 0.15.2-dev-6bf6362.0.6bf6362 → 0.15.2-dev-01b8bed.0.01b8bed

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/vats",
3
- "version": "0.15.2-dev-6bf6362.0.6bf6362",
3
+ "version": "0.15.2-dev-01b8bed.0.01b8bed",
4
4
  "description": "Agoric's Vat library",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -22,19 +22,19 @@
22
22
  "author": "Agoric",
23
23
  "license": "Apache-2.0",
24
24
  "dependencies": {
25
- "@agoric/cosmic-proto": "0.4.1-dev-6bf6362.0.6bf6362",
26
- "@agoric/ertp": "0.16.3-dev-6bf6362.0.6bf6362",
27
- "@agoric/governance": "0.10.4-dev-6bf6362.0.6bf6362",
28
- "@agoric/internal": "0.3.3-dev-6bf6362.0.6bf6362",
29
- "@agoric/network": "0.1.1-dev-6bf6362.0.6bf6362",
30
- "@agoric/notifier": "0.6.3-dev-6bf6362.0.6bf6362",
31
- "@agoric/store": "0.9.3-dev-6bf6362.0.6bf6362",
32
- "@agoric/swingset-vat": "0.32.3-dev-6bf6362.0.6bf6362",
33
- "@agoric/time": "0.3.3-dev-6bf6362.0.6bf6362",
34
- "@agoric/vat-data": "0.5.3-dev-6bf6362.0.6bf6362",
35
- "@agoric/vow": "0.1.1-dev-6bf6362.0.6bf6362",
36
- "@agoric/zoe": "0.26.3-dev-6bf6362.0.6bf6362",
37
- "@agoric/zone": "0.2.3-dev-6bf6362.0.6bf6362",
25
+ "@agoric/cosmic-proto": "0.4.1-dev-01b8bed.0.01b8bed",
26
+ "@agoric/ertp": "0.16.3-dev-01b8bed.0.01b8bed",
27
+ "@agoric/governance": "0.10.4-dev-01b8bed.0.01b8bed",
28
+ "@agoric/internal": "0.3.3-dev-01b8bed.0.01b8bed",
29
+ "@agoric/network": "0.1.1-dev-01b8bed.0.01b8bed",
30
+ "@agoric/notifier": "0.6.3-dev-01b8bed.0.01b8bed",
31
+ "@agoric/store": "0.9.3-dev-01b8bed.0.01b8bed",
32
+ "@agoric/swingset-vat": "0.32.3-dev-01b8bed.0.01b8bed",
33
+ "@agoric/time": "0.3.3-dev-01b8bed.0.01b8bed",
34
+ "@agoric/vat-data": "0.5.3-dev-01b8bed.0.01b8bed",
35
+ "@agoric/vow": "0.1.1-dev-01b8bed.0.01b8bed",
36
+ "@agoric/zoe": "0.26.3-dev-01b8bed.0.01b8bed",
37
+ "@agoric/zone": "0.2.3-dev-01b8bed.0.01b8bed",
38
38
  "@endo/errors": "^1.2.13",
39
39
  "@endo/far": "^1.1.14",
40
40
  "@endo/import-bundle": "^1.5.2",
@@ -47,7 +47,7 @@
47
47
  "jessie.js": "^0.3.4"
48
48
  },
49
49
  "devDependencies": {
50
- "@agoric/swingset-liveslots": "0.10.3-dev-6bf6362.0.6bf6362",
50
+ "@agoric/swingset-liveslots": "0.10.3-dev-01b8bed.0.01b8bed",
51
51
  "@endo/bundle-source": "^4.1.2",
52
52
  "@endo/init": "^1.1.12",
53
53
  "ava": "^5.3.0",
@@ -79,5 +79,5 @@
79
79
  "typeCoverage": {
80
80
  "atLeast": 90.31
81
81
  },
82
- "gitHead": "6bf6362ab112a35cf93311f17160fc9e577729c6"
82
+ "gitHead": "01b8beda43fafc16d741a066c3195941fe52a015"
83
83
  }
package/src/ibc.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ibc.d.ts","sourceRoot":"","sources":["ibc.js"],"names":[],"mappings":"AAsDO,kDAHI,IAAI,GACF,GAAG,CA8Hf;AAMM,yCAHI,IAAI,UACJ,QAAQ;cASH,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC;;qBAOpC,eAAe;mBACjB,aAAa;EAuqBpC;AAIM,uCADK,IAAI;IAQV;;;OAGG;qBAFQ,MAAM,OACN,GAAG;GAYnB;yBAn2Ba,OAAO,kBAAkB,CAAC;uBAG3B,IAAI,CAChB,cAAkB,EAClB,cAAkB,GAAG,WAAW,GAAG,qBAAqB,CACrD,GAAG;IACF,SAAS,EAAE,QAAQ,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;0BAdmB,mBAAmB;8BAC0B,aAAa;qCAH+B,iBAAiB;mCAC4F,YAAY;yCAAZ,YAAY;wCAZpM,iBAAiB;4BAcc,aAAa;oCAF4I,YAAY;8BADzH,iBAAiB"}
1
+ {"version":3,"file":"ibc.d.ts","sourceRoot":"","sources":["ibc.js"],"names":[],"mappings":"AAwDO,kDAHI,IAAI,GACF,GAAG,CA8Hf;AAMM,yCAHI,IAAI,UACJ,QAAQ;cASH,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC;;qBAOpC,eAAe;mBACjB,aAAa;EA8qBpC;AAIM,uCADK,IAAI;IAQV;;;OAGG;qBAFQ,MAAM,OACN,GAAG;GAYnB;yBA12Ba,OAAO,kBAAkB,CAAC;uBAG3B,IAAI,CAChB,cAAkB,EAClB,cAAkB,GAAG,WAAW,GAAG,qBAAqB,CACrD,GAAG;IACF,SAAS,EAAE,QAAQ,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;0BAdmB,mBAAmB;8BAC0B,aAAa;qCAH+B,iBAAiB;mCAC4F,YAAY;yCAAZ,YAAY;wCAZpM,iBAAiB;4BAcc,aAAa;oCAF4I,YAAY;8BADzH,iBAAiB"}
package/src/ibc.js CHANGED
@@ -11,6 +11,8 @@ import {
11
11
  decodeRemoteIbcAddress,
12
12
  encodeLocalIbcAddress,
13
13
  encodeRemoteIbcAddress,
14
+ decodeIbcEndpoint,
15
+ encodeIbcEndpoint,
14
16
  } from '../tools/ibc-utils.js';
15
17
 
16
18
  const trace = makeTracer('IBC', false);
@@ -454,10 +456,12 @@ export const prepareIBCProtocol = (zone, powers) => {
454
456
  connectionHops: rHops,
455
457
  } = /** @type {IBCEvent<'channelOpenAck'>} */ (obj);
456
458
 
457
- const outbounds = this.state.srcPortToOutbounds.has(portID)
458
- ? [...this.state.srcPortToOutbounds.get(portID)]
459
+ const readonlyOutbounds = this.state.srcPortToOutbounds.has(
460
+ portID,
461
+ )
462
+ ? this.state.srcPortToOutbounds.get(portID)
459
463
  : [];
460
- const oidx = outbounds.findIndex(
464
+ const oidx = readonlyOutbounds.findIndex(
461
465
  ({
462
466
  counterparty: { port_id: iPortID },
463
467
  connectionHops: iHops,
@@ -477,8 +481,11 @@ export const prepareIBCProtocol = (zone, powers) => {
477
481
  },
478
482
  );
479
483
  oidx >= 0 || Fail`${portID}: did not expect channelOpenAck`;
480
- const { onConnectP, localAddr, ...chanInfo } = outbounds[oidx];
481
- outbounds.splice(oidx, 1);
484
+ const { onConnectP, localAddr, ...chanInfo } =
485
+ readonlyOutbounds[oidx];
486
+ const outbounds = readonlyOutbounds
487
+ .slice(0, oidx)
488
+ .concat(readonlyOutbounds.slice(oidx + 1));
482
489
  if (outbounds.length === 0) {
483
490
  srcPortToOutbounds.delete(portID);
484
491
  } else {
@@ -493,7 +500,13 @@ export const prepareIBCProtocol = (zone, powers) => {
493
500
  rVersion,
494
501
  rChannelID,
495
502
  );
496
- const localAddress = `${localAddr}/${chanInfo.order.toLowerCase()}/${rVersion}/ibc-channel/${channelID}`;
503
+ const decodedLocal = decodeIbcEndpoint(localAddr);
504
+ const localAddress = encodeIbcEndpoint({
505
+ ...decodedLocal,
506
+ order: chanInfo.order,
507
+ version: rVersion,
508
+ channelID,
509
+ });
497
510
  const rchandler = makeIBCConnectionHandler(
498
511
  {
499
512
  protocolUtils: util,
@@ -791,13 +804,9 @@ export const prepareIBCProtocol = (zone, powers) => {
791
804
  } = watcherContext;
792
805
  const { channelKeyToAttempt, channelKeyToInfo } = this.state;
793
806
 
794
- const match = attemptedLocal.match(
795
- // Match: ... /ORDER/VERSION ...
796
- new RegExp('^(/[^/]+/[^/]+)*/(ordered|unordered)/([^/]+)(/|$)'),
797
- );
798
-
807
+ const al = decodeIbcEndpoint(attemptedLocal);
799
808
  const channelKey = `${channelID}:${portID}`;
800
- if (!match) {
809
+ if (!al.version) {
801
810
  throw Error(
802
811
  `${channelKey}: cannot determine version from attempted local address ${attemptedLocal}`,
803
812
  );
@@ -806,7 +815,7 @@ export const prepareIBCProtocol = (zone, powers) => {
806
815
  channelKeyToAttempt.init(channelKey, attempt);
807
816
  channelKeyToInfo.init(channelKey, obj);
808
817
 
809
- const negotiatedVersion = match[3];
818
+ const negotiatedVersion = al.version;
810
819
 
811
820
  try {
812
821
  if (asyncVersions) {
@@ -55,7 +55,7 @@ export type SoloVats = {
55
55
  *
56
56
  * - loopback ports: `E(portAllocator).allocateCustomLocalPort()`
57
57
  * - an echo port: `E(portAllocator).allocateCustomIBCPort("echo")`
58
- * - echo port addrees: /ibc-port/custom-echo
58
+ * - echo port address: /ibc-port/custom-echo
59
59
  */
60
60
  export type NetVats = {
61
61
  network: ERef<NetworkVat>;
@@ -96,7 +96,7 @@ export const registerNetworkProtocols = async (vats, dibcBridgeManager) => {
96
96
  *
97
97
  * - loopback ports: `E(portAllocator).allocateCustomLocalPort()`
98
98
  * - an echo port: `E(portAllocator).allocateCustomIBCPort("echo")`
99
- * - echo port addrees: /ibc-port/custom-echo
99
+ * - echo port address: /ibc-port/custom-echo
100
100
  *
101
101
  * @param {BootstrapPowers & {
102
102
  * produce: { portAllocator: Producer<any> };
package/src/types.d.ts CHANGED
@@ -123,6 +123,20 @@ export type IBCPacket = JsonSafe<{
123
123
  timeout_height?: PacketSDKType['timeout_height'];
124
124
  timeout_timestamp?: PacketSDKType['timeout_timestamp'];
125
125
  }>;
126
+ export interface NetworkEndpoints {
127
+ relative: {
128
+ ibc: [protocol: 'ibc', port: IBCPortID, channel: IBCChannelID];
129
+ };
130
+ absolute: {
131
+ ibc: [
132
+ protocol: 'ibc',
133
+ namespace: string,
134
+ reference: string,
135
+ port: IBCPortID,
136
+ channel: IBCChannelID
137
+ ];
138
+ };
139
+ }
126
140
  export type IBCCounterParty = {
127
141
  port_id: IBCPortID;
128
142
  channel_id: IBCChannelID;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"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"}
package/src/types.ts CHANGED
@@ -150,6 +150,21 @@ export type IBCPacket = JsonSafe<{
150
150
  timeout_timestamp?: PacketSDKType['timeout_timestamp'];
151
151
  }>;
152
152
 
153
+ export interface NetworkEndpoints {
154
+ relative: {
155
+ ibc: [protocol: 'ibc', port: IBCPortID, channel: IBCChannelID];
156
+ };
157
+ absolute: {
158
+ ibc: [
159
+ protocol: 'ibc',
160
+ namespace: string,
161
+ reference: string,
162
+ port: IBCPortID,
163
+ channel: IBCChannelID,
164
+ ];
165
+ };
166
+ }
167
+
153
168
  export type IBCCounterParty = {
154
169
  port_id: IBCPortID;
155
170
  channel_id: IBCChannelID;
@@ -1,6 +1,40 @@
1
- export const REMOTE_ADDR_RE: RegExp;
1
+ /**
2
+ * @file Conversion from IBC endpoints to Agoric Network API Endpoints
3
+ * @summary Utilities for constructing and parsing Agoric Network API IBC addresses, which
4
+ * are used to identify IBC ports and channels in a Cosmos-participating
5
+ * blockchain.
6
+ *
7
+ * Agoric Network API addresses are roughly akin to Multiaddrs (@ref
8
+ * https://github.com/multiformats/js-multiaddr) but with a less rigid
9
+ * structure. Both share a similar textual representation, which is
10
+ * encapsulated protocols and values separated by slashes.
11
+ */
2
12
  /** @typedef {`/${string}ibc-port/${string}/${'ordered' | 'unordered'}/${string}`} RemoteIbcAddress */
3
- export const LOCAL_ADDR_RE: RegExp;
13
+ /** @typedef {`/ibc-port/${string}`} LocalIbcAddress */
14
+ /**
15
+ * @import {IBCChannelID, IBCChannelOrdering,
16
+ * IBCConnectionID, IBCPortID} from '../src/types.js';
17
+ */
18
+ export const IBC_ADDR_RE: RegExp;
19
+ export const VALID_ORDERS: readonly ["ordered", "unordered", "ORDERED", "UNORDERED"];
20
+ export function encodeSlashes(raw: string): string;
21
+ export function decodeSlashes(encoded: string): string;
22
+ export function validateIbcAddress(addr: any): any;
23
+ export function decodeIbcHops(h: string): IBCConnectionID[];
24
+ export function decodeIbcEndpoint(addr: string): {
25
+ hops: IBCConnectionID[];
26
+ portID: IBCPortID;
27
+ order?: IBCChannelOrdering;
28
+ version?: string;
29
+ channelID?: IBCChannelID;
30
+ };
31
+ export function encodeIbcEndpoint({ hops, portID, order: rawOrder, version, channelID, }: {
32
+ hops?: string[] | undefined;
33
+ portID: string;
34
+ order: "ordered" | "unordered" | "ORDERED" | "UNORDERED";
35
+ version: string;
36
+ channelID?: string | undefined;
37
+ }): import("@agoric/network").Endpoint;
4
38
  /**
5
39
  * @overload
6
40
  * @param {string} remoteAddr
@@ -17,13 +51,17 @@ export function validateRemoteIbcAddress(remoteAddr: string, returnMatch?: undef
17
51
  export function validateRemoteIbcAddress(remoteAddr: string, returnMatch: true): RegExpMatchArray;
18
52
  export function decodeRemoteIbcAddress(remoteAddr: string): {
19
53
  rPortID: string;
20
- hops: `connection-${number}`[];
21
- order: import("../index.js").IBCChannelOrdering;
54
+ order: IBCChannelOrdering;
22
55
  version: string;
56
+ hops: `connection-${number}`[];
23
57
  };
24
58
  export function localAddrToPortID(localAddr: LocalIbcAddress): string;
25
- export function encodeRemoteIbcAddress(hops: string[], rPortID: string, order: "ordered" | "unordered" | "ORDERED" | "UNORDERED", rVersion: string, rChannelID: string): RemoteIbcAddress;
59
+ export function encodeRemoteIbcAddress(hops: string[], portID: string, order: "ordered" | "unordered" | "ORDERED" | "UNORDERED", version: string, channelID?: string): RemoteIbcAddress;
26
60
  export function encodeLocalIbcAddress(portID: string, order: "ordered" | "unordered" | "ORDERED" | "UNORDERED", version: string): string;
27
61
  export type RemoteIbcAddress = `/${string}ibc-port/${string}/${"ordered" | "unordered"}/${string}`;
28
62
  export type LocalIbcAddress = `/ibc-port/${string}`;
63
+ import type { IBCConnectionID } from '../src/types.js';
64
+ import type { IBCPortID } from '../src/types.js';
65
+ import type { IBCChannelOrdering } from '../src/types.js';
66
+ import type { IBCChannelID } from '../src/types.js';
29
67
  //# sourceMappingURL=ibc-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ibc-utils.d.ts","sourceRoot":"","sources":["ibc-utils.js"],"names":[],"mappings":"AAAA,oCAC8G;AAE9G,sGAAsG;AAEtG,mCAA+E;;;;;;;AAI5E,qDACQ,MAAM,gBACN,SAAS,GAAG,KAAK,GACf,OAAO,CACnB;;;;;;;AAEE,qDACQ,MAAM,eACN,IAAI,GACF,gBAAgB,CAC5B;AAoBM,mDADK,MAAM;;;;;EA0BjB;AAOM,6CAHI,eAAe,GACb,MAAM,CAWlB;AAWM,6CAPI,MAAM,EAAE,WACR,MAAM,SACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,YACjD,MAAM,cACN,MAAM,GACJ,gBAAgB,CAa5B;AAQM,8CAJI,MAAM,SACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,WACjD,MAAM,UAIhB;+BA7Ga,IAAI,MAAM,YAAY,MAAM,IAAI,SAAS,GAAG,WAAW,IAAI,MAAM,EAAE;8BAGnE,aAAa,MAAM,EAAE"}
1
+ {"version":3,"file":"ibc-utils.d.ts","sourceRoot":"","sources":["ibc-utils.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,sGAAsG;AACtG,uDAAuD;AAEvD;;;GAGG;AAEH,iCACsJ;AAGtJ,qFAKG;AAII,mCADK,MAAM,UAC8C;AAIzD,uCADK,MAAM,UACsD;AAGjE,mDASN;AAQM,iCAHI,MAAM,GACJ,eAAe,EAAE,CAsB7B;AAaM,wCATI,MAAM,GACJ;IACR,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B,CAkBH;AAYM,0FAPJ;IAAwB,IAAI;IACP,MAAM,EAAnB,MAAM;IACkD,KAAK,EAA7D,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW;IACpC,OAAO,EAApB,MAAM;IACQ,SAAS;CAC/B,GAAU,OAAO,iBAAiB,EAAE,QAAQ,CAwC9C;;;;;;;AAIE,qDACQ,MAAM,gBACN,SAAS,GAAG,KAAK,GACf,OAAO,CACnB;;;;;;;AAEE,qDACQ,MAAM,eACN,IAAI,GACF,gBAAgB,CAC5B;AA0BM,mDADK,MAAM;;;;;EAYjB;AAOM,6CAHI,eAAe,GACb,MAAM,CAqBlB;AAWM,6CAPI,MAAM,EAAE,UACR,MAAM,SACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,WACjD,MAAM,cACN,MAAM,GACJ,gBAAgB,CAiB5B;AAQM,8CAJI,MAAM,SACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,WACjD,MAAM,UAIhB;+BAjQa,IAAI,MAAM,YAAY,MAAM,IAAI,SAAS,GAAG,WAAW,IAAI,MAAM,EAAE;8BACnE,aAAa,MAAM,EAAE;qCAIG,iBAAiB;+BAAjB,iBAAiB;wCAAjB,iBAAiB;kCAAjB,iBAAiB"}
@@ -1,11 +1,162 @@
1
- export const REMOTE_ADDR_RE =
2
- /^(?<hops>\/ibc-hop\/[^/]+)*\/ibc-port\/(?<portID>[^/]+)\/(?<order>ordered|unordered)\/(?<version>[^/]+)$/s;
3
- harden(REMOTE_ADDR_RE);
4
- /** @typedef {`/${string}ibc-port/${string}/${'ordered' | 'unordered'}/${string}`} RemoteIbcAddress */
1
+ /**
2
+ * @file Conversion from IBC endpoints to Agoric Network API Endpoints
3
+ * @summary Utilities for constructing and parsing Agoric Network API IBC addresses, which
4
+ * are used to identify IBC ports and channels in a Cosmos-participating
5
+ * blockchain.
6
+ *
7
+ * Agoric Network API addresses are roughly akin to Multiaddrs (@ref
8
+ * https://github.com/multiformats/js-multiaddr) but with a less rigid
9
+ * structure. Both share a similar textual representation, which is
10
+ * encapsulated protocols and values separated by slashes.
11
+ */
5
12
 
6
- export const LOCAL_ADDR_RE = /^\/ibc-port\/(?<portID>[-a-zA-Z0-9._+#[\]<>]+)$/;
13
+ /** @typedef {`/${string}ibc-port/${string}/${'ordered' | 'unordered'}/${string}`} RemoteIbcAddress */
7
14
  /** @typedef {`/ibc-port/${string}`} LocalIbcAddress */
8
15
 
16
+ /**
17
+ * @import {IBCChannelID, IBCChannelOrdering,
18
+ * IBCConnectionID, IBCPortID} from '../src/types.js';
19
+ */
20
+
21
+ export const IBC_ADDR_RE =
22
+ /^(?<hops>\/ibc-hop\/[^/]+)*\/ibc-port\/(?<portID>[^/]+)(\/(?<order>ordered|unordered)\/(?<version>[^/]+)(\/ibc-channel\/(?<channelID>[^/]+))?)?$/s;
23
+ harden(IBC_ADDR_RE);
24
+
25
+ export const VALID_ORDERS = /** @type {const} */ ([
26
+ 'ordered',
27
+ 'unordered',
28
+ 'ORDERED',
29
+ 'UNORDERED',
30
+ ]);
31
+ harden(VALID_ORDERS);
32
+
33
+ /** @param {string} raw */
34
+ export const encodeSlashes = raw => raw.replaceAll('/', '\\x2f');
35
+ harden(encodeSlashes);
36
+
37
+ /** @param {string} encoded */
38
+ export const decodeSlashes = encoded => encoded.replaceAll('\\x2f', '/');
39
+ harden(decodeSlashes);
40
+
41
+ export const validateIbcAddress = addr => {
42
+ const match = addr.match(IBC_ADDR_RE);
43
+ // .groups is to inform TS
44
+ if (!(match && match.groups)) {
45
+ throw TypeError(
46
+ `IBC address ${addr} must be '(/ibc-hop/CONNECTION)*/ibc-port/PORT/(ordered|unordered)/VERSION(/ibc-channel/CHANNEL_ID)?'`,
47
+ );
48
+ }
49
+ return match;
50
+ };
51
+
52
+ /**
53
+ * Decode the /ibc-hop/CONNECTION segments of an IBC address.
54
+ *
55
+ * @param {string} h
56
+ * @returns {IBCConnectionID[]}
57
+ */
58
+ export const decodeIbcHops = h => {
59
+ /** @type {IBCConnectionID[]} */
60
+ const hops = [];
61
+
62
+ /** @type {string} */
63
+ while (h) {
64
+ const m = h.match(/^\/ibc-hop\/(?<hop>[^/]+)/);
65
+ if (!m || !m.groups) {
66
+ throw Error(
67
+ `internal: ${JSON.stringify(h)} did not begin with "/ibc-hop/XXX"`,
68
+ );
69
+ }
70
+ h = h.slice(m[0].length);
71
+
72
+ const hop = /** @type {IBCConnectionID} */ (m.groups.hop);
73
+ assert(typeof hop === 'string' && hop.startsWith('connection-'));
74
+ hops.push(hop);
75
+ }
76
+
77
+ return hops;
78
+ };
79
+ harden(decodeIbcHops);
80
+
81
+ /**
82
+ * @param {string} addr
83
+ * @returns {{
84
+ * hops: IBCConnectionID[];
85
+ * portID: IBCPortID;
86
+ * order?: IBCChannelOrdering;
87
+ * version?: string;
88
+ * channelID?: IBCChannelID;
89
+ * }}
90
+ */
91
+ export const decodeIbcEndpoint = addr => {
92
+ const match = validateIbcAddress(addr);
93
+ if (!match.groups)
94
+ throw Error('Unexpected error, validateRemoteIbcAddress should throw.');
95
+
96
+ const hops = decodeIbcHops(match.groups.hops);
97
+
98
+ // Generate a circuit.
99
+ const { portID, version, channelID, order } = match.groups;
100
+ return {
101
+ hops,
102
+ portID,
103
+ ...(order && { order: order.toUpperCase() }),
104
+ ...(version && { version: decodeSlashes(version) }),
105
+ ...(channelID && { channelID }),
106
+ };
107
+ };
108
+ harden(decodeIbcEndpoint);
109
+
110
+ /**
111
+ * @param {object} spec
112
+ * @param {string[]} [spec.hops]
113
+ * @param {string} spec.portID
114
+ * @param {'ordered' | 'unordered' | 'ORDERED' | 'UNORDERED'} spec.order
115
+ * @param {string} spec.version
116
+ * @param {string} [spec.channelID]
117
+ * @returns {import('@agoric/network').Endpoint}
118
+ */
119
+ export const encodeIbcEndpoint = ({
120
+ hops = [],
121
+ portID,
122
+ order: rawOrder,
123
+ version,
124
+ channelID,
125
+ }) => {
126
+ const isLegitString = str =>
127
+ typeof str === 'string' && str && !str.includes('/');
128
+ let addr = '';
129
+ assert(Array.isArray(hops), 'hops must be an array');
130
+ for (const hop of hops) {
131
+ assert(isLegitString(hop), `invalid hop ${hop}`);
132
+ addr += `/ibc-hop/${hop}`;
133
+ }
134
+ assert(isLegitString(portID), `invalid portID ${portID}`);
135
+ addr += `/ibc-port/${portID}`;
136
+
137
+ if (rawOrder !== undefined) {
138
+ assert(isLegitString(rawOrder), `invalid order ${rawOrder}`);
139
+
140
+ assert(
141
+ VALID_ORDERS.includes(rawOrder),
142
+ `invalid order ${rawOrder}; ${rawOrder} not found in ${JSON.stringify(VALID_ORDERS)}`,
143
+ );
144
+
145
+ const order = rawOrder.toLowerCase();
146
+
147
+ assert(typeof version === 'string' && version, 'missing version');
148
+ addr += `/${order}/${encodeSlashes(version)}`;
149
+
150
+ if (channelID !== undefined) {
151
+ assert(isLegitString(channelID), `invalid channelID ${channelID}`);
152
+ addr += `/ibc-channel/${channelID}`;
153
+ }
154
+ }
155
+
156
+ return addr;
157
+ };
158
+ harden(encodeIbcEndpoint);
159
+
9
160
  /**
10
161
  * @overload
11
162
  * @param {string} remoteAddr
@@ -26,42 +177,34 @@ export const LOCAL_ADDR_RE = /^\/ibc-port\/(?<portID>[-a-zA-Z0-9._+#[\]<>]+)$/;
26
177
  * @param {boolean} [returnMatch]
27
178
  */
28
179
  export const validateRemoteIbcAddress = (remoteAddr, returnMatch = false) => {
29
- const match = remoteAddr.match(REMOTE_ADDR_RE);
180
+ const match = validateIbcAddress(remoteAddr);
30
181
  // .groups is to inform TS https://github.com/microsoft/TypeScript/issues/32098
31
182
  if (!(match && match.groups)) {
32
183
  throw TypeError(
33
184
  `Remote address ${remoteAddr} must be '(/ibc-hop/CONNECTION)*/ibc-port/PORT/(ordered|unordered)/VERSION'`,
34
185
  );
35
186
  }
187
+ if (match.groups.channelID) {
188
+ throw TypeError(
189
+ `Remote address ${remoteAddr} must not include channelID; found ${match.groups.channelID}`,
190
+ );
191
+ }
36
192
  return returnMatch ? match : true;
37
193
  };
194
+ harden(validateRemoteIbcAddress);
38
195
 
39
196
  /** @param {string} remoteAddr */
40
197
  export const decodeRemoteIbcAddress = remoteAddr => {
41
- const match = validateRemoteIbcAddress(remoteAddr, true);
42
- if (!match.groups)
43
- throw Error('Unexpected error, validateRemoteIbcAddress should throw.');
44
-
45
- /** @type {import('../src/types.js').IBCConnectionID[]} */
46
- const hops = [];
47
-
48
- let h = match.groups.hops;
49
- while (h) {
50
- const m = h.match(/^\/ibc-hop\/(?<hop>[^/]+)/);
51
- if (!m) {
52
- throw Error(
53
- `internal: ${JSON.stringify(h)} did not begin with "/ibc-hop/XXX"`,
54
- );
55
- }
56
- h = h.substr(m[0].length);
57
- // @ts-expect-error unchecked cast
58
- hops.push(m.groups.hop);
59
- }
60
- // Generate a circuit.
61
- const { portID: rPortID, version } = match.groups;
62
- /** @type {import('../src/types.js').IBCChannelOrdering} */
63
- const order = match.groups.order === 'ordered' ? 'ORDERED' : 'UNORDERED';
64
- return { rPortID, hops, order, version };
198
+ validateRemoteIbcAddress(remoteAddr);
199
+ const {
200
+ hops,
201
+ portID: rPortID,
202
+ order,
203
+ version,
204
+ } = decodeIbcEndpoint(remoteAddr);
205
+ assert(order !== undefined, 'missing order');
206
+ assert(version !== undefined, 'missing version');
207
+ return { rPortID, order, version, hops };
65
208
  };
66
209
  harden(decodeRemoteIbcAddress);
67
210
 
@@ -70,36 +213,50 @@ harden(decodeRemoteIbcAddress);
70
213
  * @returns {string}
71
214
  */
72
215
  export const localAddrToPortID = localAddr => {
73
- const m = localAddr.match(LOCAL_ADDR_RE);
216
+ const m = localAddr.match(IBC_ADDR_RE);
74
217
  // .groups is to inform TS https://github.com/microsoft/TypeScript/issues/32098
75
218
  if (!(m && m.groups)) {
76
219
  throw TypeError(
77
220
  `Invalid port specification ${localAddr}; expected "/ibc-port/PORT"`,
78
221
  );
79
222
  }
223
+ for (const group of Object.keys(m.groups)) {
224
+ if (group === 'portID') {
225
+ continue;
226
+ }
227
+ if (m.groups[group] !== undefined) {
228
+ throw TypeError(
229
+ `Invalid port specification ${localAddr}; unexpected ${group}=${m.groups[group]}`,
230
+ );
231
+ }
232
+ }
80
233
  return m.groups.portID;
81
234
  };
82
235
  harden(localAddrToPortID);
83
236
 
84
237
  /**
85
238
  * @param {string[]} hops
86
- * @param {string} rPortID
239
+ * @param {string} portID
87
240
  * @param {'ordered' | 'unordered' | 'ORDERED' | 'UNORDERED'} order
88
- * @param {string} rVersion
89
- * @param {string} rChannelID
241
+ * @param {string} version
242
+ * @param {string} [channelID]
90
243
  * @returns {RemoteIbcAddress}
91
244
  */
92
245
  export const encodeRemoteIbcAddress = (
93
246
  hops,
94
- rPortID,
247
+ portID,
95
248
  order,
96
- rVersion,
97
- rChannelID,
249
+ version,
250
+ channelID,
98
251
  ) => {
99
- const ibcHops = hops.map(hop => `/ibc-hop/${hop}`).join('/');
100
- return /** @type {RemoteIbcAddress} */ (
101
- `${ibcHops}/ibc-port/${rPortID}/${order.toLowerCase()}/${rVersion}/ibc-channel/${rChannelID}`
102
- );
252
+ const ep = encodeIbcEndpoint({
253
+ hops,
254
+ portID,
255
+ order,
256
+ version,
257
+ ...(channelID && { channelID }),
258
+ });
259
+ return /** @type {RemoteIbcAddress} */ (ep);
103
260
  };
104
261
  harden(encodeRemoteIbcAddress);
105
262
 
@@ -109,7 +266,6 @@ harden(encodeRemoteIbcAddress);
109
266
  * @param {string} version
110
267
  */
111
268
  export const encodeLocalIbcAddress = (portID, order, version) => {
112
- return `/ibc-port/${portID}/${order.toLowerCase()}/${version}`;
269
+ return encodeIbcEndpoint({ portID, order, version });
113
270
  };
114
-
115
271
  harden(encodeLocalIbcAddress);