ERC-XXXX: Consent Verification Extension for ERC-4626 Tokenized Vaults

Author: Maulana Asykari Muhammad (@WeissCurry), Muhammad Zidan Fatonie (@mzf11125), Faisal Firdani (@zexoverz)
Type: Standards Track
Category: ERC
Status: Draft

Abstract

This ERC proposes an optional extension interface for ERC-4626 Tokenized Vaults that enables vaults to verify user acknowledgement of specific agreements before accepting new deposits or mint operations.

The extension introduces a standardized Consent Registry interface that allows vaults to verify whether an address has acknowledged a specific agreement identified by a cryptographic hash.

Consent records may represent acceptance of vault terms, risk disclosures, investment conditions, operational requirements, or other user acknowledgements.

This proposal does not modify the ERC-4626 accounting model. ERC-4626 vaults implementing this extension continue to expose the standard ERC-4626 interface while adding an optional consent verification layer before state-changing deposit operations.

Motivation

ERC-4626 standardizes tokenized vault functionality, including deposits, withdrawals, share minting, and redemption.

However, ERC-4626 does not define a mechanism for verifying whether a user has acknowledged information required before interacting with a vault.

Applications may require users to explicitly acknowledge:

  • vault terms;

  • risk disclosures;

  • investment conditions;

  • legal agreements;

  • operational policies.

Current implementations handle these requirements independently. This results in inconsistent consent storage models and different verification approaches across protocols.

This proposal introduces a common interface for consent-enabled ERC-4626 vaults while maintaining separation between vault accounting and consent management.

Specification

Consent Registry Interface

A Consent Registry stores and verifies consent records.

interface IERCXXXXConsentRegistry {

/\*\*

 \* @notice Returns whether a user has valid consent

 \* for a specific agreement.

 \*/

function hasValidConsent(

    address user,

    bytes32 agreementHash

)

    external

    view

    returns (bool);




/\*\*

 \* @notice Returns the timestamp when consent was registered.

 \*/

function consentTimestamp(

    address user,

    bytes32 agreementHash

)

    external

    view

    returns (uint256);




/\*\*

 \* @notice Registers consent for the caller.

 \*/

function registerConsent(

    bytes32 agreementHash

)

    external;




event ConsentRegistered(

    address indexed user,

    bytes32 indexed agreementHash,

    uint256 timestamp

);

}

Implementations MAY support additional consent creation mechanisms, including signatures and external attestations.

ERC-4626 Consent Extension Interface

ERC-4626 vaults implementing this extension MUST expose the Consent Registry and required agreement identifier.

interface IERC4626Consent {

/\*\*

 \* @notice Returns the Consent Registry used by the vault.

 \*/

function consentRegistry()

    external

    view

    returns(address);




/\*\*

 \* @notice Returns the agreement hash required for interaction.

 \*/

function requiredAgreementHash()

    external

    view

    returns(bytes32);

}

ERC-165 Interface Detection

Consent-enabled vaults SHOULD support ERC-165 interface detection.

Applications MAY use ERC-165 to determine whether a vault implements this extension.

Example:

type(IERC4626Consent).interfaceId

Deposit and Mint Verification

A vault implementing this extension MUST verify consent before executing:

deposit()

and:

mint()

The verification MUST check:

IERCXXXXConsentRegistry(consentRegistry())

.hasValidConsent(

    receiver,

    requiredAgreementHash()

);

Example:

function deposit(

uint256 assets,

address receiver

)

public

override

returns(uint256 shares)

{

require(

    IERCXXXXConsentRegistry(consentRegistry())

        .hasValidConsent(

            receiver,

            requiredAgreementHash()

        ),

    "Consent required"

);



return super.deposit(

    assets,

    receiver

);

}

Withdrawal and Redemption Behavior

This extension MUST NOT restrict:

withdraw()

or:

redeem()

A user’s ability to withdraw existing assets MUST remain independent from future consent requirements.

