ox 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ox
2
2
 
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#348](https://github.com/wevm/ox/pull/348) [`fcd16f0`](https://github.com/wevm/ox/commit/fcd16f0c0b76bcc69c14205428dfb56f65d931c2) Thanks [@struong](https://github.com/struong)! - Added `WithdrawalSenderTag` utilities for deriving Tempo Zone withdrawal sender tags.
8
+
3
9
  ## 1.4.0
4
10
 
5
11
  ### Minor Changes
@@ -0,0 +1,36 @@
1
+ import * as Address from '../core/Address.js';
2
+ import * as Hex from '../core/Hex.js';
3
+ /**
4
+ * Derives the sender tag that identifies the indexed parent-chain
5
+ * `WithdrawalProcessed` event for a Zone withdrawal.
6
+ *
7
+ * The `transactionHash` is the Zone transaction containing the
8
+ * `ZoneOutbox.requestWithdrawal` call. The protocol defines the sender tag as
9
+ * `keccak256(abi.encodePacked(sender, transactionHash))`.
10
+ *
11
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
12
+ *
13
+ * @example
14
+ * ```ts twoslash
15
+ * import { WithdrawalSenderTag } from 'ox/tempo'
16
+ *
17
+ * const senderTag = WithdrawalSenderTag.from({
18
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
19
+ * transactionHash:
20
+ * '0xabababababababababababababababababababababababababababababababab'
21
+ * })
22
+ * ```
23
+ *
24
+ * @param value - Withdrawal sender and Zone transaction hash.
25
+ * @returns The sender tag.
26
+ */
27
+ export declare function from(value: from.Value): Hex.Hex;
28
+ export declare namespace from {
29
+ type Value = {
30
+ /** Address that requested the withdrawal. */
31
+ sender: Address.Address;
32
+ /** Hash of the Zone transaction containing `ZoneOutbox.requestWithdrawal`. */
33
+ transactionHash: Hex.Hex;
34
+ };
35
+ }
36
+ //# sourceMappingURL=WithdrawalSenderTag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WithdrawalSenderTag.d.ts","sourceRoot":"","sources":["../../src/tempo/WithdrawalSenderTag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAQ/C;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAY,KAAK,GAAG;QAClB,6CAA6C;QAC7C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;QACvB,8EAA8E;QAC9E,eAAe,EAAE,GAAG,CAAC,GAAG,CAAA;KACzB,CAAA;CACF"}
@@ -0,0 +1,31 @@
1
+ import * as AbiParameters from '../core/AbiParameters.js';
2
+ import * as Hash from '../core/Hash.js';
3
+ /**
4
+ * Derives the sender tag that identifies the indexed parent-chain
5
+ * `WithdrawalProcessed` event for a Zone withdrawal.
6
+ *
7
+ * The `transactionHash` is the Zone transaction containing the
8
+ * `ZoneOutbox.requestWithdrawal` call. The protocol defines the sender tag as
9
+ * `keccak256(abi.encodePacked(sender, transactionHash))`.
10
+ *
11
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
12
+ *
13
+ * @example
14
+ * ```ts twoslash
15
+ * import { WithdrawalSenderTag } from 'ox/tempo'
16
+ *
17
+ * const senderTag = WithdrawalSenderTag.from({
18
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
19
+ * transactionHash:
20
+ * '0xabababababababababababababababababababababababababababababababab'
21
+ * })
22
+ * ```
23
+ *
24
+ * @param value - Withdrawal sender and Zone transaction hash.
25
+ * @returns The sender tag.
26
+ */
27
+ export function from(value) {
28
+ const { sender, transactionHash } = value;
29
+ return Hash.keccak256(AbiParameters.encodePacked(['address', 'bytes32'], [sender, transactionHash]));
30
+ }
31
+ //# sourceMappingURL=WithdrawalSenderTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WithdrawalSenderTag.js","sourceRoot":"","sources":["../../src/tempo/WithdrawalSenderTag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAA;AAEzD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAGvC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,IAAI,CAAC,KAAiB;IACpC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACzC,OAAO,IAAI,CAAC,SAAS,CACnB,aAAa,CAAC,YAAY,CACxB,CAAC,SAAS,EAAE,SAAS,CAAC,EACtB,CAAC,MAAM,EAAE,eAAe,CAAC,CAC1B,CACF,CAAA;AACH,CAAC"}
@@ -524,6 +524,29 @@ export * as VirtualAddress from './VirtualAddress.js';
524
524
  * @category Reference
