diff --git a/content/confidential-contracts/api/finance.mdx b/content/confidential-contracts/api/finance.mdx
index 082b6202..743936c1 100644
--- a/content/confidential-contracts/api/finance.mdx
+++ b/content/confidential-contracts/api/finance.mdx
@@ -25,7 +25,7 @@ For convenience, this directory also includes:
## `BatcherConfidential`
-
+
@@ -83,6 +83,7 @@ underlying tokens into [`BatcherConfidential.toToken`](#BatcherConfidential-toTo
- [routeDescription()](#BatcherConfidential-routeDescription--)
- [batchState(batchId)](#BatcherConfidential-batchState-uint256-)
- [_claim(batchId, account)](#BatcherConfidential-_claim-uint256-address-)
+- [_quit(batchId, account)](#BatcherConfidential-_quit-uint256-address-)
- [_join(to, amount)](#BatcherConfidential-_join-address-euint64-)
- [_executeRoute(batchId, amount)](#BatcherConfidential-_executeRoute-uint256-uint256-)
- [_validateStateBitmap(batchId, allowedStates)](#BatcherConfidential-_validateStateBitmap-uint256-bytes32-)
@@ -182,7 +183,7 @@ Quit the batch with id `batchId`. Entire deposit is returned to the user.
This can only be called if the batch has not yet been dispatched or if the batch was canceled.
-Developers should consider adding additional restrictions to this function
+Developers should consider adding additional restrictions to [`BatcherConfidential._quit`](#BatcherConfidential-_quit-uint256-address-)
if maintaining confidentiality of deposits is critical to the application.
@@ -444,6 +445,39 @@ Returns the current state of a batch. Reverts if the batch does not exist.
Claims `toToken` for `account`'s deposit in batch with id `batchId`. Tokens are always
sent to `account`, enabling third-party relayers to claim on behalf of depositors.
+
+This function is not protected against reentrancy. External functions built on top of it
+must be marked `nonReentrant`, as [`BatcherConfidential.claim`](#BatcherConfidential-claim-uint256-address-) is.
+
+
+
+
+
+
+
+
+
+Quits the batch with id `batchId` for `account`, returning the entire deposit to `account`.
+This can only be called if the batch has not yet been dispatched or if the batch was canceled.
+
+
+Developers should consider adding additional restrictions to this function if maintaining
+confidentiality of deposits is critical to the application.
+
+
+
+This function is not protected against reentrancy. External functions built on top of it
+must be marked `nonReentrant`, as [`BatcherConfidential.quit`](#BatcherConfidential-quit-uint256-) is.
+
+
@@ -813,7 +847,7 @@ Intermediate steps must not result in underlying [`BatcherConfidential.toToken`]
## `ERC7821WithExecutor`
-
+
@@ -951,7 +985,7 @@ function _erc7821AuthorizedExecutor(
## `VestingWalletCliffConfidential`
-
+
@@ -1056,6 +1090,12 @@ starts at the vesting start timestamp (see [`VestingWalletConfidential`](#Vestin
- [VestingWalletCliffConfidentialInvalidCliffDuration(cliffSeconds, durationSeconds)](#VestingWalletCliffConfidential-VestingWalletCliffConfidentialInvalidCliffDuration-uint64-uint64-)
+VestingWalletConfidential
+
+- [VestingWalletConfidentialUnauthorizedHandle(handle, token)](#VestingWalletConfidential-VestingWalletConfidentialUnauthorizedHandle-euint64-address-)
+
+
+ReentrancyGuardTransient
- [ReentrancyGuardReentrantCall()](#ReentrancyGuardTransient-ReentrancyGuardReentrantCall--)
@@ -1175,7 +1215,7 @@ The specified cliff duration is larger than the vesting duration.
## `VestingWalletConfidential`
-
+
@@ -1283,6 +1323,7 @@ Confidential vesting wallet contracts can be deployed (as clones) using the [`Ve
Errors
+- [VestingWalletConfidentialUnauthorizedHandle(handle, token)](#VestingWalletConfidential-VestingWalletConfidentialUnauthorizedHandle-euint64-address-)
ReentrancyGuardTransient
@@ -1497,13 +1538,30 @@ Emitted when releasable vested tokens are released.
+
+The `token` is not authorized (via the FHE ACL) to access the encrypted `handle` it returned.
+
+
+
+
## `VestingWalletConfidentialFactory`
-
+
diff --git a/content/confidential-contracts/api/governance.mdx b/content/confidential-contracts/api/governance.mdx
index 6b6cfd19..27e044c5 100644
--- a/content/confidential-contracts/api/governance.mdx
+++ b/content/confidential-contracts/api/governance.mdx
@@ -16,7 +16,7 @@ This directory includes primitives for on-chain confidential governance.
## `VotesConfidential`
-
+
diff --git a/content/confidential-contracts/api/interfaces.mdx b/content/confidential-contracts/api/interfaces.mdx
index 4e37e175..a12417fd 100644
--- a/content/confidential-contracts/api/interfaces.mdx
+++ b/content/confidential-contracts/api/interfaces.mdx
@@ -23,7 +23,7 @@ These interfaces are available as `.sol` files and are useful to interact with t
## `IERC7984`
-
+
@@ -424,7 +424,7 @@ should be able to disclose the amount. This functionality is implementation spec
## `IERC7984ERC20Wrapper`
-
+
@@ -644,7 +644,7 @@ Emitted when an unwrap request is finalized for a given `receiver`, `unwrapReque
## `IERC7984HookModule`
-
+
@@ -754,7 +754,7 @@ Optionally emitted by a module to indicate the result of its validation (pre-tra
## `IERC7984Receiver`
-
+
@@ -789,7 +789,8 @@ Called upon receiving a confidential token transfer. Returns an encrypted boolea
of the callback. If false is returned, the token contract will attempt to refund the transfer.
-The calling contract (token) must be granted ACL allowance to read the confidential return value.
+The calling contract (token) must be granted ACL allowance to read the confidential return value if
+it is initialized. Uninitialized return values are treated as a false boolean.
@@ -805,7 +806,7 @@ Do not manually refund the transfer AND return false, as this can lead to double
## `IERC7984Rwa`
-
+
diff --git a/content/confidential-contracts/api/token.mdx b/content/confidential-contracts/api/token.mdx
index 0d48366b..de3f7d04 100644
--- a/content/confidential-contracts/api/token.mdx
+++ b/content/confidential-contracts/api/token.mdx
@@ -44,7 +44,7 @@ This set of interfaces, contracts, and utilities are all related to `ERC7984`, a
## `ERC7984`
-
+
@@ -722,7 +722,7 @@ The given caller `caller` is not authorized for the current operation.
## `ERC7984ERC20Wrapper`
-
+
@@ -1228,7 +1228,7 @@ Returns the maximum number that will be used for [`ERC7984.decimals`](#ERC7984-d
## `ERC7984Freezable`
-
+
@@ -1440,7 +1440,7 @@ Emitted when a confidential amount of token is frozen for an account
## `ERC7984Hooked`
-
+
@@ -1911,7 +1911,7 @@ The maximum number of modules has been exceeded.
## `ERC7984ObserverAccess`
-
+
@@ -2094,7 +2094,7 @@ Thrown when an account tries to set a `newObserver` for a given `account` withou
## `ERC7984Omnibus`
-
+
@@ -2417,7 +2417,7 @@ Try using the equivalent transfer function with an input proof.
## `ERC7984Restricted`
-
+
@@ -2741,7 +2741,7 @@ The operation failed because the user account is restricted.
## `ERC7984Rwa`
-
+
@@ -3558,7 +3558,7 @@ The operation failed because the lost account is the same as the new account.
## `ERC7984Votes`
-
+
@@ -3778,7 +3778,7 @@ Emits a [`IERC7984.ConfidentialTransfer`](/confidential-contracts/api/interfaces
## `ERC7984BalanceCapHookModule`
-
+
@@ -3969,7 +3969,7 @@ Emitted when the max balance for a given token is set.
## `ERC7984HolderCapHookModule`
-
+
@@ -4232,7 +4232,7 @@ The new max holder count `maxHolderCount` is invalid.
## `ERC7984HookModule`
-
+
@@ -4529,7 +4529,7 @@ The caller `user` does not have access to the encrypted amount `amount`.
## `ERC7984Utils`
-
+
@@ -4548,6 +4548,13 @@ Library that provides common [`ERC7984`](#ERC7984) utility functions.
+
diff --git a/content/confidential-contracts/api/utils.mdx b/content/confidential-contracts/api/utils.mdx
index d7323025..bae3f542 100644
--- a/content/confidential-contracts/api/utils.mdx
+++ b/content/confidential-contracts/api/utils.mdx
@@ -26,7 +26,7 @@ Miscellaneous contracts and libraries containing utility functions you can use t
## `FHESafeMath`
-
+
@@ -172,7 +172,7 @@ Subtract `b` from `a` saturating at zero on underflow. The returned value is `a
## `HandleAccessManager`
-
+
@@ -258,7 +258,7 @@ Validation function that must return true if the message sender is allowed to ca
## `CheckpointsConfidential`
-
+
diff --git a/content/confidential-contracts/changelog.mdx b/content/confidential-contracts/changelog.mdx
index 1b8dadaf..264ec483 100644
--- a/content/confidential-contracts/changelog.mdx
+++ b/content/confidential-contracts/changelog.mdx
@@ -2,6 +2,45 @@
title: Changelog
---
+
+# [v0.5.3](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/releases/tag/v0.5.3) - 2026-08-10
+
+- `BatcherConfidential`: Extract logic from `quit` into internal function `_quit`. Developers can now call `_quit(batchId, address)` from a derived contract to quit on behalf of a depositor. ([#435](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/435))
+
+
+
+[Changes][v0.5.3]
+
+
+
+# [v0.5.2](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/releases/tag/v0.5.2) - 2026-08-05
+
+- `VestingWalletConfidential`: Ensure that tokens are allowed to access handles they return (or the handle is uninitialized). ([#423](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/423))
+- `ERC7984`: Check that `IERC7984Receiver` has ACL access to the ebool they return (or the handle is uninitialized). ([#428](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/428))
+
+
+
+[Changes][v0.5.2]
+
+
+
+# [v0.4.2](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/releases/tag/v0.4.2) - 2026-08-05
+
+- `VestingWalletConfidential`: Ensure that tokens are allowed to access handles they return (or the handle is uninitialized). ([#423](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/423))
+- `ERC7984`: Check that `IERC7984Receiver` has ACL access to the ebool they return (or the handle is uninitialized). ([#428](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/428))
+
+[Changes][v0.4.2]
+
+
+
+# [v0.3.2](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/releases/tag/v0.3.2) - 2026-08-05
+
+- `VestingWalletConfidential`: Ensure that tokens are allowed to access handles they return (or the handle is uninitialized). ([#423](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/423))
+- `ERC7984`: Check that `IERC7984Receiver` has ACL access to the ebool they return (or the handle is uninitialized). ([#428](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/pull/428))
+
+[Changes][v0.3.2]
+
+
# [v0.5.1](https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/releases/tag/v0.5.1) - 2026-06-22
@@ -162,6 +201,10 @@ Note: Confidential contracts are currently in a phase of rapid development--futu
[Changes][v0.1.0]
+[v0.5.3]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.5.2...v0.5.3
+[v0.5.2]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.4.2...v0.5.2
+[v0.4.2]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.3.2...v0.4.2
+[v0.3.2]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.5.1...v0.3.2
[v0.5.1]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.5.0...v0.5.1
[v0.5.0]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.4.1...v0.5.0
[v0.4.1]: https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/compare/v0.4.0...v0.4.1