All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- ERC-3156 standard interfaces and
ERC20FlashMintComponentextension (#1608) IERC6909MetadataAdminandIERC6909ContentUriAdmininterfaces toopenzeppelin_interfaces::token::erc6909(#1676)- Embeddable Ownable, AccessControl, and AccessControlDefaultAdminRules admin impls for
ERC6909MetadataComponentandERC6909ContentURIComponent(#1676)
- Simplified
ERC6909MetadataComponent.initializerto only register the SRC5 interface, matching the other ERC-6909 extensions (#1676) - Renamed
ERC6909MetadataComponentinternal setters to_set_token_name,_set_token_symbol, and_set_token_decimals(#1676) - Renamed
ERC6909ContentURIComponentinternal setters to_set_contract_uriand_set_token_uri(#1676)
- Bump scarb to v2.18.0 (#1677)
openzeppelin_utils- Added
lower_lookupsupport to checkpoint utilities (#1630) - Added
BitMapstruct and associated helpers toopenzeppelin_utils::structs::bitmap(#1630)
- Added
ERC721ConsecutiveComponentextension (#1630)- ERC-6909 standard implementation and extensions (#1594)
- Introduced ERC6909Component and extension components: ERC6909ContentURIComponent, ERC6909MetadataComponent, and ERC6909TokenSupplyComponent.
- Added standard interfaces: IERC6909, IERC6909Metadata, IERC6909TokenSupply, and IERC6909ContentUri.
- Added the ERC6909ABI trait, covering the full ERC-6909 token functionality, including all supported extensions.
- Integration of ERC-6909 components into the with_components macro (#1594)
IERC1155Supplyinterface andERC1155SupplyComponentextension for total supply tracking (#1632)IERC721Wrapperinterface toopenzeppelin_interfaces::token::erc721(#1625)ERC721WrapperComponentproviding ERC721 wrapping and unwrapping functionality (#1625)IERC20Wrapperinterface toopenzeppelin_interfaces::token::erc20for ERC20 wrappers (#1617)ERC20WrapperComponentproviding ERC20 wrapping and unwrapping functionality (#1617)
- Added
ERC721TokenOwnerTraithook as a dependency toERC721Componentimplementations (#1630)- Included
ERC721OwnerOfDefaultImplto support the default use case
- Included
- Bump scarb to v2.15.1 (#1631)
- AccessControlDefaultAdminRules (#1567):
MAXIMUM_DEFAULT_ADMIN_TRANSFER_DELAYconstant exposed in the component ImmutableConfig.maximum_default_admin_transfer_delaygetter to theIAccessControlDefaultAdminRulesinterface.
execute_single_call,execute_callsandassert_valid_signatureto openzeppelin_utils::execution (#1531)- MetaTransactionV0 preset, interface, and dispatchers (#1512)
- Embeddable
ERC2981AdminAccessControlDefaultAdminRulesImplimplementation providing admin functions for aERC2981token based onAccessControlDefaultAdminRulescomponent (#1516) ERC6372Clockinterface toopenzeppelin_utils::contract_clock(#1417)- AccessControlDefaultAdminRules interface and component (#1432)
- Bump scarb to 2.13.1 (#1565)
- Decoupled openzeppelin_utils version from the umbrella package (#1531)
- Removed openzeppelin_governance dependency on openzeppelin_account (#1531)
- Removed openzeppelin_token dependency on openzeppelin_account (#1531)
GovernorComponentand its extensions support voting tokens that follow theERC6372clock standard (#1417)
GovernorComponentproposal state resolution at snapshot timepoint changed from Active to Pending (#1606)- Removed
execute_single_call,execute_callsandassert_valid_signaturefrom openzeppelin_account::utils (#1531) VotesComponentnow supports customizable clock mechanisms viaERC6372Clock, enabling alternative clock sources (#1417)
execute_single_call,execute_callsandassert_valid_signatureto openzeppelin_utils::execution (#1531)
- Decoupled openzeppelin_utils version from the umbrella package (#1531)
- Removed openzeppelin_governance dependency on openzeppelin_account (#1531)
- Removed openzeppelin_token dependency on openzeppelin_account (#1531)
- Removed
execute_single_call,execute_callsandassert_valid_signaturefrom openzeppelin_account::utils (#1531)
- MetaTransactionV0 preset, interface, and dispatchers (#1512)
- Embeddable
ERC2981AdminAccessControlDefaultAdminRulesImplimplementation providing admin functions for aERC2981token based onAccessControlDefaultAdminRulescomponent (#1516)
AssetsManagementTraitdefining how assets are managed inERC4626Component(#1454)openzeppelin_interfacespackage (#1463)
- Bump scarb to 2.12.0 (#1463)
ERC4626Componentnow supports alternative asset management strategies (e.g., external vault) via the addedAssetsManagementTrait(#1454)ERC4626Componentnow supports charging fees in shares as well as in assets via the refactoredFeeConfigTrait(#1452)- Additional input parameters were added to the
ERC4626HooksTraitfunctions (#1452) - Moved interfaces, ABIs and dispatchers into
openzeppelin_interfaces(#1463)- Some structs and types that were defined inside interface files were also moved
ERC6372Clockinterface toopenzeppelin_utils::contract_clock(#1417)- AccessControlDefaultAdminRules interface and component (#1432)
GovernorComponentand its extensions support voting tokens that follow theERC6372clock standard (#1417)
VotesComponentnow supports customizable clock mechanisms viaERC6372Clock, enabling alternative clock sources (#1417)
- ERC4626Component (#1170)
- The openzeppelin_macros package with the
with_componentsmacro (#1282) - Support for granting a role with delay in AccessControl component (#1317)
- The
type_hashmacro (#1399) - Enable Governor modules in the
with_componentsmacro (#1414) Math::u256_mul_div(#1170)
- Bump scarb to v2.11.4 (#1373)
- Add SRC-107 to ERC20Component (#1294)
decimalsare now configurable using the ImmutableConfig trait
- Update UDC interface and preset for backward compatibility with v1 (#1371)
- Change
from_zeroargument tonot_from_zeroin both the interface and the ContractDeployed event - Add
deployContractfunction to the preset - Update salt hashing algorithm from Poseidon to Pedersen
- Change
- Update ISRC6 interface to match latest changes reflected in the SNIP (#1383)
__execute__entry point now doesn't return any value- Account and EthAccount components SRC6 implementation updated accordingly
- The
type_hashmacro (#1399) - Enable Governor modules in the
with_componentsmacro (#1414)
- Support for granting a role with delay in AccessControl component (#1317)
- The openzeppelin_macros package with the
with_componentsmacro (#1282) - ERC4626Component (#1170)
Math::u256_mul_div(#1170)
- Bump scarb to v2.11.1 (#1373)
- Bump scarb to v2.10.1 (#1358)
- Add SRC-107 to ERC20Component (#1294)
decimalsare now configurable using the ImmutableConfig trait
- Update UDC interface and preset for backward compatibility with v1 (#1371)
- Change
from_zeroargument tonot_from_zeroin both the interface and the ContractDeployed event - Add
deployContractfunction to the preset - Update salt hashing algorithm from Poseidon to Pedersen
- Change
- Update ISRC6 interface to match latest changes reflected in the SNIP (#1383)
__execute__entry point now doesn't return any value- Account and EthAccount components SRC6 implementation updated accordingly
- ERC721Component
initializer_no_metadata(#1278) - ERC1155Component
initializer_no_metadata(#1287) - Unsigned trait restriction to the
averagefunction (#1310)
- Bump scarb to v2.9.4 (#1336)
- SNIP12 TimelockComponent
hash_operationto usehash_operation_batchfor single-call operations (#1313) - Permit and Message SNIP12 type hashes (#1283)
- Multisig component issue arising when removing signers with unchanged quorum (#1315)
- Governor timelock extension salt generation panicking on overflow (#1306)
- SignersInfoStorePacking issue with bit operations (#1316)
- Message type hash in SNIP12 doc (#1274)
- SRC9 (Outside Execution) integration to account presets (#1201)
SNIP12HashSpanImpltoopenzeppelin_utils::cryptography::snip12(#1180)- GovernorComponent with the following extensions: (#1180)
- GovernorCoreExecutionComponent
- GovernorCountingSimpleComponent
- GovernorSettingsComponent
- GovernorTimelockExecutionComponent
- GovernorVotesQuorumFractionComponent
- GovernorVotesComponent
is_tx_version_validutility function toopenzeppelin_account::utils(#1224)
- Remove
mutfromdataparam incompute_hash_on_elements(#1206) - Remove
mutfromcallsparam in__execute__function of Account and EthAccount components (#1224) - Remove
mutfromcallsparam in__validate__function of Account and EthAccount components (#1224)
- Bump snforge_std to v0.34.0 (#1239)
- Bump scarb to v2.9.1 (#1239)
- The initializer in
OwnableComponentnow checks thatowneris not the zero address (#1221) - Add
verifying_contractmember to theDelegationstruct used in Votesdelegate_by_sig(#1214) - VotingUnitsTrait moved from
openzeppelin_governance::votes::votestoopenzeppelin_governance::votes::VotesComponent(#1214) - VestingComponent
releasefunction won't emit an event or attempt to transfer when the amount is zero (#1209) - Bump snforge_std to v0.33.0 (#1203)
- Scarb manifest dependencies (#1249):
- Move
openzeppelin_utilsfrom dev dep to dep in governance manifest - Remove
openzeppelin_utilsas dep in access package - Change
openzeppelin_accounttocrateinsrc9.cairo
- Move
- Multisig component (#1193)
is_valid_p256_signatureutility function toopenzeppelin_account::utils::signature(#1189)Secp256r1KeyPairtype and helpers toopenzeppelin_testing::signing(#1189)all_tokens_of_ownerfunction toERC721EnumerableComponentfetching all owner's tokens in a single call (#1196)- Embeddable impls for ERC2981 component (#1173)
ERC2981Infowith read functions for discovering the component's stateERC2981AdminOwnableproviding admin functions for a token that implements Ownable componentERC2981AdminAccessControlproviding admin functions for a token that implements AccessControl component
- Refactor
openzeppelin_account::utils::secp256k1module toopenzeppelin_account::utils::secp256_point(#1189)Secp256k1PointStorePackingreplaced by a genericSecp256PointStorePackingSecp256k1PointPartialEqreplaced by a genericSecp256PointPartialEqDebugSecp256k1Pointreplaced by a genericDebugSecp256Point
- Apply underscore pattern to the internal functions of
ERC2981Componentto prevent collisions with new external functions (#1173) - Move
HashandPartialEqimpls ofCallstruct fromopenzeppelin_governance::timelock::utilstoopenzeppelin_governance::utils(#1193)
VotesComponentwith implementation for ERC721 and ERC20 tokens (#1114)IUpgradeAndCallinterface (#1148)upgrade_and_callfunction in UpgradeableComponent's InternalImpl (#1148)ERC20Permitimpl forERC20Componentfacilitating token approvals via off-chain signatures (#1140)ISNIP12Metadatainterface for discovering name and version of a SNIP-12 impl (#1140)SNIP12MetadataExternalimpl ofISNIP12Metadatainterface forERC20Component(#1140)
- Bump scarb to v2.8.4 (#1146)
- Remove
ERC20Votescomponent in favor ofVotesComponent(#1114)Traceis now declared as astorage_nodeand now usesVecinstead ofStorageArray.delegate_by_sigsignatureparam in theIVotesinterface updated fromArray<felt252>toSpan<felt252>.
- Remove
StorageArrayfromopenzeppelin_utils(#1114) - Bump snforge to 0.31.0
- Remove openzeppelin_utils::selectors (#1163)
- Remove
DualCase dispatchers(#1163)- Remove
try_selector_with_fallbackfromopenzeppelin_utils - Remove
unwrap_and_castmodule fromopenzeppelin_utils - Remove
openzeppelin_access::accesscontrol::dual_accesscontrol - Remove
openzeppelin_access::ownable::dual_ownable - Remove
openzeppelin_account::dual_account - Remove
openzeppelin_account::dual_eth_account - Remove
openzeppelin_token::erc20::dual20 - Remove
openzeppelin_token::erc721::dual721 - Remove
openzeppelin_token::erc721::dual721_receiver - Remove
openzeppelin_token::erc1155::dual1155 - Remove
openzeppelin_token::erc1155::dual1155_receiver
- Remove
SRC9Componentnow usesISRC6Dispatcherinstead ofDualCaseAccount(#1163)ERC20VotesComponentnow usesISRC6Dispatcherinstead ofDualCaseAccount(#1163)ERC721Componentnow usesIERC721ReceiverDispatcherinstead ofDualCaseERC721Receiver(#1163)ERC1155Componentnow usesIERC1155ReceiverDispatcherinstead ofDualCaseERC1155Receiver(#1163)
into_base_16_string_no_paddingfunction to the test helpers (#1137)- SRC9 (OutsideExecution) component (#1150)
- Vesting component and VestingWallet preset (#1116)
- Bump scarb to v2.8.2 (#1137)
- Bump snforge to 0.30.0 (#1137)
declare_class,declare_and_deploy, anddeclare_and_deploy_atwill skip declaration if the contract is already declared (#1137)- Bump edition to 2024_07 (#1138)
execute_callsfunction from account utils (#1150)- calls param type changed from
Array<Call>toSpan<Call>
- calls param type changed from
- DualCase dispatchers
- ERC721Enumerable component (#983)
- ERC2981 (NFT Royalty Standard) component (#1091)
merkle_treepackage with utilities to verify proofs and multi proofs (#1101)
- Bump snforge to v0.27.0 (#1107)
- Bump scarb to v2.8.0 (#1120)
- Changed ABI suffix to Trait in dual case account and eth account modules (#1096)
DualCaseAccountABIrenamed toDualCaseAccountTraitDualCaseEthAccountABIrenamed toDualCaseEthAccountTrait
- Removed
_accept_ownershipfromOwnableComponent::InternalImpl
OwnableTwoStepallowing a pending owner to accept ownership after the original owner has renounced ownership (#1119)
- Remove token dependency from account package (#1100)
- Fix docsite links (#1094)
- TimelockController component (#996)
- HashCall implementation (#996)
- Separated package for each submodule (#1065)
openzeppelin_accessopenzeppelin_accountopenzeppelin_governanceopenzeppelin_introspectionopenzeppelin_presetsopenzeppelin_securityopenzeppelin_tokenopenzeppelin_upgradesopenzeppelin_utils
- Separated packages intended as [dev-dependencies] (#1084)
openzeppelin_testingopenzeppelin_test_common
- Bump scarb to v2.7.0-rc.1 (#1025)
- Bump scarb to v2.7.0-rc.2 (#1052)
- Bump scarb to v2.7.0-rc.4 (#1064)
- Bump scarb to v2.7.0 (#1065)
- Test utilities moved out of the utils module (#1084).
- Test utilities refactored to match the snforge test runner (#1084).
Trace,Checkpoint, andStorageArraystructs made public.
- Removed
num_checkpointsandcheckpointsfromERC20VotesABI.
-
Migrated to the
2023_11edition (#995):- Component implementations annotated with
#[embeddable_as()](e.g:AccessControlComponent::AccessControl) are not public anymore. Note that the embeddable versions are still public (e.g:AccessControlComponent::AccessControlImpl). - Implementations that can be compiler-derived from traits are not public anymore (e.g:
DualCaseAccessControlImplis not public whileDualCaseAccessControlTraitis). Secp256k1PointPartialEqandDebugSecp256k1Pointare not public anymore.account::utils::execute_single_callis not public anymore.- Presets are not public anymore, since they should be copied into projects, and not directly imported.
TraceandCheckpointstructs are not public anymore, since they are intended to be used inERC20Votes, and not as generic utilities.StorageArrayis not public anymore, since this implementation is specific toERC20Votes, and is not intended as a generic utility, but as a temporary solution until Starknet native implementation arrives.
- Component implementations annotated with
-
Apply underscore pattern to modules (#993):
- AccessControlComponent
_set_role_adminfunction renamed toset_role_admin
- PausableComponent
_pausefunction renamed topause_unpausefunction renamed tounpause
- UpgradeableComponent
_upgradefunction renamed toupgrade
- ERC20Component:
_mintfunction renamed tomint_burnfunction renamed toburn_updatefunction renamed toupdate
- ERC721Component:
_safe_transferfunction renamed tosafe_transfer_safe_mintfunction renamed tosafe_mint_mintfunction renamed tomint_transferfunction renamed totransfer_burnfunction renamed toburn_updatefunction renamed toupdate
- ERC1155Component:
set_base_urifunction renamed to_set_base_uri
- AccessControlComponent
- Sending transactions section in account docs (#981)
- before_update and after_update hooks to ERC721Component (#978)
- before_update and after_update hooks to ERC1155Component (#982)
- ERC721Component internal implementation to support transfer, mint, and burn flows going through an
_updatefunction (#978) - ERC721Component implementations now require an ERC721HooksTrait implementation in scope (#978)
- ERC1155Component implementations now require an ERC1155HooksTrait implementation in scope (#982)
- AccountComponent, preset, and dispatcher now require a
signatureparam in the public-key-setter functions (#989) - EthAccountComponent, preset, and dispatcher now require a
signatureparam in the public-key-setter functions (#990)
- before_update and after_update hooks to ERC20Component (#951)
- INSUFFICIENT_BALANCE and INSUFFICIENT_ALLOWANCE errors to ERC20Component (#951)
- ERC20Votes component (#951)
- Preset interfaces (#964)
- UDC docs (#954)
- Util functions to precompute addresses (#954)
- Allow testing utilities to be importable (#963)
- Utilities documentation (#963)
- Parameter name in
tests::utils::drop_events(count->n_events) (#963) - Presets to include upgradeable functionality (#964)
- ERC20, ERC721, and ERC1155 presets include Ownable functionality (#964)
- EthAccount
- Expected signature format changed from
(r, s, y)to(r, s)(#940)
- Expected signature format changed from
- SNIP12 utilities for on-chain typed messages hash generation (#935)
- Nonces component utility (#935)
- Presets Usage guide (#949)
- UDC preset contract (#919)
- ERC1155Component and ERC1155ReceiverComponent mixins (#941)
- ERC721ReceiverComponent documentation (#945)
- ERC721ReceiverComponent mixin embeddable implementation name (#945)
- DualCase SRC5 (#882, #952)
- ERC1155 component and preset (#896)
- Mixin implementations in components (#863)
- ERC721Component functions and Storage member
InternalTrait::_set_base_uriandInternalTrait::_base_urito handle ByteArrays (#857)ERC721_base_uriStorage member to store the base URI (#857)
- Change unwrap to unwrap_syscall (#901)
- ERC20Component
IERC20::nameandIERC20::symbolreturn ByteArrays instead of felts (#857)
- ERC721Component
IERC721::name,IERC721::symbol, andIERC721Metadata::token_urireturn ByteArrays instead of felts (#857)InternalTrait::initializeraccepts an additionalbase_uriByteArray parameter (#857)- IERC721Metadata SRC5 interface ID. This is changed because of the ByteArray integration (#857)
- ERC721Component function and Storage member
InternalTrait::_set_token_uribecause individual token URIs are no longer stored (#857)ERC721_token_uriStorage member because individual token URIs are no longer stored (#857)
- EthAccount component and preset (#853)
- Ownable two-step functionality (#809)
- Bump scarb to v2.4.4 (#853)
- Bump scarb to v2.5.3 (#898)
- OwnershipTransferred event args are indexed (#809)
- Non-standard increase_allowance and decrease_allowance functions in ERC20 contract (#881)
- Documentation for SRC5 migration (#821)
- Usage docs (#823)
- Utilities documentation (#825)
- Documentation for presets (#832)
- Backwards compatibility notice (#861)
- Add automatic version bump to CI (#862)
- Use ComponentState in tests (#836)
- Docsite navbar (#838)
- Account events indexed keys (#853)
- Support higher tx versions in Account (#858)
- Bump scarb to v2.4.1 (#858)
- Add security section to Upgrades docs (#861)