525
525
  */
526
526
  export * as VirtualMaster from './VirtualMaster.js';
527
+ /**
528
+ * Utilities for deriving the sender tag that correlates a Zone withdrawal with
529
+ * its indexed parent-chain `WithdrawalProcessed` event.
530
+ *
531
+ * The sender tag commits to the withdrawal sender and the Zone transaction hash
532
+ * containing the `ZoneOutbox.requestWithdrawal` call.
533
+ *
534
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
535
+ *
536
+ * @example
537
+ * ```ts twoslash
538
+ * import { WithdrawalSenderTag } from 'ox/tempo'
539
+ *
540
+ * const senderTag = WithdrawalSenderTag.from({
541
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
542
+ * transactionHash:
543
+ * '0xabababababababababababababababababababababababababababababababab'
544
+ * })
545
+ * ```
546
+ *
547
+ * @category Reference
548
+ */
549
+ export * as WithdrawalSenderTag from './WithdrawalSenderTag.js';
527
550
  /**
528
551
  * Zone ID utilities for converting between zone IDs and zone chain IDs.
529
552
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
@@ -525,6 +525,29 @@ export * as VirtualAddress from './VirtualAddress.js';
525
525
  * @category Reference
526
526
  */
527
527
  export * as VirtualMaster from './VirtualMaster.js';