Consent verification applies only to new vault interactions that create additional exposure.

Consent Creation

This proposal does not require a specific consent creation mechanism.

Implementations MAY support:

Direct On-chain Consent

A user may directly register consent:

registerConsent(

agreementHash

)

The registry MUST associate the consent record with:

msg.sender

EIP-712 Signature Consent

Implementations MAY support off-chain signatures.

Example structure:

struct Consent {

address user;

bytes32 agreementHash;

uint256 nonce;

uint256 deadline;

}

Signature-based implementations MUST include:

  • nonce protection;

  • deadline validation;

  • EIP-712 domain separation;

  • chain identification.

External Credentials and Attestations

Consent Registries MAY use external credential systems.

Examples include:

  • ERC-721 credentials;

  • ERC-1155 credentials;

  • non-transferable tokens;

  • attestation protocols.

Implementations MUST ensure that credentials resolve to:

  1. a specific user;

  2. a specific agreement hash.

Agreement Versioning

Agreements are identified using hashes.

Example:

agreementHash =

keccak256(documentBytes);

A URI MAY be stored as metadata.

The hash represents the exact agreement version accepted by the user.

When a vault updates its required agreement hash:

event AgreementUpdated(

bytes32 indexed agreementHash,

string agreementURI

);

previous consent records MAY no longer satisfy the vault requirement.

Users MUST provide consent for the new agreement version before depositing or minting additional shares.

Rationale

Separation of Responsibilities

ERC-4626 vaults are responsible for:

  • asset accounting;

  • share calculation;

  • deposits;

  • withdrawals.

Consent Registries are responsible for:

  • storing acknowledgements;

  • validating consent;

  • managing consent records.

This separation allows different consent mechanisms without modifying ERC-4626 accounting logic.

ERC-4626 Compatibility

This proposal does not replace existing ERC-4626 functions.

The following functions remain unchanged:

deposit()

mint()

withdraw()

redeem()

Consent verification is an additional requirement applied before specific state changes.

Agreement Identification

Using hashes instead of URLs prevents ambiguity caused by changing documents.

A URL may point to updated content, while a cryptographic hash identifies the exact accepted version.

Security Considerations

Signature Replay Protection

EIP-712 implementations MUST protect against replay attacks using:

  • nonces;

  • deadlines;

  • domain separation;

  • chain identifiers.

Credential Transferability

Consent credentials SHOULD NOT be transferable unless explicitly intended.

Transferable credentials may allow one address to use consent originally provided by another address.

Agreement Integrity

Implementations MUST verify the exact agreement hash required by the vault.

A document URL alone SHOULD NOT be treated as proof of consent.

Consent Expiration

Consent Registry implementations MAY support expiration policies.

If expiration exists, hasValidConsent() MUST return false after expiration.

Backwards Compatibility

Existing ERC-4626 vaults remain unaffected.

Applications interacting with consent-enabled vaults MAY detect the extension through ERC-165 and verify consent before submitting deposit or mint transactions.

Applications that do not use this extension require no changes.

Reference Implementation

A reference implementation SHOULD provide:

  • IERCXXXXConsentRegistry;

  • ConsentRegistry;

  • IERC4626Consent;

  • ERC4626ConsentVault.

The implementation MUST preserve ERC-4626 accounting behavior.

Open Questions

  1. Should ERC-165 support become mandatory instead of recommended?

  2. Should consent expiration rules be standardized?

  3. Should agreement metadata follow an existing metadata standard?

  4. Should Consent Registry implementations support batch consent verification?

Conclusion

ERC-XXXX introduces a standardized consent verification layer for ERC-4626 Tokenized Vaults.

The extension enables vaults to require user acknowledgement of agreements while preserving ERC-4626 compatibility.

The proposal separates consent management from vault accounting and allows implementations to use signatures, credentials, or attestation systems.

Copyright and Licensing

Copyright and related rights waived via CC0.

1 Like