ox 0.13.2 → 0.14.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.
Files changed (61) hide show
  1. package/Bech32m/package.json +6 -0
  2. package/CHANGELOG.md +19 -0
  3. package/_cjs/core/Bech32m.js +205 -0
  4. package/_cjs/core/Bech32m.js.map +1 -0
  5. package/_cjs/index.js +3 -2
  6. package/_cjs/index.js.map +1 -1
  7. package/_cjs/tempo/KeyAuthorization.js +4 -4
  8. package/_cjs/tempo/KeyAuthorization.js.map +1 -1
  9. package/_cjs/tempo/SignatureEnvelope.js +18 -3
  10. package/_cjs/tempo/SignatureEnvelope.js.map +1 -1
  11. package/_cjs/tempo/TempoAddress.js +40 -39
  12. package/_cjs/tempo/TempoAddress.js.map +1 -1
  13. package/_cjs/tempo/TxEnvelopeTempo.js +5 -2
  14. package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -1
  15. package/_cjs/tempo/index.js.map +1 -1
  16. package/_cjs/version.js +1 -1
  17. package/_esm/core/Bech32m.js +238 -0
  18. package/_esm/core/Bech32m.js.map +1 -0
  19. package/_esm/index.js +24 -0
  20. package/_esm/index.js.map +1 -1
  21. package/_esm/tempo/KeyAuthorization.js +19 -9
  22. package/_esm/tempo/KeyAuthorization.js.map +1 -1
  23. package/_esm/tempo/SignatureEnvelope.js +22 -5
  24. package/_esm/tempo/SignatureEnvelope.js.map +1 -1
  25. package/_esm/tempo/TempoAddress.js +47 -46
  26. package/_esm/tempo/TempoAddress.js.map +1 -1
  27. package/_esm/tempo/TxEnvelopeTempo.js +42 -2
  28. package/_esm/tempo/TxEnvelopeTempo.js.map +1 -1
  29. package/_esm/tempo/index.js +2 -2
  30. package/_esm/tempo/index.js.map +1 -1
  31. package/_esm/version.js +1 -1
  32. package/_types/core/Bech32m.d.ts +93 -0
  33. package/_types/core/Bech32m.d.ts.map +1 -0
  34. package/_types/index.d.ts +24 -0
  35. package/_types/index.d.ts.map +1 -1
  36. package/_types/tempo/KeyAuthorization.d.ts +17 -7
  37. package/_types/tempo/KeyAuthorization.d.ts.map +1 -1
  38. package/_types/tempo/SignatureEnvelope.d.ts +19 -5
  39. package/_types/tempo/SignatureEnvelope.d.ts.map +1 -1
  40. package/_types/tempo/TempoAddress.d.ts +19 -11
  41. package/_types/tempo/TempoAddress.d.ts.map +1 -1
  42. package/_types/tempo/TxEnvelopeTempo.d.ts +47 -1
  43. package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  44. package/_types/tempo/index.d.ts +2 -2
  45. package/_types/tempo/index.d.ts.map +1 -1
  46. package/_types/version.d.ts +1 -1
  47. package/core/Bech32m.ts +263 -0
  48. package/index.ts +24 -2
  49. package/package.json +6 -1
  50. package/tempo/KeyAuthorization.test.ts +70 -23
  51. package/tempo/KeyAuthorization.ts +21 -18
  52. package/tempo/SignatureEnvelope.test.ts +15 -8
  53. package/tempo/SignatureEnvelope.ts +43 -8
  54. package/tempo/TempoAddress.test.ts +49 -14
  55. package/tempo/TempoAddress.ts +56 -59
  56. package/tempo/Transaction.test.ts +4 -2
  57. package/tempo/TxEnvelopeTempo.test.ts +7 -3
  58. package/tempo/TxEnvelopeTempo.ts +52 -1
  59. package/tempo/e2e.test.ts +45 -10
  60. package/tempo/index.ts +6 -2
  61. package/version.ts +1 -1