528
+ /**
529
+ * Utilities for deriving the sender tag that correlates a Zone withdrawal with
530
+ * its indexed parent-chain `WithdrawalProcessed` event.
531
+ *
532
+ * The sender tag commits to the withdrawal sender and the Zone transaction hash
533
+ * containing the `ZoneOutbox.requestWithdrawal` call.
534
+ *
535
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
536
+ *
537
+ * @example
538
+ * ```ts twoslash
539
+ * import { WithdrawalSenderTag } from 'ox/tempo'
540
+ *
541
+ * const senderTag = WithdrawalSenderTag.from({
542
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
543
+ * transactionHash:
544
+ * '0xabababababababababababababababababababababababababababababababab'
545
+ * })
546
+ * ```
547
+ *
548
+ * @category Reference
549
+ */
550
+ export * as WithdrawalSenderTag from './WithdrawalSenderTag.js';
528
551
  /**
529
552
  * Zone ID utilities for converting between zone IDs and zone chain IDs.
530
553
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ox",
3
3
  "description": "Ethereum Standard Library",
4
4
  "type": "module",
5
- "version": "1.4.0",
5
+ "version": "1.5.0",
6
6
  "main": "./dist/index.js",
7
7
  "sideEffects": false,
8
8
  "license": "MIT",
@@ -657,6 +657,11 @@
657
657
  "types": "./dist/tempo/VirtualMaster.d.ts",
658
658
  "default": "./dist/tempo/VirtualMaster.js"
659
659
  },
660
+ "./tempo/WithdrawalSenderTag": {
661
+ "src": "./src/tempo/WithdrawalSenderTag.ts",
662
+ "types": "./dist/tempo/WithdrawalSenderTag.d.ts",
663
+ "default": "./dist/tempo/WithdrawalSenderTag.js"
664
+ },
660
665
  "./tempo/ZoneId": {
661
666
  "src": "./src/tempo/ZoneId.ts",
662
667
  "types": "./dist/tempo/ZoneId.d.ts",
@@ -0,0 +1,13 @@
1
+ import type { Hex } from 'ox'
2
+ import { WithdrawalSenderTag } from 'ox/tempo'
3
+ import { expectTypeOf, test } from 'vp/test'
4
+
5
+ test('from', () => {
6
+ expectTypeOf(
7
+ WithdrawalSenderTag.from({
8
+ sender: '0x1234567890abcdef1234567890abcdef12345678',
9
+ transactionHash:
10
+ '0xabababababababababababababababababababababababababababababababab',
11
+ }),
12
+ ).toEqualTypeOf<Hex.Hex>()
13
+ })
@@ -0,0 +1,22 @@
1
+ import { WithdrawalSenderTag } from 'ox/tempo'
2
+ import { expect, test } from 'vp/test'
3
+
4
+ test('from', () => {
5
+ const senderTag = WithdrawalSenderTag.from({
6
+ sender: '0x1234567890abcdef1234567890abcdef12345678',
7
+ transactionHash:
8
+ '0xabababababababababababababababababababababababababababababababab',
9
+ })
10
+ expect(senderTag).toMatchInlineSnapshot(
11
+ `"0x3362fade7333b56b9f3582089ec5915b8a6f6ac13e73a7f90c169e3eb81d8a5e"`,
12
+ )
13
+ })
14
+
15
+ test('deterministic', () => {
16
+ const value = {
17
+ sender: '0x1234567890abcdef1234567890abcdef12345678',
18
+ transactionHash:
19
+ '0xabababababababababababababababababababababababababababababababab',
20
+ } as const
21
+ expect(WithdrawalSenderTag.from(value)).toBe(WithdrawalSenderTag.from(value))
22
+ })
@@ -0,0 +1,47 @@
1
+ import * as AbiParameters from '../core/AbiParameters.js'
2
+ import * as Address from '../core/Address.js'
3
+ import * as Hash from '../core/Hash.js'
4
+ import * as Hex from '../core/Hex.js'
5
+
6
+ /**
7
+ * Derives the sender tag that identifies the indexed parent-chain
8
+ * `WithdrawalProcessed` event for a Zone withdrawal.
9
+ *
10
+ * The `transactionHash` is the Zone transaction containing the
11
+ * `ZoneOutbox.requestWithdrawal` call. The protocol defines the sender tag as
12
+ * `keccak256(abi.encodePacked(sender, transactionHash))`.
13
+ *
14
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
15
+ *
16
+ * @example
17
+ * ```ts twoslash
18
+ * import { WithdrawalSenderTag } from 'ox/tempo'
19
+ *
20
+ * const senderTag = WithdrawalSenderTag.from({
21
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
22
+ * transactionHash:
23
+ * '0xabababababababababababababababababababababababababababababababab'
24
+ * })
25
+ * ```
26
+ *
27
+ * @param value - Withdrawal sender and Zone transaction hash.
28
+ * @returns The sender tag.
29
+ */
30
+ export function from(value: from.Value): Hex.Hex {
31
+ const { sender, transactionHash } = value
32
+ return Hash.keccak256(
33
+ AbiParameters.encodePacked(
34
+ ['address', 'bytes32'],
35
+ [sender, transactionHash],
36
+ ),
37
+ )
38
+ }
39
+
40
+ export declare namespace from {
41
+ export type Value = {
42
+ /** Address that requested the withdrawal. */
43
+ sender: Address.Address
44
+ /** Hash of the Zone transaction containing `ZoneOutbox.requestWithdrawal`. */
45
+ transactionHash: Hex.Hex
46
+ }
47
+ }
@@ -529,6 +529,30 @@ export * as VirtualAddress from './VirtualAddress.js'
529
529
  */
530
530
  export * as VirtualMaster from './VirtualMaster.js'
531
531
 
532
+ /**
533
+ * Utilities for deriving the sender tag that correlates a Zone withdrawal with
534
+ * its indexed parent-chain `WithdrawalProcessed` event.
535
+ *
536
+ * The sender tag commits to the withdrawal sender and the Zone transaction hash
537
+ * containing the `ZoneOutbox.requestWithdrawal` call.
538
+ *
539
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
540
+ *
541
+ * @example
542
+ * ```ts twoslash
543
+ * import { WithdrawalSenderTag } from 'ox/tempo'
544
+ *
545
+ * const senderTag = WithdrawalSenderTag.from({
546
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
547
+ * transactionHash:
548
+ * '0xabababababababababababababababababababababababababababababababab'
549
+ * })
550
+ * ```
551
+ *
552
+ * @category Reference
553
+ */
554
+ export * as WithdrawalSenderTag from './WithdrawalSenderTag.js'
555
+
532
556
  /**
533
557
  * Zone ID utilities for converting between zone IDs and zone chain IDs.
534
558
  *
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export const version = '1.4.0'
2
+ export const version = '1.5.0'