diff --git a/.changeset/abi-anonymous-events.md b/.changeset/abi-anonymous-events.md deleted file mode 100644 index 18977836..00000000 --- a/.changeset/abi-anonymous-events.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiEvent.encode` and `AbiEvent.decode` to honor the `anonymous` flag -- anonymous events no longer prepend or expect a selector topic. diff --git a/.changeset/abi-constructor-bytecode-prefix.md b/.changeset/abi-constructor-bytecode-prefix.md deleted file mode 100644 index a7eea289..00000000 --- a/.changeset/abi-constructor-bytecode-prefix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiConstructor.decode` to assert that `data` begins with the provided `bytecode` and allowed constructor encoding and decoding without an ABI constructor when no arguments are present. diff --git a/.changeset/abi-decode-checksum-default.md b/.changeset/abi-decode-checksum-default.md deleted file mode 100644 index 97bb2bdd..00000000 --- a/.changeset/abi-decode-checksum-default.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'ox': major ---- - -**Breaking:** Changed ABI decode helpers to checksum decoded addresses by default. - -```diff -- AbiParameters.decode(parameters, data) -+ AbiParameters.decode(parameters, data, { checksumAddress: false }) -``` diff --git a/.changeset/abi-error-extract.md b/.changeset/abi-error-extract.md deleted file mode 100644 index ced15cb6..00000000 --- a/.changeset/abi-error-extract.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added `AbiError.extract` for selecting and decoding ABI errors from revert data. diff --git a/.changeset/abi-event-decode-log.md b/.changeset/abi-event-decode-log.md deleted file mode 100644 index a35feb07..00000000 --- a/.changeset/abi-event-decode-log.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added `AbiEvent.decodeLog` and `AbiEvent.extractLogs` for decoding and extracting event logs directly from an ABI. diff --git a/.changeset/abi-event-hex-topic-normalization.md b/.changeset/abi-event-hex-topic-normalization.md deleted file mode 100644 index 0beffbee..00000000 --- a/.changeset/abi-event-hex-topic-normalization.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiEvent.assertArgs` and `AbiEvent.encode` to always hash `string`/`bytes` indexed inputs to hex via `Hash.keccak256(value, { as: 'Hex' })`, so topic comparisons and emitted topics are reliably hex regardless of whether the input is a `Hex.Hex` or a `Bytes.Bytes`. diff --git a/.changeset/abi-function-decode-data-selector.md b/.changeset/abi-function-decode-data-selector.md deleted file mode 100644 index f9717977..00000000 --- a/.changeset/abi-function-decode-data-selector.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added an `AbiFunction.decodeData(abi, data)` overload that extracts the ABI function from the calldata selector. diff --git a/.changeset/abi-function-selector-only-calldata.md b/.changeset/abi-function-selector-only-calldata.md deleted file mode 100644 index aef7b97a..00000000 --- a/.changeset/abi-function-selector-only-calldata.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiFunction.decodeData` to throw `AbiParameters.DataSizeTooSmallError` when the calldata is exactly the 4-byte selector but the function declares inputs, instead of silently returning `undefined`. diff --git a/.changeset/abi-human-readable-ox.md b/.changeset/abi-human-readable-ox.md deleted file mode 100644 index bd00fc2e..00000000 --- a/.changeset/abi-human-readable-ox.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added human-readable ABI parsing and formatting utilities from `abitype` to ox, including runtime validation and type-level safety for `Abi`, `AbiItem`, `AbiParameters`, and the new `AbiParameter` module. diff --git a/.changeset/abi-parameters-data-size-bound.md b/.changeset/abi-parameters-data-size-bound.md deleted file mode 100644 index 9f3b514e..00000000 --- a/.changeset/abi-parameters-data-size-bound.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiParameters.decode` to surface a `DataSizeTooSmallError` (with parameter context) instead of leaking a `Cursor.PositionOutOfBoundsError` when the encoded payload is shorter than the parameter list requires. diff --git a/.changeset/abi-parameters-encode-packed.md b/.changeset/abi-parameters-encode-packed.md deleted file mode 100644 index 5bc14669..00000000 --- a/.changeset/abi-parameters-encode-packed.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiParameters.encodePacked` to validate that fixed-array lengths match the supplied value, throwing `ArrayLengthMismatchError` (e.g. for `uint256[2]` with three elements) instead of silently encoding the wrong arity. diff --git a/.changeset/abi-standalone-zero-width-arrays.md b/.changeset/abi-standalone-zero-width-arrays.md deleted file mode 100644 index 2c5a742b..00000000 --- a/.changeset/abi-standalone-zero-width-arrays.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AbiParameters.decode` for standalone zero-length fixed arrays of dynamic types (e.g. `string[0]`). diff --git a/.changeset/account-proof-converters.md b/.changeset/account-proof-converters.md deleted file mode 100644 index 0e2f7541..00000000 --- a/.changeset/account-proof-converters.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `AccountProof.fromRpc` and `AccountProof.toRpc` for converting between RPC and instantiated `AccountProof` shapes returned by `eth_getProof`. diff --git a/.changeset/address-keys-keystore-async-pbkdf2.md b/.changeset/address-keys-keystore-async-pbkdf2.md deleted file mode 100644 index 5aaff35b..00000000 --- a/.changeset/address-keys-keystore-async-pbkdf2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Keystore.toKeyAsync` to use the async PBKDF2 implementation -- previously it called the synchronous `pbkdf2` helper and blocked the main thread when decrypting PBKDF2-backed keystores. diff --git a/.changeset/address-keys-keystore-kdf-validation.md b/.changeset/address-keys-keystore-kdf-validation.md deleted file mode 100644 index 3f2cf2a2..00000000 --- a/.changeset/address-keys-keystore-kdf-validation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added validation of KDF parameters in `Keystore.pbkdf2`, `Keystore.pbkdf2Async`, `Keystore.scrypt`, and `Keystore.scryptAsync` -- PBKDF2 now requires `iterations` to be an integer `>= 1000`, and scrypt now requires `n` to be a power of two `>= 1024` with positive integer `r` and `p`, rejecting trivially weak parameters that previously produced formally valid but cryptographically insecure keystores. diff --git a/.changeset/address-keys-keystore-scrypt-async-pr.md b/.changeset/address-keys-keystore-scrypt-async-pr.md deleted file mode 100644 index 7448ebbf..00000000 --- a/.changeset/address-keys-keystore-scrypt-async-pr.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Keystore.scryptAsync` to honor caller-provided `p` and `r` options -- previously they were silently overridden with `p=8` and `r=1`, producing keystores that disagreed with the synchronous `Keystore.scrypt` for the same inputs. diff --git a/.changeset/address-keys-mnemonic-default.md b/.changeset/address-keys-mnemonic-default.md deleted file mode 100644 index aac96a3e..00000000 --- a/.changeset/address-keys-mnemonic-default.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Mnemonic.toPrivateKey` to return `Bytes` by default to match its declared return type -- previously it returned a `Hex` string at runtime even though the default `as` was `'Bytes'`. diff --git a/.changeset/anchor-crypto-webcrypto-verify-padding.md b/.changeset/anchor-crypto-webcrypto-verify-padding.md deleted file mode 100644 index f7cc442d..00000000 --- a/.changeset/anchor-crypto-webcrypto-verify-padding.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `WebCryptoP256.verify` rejecting valid signatures whose `r` or `s` value has a leading zero byte by padding both components to 32 bytes. diff --git a/.changeset/anchor-publickey-assert-shape.md b/.changeset/anchor-publickey-assert-shape.md deleted file mode 100644 index 1c31d501..00000000 --- a/.changeset/anchor-publickey-assert-shape.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `PublicKey.assert` so it rejects objects missing `x`/`y` when the `compressed` option is set explicitly. diff --git a/.changeset/anchor-publickey-fromhex-validate.md b/.changeset/anchor-publickey-fromhex-validate.md deleted file mode 100644 index a3dbd663..00000000 --- a/.changeset/anchor-publickey-fromhex-validate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `PublicKey.fromHex` and `PublicKey.fromBytes` so they reject deserialized public keys with an invalid SEC1 prefix. diff --git a/.changeset/block-state-block-fromrpc-required-fields.md b/.changeset/block-state-block-fromrpc-required-fields.md deleted file mode 100644 index 175399a5..00000000 --- a/.changeset/block-state-block-fromrpc-required-fields.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Preserved `Block.fromRpc().totalDifficulty` as `undefined` instead of silently coercing missing values to `0n`. diff --git a/.changeset/block-state-bloom-contains-validate-length.md b/.changeset/block-state-bloom-contains-validate-length.md deleted file mode 100644 index 5fb6b0ab..00000000 --- a/.changeset/block-state-bloom-contains-validate-length.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Made `Bloom.contains` validate the bloom argument length and throw `Bloom.InvalidBloomError` instead of silently returning `false` for malformed bloom inputs. diff --git a/.changeset/block-state-filter-torpc-address-null.md b/.changeset/block-state-filter-torpc-address-null.md deleted file mode 100644 index 0c5b3851..00000000 --- a/.changeset/block-state-filter-torpc-address-null.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Made `Filter.toRpc` preserve explicit `address: null` (and `topics: null`) instead of stripping it via truthy checks. diff --git a/.changeset/block-state-log-block-timestamp.md b/.changeset/block-state-log-block-timestamp.md deleted file mode 100644 index a11a01de..00000000 --- a/.changeset/block-state-log-block-timestamp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added `Log.fromRpc` and `Log.toRpc` support for optional `blockTimestamp` fields. diff --git a/.changeset/block-state-quantity-converters.md b/.changeset/block-state-quantity-converters.md deleted file mode 100644 index 8ca2844d..00000000 --- a/.changeset/block-state-quantity-converters.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Unified the RPC-quantity conversion blocks across `Block`, `BlockOverrides`, and `StateOverrides` behind an internal helper so optional bigint fields with explicit `'0x0'` (e.g. `baseFeePerGas: '0x0'` on a post-merge block) round-trip as `0n` instead of being silently dropped by the previous truthy checks. diff --git a/.changeset/block-state-typed-data-array-validation.md b/.changeset/block-state-typed-data-array-validation.md deleted file mode 100644 index 8a8ab0ad..00000000 --- a/.changeset/block-state-typed-data-array-validation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Validated array element types and fixed-array lengths in `TypedData.assert` and `TypedData.encodeField`, throwing `InvalidArrayError`/`InvalidArrayLengthError` instead of silently passing malformed input through to the encoder. diff --git a/.changeset/block-state-validator-data-validate-address.md b/.changeset/block-state-validator-data-validate-address.md deleted file mode 100644 index 99a95f22..00000000 --- a/.changeset/block-state-validator-data-validate-address.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Made `ValidatorData.encode` call `Address.assert` on the validator argument so malformed validator addresses are rejected instead of producing invalid ERC-191 payloads. diff --git a/.changeset/block-state-value-validation.md b/.changeset/block-state-value-validation.md deleted file mode 100644 index 84464adf..00000000 --- a/.changeset/block-state-value-validation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Tightened `Value.from` input validation to reject malformed numeric strings (`''`, `'.'`, `'-'`, `'-.'`) and to reject non-integer or negative `decimals`, and replaced `Number`/`Math.round` rounding with string-carry rounding so very long fractions no longer lose precision. diff --git a/.changeset/bloom-prepared.md b/.changeset/bloom-prepared.md deleted file mode 100644 index a714f27f..00000000 --- a/.changeset/bloom-prepared.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `Bloom.prepare`, `Bloom.containsPrepared`, and `Bloom.containsHash` for membership checks against a precomputed bloom filter. Use `Bloom.prepare(bloom)` once and `Bloom.containsPrepared(prepared, input)` (or `Bloom.containsHash(prepared, hash)` when the caller already has the keccak hash) inside hot loops to avoid the per-call `Bytes.fromHex` allocation that `Bloom.contains` pays. diff --git a/.changeset/bytes-rlp-odd-length-pad.md b/.changeset/bytes-rlp-odd-length-pad.md deleted file mode 100644 index 744aa3c8..00000000 --- a/.changeset/bytes-rlp-odd-length-pad.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Bytes.fromNumber` and `Rlp.fromHex` rejecting valid odd-nibble hex output produced by `Hex.fromNumber` (e.g. `0x7`, `0x311`); both now even-pad before handing the value to the strict `Bytes.fromHex` parser. diff --git a/.changeset/cosekey-topublickey-bytes-options.md b/.changeset/cosekey-topublickey-bytes-options.md deleted file mode 100644 index b6f878df..00000000 --- a/.changeset/cosekey-topublickey-bytes-options.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `returnByteLength` and `returnDecoded` options to `CoseKey.toPublicKey` and accepted `Uint8Array` input in addition to `Hex`. diff --git a/.changeset/crypto-bls-aggregate-validate.md b/.changeset/crypto-bls-aggregate-validate.md deleted file mode 100644 index 3444934d..00000000 --- a/.changeset/crypto-bls-aggregate-validate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Bls.aggregate` to reject empty arrays and mixed G1/G2 input, and added a fast path that returns the input directly when only one point is supplied. diff --git a/.changeset/crypto-blspoint-frombytes-group.md b/.changeset/crypto-blspoint-frombytes-group.md deleted file mode 100644 index 19099f8d..00000000 --- a/.changeset/crypto-blspoint-frombytes-group.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `BlsPoint.fromBytes` to honor its declared `group` argument and assert the input length matches the requested G1 (48 bytes) or G2 (96 bytes) shape. diff --git a/.changeset/crypto-cosekey-validate-header.md b/.changeset/crypto-cosekey-validate-header.md deleted file mode 100644 index c602c22e..00000000 --- a/.changeset/crypto-cosekey-validate-header.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Hardened `CoseKey.toPublicKey` to reject COSE_Key inputs with a non-P-256 `kty`, `alg`, or `crv` header, or with `x`/`y` byte arrays that are not exactly 32 bytes long. diff --git a/.changeset/crypto-extra-entropy-default-doc.md b/.changeset/crypto-extra-entropy-default-doc.md deleted file mode 100644 index ab9b74e2..00000000 --- a/.changeset/crypto-extra-entropy-default-doc.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Documented `extraEntropy` on `Secp256k1.sign` and `P256.sign` correctly as `@default false` so the JSDoc matches the runtime default. diff --git a/.changeset/crypto-kzg-from-receiver.md b/.changeset/crypto-kzg-from-receiver.md deleted file mode 100644 index 640a34a0..00000000 --- a/.changeset/crypto-kzg-from-receiver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Kzg.from` to preserve `this` binding by wrapping method calls instead of destructuring, so class instances or method-style implementations work correctly. diff --git a/.changeset/crypto-serialized-inputs-and-as-option.md b/.changeset/crypto-serialized-inputs-and-as-option.md deleted file mode 100644 index 3b285b65..00000000 --- a/.changeset/crypto-serialized-inputs-and-as-option.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `as: 'Hex' | 'Bytes' | 'Object'` option to `Secp256k1.sign` / `getPublicKey` / `recoverPublicKey`, `P256.sign` / `getPublicKey` / `recoverPublicKey`, `WebCryptoP256.sign`, and `Bls.sign` / `getPublicKey` (default `'Object'` keeps existing behavior); plus accept `Hex.Hex | Bytes.Bytes | Signature.Signature` for `signature` params and `Hex.Hex | Bytes.Bytes | PublicKey.PublicKey` for `publicKey` params on `verify`, `recoverAddress`, `recoverPublicKey`, `getSharedSecret` across the same modules. diff --git a/.changeset/crypto-webcrypto-doc-corrections.md b/.changeset/crypto-webcrypto-doc-corrections.md deleted file mode 100644 index b8403984..00000000 --- a/.changeset/crypto-webcrypto-doc-corrections.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Documented `WebCryptoP256.sign` low-S normalization as always-on and corrected the `WebCryptoP256.createKeyPair` / `createKeyPairECDH` JSDoc to describe `publicKey` as a `PublicKey.PublicKey`. diff --git a/.changeset/crypto-webcrypto-shared-secret-typed-error.md b/.changeset/crypto-webcrypto-shared-secret-typed-error.md deleted file mode 100644 index 55a6af53..00000000 --- a/.changeset/crypto-webcrypto-shared-secret-typed-error.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Replaced the plain `Error` thrown by `WebCryptoP256.getSharedSecret` when given an ECDSA private key with a typed `WebCryptoP256.InvalidPrivateKeyAlgorithmError`. diff --git a/.changeset/ens-to-coin-type.md b/.changeset/ens-to-coin-type.md deleted file mode 100644 index 2b13b34d..00000000 --- a/.changeset/ens-to-coin-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added `Ens.toCoinType` for converting chain IDs to ENS coin types. diff --git a/.changeset/erc4337-entry-point-v09.md b/.changeset/erc4337-entry-point-v09.md deleted file mode 100644 index f46db0ac..00000000 --- a/.changeset/erc4337-entry-point-v09.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added EntryPoint 0.9 ABI, address, UserOperation types, `paymasterSignature` packing, hashing, and RPC support. diff --git a/.changeset/erc4337-user-operation-from-packed-typing.md b/.changeset/erc4337-user-operation-from-packed-typing.md deleted file mode 100644 index 872fce67..00000000 --- a/.changeset/erc4337-user-operation-from-packed-typing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Narrowed `UserOperation.fromPacked` return type to `UserOperation<'0.7', true>` to reflect that the packed format does not carry v0.8 `authorization`. diff --git a/.changeset/erc4337-user-operation-gas-v08.md b/.changeset/erc4337-user-operation-gas-v08.md deleted file mode 100644 index 4db8e65f..00000000 --- a/.changeset/erc4337-user-operation-gas-v08.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added EntryPoint 0.8 and 0.9 support to `UserOperationGas` through version-specific aliases over the 0.7 gas shape. diff --git a/.changeset/erc4337-user-operation-rpc.md b/.changeset/erc4337-user-operation-rpc.md deleted file mode 100644 index 5272a140..00000000 --- a/.changeset/erc4337-user-operation-rpc.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `UserOperation.toRpc` to preserve v0.6 `paymasterAndData` and corrected `eth_getUserOperationByHash` result typing. diff --git a/.changeset/erc4337-user-operation-v08-authorization.md b/.changeset/erc4337-user-operation-v08-authorization.md deleted file mode 100644 index 8a1982d0..00000000 --- a/.changeset/erc4337-user-operation-v08-authorization.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `UserOperation` RPC codecs to map native `authorization` to wire `eip7702Auth` for EntryPoint 0.8 and 0.9. diff --git a/.changeset/erc6492-strip-magic-and-validate.md b/.changeset/erc6492-strip-magic-and-validate.md deleted file mode 100644 index 6565004e..00000000 --- a/.changeset/erc6492-strip-magic-and-validate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `SignatureErc6492.unwrap` to strip the trailing magic bytes before ABI-decoding, and made `SignatureErc6492.from` and `assert` validate object inputs by throwing the new `InvalidUnwrappedSignatureError` on malformed values. diff --git a/.changeset/erc7821-execute-structural-detection.md b/.changeset/erc7821-execute-structural-detection.md deleted file mode 100644 index 6bbaf036..00000000 --- a/.changeset/erc7821-execute-structural-detection.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Replaced the exception-driven opData fallback in `Execute.decodeBatchOfBatchesData` with structural detection of the ABI head word, so malformed inputs surface as decode errors instead of being masked by the catch. diff --git a/.changeset/erc8010-assert-suffix-and-recovery.md b/.changeset/erc8010-assert-suffix-and-recovery.md deleted file mode 100644 index fe89c01d..00000000 --- a/.changeset/erc8010-assert-suffix-and-recovery.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Hardened ERC-8010 by validating the full unwrapped object in `SignatureErc8010.assert`, capping the suffix length parsed by `unwrap` against the wrapped size to reject overflowing inputs, and skipping `Secp256k1.recoverAddress` in `wrap` when `to` is already provided. diff --git a/.changeset/eth-get-raw-transaction-by-hash.md b/.changeset/eth-get-raw-transaction-by-hash.md deleted file mode 100644 index 10c1d4cc..00000000 --- a/.changeset/eth-get-raw-transaction-by-hash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added `eth_getRawTransactionByHash` to `RpcSchema.Eth` and `z.RpcSchema.Eth`. diff --git a/.changeset/fee-helpers.md b/.changeset/fee-helpers.md deleted file mode 100644 index 185989b3..00000000 --- a/.changeset/fee-helpers.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `Fee.fromHistoryRpc`, `Fee.toHistoryRpc`, `Fee.estimateMaxFeePerGas`, and `Fee.effectiveGasPrice` for converting between RPC/instantiated `FeeHistory` shapes and computing common EIP-1559 fee values. diff --git a/.changeset/filter-blockhash-branch.md b/.changeset/filter-blockhash-branch.md deleted file mode 100644 index 2acacfde..00000000 --- a/.changeset/filter-blockhash-branch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added the EIP-234 `blockHash` branch to `Filter.Filter` (and `Filter.Rpc`) so log filters can be discriminated against `fromBlock`/`toBlock` and `blockHash`, matching the execution-apis `filter.yaml` `oneOf` schema. `Filter.toRpc` now forwards `blockHash` when present. diff --git a/.changeset/hex-tobytes-buffer-pool-fix.md b/.changeset/hex-tobytes-buffer-pool-fix.md deleted file mode 100644 index 17ed0ba1..00000000 --- a/.changeset/hex-tobytes-buffer-pool-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Hex.toBytes` and `Bytes.fromHex` returning a `Uint8Array` view that aliased Node's shared `Buffer` pool memory, which broke callers that read `.buffer` (e.g. WebAuthn `attestationObject` round-trips). diff --git a/.changeset/keyauthorization-fromrpc-type.md b/.changeset/keyauthorization-fromrpc-type.md deleted file mode 100644 index 577ebacb..00000000 --- a/.changeset/keyauthorization-fromrpc-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ox": patch ---- - -Fixed `KeyAuthorization.fromRpc` return type mismatch under TypeScript configs without `exactOptionalPropertyTypes`. diff --git a/.changeset/log-empty-topics.md b/.changeset/log-empty-topics.md deleted file mode 100644 index 04383372..00000000 --- a/.changeset/log-empty-topics.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed the zod `Log` schema to accept logs with zero topics (e.g. `LOG0`/anonymous events) and widened `Log.topics` to `Hex.Hex[]`. diff --git a/.changeset/multisig-remove-config-id.md b/.changeset/multisig-remove-config-id.md deleted file mode 100644 index 51314a7b..00000000 --- a/.changeset/multisig-remove-config-id.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'ox': patch ---- - -`ox/tempo`: Removed the TIP-1061 multisig `config_id` concept to match the updated Tempo reference implementation: multisig account addresses now derive directly from the initial config, owner approval digests bind only `account`, the signature wire format is `0x05 || rlp([account, signatures, init?])`, `MultisigConfig.maxOwners` is now 255 with `u8` weights, and owner approvals may be nested multisig signatures. - -```diff -- const id = MultisigConfig.toId(genesisConfig) -- const account = MultisigConfig.getAddress({ genesisConfigId: id }) -+ const account = MultisigConfig.getAddress(genesisConfig) - -- MultisigConfig.getSignPayload({ payload, account, genesisConfigId }) -+ MultisigConfig.getSignPayload({ payload, account }) - -- SignatureEnvelope.from({ account, genesisConfigId, signatures }) -+ SignatureEnvelope.from({ account, signatures }) -``` diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index d22c432c..00000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "mode": "exit", - "tag": "beta", - "initialVersions": { - "ox": "0.14.22" - }, - "changesets": [ - "abi-anonymous-events", - "abi-constructor-bytecode-prefix", - "abi-decode-checksum-default", - "abi-error-extract", - "abi-event-decode-log", - "abi-event-hex-topic-normalization", - "abi-function-decode-data-selector", - "abi-function-selector-only-calldata", - "abi-human-readable-ox", - "abi-parameters-data-size-bound", - "abi-parameters-encode-packed", - "abi-standalone-zero-width-arrays", - "account-proof-converters", - "address-keys-keystore-async-pbkdf2", - "address-keys-keystore-kdf-validation", - "address-keys-keystore-scrypt-async-pr", - "address-keys-mnemonic-default", - "anchor-crypto-webcrypto-verify-padding", - "anchor-publickey-assert-shape", - "anchor-publickey-fromhex-validate", - "block-state-block-fromrpc-required-fields", - "block-state-bloom-contains-validate-length", - "block-state-filter-torpc-address-null", - "block-state-log-block-timestamp", - "block-state-quantity-converters", - "block-state-typed-data-array-validation", - "block-state-validator-data-validate-address", - "block-state-value-validation", - "bloom-prepared", - "bytes-rlp-odd-length-pad", - "cosekey-topublickey-bytes-options", - "crypto-bls-aggregate-validate", - "crypto-blspoint-frombytes-group", - "crypto-cosekey-validate-header", - "crypto-extra-entropy-default-doc", - "crypto-kzg-from-receiver", - "crypto-serialized-inputs-and-as-option", - "crypto-webcrypto-doc-corrections", - "crypto-webcrypto-shared-secret-typed-error", - "ens-to-coin-type", - "erc4337-entry-point-v09", - "erc4337-user-operation-from-packed-typing", - "erc4337-user-operation-gas-v08", - "erc4337-user-operation-rpc", - "erc4337-user-operation-v08-authorization", - "erc6492-strip-magic-and-validate", - "erc7821-execute-structural-detection", - "erc8010-assert-suffix-and-recovery", - "eth-get-raw-transaction-by-hash", - "fee-helpers", - "filter-blockhash-branch", - "hex-tobytes-buffer-pool-fix", - "keyauthorization-fromrpc-type", - "log-empty-topics", - "multisig-remove-config-id", - "promise-with-timeout-single-reject", - "provider-from-prototype", - "provider-from-strict-eip1193", - "rlp-decode-depth-limit", - "rlp-strict-boundaries", - "rpc-response-from-validation", - "rpc-response-parse-error-preserve", - "rpc-response-parse-validation", - "rpc-schema-block-identifier-wire-type", - "rpc-schema-codecs", - "rpc-schema-eth-call-block-overrides", - "rpc-schema-eth-fill-transaction", - "rpc-schema-from-zod", - "rpc-schema-item-codecs", - "rpc-schema-request-numberish-params", - "rpc-transport-empty-body", - "rpc-transport-http-error-details", - "rpc-transport-json-empty-error", - "rpc-transport-signal-compose", - "signature-byte-helpers", - "siwe-bigint-chain-id", - "solidity-helpers", - "tempo-authorization-signature-normalize", - "tempo-key-authorization-null-rpc-fields", - "tempo-noncekey-random", - "tempo-poolid-canonical", - "tempo-receipt-type", - "tempo-request-wire-fields", - "tempo-token-address-inputs", - "tempo-transaction-null-rpc-fields", - "tempo-transaction-request-envelope-conversion", - "tempo-txenvelope-validate-prefix", - "torpc-numberish-inputs", - "transaction-request-envelope-conversion", - "transactions-access-list-strict-storage-keys", - "transactions-authorization-fromtuplelist-return-type", - "transactions-eip4844-blob-validation", - "transactions-eip4844-deserialize-error-attributes", - "transactions-eip4844-input-alias", - "transactions-eip7702-torpc", - "transactions-legacy-v-fromrpc", - "transactions-legacy-v-torpc", - "transactions-transaction-request-fromrpc-no-mutate", - "transactions-transaction-rpc-transaction-index-zero", - "tx-envelope-router", - "typed-data-type-hashes-memo", - "upgrade-noble-v2", - "v1-blob-cells", - "v1-deprecate-4844-sidecar", - "v1-hex-coords", - "v1-remove-tempo-address", - "webauthn-authentication-getsignpayload-hash", - "webauthn-authentication-sign-utf8", - "webauthn-authentication-verify-at-ed-flags", - "webauthn-authenticator-bytes-first", - "webauthn-registration-verify-attestation-default-docs", - "zero-width-abi-types", - "zod-schema-entrypoint" - ] -} diff --git a/.changeset/promise-with-timeout-single-reject.md b/.changeset/promise-with-timeout-single-reject.md deleted file mode 100644 index 0def507f..00000000 --- a/.changeset/promise-with-timeout-single-reject.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcTransport.fromHttp` (via internal `withTimeout`) producing an unhandled rejection when the wrapped fetch threw a non-`AbortError` after the timeout setup ran. diff --git a/.changeset/provider-from-prototype.md b/.changeset/provider-from-prototype.md deleted file mode 100644 index 99443bd0..00000000 --- a/.changeset/provider-from-prototype.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Provider.from` to preserve wrapped providers' prototype methods, accessors, and non-enumerable property descriptors instead of dropping them via object spread. diff --git a/.changeset/provider-from-strict-eip1193.md b/.changeset/provider-from-strict-eip1193.md deleted file mode 100644 index 8a7eab83..00000000 --- a/.changeset/provider-from-strict-eip1193.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Provider.from` to stop sniffing successful EIP-1193 payloads for a `jsonrpc` field and reparsing them as JSON-RPC envelopes. diff --git a/.changeset/rlp-decode-depth-limit.md b/.changeset/rlp-decode-depth-limit.md deleted file mode 100644 index b706204a..00000000 --- a/.changeset/rlp-decode-depth-limit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added a decode depth limit (1024) to `Rlp.toBytes` / `Rlp.toHex`, throwing `Rlp.DepthLimitExceededError` instead of overflowing the call stack on deeply nested untrusted RLP input. diff --git a/.changeset/rlp-strict-boundaries.md b/.changeset/rlp-strict-boundaries.md deleted file mode 100644 index 58e18ecd..00000000 --- a/.changeset/rlp-strict-boundaries.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed RLP decoding to reject malformed payloads with trailing bytes (`Rlp.TrailingBytesError`) or list items overrunning the declared list length (`Rlp.ListBoundaryExceededError`). diff --git a/.changeset/rpc-response-from-validation.md b/.changeset/rpc-response-from-validation.md deleted file mode 100644 index f45ded9c..00000000 --- a/.changeset/rpc-response-from-validation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcResponse.from` crashing when called without a `request` option and missing `jsonrpc` -- it now validates the envelope and throws `RpcResponse.ParseError` for missing `id`/`jsonrpc`. diff --git a/.changeset/rpc-response-parse-error-preserve.md b/.changeset/rpc-response-parse-error-preserve.md deleted file mode 100644 index 113375f4..00000000 --- a/.changeset/rpc-response-parse-error-preserve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcResponse.parseError` re-wrapping existing `RpcResponse.BaseError` instances as `InternalError` -- existing instances are now returned as-is. diff --git a/.changeset/rpc-response-parse-validation.md b/.changeset/rpc-response-parse-validation.md deleted file mode 100644 index bda67062..00000000 --- a/.changeset/rpc-response-parse-validation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcResponse.parse` silently returning `undefined` for malformed payloads -- it now validates the JSON-RPC envelope (`jsonrpc === '2.0'`, presence of `id`, and presence of either `result` or `error`) and throws `RpcResponse.ParseError` otherwise. diff --git a/.changeset/rpc-schema-block-identifier-wire-type.md b/.changeset/rpc-schema-block-identifier-wire-type.md deleted file mode 100644 index 741eff29..00000000 --- a/.changeset/rpc-schema-block-identifier-wire-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed the EIP-1898 block identifier param type in the core `eth`/`tempo` RPC request schemas to be wire-typed (`Block.Identifier`), so its `blockNumber` field is hex like the sibling `Block.Number` branch instead of native `bigint`. This makes `z.RpcSchema.encodeParams` output assignable to the core request param types for block-selector methods (`eth_call`, `eth_getBalance`, `eth_getCode`, `eth_getStorageAt`, `eth_getTransactionCount`, `eth_getBlockTransactionCountByNumber`, `eth_getUncleCountByBlockNumber`, `eth_estimateGas`, etc.). diff --git a/.changeset/rpc-schema-codecs.md b/.changeset/rpc-schema-codecs.md deleted file mode 100644 index 20058126..00000000 --- a/.changeset/rpc-schema-codecs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added directional codec helpers to the `ox/zod` `RpcSchema` namespace: `decodeParams`/`encodeParams`, `decodeReturns`/`encodeReturns`, and `decodeRequest`/`encodeRequest` (`decode` maps wire → native, `encode` maps native → wire), alongside `parseItem` for method lookup and `parse` as an alias of `decodeRequest`. Scalar quantity returns in `z.RpcSchema.Eth` now decode to their native representation (`eth_blockNumber`, `eth_gasPrice`, `eth_blobBaseFee`, `eth_estimateGas`, `eth_getBalance`, `eth_maxPriorityFeePerGas` → `bigint`; `eth_chainId`, `eth_getTransactionCount`, `eth_getBlockTransactionCountBy*`, `eth_getUncleCountByBlock*` → `number`), while raw transport typing (`RpcSchema.FromZod`) continues to use wire types. diff --git a/.changeset/rpc-schema-eth-call-block-overrides.md b/.changeset/rpc-schema-eth-call-block-overrides.md deleted file mode 100644 index 22b6b795..00000000 --- a/.changeset/rpc-schema-eth-call-block-overrides.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added an optional 4th `blockOverrides` parameter to the `eth_call` and `eth_estimateGas` schemas (`RpcSchema.Default` and the zod `RpcSchema.Eth`), matching Geth/Anvil's `eth_call(transaction, block, stateOverrides, blockOverrides)` signature. diff --git a/.changeset/rpc-schema-eth-fill-transaction.md b/.changeset/rpc-schema-eth-fill-transaction.md deleted file mode 100644 index 41e8b51f..00000000 --- a/.changeset/rpc-schema-eth-fill-transaction.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added `eth_fillTransaction` to `RpcSchema.Eth`. diff --git a/.changeset/rpc-schema-from-zod.md b/.changeset/rpc-schema-from-zod.md deleted file mode 100644 index 245fed6a..00000000 --- a/.changeset/rpc-schema-from-zod.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added Zod-backed RPC schema support: `z.RpcSchema.from` (in `ox/zod`) now accepts a record of `{ params, returns }` Zod schemas keyed by method name and returns a parseable `RpcSchema.Namespace`; `RpcSchema.Schema`/`RpcSchema.ToGeneric`/`RpcSchema.FromZod` were added; and `Provider.from` / `RpcTransport.fromHttp` accept a Zod namespace as their `schema` option, deriving request/return types from it. diff --git a/.changeset/rpc-schema-item-codecs.md b/.changeset/rpc-schema-item-codecs.md deleted file mode 100644 index 9be8999f..00000000 --- a/.changeset/rpc-schema-item-codecs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -The `ox/zod` `RpcSchema` codecs (`decodeParams`/`encodeParams`, `decodeReturns`/`encodeReturns`) now also accept a resolved `RpcSchema.Item` in place of a `(namespace, method)` pair. A method can be looked up once with `z.RpcSchema.parseItem` and passed to each codec, so encoding params and decoding returns no longer repeats the namespace and method name. diff --git a/.changeset/rpc-schema-request-numberish-params.md b/.changeset/rpc-schema-request-numberish-params.md deleted file mode 100644 index c5d0d0c2..00000000 --- a/.changeset/rpc-schema-request-numberish-params.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Updated the zod `RpcSchema.Eth` request-bearing methods (`eth_call`, `eth_estimateGas`, `eth_sendTransaction`, `eth_signTransaction`, `eth_simulateV1`) to encode their transaction-request params with `TransactionRequestToRpc`, so `RpcSchema.encodeParams` now accepts numberish (`bigint | number | Hex`) quantities. Decoded output is unchanged. diff --git a/.changeset/rpc-transport-empty-body.md b/.changeset/rpc-transport-empty-body.md deleted file mode 100644 index 7b072b38..00000000 --- a/.changeset/rpc-transport-empty-body.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcTransport.fromHttp` to throw `RpcTransport.MalformedResponseError` for empty `2xx` HTTP bodies instead of silently returning `undefined`. diff --git a/.changeset/rpc-transport-http-error-details.md b/.changeset/rpc-transport-http-error-details.md deleted file mode 100644 index b97917f6..00000000 --- a/.changeset/rpc-transport-http-error-details.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcTransport.HttpError.details` to render raw-text error bodies verbatim instead of JSON-stringifying them with surrounding quotes. diff --git a/.changeset/rpc-transport-json-empty-error.md b/.changeset/rpc-transport-json-empty-error.md deleted file mode 100644 index 39db800e..00000000 --- a/.changeset/rpc-transport-json-empty-error.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcTransport.fromHttp` to surface an `HttpError` (instead of a `SyntaxError`) when servers return `Content-Type: application/json` with an empty body for non-`2xx` responses. diff --git a/.changeset/rpc-transport-signal-compose.md b/.changeset/rpc-transport-signal-compose.md deleted file mode 100644 index bf125cd3..00000000 --- a/.changeset/rpc-transport-signal-compose.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `RpcTransport.fromHttp` ignoring its own `timeout` when the caller supplied a `fetchOptions.signal`; both signals are now composed via `AbortSignal.any` so the timeout always fires. diff --git a/.changeset/signature-byte-helpers.md b/.changeset/signature-byte-helpers.md deleted file mode 100644 index 4fadec80..00000000 --- a/.changeset/signature-byte-helpers.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `Signature.toCompactBytes`, `Signature.fromCompactBytes`, `Signature.toRecoveredBytes`, and `Signature.fromRecoveredBytes` for direct 64 and 65 byte encoded signature interop. diff --git a/.changeset/siwe-bigint-chain-id.md b/.changeset/siwe-bigint-chain-id.md deleted file mode 100644 index 6004c85b..00000000 --- a/.changeset/siwe-bigint-chain-id.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Changed `Siwe.Message.chainId` to bigint, parsed SIWE messages to bigint chain IDs, and generated SIWE nonces with cryptographically secure randomness. diff --git a/.changeset/solidity-helpers.md b/.changeset/solidity-helpers.md deleted file mode 100644 index 6b18ec09..00000000 --- a/.changeset/solidity-helpers.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `Solidity.intRange(bits, signed)` and `Solidity.maxUint(bits)` helpers that compute the inclusive range or maximum unsigned value of a Solidity integer of the given bit width without importing one of the `Solidity.maxInt*`/`Solidity.maxUint*` constants by name. diff --git a/.changeset/tempo-authorization-signature-normalize.md b/.changeset/tempo-authorization-signature-normalize.md deleted file mode 100644 index 69fd51fa..00000000 --- a/.changeset/tempo-authorization-signature-normalize.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `tempo.AuthorizationTempo.from` to normalize `options.signature` through `SignatureEnvelope.from` so serialized or convenience-shape signatures are accepted as documented. diff --git a/.changeset/tempo-key-authorization-null-rpc-fields.md b/.changeset/tempo-key-authorization-null-rpc-fields.md deleted file mode 100644 index 63e2994d..00000000 --- a/.changeset/tempo-key-authorization-null-rpc-fields.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed Tempo key authorization RPC decoding to tolerate `null` optional fields and preserve `witness`, `isAdmin`, and `account` through the zod codec. diff --git a/.changeset/tempo-noncekey-random.md b/.changeset/tempo-noncekey-random.md deleted file mode 100644 index dd7b8927..00000000 --- a/.changeset/tempo-noncekey-random.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `tempo.TransactionRequest.toRpc` to generate a full 192-bit `nonceKey` when called with `nonceKey: 'random'`, matching the documented field width. diff --git a/.changeset/tempo-poolid-canonical.md b/.changeset/tempo-poolid-canonical.md deleted file mode 100644 index 3e40daed..00000000 --- a/.changeset/tempo-poolid-canonical.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `PoolId.from` to be order-independent by sorting token addresses canonically before hashing. diff --git a/.changeset/tempo-receipt-type.md b/.changeset/tempo-receipt-type.md deleted file mode 100644 index a5ae7561..00000000 --- a/.changeset/tempo-receipt-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ox": patch ---- - -Fixed Tempo `TransactionReceipt.fromRpc`/`toRpc` to map the `type` field between `'0x76'` and `'tempo'`. diff --git a/.changeset/tempo-request-wire-fields.md b/.changeset/tempo-request-wire-fields.md deleted file mode 100644 index 4b0a3ae6..00000000 --- a/.changeset/tempo-request-wire-fields.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added the Tempo fields `keyId`, `multisigInit`, `multisigSignatureCount`, and `capabilities` to `TransactionRequest`. \ No newline at end of file diff --git a/.changeset/tempo-token-address-inputs.md b/.changeset/tempo-token-address-inputs.md deleted file mode 100644 index ba5abdb1..00000000 --- a/.changeset/tempo-token-address-inputs.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'ox': major ---- - -Removed the Tempo `TokenId` module and narrowed Tempo token inputs (`feeToken`, `Channel.token`, `PoolId.from` tokens) to `Address.Address`; also removed the now-redundant `Channel.Resolved` type. - -```diff - TxEnvelopeTempo.from({ - // ... -- feeToken: 1n, -+ feeToken: '0x20c0000000000000000000000000000000000001', - }) -``` diff --git a/.changeset/tempo-transaction-null-rpc-fields.md b/.changeset/tempo-transaction-null-rpc-fields.md deleted file mode 100644 index 5b35240b..00000000 --- a/.changeset/tempo-transaction-null-rpc-fields.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed Tempo transaction RPC decoding to tolerate `null` optional fields and to omit fabricated flat `data`/`to`/`value` call fields. diff --git a/.changeset/tempo-transaction-request-envelope-conversion.md b/.changeset/tempo-transaction-request-envelope-conversion.md deleted file mode 100644 index 5bf490f2..00000000 --- a/.changeset/tempo-transaction-request-envelope-conversion.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `TransactionRequest.toEnvelope` (in `ox/tempo`) and `TxEnvelopeTempo.toTransactionRequest` for converting between Tempo `TransactionRequest` and `TxEnvelopeTempo` shapes. `toEnvelope` folds flat `{ to, data, value }` requests into `calls[]`, resolves `nonceKey: 'random'`, and drops fields not supported by the Tempo envelope (`blobs`, `gasPrice`, core `r`/`s`/`yParity`/`v`). Extended Tempo's `TransactionRequest` with optional `signature` (`SignatureEnvelope`) and `feePayerSignature` (`Signature.Signature`) fields so signed envelopes can be round-tripped without information loss; `fromRpc`/`toRpc` translate them via the existing `SignatureEnvelope.fromRpc`/`toRpc` and `Signature.fromRpc`/`toRpc` helpers. diff --git a/.changeset/tempo-txenvelope-validate-prefix.md b/.changeset/tempo-txenvelope-validate-prefix.md deleted file mode 100644 index 3b99d8a6..00000000 --- a/.changeset/tempo-txenvelope-validate-prefix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `tempo.TxEnvelopeTempo.deserialize` to validate the `0x76` envelope-type prefix before RLP decoding, rejecting payloads from other envelope types. diff --git a/.changeset/torpc-numberish-inputs.md b/.changeset/torpc-numberish-inputs.md deleted file mode 100644 index 499997d6..00000000 --- a/.changeset/torpc-numberish-inputs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Widened `toRpc` inputs (and their symmetric zod `*ToRpc` encode schemas) to accept numberish values -- `Hex.Hex | bigint | number` for bigint-typed quantities and `Hex.Hex | number` for number-typed quantities -- while keeping decoded/`fromRpc` output types strictly `bigint`/`number`. diff --git a/.changeset/transaction-request-envelope-conversion.md b/.changeset/transaction-request-envelope-conversion.md deleted file mode 100644 index 30631575..00000000 --- a/.changeset/transaction-request-envelope-conversion.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added `TransactionRequest.toEnvelope` and `TransactionEnvelope.toTransactionRequest` for converting between `TransactionRequest` and `TxEnvelope*` shapes (e.g. when handling `eth_sendTransaction`). Extended `TransactionRequest` with optional `r`, `s`, `yParity`, `v` fields so signed payloads can be carried in the same type (with hex↔native coercion in `fromRpc`/`toRpc`). Also tightened `TransactionEnvelope.getType` to throw on accidental RPC-style type strings (`'0x0'`–`'0x4'`); pass payloads through `TransactionRequest.fromRpc` first. diff --git a/.changeset/transactions-access-list-strict-storage-keys.md b/.changeset/transactions-access-list-strict-storage-keys.md deleted file mode 100644 index 109248bb..00000000 --- a/.changeset/transactions-access-list-strict-storage-keys.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `AccessList.fromTupleList` silently normalizing non-32-byte storage keys; it now throws `InvalidStorageKeySizeError` to match the symmetric `toTupleList` validation. diff --git a/.changeset/transactions-authorization-fromtuplelist-return-type.md b/.changeset/transactions-authorization-fromtuplelist-return-type.md deleted file mode 100644 index 33093929..00000000 --- a/.changeset/transactions-authorization-fromtuplelist-return-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Authorization.fromTupleList` declaring its return type as `TupleList` instead of `List`. diff --git a/.changeset/transactions-eip4844-blob-validation.md b/.changeset/transactions-eip4844-blob-validation.md deleted file mode 100644 index 00b59869..00000000 --- a/.changeset/transactions-eip4844-blob-validation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Required `blobVersionedHashes` to be present and non-empty in `TxEnvelopeEip4844.assert`; the previous `if (blobVersionedHashes)` guard let envelopes serialize as "blob transactions with no blob hashes". diff --git a/.changeset/transactions-eip4844-deserialize-error-attributes.md b/.changeset/transactions-eip4844-deserialize-error-attributes.md deleted file mode 100644 index 9abfbefb..00000000 --- a/.changeset/transactions-eip4844-deserialize-error-attributes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Improved `TxEnvelopeEip4844.deserialize` `InvalidSerializedError` diagnostics by including `maxFeePerBlobGas` and `blobVersionedHashes` in the attributes map and using the EIP-4844 signature-presence threshold (`length > 11`) instead of the EIP-1559 `> 9` copy-paste. diff --git a/.changeset/transactions-eip4844-input-alias.md b/.changeset/transactions-eip4844-input-alias.md deleted file mode 100644 index de9120ae..00000000 --- a/.changeset/transactions-eip4844-input-alias.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `TxEnvelopeEip4844.serialize` ignoring the `input` alias for `data`; calldata supplied via `input` is now included in the serialized envelope and sign payload. diff --git a/.changeset/transactions-eip7702-torpc.md b/.changeset/transactions-eip7702-torpc.md deleted file mode 100644 index 6f721a14..00000000 --- a/.changeset/transactions-eip7702-torpc.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Added the missing `TxEnvelopeEip7702.toRpc` to mirror `Eip1559`/`Eip2930`/`Eip4844`/`Legacy`, restoring symmetry for callers building EIP-7702 RPC requests. diff --git a/.changeset/transactions-legacy-v-fromrpc.md b/.changeset/transactions-legacy-v-fromrpc.md deleted file mode 100644 index a6ead583..00000000 --- a/.changeset/transactions-legacy-v-fromrpc.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Transaction.fromRpc` clobbering legacy (`type: '0x0'`) `v` with `27`/`28`; the original RPC `v` is now preserved when present. diff --git a/.changeset/transactions-legacy-v-torpc.md b/.changeset/transactions-legacy-v-torpc.md deleted file mode 100644 index 5566b5ba..00000000 --- a/.changeset/transactions-legacy-v-torpc.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `TxEnvelopeLegacy.toRpc` collapsing every signed legacy envelope to `v: '0x1b'`/`'0x1c'`; it now preserves an explicit `envelope.v`, otherwise derives EIP-155 `v = chainId * 2 + 35 + yParity` when a chain ID is present. diff --git a/.changeset/transactions-transaction-request-fromrpc-no-mutate.md b/.changeset/transactions-transaction-request-fromrpc-no-mutate.md deleted file mode 100644 index ac7936dc..00000000 --- a/.changeset/transactions-transaction-request-fromrpc-no-mutate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `TransactionRequest.fromRpc` mutating the caller-provided RPC object by cloning before assigning parsed fields. diff --git a/.changeset/transactions-transaction-rpc-transaction-index-zero.md b/.changeset/transactions-transaction-rpc-transaction-index-zero.md deleted file mode 100644 index 4742b9c0..00000000 --- a/.changeset/transactions-transaction-rpc-transaction-index-zero.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `Transaction.toRpc` emitting `null` for `transactionIndex: 0` instead of `0x0`. diff --git a/.changeset/tx-envelope-router.md b/.changeset/tx-envelope-router.md deleted file mode 100644 index 5ccb67fc..00000000 --- a/.changeset/tx-envelope-router.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added generic `TxEnvelope` routing helpers with property-based type inference for parsing, serialization, validation, hashing, signing payloads, and RPC conversion. diff --git a/.changeset/typed-data-type-hashes-memo.md b/.changeset/typed-data-type-hashes-memo.md deleted file mode 100644 index f5744c57..00000000 --- a/.changeset/typed-data-type-hashes-memo.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Threaded an optional `typeHashes` cache through `TypedData.encode`, `TypedData.hashStruct`, and `TypedData.hashDomain` so `keccak256(encodeType(t))` is computed once per `(primaryType, types)` per call instead of once per nested struct or array element (with `TypedData.encode` populating a fresh map internally and advanced callers able to share a `Map` across calls). diff --git a/.changeset/upgrade-noble-v2.md b/.changeset/upgrade-noble-v2.md deleted file mode 100644 index 53d3fa2a..00000000 --- a/.changeset/upgrade-noble-v2.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'ox': major ---- - -Upgraded `@noble/ciphers`, `@noble/curves`, `@noble/hashes`, `@scure/bip32`, and `@scure/bip39` to v2. - -Notable behavioral changes inherited from noble v2: - -- ECDSA signatures now default to `lowS: true` for both `Secp256k1` and `P256`. Previously `P256` signatures could have high-S values. -- The `noble` re-exports on `Secp256k1`, `P256`, `Ed25519`, `X25519`, and `Bls` now reference the v2 APIs (e.g. `randomSecretKey()` instead of `randomPrivateKey()`, `Point` instead of `ProjectivePoint`/`ExtendedPoint`, `bls.longSignatures.*` instead of top-level `bls.sign`/`verify`). If you depended on the v1 shape via `Module.noble`, refer to the noble v2 changelog. diff --git a/.changeset/v1-blob-cells.md b/.changeset/v1-blob-cells.md deleted file mode 100644 index 671c33dc..00000000 --- a/.changeset/v1-blob-cells.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'ox': minor ---- - -**Added:** `BlobCells` module exposing PeerDAS (EIP-7594) cell-level helpers — `fromBlob` derives the 128 cells + cell KZG proofs of an extended blob, `verify` verifies a batch of cell proofs against their commitments, `recover` reconstructs the full set of cells/proofs from ≥ 64 known cells, and `toDataColumns` builds the 128 per-column packs for a list of blobs. - -```diff -+ import { BlobCells, Blobs } from 'ox' -+ -+ const blobs = Blobs.from('0xdeadbeef') -+ const columns = BlobCells.toDataColumns(blobs, { kzg }) // 128 columns -``` diff --git a/.changeset/v1-deprecate-4844-sidecar.md b/.changeset/v1-deprecate-4844-sidecar.md deleted file mode 100644 index 8f97b22c..00000000 --- a/.changeset/v1-deprecate-4844-sidecar.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'ox': major ---- - -**Breaking:** Removed the 4844-only blob-sidecar surface in favor of PeerDAS -(EIP-7594). - -- `Kzg.Kzg` no longer includes `computeBlobKzgProof`. Bring a PeerDAS-capable - backend (e.g. `c-kzg` ≥ v1.5, `micro-eth-signer/advanced/kzg.js` ≥ v0.18, or - equivalent). The backend must implement `computeCells`, - `computeCellsAndKzgProofs`, `recoverCellsAndKzgProofs`, and - `verifyCellKzgProofBatch` in addition to `blobToKzgCommitment`. -- Removed `Blobs.toSidecars`, `Blobs.toProofs`, - `Blobs.sidecarsToVersionedHashes`, `Blobs.BlobSidecar`, and - `Blobs.BlobSidecars`. Use the upcoming `BlobCells` module (next phase) for - PeerDAS data-column construction. `Kzg.Kzg.blobToKzgCommitment` and - `Blobs.toVersionedHashes` remain for transaction versioned-hash derivation. -- Removed `TxEnvelopeEip4844.sidecars` (the legacy "network wrapper" RLP form - for `eth_sendRawTransaction`). PeerDAS replaces the network wrapper with - cell/column propagation; the on-chain envelope is unchanged. diff --git a/.changeset/v1-hex-coords.md b/.changeset/v1-hex-coords.md deleted file mode 100644 index ef79bf72..00000000 --- a/.changeset/v1-hex-coords.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'ox': major ---- - -Migrated ECDSA and BLS coordinate fields (`r`, `s`, `x`, `y`, BLS `Fp`/`Fp2`) from `bigint` to padded `Hex.Hex` strings (32-byte for `secp256k1`/`P256`/`WebAuthnP256`, 48-byte for BLS12-381) on `Signature`, `PublicKey`, `BlsPoint`, `Transaction`, `Authorization`, `TxEnvelope`, and related Tempo and ERC envelopes, dropping the `bigintType` generic. - -```diff -- Signature.from({ r: 0x6e10...n, s: 0x4a90...n, yParity: 1 }) -+ Signature.from({ -+ r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf', -+ s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8', -+ yParity: 1, -+ }) -``` diff --git a/.changeset/v1-remove-tempo-address.md b/.changeset/v1-remove-tempo-address.md deleted file mode 100644 index 48e9734c..00000000 --- a/.changeset/v1-remove-tempo-address.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'ox': major ---- - -Removed the `TempoAddress` module and its `tempox`-prefixed address format. All Tempo modules now accept plain hex `Address.Address` values; remove any `TempoAddress.format` / `TempoAddress.parse` / `TempoAddress.resolve` calls at the boundary. The `addressType` type parameter has also been dropped from `Call`, `TxEnvelopeTempo`, `KeyAuthorization`, `AuthorizationTempo`, `TransactionRequest`, and `TokenId.TokenIdOrAddress`. - -```diff -- import { TempoAddress } from 'ox/tempo' -- const formatted = TempoAddress.format('0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28') -- const { address } = TempoAddress.parse(formatted) -+ const address = '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28' -``` diff --git a/.changeset/webauthn-authentication-getsignpayload-hash.md b/.changeset/webauthn-authentication-getsignpayload-hash.md deleted file mode 100644 index e02d265b..00000000 --- a/.changeset/webauthn-authentication-getsignpayload-hash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `webauthn.Authentication.getSignPayload` to honor the documented `hash` option by SHA-256 hashing the returned payload when `hash: true` is passed. diff --git a/.changeset/webauthn-authentication-sign-utf8.md b/.changeset/webauthn-authentication-sign-utf8.md deleted file mode 100644 index 3bbfcbc1..00000000 --- a/.changeset/webauthn-authentication-sign-utf8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `webauthn.Authentication.sign` to decode `clientDataJSON` bytes as UTF-8 via `Bytes.toString` instead of `String.fromCharCode(...bytes)`, which corrupted non-ASCII payloads and could throw `RangeError` on large inputs. diff --git a/.changeset/webauthn-authentication-verify-at-ed-flags.md b/.changeset/webauthn-authentication-verify-at-ed-flags.md deleted file mode 100644 index 1750193c..00000000 --- a/.changeset/webauthn-authentication-verify-at-ed-flags.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `webauthn.Authentication.verify` to reject assertion `authenticatorData` whose flags imply structure not allowed for assertions: the `AT` (attested credential data) bit is now refused, and an `ED` (extension data) bit must be backed by a CBOR-decodable trailing extension map. diff --git a/.changeset/webauthn-authenticator-bytes-first.md b/.changeset/webauthn-authenticator-bytes-first.md deleted file mode 100644 index b75ae141..00000000 --- a/.changeset/webauthn-authenticator-bytes-first.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': minor ---- - -Added an `as: 'Hex' | 'Bytes'` option to `webauthn.Authenticator.getAuthenticatorData`. The bytes path assembles into a single `Uint8Array` directly, while the legacy hex path stays in hex throughout to avoid `Bytes <-> Hex` round trips. `getSignCount` now accepts `Hex` or `Uint8Array`, eliminating the unconditional `Bytes.fromHex` decode for byte-input callers. diff --git a/.changeset/webauthn-registration-verify-attestation-default-docs.md b/.changeset/webauthn-registration-verify-attestation-default-docs.md deleted file mode 100644 index 7a66ddf9..00000000 --- a/.changeset/webauthn-registration-verify-attestation-default-docs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ox': patch ---- - -Fixed `webauthn.Registration.verify` JSDoc for the `attestation` option to document the actual runtime default of `'none'` (matching `Registration.getOptions`) instead of `'required'`. diff --git a/.changeset/zero-width-abi-types.md b/.changeset/zero-width-abi-types.md deleted file mode 100644 index 72377e2f..00000000 --- a/.changeset/zero-width-abi-types.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ox": patch ---- - -Fixed `AbiParameters.encode` and `AbiParameters.decode` handling of zero-width types (zero-length fixed arrays and empty tuples). diff --git a/.changeset/zod-schema-entrypoint.md b/.changeset/zod-schema-entrypoint.md deleted file mode 100644 index 8103af45..00000000 --- a/.changeset/zod-schema-entrypoint.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ox": minor ---- - -Added the `ox/zod` entrypoint with module-scoped Zod schemas, direct integer quantity schemas, account proofs, authorizations, blocks, filters, override schemas, logs, RPC responses, RPC method schemas (`RpcSchema.Eth` / `RpcSchema.Wallet` per-method `params` / `returnType` plus `Request` envelopes), transaction envelopes, transactions, transaction requests, transaction receipts, ABI, and EIP-712 Typed Data. diff --git a/CHANGELOG.md b/CHANGELOG.md index 3883940e..95906a26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,307 @@ # ox +## 1.0.0 + +### Major Changes + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - **Breaking:** Changed ABI decode helpers to checksum decoded addresses by default. + + ```diff + - AbiParameters.decode(parameters, data) + + AbiParameters.decode(parameters, data, { checksumAddress: false }) + ``` + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Removed the Tempo `TokenId` module and narrowed Tempo token inputs (`feeToken`, `Channel.token`, `PoolId.from` tokens) to `Address.Address`; also removed the now-redundant `Channel.Resolved` type. + + ```diff + TxEnvelopeTempo.from({ + // ... + - feeToken: 1n, + + feeToken: '0x20c0000000000000000000000000000000000001', + }) + ``` + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Upgraded `@noble/ciphers`, `@noble/curves`, `@noble/hashes`, `@scure/bip32`, and `@scure/bip39` to v2. + + Notable behavioral changes inherited from noble v2: + + - ECDSA signatures now default to `lowS: true` for both `Secp256k1` and `P256`. Previously `P256` signatures could have high-S values. + - The `noble` re-exports on `Secp256k1`, `P256`, `Ed25519`, `X25519`, and `Bls` now reference the v2 APIs (e.g. `randomSecretKey()` instead of `randomPrivateKey()`, `Point` instead of `ProjectivePoint`/`ExtendedPoint`, `bls.longSignatures.*` instead of top-level `bls.sign`/`verify`). If you depended on the v1 shape via `Module.noble`, refer to the noble v2 changelog. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - **Breaking:** Removed the 4844-only blob-sidecar surface in favor of PeerDAS + (EIP-7594). + + - `Kzg.Kzg` no longer includes `computeBlobKzgProof`. Bring a PeerDAS-capable + backend (e.g. `c-kzg` ≥ v1.5, `micro-eth-signer/advanced/kzg.js` ≥ v0.18, or + equivalent). The backend must implement `computeCells`, + `computeCellsAndKzgProofs`, `recoverCellsAndKzgProofs`, and + `verifyCellKzgProofBatch` in addition to `blobToKzgCommitment`. + - Removed `Blobs.toSidecars`, `Blobs.toProofs`, + `Blobs.sidecarsToVersionedHashes`, `Blobs.BlobSidecar`, and + `Blobs.BlobSidecars`. Use the upcoming `BlobCells` module (next phase) for + PeerDAS data-column construction. `Kzg.Kzg.blobToKzgCommitment` and + `Blobs.toVersionedHashes` remain for transaction versioned-hash derivation. + - Removed `TxEnvelopeEip4844.sidecars` (the legacy "network wrapper" RLP form + for `eth_sendRawTransaction`). PeerDAS replaces the network wrapper with + cell/column propagation; the on-chain envelope is unchanged. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Migrated ECDSA and BLS coordinate fields (`r`, `s`, `x`, `y`, BLS `Fp`/`Fp2`) from `bigint` to padded `Hex.Hex` strings (32-byte for `secp256k1`/`P256`/`WebAuthnP256`, 48-byte for BLS12-381) on `Signature`, `PublicKey`, `BlsPoint`, `Transaction`, `Authorization`, `TxEnvelope`, and related Tempo and ERC envelopes, dropping the `bigintType` generic. + + ```diff + - Signature.from({ r: 0x6e10...n, s: 0x4a90...n, yParity: 1 }) + + Signature.from({ + + r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf', + + s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8', + + yParity: 1, + + }) + ``` + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Removed the `TempoAddress` module and its `tempox`-prefixed address format. All Tempo modules now accept plain hex `Address.Address` values; remove any `TempoAddress.format` / `TempoAddress.parse` / `TempoAddress.resolve` calls at the boundary. The `addressType` type parameter has also been dropped from `Call`, `TxEnvelopeTempo`, `KeyAuthorization`, `AuthorizationTempo`, `TransactionRequest`, and `TokenId.TokenIdOrAddress`. + + ```diff + - import { TempoAddress } from 'ox/tempo' + - const formatted = TempoAddress.format('0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28') + - const { address } = TempoAddress.parse(formatted) + + const address = '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28' + ``` + +### Minor Changes + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added an `AbiFunction.decodeData(abi, data)` overload that extracts the ABI function from the calldata selector. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added human-readable ABI parsing and formatting utilities from `abitype` to ox, including runtime validation and type-level safety for `Abi`, `AbiItem`, `AbiParameters`, and the new `AbiParameter` module. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `AccountProof.fromRpc` and `AccountProof.toRpc` for converting between RPC and instantiated `AccountProof` shapes returned by `eth_getProof`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `Bloom.prepare`, `Bloom.containsPrepared`, and `Bloom.containsHash` for membership checks against a precomputed bloom filter. Use `Bloom.prepare(bloom)` once and `Bloom.containsPrepared(prepared, input)` (or `Bloom.containsHash(prepared, hash)` when the caller already has the keccak hash) inside hot loops to avoid the per-call `Bytes.fromHex` allocation that `Bloom.contains` pays. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `returnByteLength` and `returnDecoded` options to `CoseKey.toPublicKey` and accepted `Uint8Array` input in addition to `Hex`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `as: 'Hex' | 'Bytes' | 'Object'` option to `Secp256k1.sign` / `getPublicKey` / `recoverPublicKey`, `P256.sign` / `getPublicKey` / `recoverPublicKey`, `WebCryptoP256.sign`, and `Bls.sign` / `getPublicKey` (default `'Object'` keeps existing behavior); plus accept `Hex.Hex | Bytes.Bytes | Signature.Signature` for `signature` params and `Hex.Hex | Bytes.Bytes | PublicKey.PublicKey` for `publicKey` params on `verify`, `recoverAddress`, `recoverPublicKey`, `getSharedSecret` across the same modules. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added EntryPoint 0.9 ABI, address, UserOperation types, `paymasterSignature` packing, hashing, and RPC support. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `Fee.fromHistoryRpc`, `Fee.toHistoryRpc`, `Fee.estimateMaxFeePerGas`, and `Fee.effectiveGasPrice` for converting between RPC/instantiated `FeeHistory` shapes and computing common EIP-1559 fee values. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added the EIP-234 `blockHash` branch to `Filter.Filter` (and `Filter.Rpc`) so log filters can be discriminated against `fromBlock`/`toBlock` and `blockHash`, matching the execution-apis `filter.yaml` `oneOf` schema. `Filter.toRpc` now forwards `blockHash` when present. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added directional codec helpers to the `ox/zod` `RpcSchema` namespace: `decodeParams`/`encodeParams`, `decodeReturns`/`encodeReturns`, and `decodeRequest`/`encodeRequest` (`decode` maps wire → native, `encode` maps native → wire), alongside `parseItem` for method lookup and `parse` as an alias of `decodeRequest`. Scalar quantity returns in `z.RpcSchema.Eth` now decode to their native representation (`eth_blockNumber`, `eth_gasPrice`, `eth_blobBaseFee`, `eth_estimateGas`, `eth_getBalance`, `eth_maxPriorityFeePerGas` → `bigint`; `eth_chainId`, `eth_getTransactionCount`, `eth_getBlockTransactionCountBy*`, `eth_getUncleCountByBlock*` → `number`), while raw transport typing (`RpcSchema.FromZod`) continues to use wire types. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added Zod-backed RPC schema support: `z.RpcSchema.from` (in `ox/zod`) now accepts a record of `{ params, returns }` Zod schemas keyed by method name and returns a parseable `RpcSchema.Namespace`; `RpcSchema.Schema`/`RpcSchema.ToGeneric`/`RpcSchema.FromZod` were added; and `Provider.from` / `RpcTransport.fromHttp` accept a Zod namespace as their `schema` option, deriving request/return types from it. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - The `ox/zod` `RpcSchema` codecs (`decodeParams`/`encodeParams`, `decodeReturns`/`encodeReturns`) now also accept a resolved `RpcSchema.Item` in place of a `(namespace, method)` pair. A method can be looked up once with `z.RpcSchema.parseItem` and passed to each codec, so encoding params and decoding returns no longer repeats the namespace and method name. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `Signature.toCompactBytes`, `Signature.fromCompactBytes`, `Signature.toRecoveredBytes`, and `Signature.fromRecoveredBytes` for direct 64 and 65 byte encoded signature interop. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `Solidity.intRange(bits, signed)` and `Solidity.maxUint(bits)` helpers that compute the inclusive range or maximum unsigned value of a Solidity integer of the given bit width without importing one of the `Solidity.maxInt*`/`Solidity.maxUint*` constants by name. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `TransactionRequest.toEnvelope` (in `ox/tempo`) and `TxEnvelopeTempo.toTransactionRequest` for converting between Tempo `TransactionRequest` and `TxEnvelopeTempo` shapes. `toEnvelope` folds flat `{ to, data, value }` requests into `calls[]`, resolves `nonceKey: 'random'`, and drops fields not supported by the Tempo envelope (`blobs`, `gasPrice`, core `r`/`s`/`yParity`/`v`). Extended Tempo's `TransactionRequest` with optional `signature` (`SignatureEnvelope`) and `feePayerSignature` (`Signature.Signature`) fields so signed envelopes can be round-tripped without information loss; `fromRpc`/`toRpc` translate them via the existing `SignatureEnvelope.fromRpc`/`toRpc` and `Signature.fromRpc`/`toRpc` helpers. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Widened `toRpc` inputs (and their symmetric zod `*ToRpc` encode schemas) to accept numberish values -- `Hex.Hex | bigint | number` for bigint-typed quantities and `Hex.Hex | number` for number-typed quantities -- while keeping decoded/`fromRpc` output types strictly `bigint`/`number`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `TransactionRequest.toEnvelope` and `TransactionEnvelope.toTransactionRequest` for converting between `TransactionRequest` and `TxEnvelope*` shapes (e.g. when handling `eth_sendTransaction`). Extended `TransactionRequest` with optional `r`, `s`, `yParity`, `v` fields so signed payloads can be carried in the same type (with hex↔native coercion in `fromRpc`/`toRpc`). Also tightened `TransactionEnvelope.getType` to throw on accidental RPC-style type strings (`'0x0'`–`'0x4'`); pass payloads through `TransactionRequest.fromRpc` first. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added generic `TxEnvelope` routing helpers with property-based type inference for parsing, serialization, validation, hashing, signing payloads, and RPC conversion. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Threaded an optional `typeHashes` cache through `TypedData.encode`, `TypedData.hashStruct`, and `TypedData.hashDomain` so `keccak256(encodeType(t))` is computed once per `(primaryType, types)` per call instead of once per nested struct or array element (with `TypedData.encode` populating a fresh map internally and advanced callers able to share a `Map` across calls). + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - **Added:** `BlobCells` module exposing PeerDAS (EIP-7594) cell-level helpers — `fromBlob` derives the 128 cells + cell KZG proofs of an extended blob, `verify` verifies a batch of cell proofs against their commitments, `recover` reconstructs the full set of cells/proofs from ≥ 64 known cells, and `toDataColumns` builds the 128 per-column packs for a list of blobs. + + ```diff + + import { BlobCells, Blobs } from 'ox' + + + + const blobs = Blobs.from('0xdeadbeef') + + const columns = BlobCells.toDataColumns(blobs, { kzg }) // 128 columns + ``` + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added an `as: 'Hex' | 'Bytes'` option to `webauthn.Authenticator.getAuthenticatorData`. The bytes path assembles into a single `Uint8Array` directly, while the legacy hex path stays in hex throughout to avoid `Bytes <-> Hex` round trips. `getSignCount` now accepts `Hex` or `Uint8Array`, eliminating the unconditional `Bytes.fromHex` decode for byte-input callers. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added the `ox/zod` entrypoint with module-scoped Zod schemas, direct integer quantity schemas, account proofs, authorizations, blocks, filters, override schemas, logs, RPC responses, RPC method schemas (`RpcSchema.Eth` / `RpcSchema.Wallet` per-method `params` / `returnType` plus `Request` envelopes), transaction envelopes, transactions, transaction requests, transaction receipts, ABI, and EIP-712 Typed Data. + +### Patch Changes + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiEvent.encode` and `AbiEvent.decode` to honor the `anonymous` flag -- anonymous events no longer prepend or expect a selector topic. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiConstructor.decode` to assert that `data` begins with the provided `bytecode` and allowed constructor encoding and decoding without an ABI constructor when no arguments are present. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `AbiError.extract` for selecting and decoding ABI errors from revert data. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `AbiEvent.decodeLog` and `AbiEvent.extractLogs` for decoding and extracting event logs directly from an ABI. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiEvent.assertArgs` and `AbiEvent.encode` to always hash `string`/`bytes` indexed inputs to hex via `Hash.keccak256(value, { as: 'Hex' })`, so topic comparisons and emitted topics are reliably hex regardless of whether the input is a `Hex.Hex` or a `Bytes.Bytes`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiFunction.decodeData` to throw `AbiParameters.DataSizeTooSmallError` when the calldata is exactly the 4-byte selector but the function declares inputs, instead of silently returning `undefined`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiParameters.decode` to surface a `DataSizeTooSmallError` (with parameter context) instead of leaking a `Cursor.PositionOutOfBoundsError` when the encoded payload is shorter than the parameter list requires. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiParameters.encodePacked` to validate that fixed-array lengths match the supplied value, throwing `ArrayLengthMismatchError` (e.g. for `uint256[2]` with three elements) instead of silently encoding the wrong arity. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiParameters.decode` for standalone zero-length fixed arrays of dynamic types (e.g. `string[0]`). + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Keystore.toKeyAsync` to use the async PBKDF2 implementation -- previously it called the synchronous `pbkdf2` helper and blocked the main thread when decrypting PBKDF2-backed keystores. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added validation of KDF parameters in `Keystore.pbkdf2`, `Keystore.pbkdf2Async`, `Keystore.scrypt`, and `Keystore.scryptAsync` -- PBKDF2 now requires `iterations` to be an integer `>= 1000`, and scrypt now requires `n` to be a power of two `>= 1024` with positive integer `r` and `p`, rejecting trivially weak parameters that previously produced formally valid but cryptographically insecure keystores. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Keystore.scryptAsync` to honor caller-provided `p` and `r` options -- previously they were silently overridden with `p=8` and `r=1`, producing keystores that disagreed with the synchronous `Keystore.scrypt` for the same inputs. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Mnemonic.toPrivateKey` to return `Bytes` by default to match its declared return type -- previously it returned a `Hex` string at runtime even though the default `as` was `'Bytes'`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `WebCryptoP256.verify` rejecting valid signatures whose `r` or `s` value has a leading zero byte by padding both components to 32 bytes. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `PublicKey.assert` so it rejects objects missing `x`/`y` when the `compressed` option is set explicitly. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `PublicKey.fromHex` and `PublicKey.fromBytes` so they reject deserialized public keys with an invalid SEC1 prefix. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Preserved `Block.fromRpc().totalDifficulty` as `undefined` instead of silently coercing missing values to `0n`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Made `Bloom.contains` validate the bloom argument length and throw `Bloom.InvalidBloomError` instead of silently returning `false` for malformed bloom inputs. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Made `Filter.toRpc` preserve explicit `address: null` (and `topics: null`) instead of stripping it via truthy checks. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `Log.fromRpc` and `Log.toRpc` support for optional `blockTimestamp` fields. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Unified the RPC-quantity conversion blocks across `Block`, `BlockOverrides`, and `StateOverrides` behind an internal helper so optional bigint fields with explicit `'0x0'` (e.g. `baseFeePerGas: '0x0'` on a post-merge block) round-trip as `0n` instead of being silently dropped by the previous truthy checks. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Validated array element types and fixed-array lengths in `TypedData.assert` and `TypedData.encodeField`, throwing `InvalidArrayError`/`InvalidArrayLengthError` instead of silently passing malformed input through to the encoder. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Made `ValidatorData.encode` call `Address.assert` on the validator argument so malformed validator addresses are rejected instead of producing invalid ERC-191 payloads. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Tightened `Value.from` input validation to reject malformed numeric strings (`''`, `'.'`, `'-'`, `'-.'`) and to reject non-integer or negative `decimals`, and replaced `Number`/`Math.round` rounding with string-carry rounding so very long fractions no longer lose precision. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Bytes.fromNumber` and `Rlp.fromHex` rejecting valid odd-nibble hex output produced by `Hex.fromNumber` (e.g. `0x7`, `0x311`); both now even-pad before handing the value to the strict `Bytes.fromHex` parser. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Bls.aggregate` to reject empty arrays and mixed G1/G2 input, and added a fast path that returns the input directly when only one point is supplied. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `BlsPoint.fromBytes` to honor its declared `group` argument and assert the input length matches the requested G1 (48 bytes) or G2 (96 bytes) shape. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Hardened `CoseKey.toPublicKey` to reject COSE_Key inputs with a non-P-256 `kty`, `alg`, or `crv` header, or with `x`/`y` byte arrays that are not exactly 32 bytes long. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Documented `extraEntropy` on `Secp256k1.sign` and `P256.sign` correctly as `@default false` so the JSDoc matches the runtime default. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Kzg.from` to preserve `this` binding by wrapping method calls instead of destructuring, so class instances or method-style implementations work correctly. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Documented `WebCryptoP256.sign` low-S normalization as always-on and corrected the `WebCryptoP256.createKeyPair` / `createKeyPairECDH` JSDoc to describe `publicKey` as a `PublicKey.PublicKey`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Replaced the plain `Error` thrown by `WebCryptoP256.getSharedSecret` when given an ECDSA private key with a typed `WebCryptoP256.InvalidPrivateKeyAlgorithmError`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `Ens.toCoinType` for converting chain IDs to ENS coin types. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Narrowed `UserOperation.fromPacked` return type to `UserOperation<'0.7', true>` to reflect that the packed format does not carry v0.8 `authorization`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added EntryPoint 0.8 and 0.9 support to `UserOperationGas` through version-specific aliases over the 0.7 gas shape. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `UserOperation.toRpc` to preserve v0.6 `paymasterAndData` and corrected `eth_getUserOperationByHash` result typing. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `UserOperation` RPC codecs to map native `authorization` to wire `eip7702Auth` for EntryPoint 0.8 and 0.9. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `SignatureErc6492.unwrap` to strip the trailing magic bytes before ABI-decoding, and made `SignatureErc6492.from` and `assert` validate object inputs by throwing the new `InvalidUnwrappedSignatureError` on malformed values. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Replaced the exception-driven opData fallback in `Execute.decodeBatchOfBatchesData` with structural detection of the ABI head word, so malformed inputs surface as decode errors instead of being masked by the catch. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Hardened ERC-8010 by validating the full unwrapped object in `SignatureErc8010.assert`, capping the suffix length parsed by `unwrap` against the wrapped size to reject overflowing inputs, and skipping `Secp256k1.recoverAddress` in `wrap` when `to` is already provided. + +- [#286](https://github.com/wevm/ox/pull/286) [`56f299f`](https://github.com/wevm/ox/commit/56f299f6c046aea41b55e64f7993b831a206c47c) Thanks [@jxom](https://github.com/jxom)! - Added `eth_getRawTransactionByHash` to `RpcSchema.Eth` and `z.RpcSchema.Eth`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Hex.toBytes` and `Bytes.fromHex` returning a `Uint8Array` view that aliased Node's shared `Buffer` pool memory, which broke callers that read `.buffer` (e.g. WebAuthn `attestationObject` round-trips). + +- [#291](https://github.com/wevm/ox/pull/291) [`5ebb88d`](https://github.com/wevm/ox/commit/5ebb88dfc6139573844d9c6b97eed8c463ee1d3a) Thanks [@jxom](https://github.com/jxom)! - Fixed `KeyAuthorization.fromRpc` return type mismatch under TypeScript configs without `exactOptionalPropertyTypes`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed the zod `Log` schema to accept logs with zero topics (e.g. `LOG0`/anonymous events) and widened `Log.topics` to `Hex.Hex[]`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - `ox/tempo`: Removed the TIP-1061 multisig `config_id` concept to match the updated Tempo reference implementation: multisig account addresses now derive directly from the initial config, owner approval digests bind only `account`, the signature wire format is `0x05 || rlp([account, signatures, init?])`, `MultisigConfig.maxOwners` is now 255 with `u8` weights, and owner approvals may be nested multisig signatures. + + ```diff + - const id = MultisigConfig.toId(genesisConfig) + - const account = MultisigConfig.getAddress({ genesisConfigId: id }) + + const account = MultisigConfig.getAddress(genesisConfig) + + - MultisigConfig.getSignPayload({ payload, account, genesisConfigId }) + + MultisigConfig.getSignPayload({ payload, account }) + + - SignatureEnvelope.from({ account, genesisConfigId, signatures }) + + SignatureEnvelope.from({ account, signatures }) + ``` + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcTransport.fromHttp` (via internal `withTimeout`) producing an unhandled rejection when the wrapped fetch threw a non-`AbortError` after the timeout setup ran. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Provider.from` to preserve wrapped providers' prototype methods, accessors, and non-enumerable property descriptors instead of dropping them via object spread. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Provider.from` to stop sniffing successful EIP-1193 payloads for a `jsonrpc` field and reparsing them as JSON-RPC envelopes. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added a decode depth limit (1024) to `Rlp.toBytes` / `Rlp.toHex`, throwing `Rlp.DepthLimitExceededError` instead of overflowing the call stack on deeply nested untrusted RLP input. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed RLP decoding to reject malformed payloads with trailing bytes (`Rlp.TrailingBytesError`) or list items overrunning the declared list length (`Rlp.ListBoundaryExceededError`). + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcResponse.from` crashing when called without a `request` option and missing `jsonrpc` -- it now validates the envelope and throws `RpcResponse.ParseError` for missing `id`/`jsonrpc`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcResponse.parseError` re-wrapping existing `RpcResponse.BaseError` instances as `InternalError` -- existing instances are now returned as-is. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcResponse.parse` silently returning `undefined` for malformed payloads -- it now validates the JSON-RPC envelope (`jsonrpc === '2.0'`, presence of `id`, and presence of either `result` or `error`) and throws `RpcResponse.ParseError` otherwise. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed the EIP-1898 block identifier param type in the core `eth`/`tempo` RPC request schemas to be wire-typed (`Block.Identifier`), so its `blockNumber` field is hex like the sibling `Block.Number` branch instead of native `bigint`. This makes `z.RpcSchema.encodeParams` output assignable to the core request param types for block-selector methods (`eth_call`, `eth_getBalance`, `eth_getCode`, `eth_getStorageAt`, `eth_getTransactionCount`, `eth_getBlockTransactionCountByNumber`, `eth_getUncleCountByBlockNumber`, `eth_estimateGas`, etc.). + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added an optional 4th `blockOverrides` parameter to the `eth_call` and `eth_estimateGas` schemas (`RpcSchema.Default` and the zod `RpcSchema.Eth`), matching Geth/Anvil's `eth_call(transaction, block, stateOverrides, blockOverrides)` signature. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added `eth_fillTransaction` to `RpcSchema.Eth`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Updated the zod `RpcSchema.Eth` request-bearing methods (`eth_call`, `eth_estimateGas`, `eth_sendTransaction`, `eth_signTransaction`, `eth_simulateV1`) to encode their transaction-request params with `TransactionRequestToRpc`, so `RpcSchema.encodeParams` now accepts numberish (`bigint | number | Hex`) quantities. Decoded output is unchanged. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcTransport.fromHttp` to throw `RpcTransport.MalformedResponseError` for empty `2xx` HTTP bodies instead of silently returning `undefined`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcTransport.HttpError.details` to render raw-text error bodies verbatim instead of JSON-stringifying them with surrounding quotes. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcTransport.fromHttp` to surface an `HttpError` (instead of a `SyntaxError`) when servers return `Content-Type: application/json` with an empty body for non-`2xx` responses. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `RpcTransport.fromHttp` ignoring its own `timeout` when the caller supplied a `fetchOptions.signal`; both signals are now composed via `AbortSignal.any` so the timeout always fires. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Changed `Siwe.Message.chainId` to bigint, parsed SIWE messages to bigint chain IDs, and generated SIWE nonces with cryptographically secure randomness. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `tempo.AuthorizationTempo.from` to normalize `options.signature` through `SignatureEnvelope.from` so serialized or convenience-shape signatures are accepted as documented. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed Tempo key authorization RPC decoding to tolerate `null` optional fields and preserve `witness`, `isAdmin`, and `account` through the zod codec. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `tempo.TransactionRequest.toRpc` to generate a full 192-bit `nonceKey` when called with `nonceKey: 'random'`, matching the documented field width. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `PoolId.from` to be order-independent by sorting token addresses canonically before hashing. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed Tempo `TransactionReceipt.fromRpc`/`toRpc` to map the `type` field between `'0x76'` and `'tempo'`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added the Tempo fields `keyId`, `multisigInit`, `multisigSignatureCount`, and `capabilities` to `TransactionRequest`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed Tempo transaction RPC decoding to tolerate `null` optional fields and to omit fabricated flat `data`/`to`/`value` call fields. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `tempo.TxEnvelopeTempo.deserialize` to validate the `0x76` envelope-type prefix before RLP decoding, rejecting payloads from other envelope types. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `AccessList.fromTupleList` silently normalizing non-32-byte storage keys; it now throws `InvalidStorageKeySizeError` to match the symmetric `toTupleList` validation. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Authorization.fromTupleList` declaring its return type as `TupleList` instead of `List`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Required `blobVersionedHashes` to be present and non-empty in `TxEnvelopeEip4844.assert`; the previous `if (blobVersionedHashes)` guard let envelopes serialize as "blob transactions with no blob hashes". + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Improved `TxEnvelopeEip4844.deserialize` `InvalidSerializedError` diagnostics by including `maxFeePerBlobGas` and `blobVersionedHashes` in the attributes map and using the EIP-4844 signature-presence threshold (`length > 11`) instead of the EIP-1559 `> 9` copy-paste. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `TxEnvelopeEip4844.serialize` ignoring the `input` alias for `data`; calldata supplied via `input` is now included in the serialized envelope and sign payload. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Added the missing `TxEnvelopeEip7702.toRpc` to mirror `Eip1559`/`Eip2930`/`Eip4844`/`Legacy`, restoring symmetry for callers building EIP-7702 RPC requests. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Transaction.fromRpc` clobbering legacy (`type: '0x0'`) `v` with `27`/`28`; the original RPC `v` is now preserved when present. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `TxEnvelopeLegacy.toRpc` collapsing every signed legacy envelope to `v: '0x1b'`/`'0x1c'`; it now preserves an explicit `envelope.v`, otherwise derives EIP-155 `v = chainId * 2 + 35 + yParity` when a chain ID is present. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `TransactionRequest.fromRpc` mutating the caller-provided RPC object by cloning before assigning parsed fields. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `Transaction.toRpc` emitting `null` for `transactionIndex: 0` instead of `0x0`. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `webauthn.Authentication.getSignPayload` to honor the documented `hash` option by SHA-256 hashing the returned payload when `hash: true` is passed. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `webauthn.Authentication.sign` to decode `clientDataJSON` bytes as UTF-8 via `Bytes.toString` instead of `String.fromCharCode(...bytes)`, which corrupted non-ASCII payloads and could throw `RangeError` on large inputs. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `webauthn.Authentication.verify` to reject assertion `authenticatorData` whose flags imply structure not allowed for assertions: the `AT` (attested credential data) bit is now refused, and an `ED` (extension data) bit must be backed by a CBOR-decodable trailing extension map. + +- [#231](https://github.com/wevm/ox/pull/231) [`40d9408`](https://github.com/wevm/ox/commit/40d94082a75f05e34d37b1c011722ed9853e94aa) Thanks [@jxom](https://github.com/jxom)! - Fixed `webauthn.Registration.verify` JSDoc for the `attestation` option to document the actual runtime default of `'none'` (matching `Registration.getOptions`) instead of `'required'`. + +- [#284](https://github.com/wevm/ox/pull/284) [`c86f635`](https://github.com/wevm/ox/commit/c86f6350f199a0f5a9705083ad545da760e1f5c4) Thanks [@jxom](https://github.com/jxom)! - Fixed `AbiParameters.encode` and `AbiParameters.decode` handling of zero-width types (zero-length fixed arrays and empty tuples). + ## 0.14.30 ### Patch Changes @@ -449,6 +751,7 @@ ### Patch Changes - [#113](https://github.com/wevm/ox/pull/113) [`e21cb3c`](https://github.com/wevm/ox/commit/e21cb3cf0b7412f9ca72824247d22ba25e8be4c9) Thanks [@jxom](https://github.com/jxom)! - Added support for specifying the ABI and signature name to: + - `AbiFunction.{encodeData,encodeResult,decodeData,decodeResult}` - `AbiError.{encode,decode}` - `AbiEvent.{encode,decode}` @@ -456,13 +759,13 @@ Example: ```ts twoslash - import { AbiFunction } from 'ox' - import { abi } from './abi' + import { AbiFunction } from "ox"; + import { abi } from "./abi"; - const data = AbiFunction.encodeData(abi, 'approve', [ - '0x0000000000000000000000000000000000000000', + const data = AbiFunction.encodeData(abi, "approve", [ + "0x0000000000000000000000000000000000000000", 1n, - ]) + ]); ``` ## 0.9.4 @@ -494,6 +797,7 @@ ### Minor Changes - [#104](https://github.com/wevm/ox/pull/104) [`4f4b635`](https://github.com/wevm/ox/commit/4f4b635dfb399ca9df07bab843857743f389639e) Thanks [@jxom](https://github.com/jxom)! - **Breaking(`ox/erc6492`:** + - Renamed `WrappedSignature` to `SignatureErc6492` - Renamed `WrappedSignature.WrappedSignature` to `SignatureErc6492.Unwrapped` - Renamed `WrappedSignature.toHex` to `SignatureErc6492.wrap` @@ -548,6 +852,7 @@ ### Patch Changes - [`9fd0bf0`](https://github.com/wevm/ox/commit/9fd0bf0460694709566805bc29f50cad25816620) Thanks [@jxom](https://github.com/jxom)! - Added [ECDH (Elliptic Curve Diffie-Hellman)](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#ecdh) shared secrets to `P256`, `Secp256k1`, and `WebCryptoP256` modules. This enables secure key agreement between parties using elliptic curve cryptography for both secp256k1 and secp256r1 (P256) curves, with support for both `@noble/curves` (for `P256` and `Secp256k1`) implementation and Web Crypto APIs (`WebCryptoP256`). + - `P256.getSharedSecret` - `Secp256k1.getSharedSecret` - `WebCryptoP256.getSharedSecret` diff --git a/package.json b/package.json index 978dbe41..7edf8561 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,7 @@ "name": "ox", "description": "Ethereum Standard Library", "type": "module", - "version": "1.0.0-beta.22", + "version": "1.0.0", "main": "./dist/index.js", "sideEffects": false, "license": "MIT", diff --git a/src/version.ts b/src/version.ts index f57fbdd8..24eefa5a 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,2 +1,2 @@ /** @internal */ -export const version = '1.0.0-beta.22' +export const version = '1.0.0'