@@ -257,6 +257,7 @@ describe('deserialize', () => {
257
257
  const keyAuthorization = KeyAuthorization.from({
258
258
  expiry: 1234567890,
259
259
  address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
260
+ chainId: 1n,
260
261
  type: 'secp256k1',
261
262
  limits: [
262
263
  {
@@ -894,6 +895,7 @@ describe('serialize', () => {
894
895
  test('keyAuthorization (secp256k1)', () => {
895
896
  const keyAuthorization = KeyAuthorization.from({
896
897
  address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
898
+ chainId: 1n,
897
899
  expiry: 1234567890,
898
900
  type: 'secp256k1',
899
901
  limits: [
@@ -918,7 +920,7 @@ describe('serialize', () => {
918
920
 
919
921
  const serialized = TxEnvelopeTempo.serialize(transaction)
920
922
  expect(serialized).toMatchInlineSnapshot(
921
- `"0x76f8a201808080d8d79470997970c51812dc3a010c7d01b50e0d17dc79c88080c0808080808080c0f87bf7808094be95c3f554e9fc85ec51be69a3d807a0d55bcf2c84499602d2dad99420c000000000000000000000000000000000000183989680b841635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f05401b"`,
923
+ `"0x76f8a201808080d8d79470997970c51812dc3a010c7d01b50e0d17dc79c88080c0808080808080c0f87bf7018094be95c3f554e9fc85ec51be69a3d807a0d55bcf2c84499602d2dad99420c000000000000000000000000000000000000183989680b841635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f05401b"`,
922
924
  )
923
925
 
924
926
  const deserialized = TxEnvelopeTempo.deserialize(serialized)
@@ -928,6 +930,7 @@ describe('serialize', () => {
928
930
  test('keyAuthorization (p256)', () => {
929
931
  const keyAuthorization = KeyAuthorization.from({
930
932
  address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
933
+ chainId: 1n,
931
934
  expiry: 1234567890,
932
935
  type: 'p256',
933
936
  limits: [
@@ -959,7 +962,7 @@ describe('serialize', () => {
959
962
 
960
963
  const serialized = TxEnvelopeTempo.serialize(transaction)
961
964
  expect(serialized).toMatchInlineSnapshot(
962
- `"0x76f8e301808080d8d79470997970c51812dc3a010c7d01b50e0d17dc79c88080c0808080808080c0f8bcf7800194be95c3f554e9fc85ec51be69a3d807a0d55bcf2c84499602d2dad99420c000000000000000000000000000000000000183989680b88201ccbb3485d4726235f13cb15ef394fb7158179fb7b1925eccec0147671090c52e77c3c53373cc1e3b05e7c23f609deb17cea8fe097300c45411237e9fe4166b35ad8ac16e167d6992c3e120d7f17d2376bc1cbcf30c46ba6dd00ce07303e742f511edf6ce1c32de66846f56afa7be1cbd729bc35750b6d0cdcf3ec9d75461aba001"`,
965
+ `"0x76f8e301808080d8d79470997970c51812dc3a010c7d01b50e0d17dc79c88080c0808080808080c0f8bcf7010194be95c3f554e9fc85ec51be69a3d807a0d55bcf2c84499602d2dad99420c000000000000000000000000000000000000183989680b88201ccbb3485d4726235f13cb15ef394fb7158179fb7b1925eccec0147671090c52e77c3c53373cc1e3b05e7c23f609deb17cea8fe097300c45411237e9fe4166b35ad8ac16e167d6992c3e120d7f17d2376bc1cbcf30c46ba6dd00ce07303e742f511edf6ce1c32de66846f56afa7be1cbd729bc35750b6d0cdcf3ec9d75461aba001"`,
963
966
  )
964
967
 
965
968
  const deserialized = TxEnvelopeTempo.deserialize(serialized)
@@ -979,6 +982,7 @@ describe('serialize', () => {
979
982
 
980
983
  const keyAuthorization = KeyAuthorization.from({
981
984
  address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
985
+ chainId: 1n,
982
986
  expiry: 1234567890,
983
987
  type: 'webAuthn',
984
988
  limits: [
@@ -1010,7 +1014,7 @@ describe('serialize', () => {
1010
1014
 
1011
1015
  const serialized = TxEnvelopeTempo.serialize(transaction)
1012
1016
  expect(serialized).toMatchInlineSnapshot(
1013
- `"0x76f9016501808080d8d79470997970c51812dc3a010c7d01b50e0d17dc79c88080c0808080808080c0f9013df7800294be95c3f554e9fc85ec51be69a3d807a0d55bcf2c84499602d2dad99420c000000000000000000000000000000000000183989680b901020249960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d976305000000007b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a223371322d3777222c226f726967696e223a22687474703a2f2f6c6f63616c686f7374222c2263726f73734f726967696e223a66616c73657dccbb3485d4726235f13cb15ef394fb7158179fb7b1925eccec0147671090c52e77c3c53373cc1e3b05e7c23f609deb17cea8fe097300c45411237e9fe4166b35ad8ac16e167d6992c3e120d7f17d2376bc1cbcf30c46ba6dd00ce07303e742f511edf6ce1c32de66846f56afa7be1cbd729bc35750b6d0cdcf3ec9d75461aba0"`,
1017
+ `"0x76f9016501808080d8d79470997970c51812dc3a010c7d01b50e0d17dc79c88080c0808080808080c0f9013df7010294be95c3f554e9fc85ec51be69a3d807a0d55bcf2c84499602d2dad99420c000000000000000000000000000000000000183989680b901020249960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d976305000000007b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a223371322d3777222c226f726967696e223a22687474703a2f2f6c6f63616c686f7374222c2263726f73734f726967696e223a66616c73657dccbb3485d4726235f13cb15ef394fb7158179fb7b1925eccec0147671090c52e77c3c53373cc1e3b05e7c23f609deb17cea8fe097300c45411237e9fe4166b35ad8ac16e167d6992c3e120d7f17d2376bc1cbcf30c46ba6dd00ce07303e742f511edf6ce1c32de66846f56afa7be1cbd729bc35750b6d0cdcf3ec9d75461aba0"`,
1014
1018
  )
1015
1019
 
1016
1020
  // Verify roundtrip
@@ -779,16 +779,67 @@ export declare namespace serialize {
779
779
  * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })
780
780
  * ```
781
781
  *
782
+ * @example
783
+ * ### Access Keys
784
+ *
785
+ * When signing as an access key on behalf of a root account, pass the
786
+ * `from` option with the root account address. This computes
787
+ * `keccak256(0x04 || sigHash || from)` which binds the signature to the
788
+ * specific user account (V2 keychain format).
789
+ *
790
+ * ```ts twoslash
791
+ * // @noErrors
792
+ * import { Secp256k1 } from 'ox'
793
+ * import { TxEnvelopeTempo, SignatureEnvelope } from 'ox/tempo'
794
+ *
795
+ * const envelope = TxEnvelopeTempo.from({
796
+ * chainId: 1,
797
+ * calls: [{
798
+ * data: '0xdeadbeef',
799
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
800
+ * }],
801
+ * nonce: 0n,
802
+ * maxFeePerGas: 1000000000n,
803
+ * gas: 21000n,
804
+ * })
805
+ *
806
+ * const payload = TxEnvelopeTempo.getSignPayload(envelope, { from: '0x...' }) // [!code focus]
807
+ *
808
+ * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })
809
+ *
810
+ * const signed = TxEnvelopeTempo.serialize(envelope, {
811
+ * signature: SignatureEnvelope.from({
812
+ * userAddress: from,
813
+ * inner: SignatureEnvelope.from(signature),
814
+ * }),
815
+ * })
816
+ * ```
817
+ *
782
818
  * @param envelope - The transaction envelope to get the sign payload for.
819
+ * @param options - Options.
783
820
  * @returns The sign payload.
784
821
  */
785
822
  export function getSignPayload(
786
823
  envelope: TxEnvelopeTempo,
824
+ options: getSignPayload.Options = {},
787
825
  ): getSignPayload.ReturnValue {
788
- return hash(envelope, { presign: true })
826
+ const sigHash = hash(envelope, { presign: true })
827
+ if (options.from)
828
+ return Hash.keccak256(Hex.concat('0x04', sigHash, options.from))
829
+ return sigHash
789
830
  }
790
831
 
791
832
  export declare namespace getSignPayload {
833
+ type Options = {
834
+ /**
835
+ * The root account address for access key signing.
836
+ *
837
+ * When provided, computes `keccak256(0x04 || sigHash || from)` instead of
838
+ * the raw `sigHash`, binding the access key signature to the specific user account.
839
+ */
840
+ from?: Address.Address | undefined
841
+ }
842
+
792
843
  type ReturnValue = Hex.Hex
793
844
 
794
845
  type ErrorType = hash.ErrorType | Errors.GlobalErrorType
package/tempo/e2e.test.ts CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  } from 'ox'
10
10
  import { getTransactionCount } from 'viem/actions'
11
11
  import { beforeEach, describe, expect, test } from 'vitest'
12
- import { chain, client, fundAddress } from '../../test/tempo/config.js'
12
+ import { chain, client, fundAddress, nodeEnv } from '../../test/tempo/config.js'
13
13
  import {
14
14
  AuthorizationTempo,
15
15
  KeyAuthorization,
@@ -20,6 +20,8 @@ import * as TransactionReceipt from './TransactionReceipt.js'
20
20
  import * as TxEnvelopeTempo from './TxEnvelopeTempo.js'
21
21
 
22
22
  const chainId = chain.id
23
+ // TODO: remove when v2 keychain signatures are deployed to testnet.
24
+ const keychainVersion = nodeEnv === 'localnet' ? 'v2' : undefined
23
25
 
24
26
  test('behavior: default (secp256k1)', async () => {
25
27
  const privateKey = Secp256k1.randomPrivateKey()
@@ -806,6 +808,7 @@ describe('behavior: keyAuthorization', () => {
806
808
 
807
809
  const keyAuth = KeyAuthorization.from({
808
810
  address: access.address,
811
+ chainId: BigInt(chain.id),
809
812
  type: 'secp256k1',
810
813
  })
811
814
 
@@ -839,7 +842,9 @@ describe('behavior: keyAuthorization', () => {
839
842
  })
840
843
 
841
844
  const signature = Secp256k1.sign({
842
- payload: TxEnvelopeTempo.getSignPayload(transaction),
845
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
846
+ from: keychainVersion === 'v2' ? root.address : undefined,
847
+ }),
843
848
  privateKey: access.privateKey,
844
849
  })
845
850
 
@@ -848,6 +853,7 @@ describe('behavior: keyAuthorization', () => {
848
853
  userAddress: root.address,
849
854
  inner: SignatureEnvelope.from(signature),
850
855
  type: 'keychain',
856
+ version: keychainVersion,
851
857
  }),
852
858
  })
853
859
 
@@ -978,7 +984,9 @@ describe('behavior: keyAuthorization', () => {
978
984
  })
979
985
 
980
986
  const signature = Secp256k1.sign({
981
- payload: TxEnvelopeTempo.getSignPayload(transaction),
987
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
988
+ from: keychainVersion === 'v2' ? root.address : undefined,
989
+ }),
982
990
  privateKey: access.privateKey,
983
991
  })
984
992
 
@@ -987,6 +995,7 @@ describe('behavior: keyAuthorization', () => {
987
995
  userAddress: root.address,
988
996
  inner: SignatureEnvelope.from(signature),
989
997
  type: 'keychain',
998
+ version: keychainVersion,
990
999
  }),
991
1000
  })
992
1001
 
@@ -1012,6 +1021,7 @@ describe('behavior: keyAuthorization', () => {
1012
1021
 
1013
1022
  const keyAuth = KeyAuthorization.from({
1014
1023
  address: access.address,
1024
+ chainId: BigInt(chainId),
1015
1025
  type: 'p256',
1016
1026
  })
1017
1027
 
@@ -1045,7 +1055,9 @@ describe('behavior: keyAuthorization', () => {
1045
1055
  })
1046
1056
 
1047
1057
  const signature = P256.sign({
1048
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1058
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1059
+ from: keychainVersion === 'v2' ? root.address : undefined,
1060
+ }),
1049
1061
  privateKey: access.privateKey,
1050
1062
  })
1051
1063
 
@@ -1059,6 +1071,7 @@ describe('behavior: keyAuthorization', () => {
1059
1071
  type: 'p256',
1060
1072
  }),
1061
1073
  type: 'keychain',
1074
+ version: keychainVersion,
1062
1075
  }),
1063
1076
  })
1064
1077
 
@@ -1190,7 +1203,9 @@ describe('behavior: keyAuthorization', () => {
1190
1203
  })
1191
1204
 
1192
1205
  const signature = P256.sign({
1193
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1206
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1207
+ from: keychainVersion === 'v2' ? root.address : undefined,
1208
+ }),
1194
1209
  privateKey: access.privateKey,
1195
1210
  })
1196
1211
 
@@ -1204,6 +1219,7 @@ describe('behavior: keyAuthorization', () => {
1204
1219
  type: 'p256',
1205
1220
  }),
1206
1221
  type: 'keychain',
1222
+ version: keychainVersion,
1207
1223
  }),
1208
1224
  })
1209
1225
 
@@ -1227,6 +1243,7 @@ describe('behavior: keyAuthorization', () => {
1227
1243
 
1228
1244
  const keyAuth = KeyAuthorization.from({
1229
1245
  address: access.address,
1246
+ chainId: BigInt(chainId),
1230
1247
  type: 'p256',
1231
1248
  })
1232
1249
 
@@ -1260,7 +1277,9 @@ describe('behavior: keyAuthorization', () => {
1260
1277
  })
1261
1278
 
1262
1279
  const signature = await WebCryptoP256.sign({
1263
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1280
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1281
+ from: keychainVersion === 'v2' ? root.address : undefined,
1282
+ }),
1264
1283
  privateKey: keyPair.privateKey,
1265
1284
  })
1266
1285
 
@@ -1274,6 +1293,7 @@ describe('behavior: keyAuthorization', () => {
1274
1293
  type: 'p256',
1275
1294
  }),
1276
1295
  type: 'keychain',
1296
+ version: keychainVersion,
1277
1297
  }),
1278
1298
  })
1279
1299
 
@@ -1366,7 +1386,9 @@ describe('behavior: keyAuthorization', () => {
1366
1386
  })
1367
1387
 
1368
1388
  const signature = await WebCryptoP256.sign({
1369
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1389
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1390
+ from: keychainVersion === 'v2' ? root.address : undefined,
1391
+ }),
1370
1392
  privateKey: keyPair.privateKey,
1371
1393
  })
1372
1394
 
@@ -1380,6 +1402,7 @@ describe('behavior: keyAuthorization', () => {
1380
1402
  type: 'p256',
1381
1403
  }),
1382
1404
  type: 'keychain',
1405
+ version: keychainVersion,
1383
1406
  }),
1384
1407
  })
1385
1408
 
@@ -1404,6 +1427,7 @@ describe('behavior: keyAuthorization', () => {
1404
1427
 
1405
1428
  const keyAuth = KeyAuthorization.from({
1406
1429
  address: access.address,
1430
+ chainId: BigInt(chainId),
1407
1431
  type: 'p256',
1408
1432
  expiry: Math.floor(Date.now() / 1000) + 60 * 60,
1409
1433
  limits: [
@@ -1444,7 +1468,9 @@ describe('behavior: keyAuthorization', () => {
1444
1468
  })
1445
1469
 
1446
1470
  const signature = P256.sign({
1447
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1471
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1472
+ from: keychainVersion === 'v2' ? root.address : undefined,
1473
+ }),
1448
1474
  privateKey: access.privateKey,
1449
1475
  })
1450
1476
 
@@ -1458,6 +1484,7 @@ describe('behavior: keyAuthorization', () => {
1458
1484
  type: 'p256',
1459
1485
  }),
1460
1486
  type: 'keychain',
1487
+ version: keychainVersion,
1461
1488
  }),
1462
1489
  })
1463
1490
 
@@ -1498,6 +1525,7 @@ describe('behavior: keyAuthorization', () => {
1498
1525
 
1499
1526
  const keyAuth = KeyAuthorization.from({
1500
1527
  address: access.address,
1528
+ chainId: BigInt(chainId),
1501
1529
  type: 'secp256k1',
1502
1530
  limits: [
1503
1531
  {
@@ -1537,7 +1565,9 @@ describe('behavior: keyAuthorization', () => {
1537
1565
  })
1538
1566
 
1539
1567
  const signature = Secp256k1.sign({
1540
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1568
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1569
+ from: keychainVersion === 'v2' ? root.address : undefined,
1570
+ }),
1541
1571
  privateKey: access.privateKey,
1542
1572
  })
1543
1573
 
@@ -1546,6 +1576,7 @@ describe('behavior: keyAuthorization', () => {
1546
1576
  userAddress: root.address,
1547
1577
  inner: SignatureEnvelope.from(signature),
1548
1578
  type: 'keychain',
1579
+ version: keychainVersion,
1549
1580
  }),
1550
1581
  })
1551
1582
 
@@ -1586,6 +1617,7 @@ describe('behavior: keyAuthorization', () => {
1586
1617
 
1587
1618
  const keyAuth = KeyAuthorization.from({
1588
1619
  address: access.address,
1620
+ chainId: BigInt(chainId),
1589
1621
  type: 'secp256k1',
1590
1622
  expiry: Math.floor(Date.now() / 1000) + 60 * 60,
1591
1623
  })
@@ -1620,7 +1652,9 @@ describe('behavior: keyAuthorization', () => {
1620
1652
  })
1621
1653
 
1622
1654
  const signature = Secp256k1.sign({
1623
- payload: TxEnvelopeTempo.getSignPayload(transaction),
1655
+ payload: TxEnvelopeTempo.getSignPayload(transaction, {
1656
+ from: keychainVersion === 'v2' ? root.address : undefined,
1657
+ }),
1624
1658
  privateKey: access.privateKey,
1625
1659
  })
1626
1660
 
@@ -1629,6 +1663,7 @@ describe('behavior: keyAuthorization', () => {
1629
1663
  userAddress: root.address,
1630
1664
  inner: SignatureEnvelope.from(signature),
1631
1665
  type: 'keychain',
1666
+ version: keychainVersion,
1632
1667
  }),
1633
1668
  })
1634
1669
 
package/tempo/index.ts CHANGED
@@ -120,6 +120,7 @@ export * as PoolId from './PoolId.js'
120
120
  * @category Reference
121
121
  */
122
122
  export * as SignatureEnvelope from './SignatureEnvelope.js'
123
+
123
124
  /**
124
125
  * Tempo address encoding/decoding utilities for human-readable addresses.
125
126
  *
@@ -132,15 +133,16 @@ export * as SignatureEnvelope from './SignatureEnvelope.js'
132
133
  * import { TempoAddress } from 'ox/tempo'
133
134
  *
134
135
  * const encoded = TempoAddress.format('0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28')
135
- * // @log: 'tempo1wskntnrxxnq9x2f95wuyf0y7wk2l90fg8zd8djs'
136
+ * // @log: 'tempo1wskntnrxxnq9x2f95wuyf0y7wk2l90fg0hlz9j'
136
137
  *
137
138
  * const { address, zoneId } = TempoAddress.parse(encoded)
138
- * // @log: { address: '0x742d35CC6634c0532925a3B844bc9e7595F2Bd28' }
139
+ * // @log: { address: '0x742d35CC6634c0532925a3B844bc9e7595F2Bd28', zoneId: undefined }
139
140
  * ```
140
141
  *
141
142
  * @category Reference
142
143
  */
143
144
  export * as TempoAddress from './TempoAddress.js'
145
+
144
146
  /**
145
147
  * Tick-based pricing utilities for DEX price conversions.
146
148
  *
@@ -161,6 +163,7 @@ export * as TempoAddress from './TempoAddress.js'
161
163
  * @category Reference
162
164
  */
163
165
  export * as Tick from './Tick.js'
166
+
164
167
  /**
165
168
  * TIP-20 token ID utilities for converting between token IDs and addresses.
166
169
  *
@@ -182,6 +185,7 @@ export * as Tick from './Tick.js'
182
185
  * @category Reference
183
186
  */
184
187
  export * as TokenId from './TokenId.js'
188
+
185
189
  /**
186
190
  * Token role utilities for serializing role identifiers to keccak256 hashes.
187
191
  *
package/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export const version = '0.13.2'
2
+ export const version = '0.14.0'