Skip to main content

HoldOps

Asset Tokenization Studio Team

HoldOps

Orchestrator library for hold lifecycle operations on partitioned balances.

Deployed once and invoked via delegatecall from hold facets so facet bytecode stays within EIP-170. Each entry forwards to the corresponding {HoldStorageWrapper} helper, which performs the actual storage mutations, balance accounting, snapshot updates and event emissions.

Events​

Approval​

event Approval(address indexed owner, address indexed spender, uint256 value)

Emitted when owner authorises spender to spend up to value tokens on their behalf, whether via {IAllowance.approve}, {IAllowance.increaseAllowance} or {IAllowance.decreaseAllowance}.

Mirrors the ERC-20 Approval event. value is the resulting, absolute allowance after the update — not the delta applied.

Parameters​

NameTypeDescription
owner indexedaddressAddress whose tokens may be spent.
spender indexedaddressAddress authorised to spend on owner's behalf.
valueuint256Allowance of spender over owner's tokens after the update.

DelegateVotesChanged​

event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance)

Emitted when delegate votes change due to balance changes

Parameters​

NameTypeDescription
delegate indexedaddressThe delegate whose votes changed
previousBalanceuint256The previous vote balance
newBalanceuint256The new vote balance

Transfer​

event Transfer(address indexed from, address indexed to, uint256 value)

Emitted whenever tokens move between accounts, are minted, or are burned.

Parameters​

NameTypeDescription
from indexedaddressSource account (zero address on mint).
to indexedaddressDestination account (zero address on burn).
valueuint256Amount of tokens transferred.

TransferByPartition​

event TransferByPartition(bytes32 indexed fromPartition, address operator, address indexed from, address indexed to, uint256 value, bytes data, bytes operatorData)

Emitted when tokens are transferred from one partition to another or within the same partition.

Parameters​

NameTypeDescription
fromPartition indexedbytes32Source partition.
operatoraddressAddress that initiated the transfer.
from indexedaddressToken holder whose balance decreased.
to indexedaddressRecipient whose balance increased.
valueuint256Token quantity transferred.
databytesCaller-supplied data.
operatorDatabytesOperator-supplied data.

Errors​

AbafChangeForBlockForbidden​

error AbafChangeForBlockForbidden(uint256 blockNumber)

Raised when attempting to change ABAF for a block that is forbidden

Parameters​

NameTypeDescription
blockNumberuint256The block number that is forbidden

AccountIsBlocked​

error AccountIsBlocked(address account)

Reverts when an operation targets or is requested by a blocked account.

The blocking policy is enforced by the domain that performs the check.

Parameters​

NameTypeDescription
accountaddressAccount rejected by the blocking validation.

ExpiredDeadline​

error ExpiredDeadline(uint256 deadline)

Reverts when a signed payload is submitted after its deadline.

The caller must provide and validate deadlines before accepting the signed operation.

Parameters​

NameTypeDescription
deadlineuint256Expired deadline carried by the signed payload.

HoldExpirationNotReached​

error HoldExpirationNotReached()

Reverts when a reclaim is attempted before the hold's expiration timestamp.

HoldExpirationReached​

error HoldExpirationReached()

Reverts when an operation requires an unexpired hold but the hold has expired.

InsufficientAllowance​

error InsufficientAllowance(address spender, address from)

Reverts when spender attempts to consume more allowance than from has granted.

Raised by transferFrom-style flows and by {IAllowance.decreaseAllowance} when the subtracted amount exceeds the current allowance.

Parameters​

NameTypeDescription
spenderaddressAddress attempting to spend on behalf of from.
fromaddressAddress whose allowance is being consumed.

InsufficientBalance​

error InsufficientBalance(address account, uint256 balance, uint256 value, bytes32 partition)

Thrown when a transfer or redemption is attempted with insufficient partition balance.

Parameters​

NameTypeDescription
accountaddressThe account whose balance was checked.
balanceuint256The actual balance available.
valueuint256The amount that was requested.
partitionbytes32The partition that was checked.

InsufficientHoldBalance​

error InsufficientHoldBalance(uint256 holdAmount, uint256 amount)

Reverts when the requested release amount exceeds the hold's remaining balance.

Parameters​

NameTypeDescription
holdAmountuint256The amount still held.
amountuint256The amount requested.

InvalidDestinationAddress​

error InvalidDestinationAddress(address holdDestination, address to)

Reverts when the recipient supplied to {executeHoldByPartition} mismatches the hold.

Parameters​

NameTypeDescription
holdDestinationaddressThe recipient stored on the hold.
toaddressThe recipient supplied to the execute call.

InvalidHoldAmount​

error InvalidHoldAmount()

Reverts when a hold is created with a zero or otherwise invalid amount.

InvalidPartition​

error InvalidPartition(address account, bytes32 partition)

Thrown when an account does not hold or is not associated with the specified partition.

Parameters​

NameTypeDescription
accountaddressAddress that was checked.
partitionbytes32Partition that was not found for the account.

IsNotEscrow​

error IsNotEscrow()

Reverts when a caller that is not the recorded escrow attempts to execute the hold.

SnapshotIdDoesNotExists​

error SnapshotIdDoesNotExists(uint256 snapshotId)

Thrown when the requested snapshot identifier has never been taken on this token.

Parameters​

NameTypeDescription
snapshotIduint256The unrecognised snapshot identifier that was supplied.

SnapshotIdNull​

error SnapshotIdNull()

Thrown when a snapshot identifier of zero is supplied; zero is reserved and never assigned to a valid snapshot.

TokenHolderNotFound​

error TokenHolderNotFound(address tokenHolder)

Thrown when an operation targets a token holder address that has no registered balance.

Parameters​

NameTypeDescription
tokenHolderaddressThe address that was not found.

UnexpectedError​

error UnexpectedError(bytes4 _errorId)

Reverts when an unreachable validation state is detected.

Replaces assertions for defensive handling of logically impossible states.

Parameters​

NameTypeDescription
_errorIdbytes4Identifier of the unexpected validation condition.

UnrecognizedResolverProxyVersion​

error UnrecognizedResolverProxyVersion(bytes8 _resolverProxyVersion)

Thrown when the provided proxy version does not match any BLR compatible standard.

Parameters​

NameTypeDescription
_resolverProxyVersionbytes8proxy version that is not compatible with the BLR.

WrongNonce​

error WrongNonce(uint256 nonce, address account)

Reverts when a nonce does not match the expected value for an account.

Protects signed operations against replay and out-of-order execution.

Parameters​

NameTypeDescription
nonceuint256Nonce supplied by the caller or signed payload.
accountaddressAccount for which the nonce validation failed.

WrongSignature​

error WrongSignature()

Reverts when a signature fails verification.

Applies to shared signature validation flows, including EIP-712 payloads and partition-based signatures.

WrongSignatureLength​

error WrongSignatureLength()

Reverts when a signature payload has an invalid byte length.

Used before signature recovery or verification to reject malformed input.