diff --git a/Scarb.toml b/Scarb.toml index 1cfd6a6..164ba5b 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -42,7 +42,7 @@ ekubo = { git = "https://github.com/EkuboProtocol/starknet-contracts.git", tag = starknet.workspace = true # Group packages game_components_interfaces = { path = "packages/interfaces" } -interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", rev = "3c5a1ef" } +metagame_extensions_interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", tag = "v0.1.1" } game_components_embeddable_game_standard = { path = "packages/embeddable_game_standard" } game_components_metagame = { path = "packages/metagame" } game_components_economy = { path = "packages/economy" } diff --git a/packages/interfaces/Scarb.toml b/packages/interfaces/Scarb.toml index e57c996..f8712f1 100644 --- a/packages/interfaces/Scarb.toml +++ b/packages/interfaces/Scarb.toml @@ -6,6 +6,6 @@ edition.workspace = true [dependencies] starknet.workspace = true ekubo.workspace = true -interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", rev = "3c5a1ef" } +metagame_extensions_interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", tag = "v0.1.1" } [lib] diff --git a/packages/interfaces/src/entry_fee.cairo b/packages/interfaces/src/entry_fee.cairo index 93d80d7..09f1fe4 100644 --- a/packages/interfaces/src/entry_fee.cairo +++ b/packages/interfaces/src/entry_fee.cairo @@ -1,4 +1,4 @@ -use interfaces::extension::ExtensionConfig; +use metagame_extensions_interfaces::extension::ExtensionConfig; use starknet::ContractAddress; /// SNIP-5 interface ID derived via src5_rs: XOR of extended function selectors diff --git a/packages/interfaces/src/entry_requirement.cairo b/packages/interfaces/src/entry_requirement.cairo index bd37971..4634791 100644 --- a/packages/interfaces/src/entry_requirement.cairo +++ b/packages/interfaces/src/entry_requirement.cairo @@ -1,4 +1,4 @@ -pub use interfaces::extension::ExtensionConfig; +pub use metagame_extensions_interfaces::extension::ExtensionConfig; use starknet::ContractAddress; /// SNIP-5 interface ID derived via src5_rs: XOR of extended function selectors diff --git a/packages/interfaces/src/prize.cairo b/packages/interfaces/src/prize.cairo index 05c8556..96a3247 100644 --- a/packages/interfaces/src/prize.cairo +++ b/packages/interfaces/src/prize.cairo @@ -1,5 +1,5 @@ use game_components_interfaces::distribution::Distribution; -use interfaces::extension::ExtensionConfig; +use metagame_extensions_interfaces::extension::ExtensionConfig; use starknet::ContractAddress; /// SNIP-5 interface ID derived via src5_rs: XOR of extended function selectors diff --git a/packages/metagame/Scarb.toml b/packages/metagame/Scarb.toml index dab35b7..4481e05 100644 --- a/packages/metagame/Scarb.toml +++ b/packages/metagame/Scarb.toml @@ -11,7 +11,7 @@ openzeppelin_interfaces.workspace = true openzeppelin_introspection.workspace = true game_components_interfaces = { path = "../interfaces" } game_components_utilities = { path = "../utilities" } -interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", rev = "3c5a1ef" } +metagame_extensions_interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", tag = "v0.1.1" } [dev-dependencies] snforge_std.workspace = true diff --git a/packages/metagame/src/entry_fee/entry_fee_component.cairo b/packages/metagame/src/entry_fee/entry_fee_component.cairo index ce3606e..f091cde 100644 --- a/packages/metagame/src/entry_fee/entry_fee_component.cairo +++ b/packages/metagame/src/entry_fee/entry_fee_component.cairo @@ -10,10 +10,10 @@ pub mod EntryFeeComponent { use core::num::traits::Zero; use game_components_interfaces::entry_fee::{IENTRY_FEE_ID, IEntryFee}; - use interfaces::entry_fee_extension::{ + use metagame_extensions_interfaces::entry_fee_extension::{ IENTRY_FEE_EXTENSION_ID, IEntryFeeExtensionDispatcher, IEntryFeeExtensionDispatcherTrait, }; - use interfaces::extension::ExtensionConfig; + use metagame_extensions_interfaces::extension::ExtensionConfig; use openzeppelin_interfaces::erc20::{IERC20Dispatcher, IERC20DispatcherTrait}; use openzeppelin_interfaces::introspection::{ISRC5Dispatcher, ISRC5DispatcherTrait}; use openzeppelin_introspection::src5::SRC5Component; diff --git a/packages/metagame/src/entry_fee/tests/test_entry_fee_store.cairo b/packages/metagame/src/entry_fee/tests/test_entry_fee_store.cairo index ca154d1..940ea86 100644 --- a/packages/metagame/src/entry_fee/tests/test_entry_fee_store.cairo +++ b/packages/metagame/src/entry_fee/tests/test_entry_fee_store.cairo @@ -522,7 +522,9 @@ fn test_set_entry_fee_extension_stores_address_and_config() { let config_data = array![0x111, 0x222, 0x333]; let entry_fee = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr, config: config_data.span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr, config: config_data.span(), + }, ); mock.set_entry_fee(1, entry_fee); @@ -547,7 +549,9 @@ fn test_set_entry_fee_extension_blocks_second_set() { mock_extension_calls(ext_addr); let entry_fee = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr, config: array![0x1].span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr, config: array![0x1].span(), + }, ); mock.set_entry_fee(1, entry_fee); @@ -556,7 +560,9 @@ fn test_set_entry_fee_extension_blocks_second_set() { mock_extension_calls(ext_addr2); let entry_fee2 = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr2, config: array![0x2].span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr2, config: array![0x2].span(), + }, ); mock.set_entry_fee(1, entry_fee2); } @@ -569,7 +575,9 @@ fn test_set_entry_fee_extension_with_empty_config() { mock_extension_calls(ext_addr); let entry_fee = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr, config: array![].span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr, config: array![].span(), + }, ); mock.set_entry_fee(1, entry_fee); @@ -588,7 +596,9 @@ fn test_get_entry_fee_returns_none_for_extension_only() { mock_extension_calls(ext_addr); let entry_fee = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr, config: array![0x1].span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr, config: array![0x1].span(), + }, ); mock.set_entry_fee(1, entry_fee); @@ -689,13 +699,17 @@ fn test_extension_address_isolation_by_context() { // Set extensions on two different contexts mock_extension_calls(ext_addr1); let entry_fee1 = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr1, config: array![].span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr1, config: array![].span(), + }, ); mock.set_entry_fee(1, entry_fee1); mock_extension_calls(ext_addr2); let entry_fee2 = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr2, config: array![].span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr2, config: array![].span(), + }, ); mock.set_entry_fee(2, entry_fee2); @@ -821,7 +835,9 @@ fn test_extension_address_and_config_together() { let config_data = array![0x42, 0x84, 0xFF]; let entry_fee = EntryFee::Extension( - interfaces::extension::ExtensionConfig { address: ext_addr, config: config_data.span() }, + metagame_extensions_interfaces::extension::ExtensionConfig { + address: ext_addr, config: config_data.span(), + }, ); mock.set_entry_fee(1, entry_fee); diff --git a/packages/metagame/src/entry_requirement/AGENTS.md b/packages/metagame/src/entry_requirement/AGENTS.md index 299003e..1f56e33 100644 --- a/packages/metagame/src/entry_requirement/AGENTS.md +++ b/packages/metagame/src/entry_requirement/AGENTS.md @@ -5,11 +5,11 @@ Entry requirement component for gating access to contexts (tournaments, quests, Supports three requirement types: - **Token**: Requires ownership of a specific NFT - **Allowlist**: Requires address to be in an allowlist -- **Extension**: Delegates validation to an external IEntryValidator contract +- **Extension**: Delegates validation to an external IEntryRequirementExtension contract Also includes the EntryValidatorComponent base for building custom validator contracts. ## Dependencies -- `game_components_interfaces` - EntryRequirement types and IEntryValidator interface +- `game_components_interfaces` - EntryRequirement types and IEntryRequirementExtension interface - `openzeppelin_interfaces` - ERC20/ERC721 interfaces - `openzeppelin_introspection` - SRC5 interface registration diff --git a/packages/metagame/src/entry_requirement/README.md b/packages/metagame/src/entry_requirement/README.md index e4362ae..9e3dd1c 100644 --- a/packages/metagame/src/entry_requirement/README.md +++ b/packages/metagame/src/entry_requirement/README.md @@ -7,7 +7,7 @@ Entry gating component for controlling access to contexts (tournaments, quests, - Three requirement types: Token, Allowlist, and Extension - Token ownership requirement for NFT gating - Allowlist-based access control -- External validator extension via `IEntryValidator` for custom logic +- External validator extension via `IEntryRequirementExtension` for custom logic - Built-in `EntryValidatorComponent` for building custom validators - SRC5 interface registration @@ -17,7 +17,7 @@ Entry gating component for controlling access to contexts (tournaments, quests, |------|-------------| | `Token` | Requires caller to own a specific NFT (ERC721 balance check) | | `Allowlist` | Requires caller's address to be on an approved list | -| `Extension` | Delegates validation to an external `IEntryValidator` contract | +| `Extension` | Delegates validation to an external `IEntryRequirementExtension` contract | ## Interface @@ -28,12 +28,12 @@ Entry gating component for controlling access to contexts (tournaments, quests, | `get_entry_requirement(context_id)` | Get the requirement config for a context | | `meets_entry_requirement(context_id, player)` | Check if player meets the requirement | -### IEntryValidator (Extension Interface) +### IEntryRequirementExtension (Extension Interface) Custom validator contracts implement this: ```cairo -trait IEntryValidator { +trait IEntryRequirementExtension { fn validate_entry(self: @TState, context_id: u64, player: ContractAddress) -> bool; } ``` @@ -81,6 +81,6 @@ let allowed = self.entry_req.meets_entry_requirement(context_id, player); ## Dependencies -- `game_components_interfaces` - EntryRequirement types and IEntryValidator interface +- `game_components_interfaces` - EntryRequirement types and IEntryRequirementExtension interface - `openzeppelin_interfaces` - ERC20/ERC721 interfaces - `openzeppelin_introspection` - SRC5 interface registration diff --git a/packages/metagame/src/entry_requirement/entry_requirement_component.cairo b/packages/metagame/src/entry_requirement/entry_requirement_component.cairo index 4d87182..9ab2da8 100644 --- a/packages/metagame/src/entry_requirement/entry_requirement_component.cairo +++ b/packages/metagame/src/entry_requirement/entry_requirement_component.cairo @@ -10,7 +10,7 @@ pub mod EntryRequirementComponent { use core::num::traits::Zero; use game_components_interfaces::entry_requirement::{IENTRY_REQUIREMENT_ID, IEntryRequirement}; - use interfaces::entry_requirement_extension::IENTRY_REQUIREMENT_EXTENSION_ID; + use metagame_extensions_interfaces::entry_requirement_extension::IENTRY_REQUIREMENT_EXTENSION_ID; use openzeppelin_interfaces::erc721::IERC721_ID; use openzeppelin_interfaces::introspection::{ISRC5Dispatcher, ISRC5DispatcherTrait}; use openzeppelin_introspection::src5::SRC5Component; @@ -228,7 +228,7 @@ pub mod EntryRequirementComponent { let display_address: felt252 = config.address.into(); assert!( src5.supports_interface(IENTRY_REQUIREMENT_EXTENSION_ID), - "EntryRequirement: Extension {} does not support IEntryValidator", + "EntryRequirement: Extension {} does not support IEntryRequirementExtension", display_address, ); self.set_extension_address(context_id, config.address); @@ -285,7 +285,7 @@ pub mod EntryRequirementComponent { } /// Validates entry requirement configuration at creation time. - /// Checks SRC5 interfaces (ERC721 for token, IEntryValidator for extension). + /// Checks SRC5 interfaces (ERC721 for token, IEntryRequirementExtension for extension). fn assert_valid_entry_requirement( self: @ComponentState, entry_requirement: EntryRequirement, ) { diff --git a/packages/metagame/src/entry_requirement/entry_requirement_store.cairo b/packages/metagame/src/entry_requirement/entry_requirement_store.cairo index 2012bc1..cd3b85e 100644 --- a/packages/metagame/src/entry_requirement/entry_requirement_store.cairo +++ b/packages/metagame/src/entry_requirement/entry_requirement_store.cairo @@ -1,8 +1,9 @@ // SPDX-License-Identifier: BUSL-1.1 use core::num::traits::Zero; -use interfaces::entry_requirement_extension::{ - IENTRY_REQUIREMENT_EXTENSION_ID, IEntryValidatorDispatcher, IEntryValidatorDispatcherTrait, +use metagame_extensions_interfaces::entry_requirement_extension::{ + IENTRY_REQUIREMENT_EXTENSION_ID, IEntryRequirementExtensionDispatcher, + IEntryRequirementExtensionDispatcherTrait, }; use openzeppelin_interfaces::erc721::{IERC721Dispatcher, IERC721DispatcherTrait, IERC721_ID}; use openzeppelin_interfaces::introspection::{ISRC5Dispatcher, ISRC5DispatcherTrait}; @@ -158,14 +159,13 @@ pub impl EntryRequirementStoreImpl, +Drop> of EntryRequirementSt "EntryRequirement: Provided qualification proof is not of type 'Extension'", ), }; - let entry_validator_dispatcher = IEntryValidatorDispatcher { + let extension_dispatcher = IEntryRequirementExtensionDispatcher { contract_address: extension_config.address, }; let caller_address = get_caller_address(); let display_extension_address: felt252 = extension_config.address.into(); assert!( - entry_validator_dispatcher - .valid_entry(context_id, caller_address, qualification), + extension_dispatcher.valid_entry(context_id, caller_address, qualification), "EntryRequirement: Invalid entry according to extension {}", display_extension_address, ); @@ -196,7 +196,7 @@ pub impl EntryRequirementStoreImpl, +Drop> of EntryRequirementSt let display_address: felt252 = extension_address.into(); assert!( src5_dispatcher.supports_interface(IENTRY_REQUIREMENT_EXTENSION_ID), - "EntryRequirement: Extension address {} does not support IEntryValidator interface", + "EntryRequirement: Extension address {} does not support IEntryRequirementExtension interface", display_address, ); }, @@ -212,7 +212,7 @@ pub impl EntryRequirementStoreImpl, +Drop> of EntryRequirementSt match entry_requirement.entry_requirement_type { EntryRequirementType::extension(extension_config) => { let extension_address = extension_config.address; - let entry_validator_dispatcher = IEntryValidatorDispatcher { + let extension_dispatcher = IEntryRequirementExtensionDispatcher { contract_address: extension_address, }; let display_extension_address: felt252 = extension_address.into(); @@ -225,7 +225,7 @@ pub impl EntryRequirementStoreImpl, +Drop> of EntryRequirementSt ), }; - let entries_left = entry_validator_dispatcher + let entries_left = extension_dispatcher .entries_left(context_id, caller_address, qualification); match entries_left { diff --git a/packages/metagame/src/entry_requirement/tests/mocks/accepting_limited_entry_validator_mock.cairo b/packages/metagame/src/entry_requirement/tests/mocks/accepting_limited_entry_validator_mock.cairo index 824591a..8cae084 100644 --- a/packages/metagame/src/entry_requirement/tests/mocks/accepting_limited_entry_validator_mock.cairo +++ b/packages/metagame/src/entry_requirement/tests/mocks/accepting_limited_entry_validator_mock.cairo @@ -1,8 +1,10 @@ -/// Mock that implements IEntryValidator with limited entries remaining. +/// Mock that implements IEntryRequirementExtension with limited entries remaining. /// Always accepts entries (valid_entry returns true), entries_left returns Option::Some(5). #[starknet::contract] pub mod AcceptingLimitedEntryValidatorMock { - use interfaces::entry_requirement_extension::{IENTRY_REQUIREMENT_EXTENSION_ID, IEntryValidator}; + use metagame_extensions_interfaces::entry_requirement_extension::{ + IENTRY_REQUIREMENT_EXTENSION_ID, IEntryRequirementExtension, + }; use openzeppelin_introspection::src5::SRC5Component; use openzeppelin_introspection::src5::SRC5Component::InternalTrait as SRC5InternalTrait; use starknet::ContractAddress; @@ -36,7 +38,7 @@ pub mod AcceptingLimitedEntryValidatorMock { } #[abi(embed_v0)] - impl EntryValidatorImpl of IEntryValidator { + impl EntryValidatorImpl of IEntryRequirementExtension { fn owner_address(self: @ContractState) -> ContractAddress { self.owner_address.read() } diff --git a/packages/metagame/src/entry_requirement/tests/mocks/entry_validator_mock.cairo b/packages/metagame/src/entry_requirement/tests/mocks/entry_validator_mock.cairo index ac8b2b5..2f85b93 100644 --- a/packages/metagame/src/entry_requirement/tests/mocks/entry_validator_mock.cairo +++ b/packages/metagame/src/entry_requirement/tests/mocks/entry_validator_mock.cairo @@ -1,8 +1,10 @@ -/// Simple mock that implements IEntryValidator without using the component. +/// Simple mock that implements IEntryRequirementExtension without using the component. /// Always accepts entries (valid_entry returns true, should_ban returns false). #[starknet::contract] pub mod EntryValidatorMock { - use interfaces::entry_requirement_extension::{IENTRY_REQUIREMENT_EXTENSION_ID, IEntryValidator}; + use metagame_extensions_interfaces::entry_requirement_extension::{ + IENTRY_REQUIREMENT_EXTENSION_ID, IEntryRequirementExtension, + }; use openzeppelin_introspection::src5::SRC5Component; use openzeppelin_introspection::src5::SRC5Component::InternalTrait as SRC5InternalTrait; use starknet::ContractAddress; @@ -36,7 +38,7 @@ pub mod EntryValidatorMock { } #[abi(embed_v0)] - impl EntryValidatorImpl of IEntryValidator { + impl EntryValidatorImpl of IEntryRequirementExtension { fn owner_address(self: @ContractState) -> ContractAddress { self.owner_address.read() } diff --git a/packages/metagame/src/entry_requirement/tests/mocks/rejecting_entry_validator_mock.cairo b/packages/metagame/src/entry_requirement/tests/mocks/rejecting_entry_validator_mock.cairo index 1d151b2..6f13602 100644 --- a/packages/metagame/src/entry_requirement/tests/mocks/rejecting_entry_validator_mock.cairo +++ b/packages/metagame/src/entry_requirement/tests/mocks/rejecting_entry_validator_mock.cairo @@ -1,7 +1,9 @@ -/// Simple mock that implements IEntryValidator but always rejects entries. +/// Simple mock that implements IEntryRequirementExtension but always rejects entries. #[starknet::contract] pub mod RejectingEntryValidatorMock { - use interfaces::entry_requirement_extension::{IENTRY_REQUIREMENT_EXTENSION_ID, IEntryValidator}; + use metagame_extensions_interfaces::entry_requirement_extension::{ + IENTRY_REQUIREMENT_EXTENSION_ID, IEntryRequirementExtension, + }; use openzeppelin_introspection::src5::SRC5Component; use openzeppelin_introspection::src5::SRC5Component::InternalTrait as SRC5InternalTrait; use starknet::ContractAddress; @@ -35,7 +37,7 @@ pub mod RejectingEntryValidatorMock { } #[abi(embed_v0)] - impl EntryValidatorImpl of IEntryValidator { + impl EntryValidatorImpl of IEntryRequirementExtension { fn owner_address(self: @ContractState) -> ContractAddress { self.owner_address.read() } diff --git a/packages/metagame/src/prize/prize_component.cairo b/packages/metagame/src/prize/prize_component.cairo index ed0eb2b..ea409e1 100644 --- a/packages/metagame/src/prize/prize_component.cairo +++ b/packages/metagame/src/prize/prize_component.cairo @@ -13,8 +13,8 @@ pub mod PrizeComponent { use core::num::traits::Zero; use game_components_interfaces::prize::{IPRIZE_ID, IPrize}; - use interfaces::extension::ExtensionConfig; - use interfaces::prize_extension::{ + use metagame_extensions_interfaces::extension::ExtensionConfig; + use metagame_extensions_interfaces::prize_extension::{ IPRIZE_EXTENSION_ID, IPrizeExtensionDispatcher, IPrizeExtensionDispatcherTrait, }; use openzeppelin_interfaces::erc20::{IERC20Dispatcher, IERC20DispatcherTrait}; diff --git a/packages/test_common/Scarb.toml b/packages/test_common/Scarb.toml index e5ba109..44da436 100644 --- a/packages/test_common/Scarb.toml +++ b/packages/test_common/Scarb.toml @@ -14,7 +14,7 @@ game_components_interfaces = { path = "../interfaces" } game_components_embeddable_game_standard = { path = "../embeddable_game_standard" } game_components_metagame = { path = "../metagame" } game_components_utilities = { path = "../utilities" } -interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", rev = "3c5a1ef" } +metagame_extensions_interfaces = { git = "https://github.com/Provable-Games/metagame_extensions.git", tag = "v0.1.1" } [lib] diff --git a/packages/test_common/src/mocks/mock_entry_validator.cairo b/packages/test_common/src/mocks/mock_entry_validator.cairo index ac8b2b5..2f85b93 100644 --- a/packages/test_common/src/mocks/mock_entry_validator.cairo +++ b/packages/test_common/src/mocks/mock_entry_validator.cairo @@ -1,8 +1,10 @@ -/// Simple mock that implements IEntryValidator without using the component. +/// Simple mock that implements IEntryRequirementExtension without using the component. /// Always accepts entries (valid_entry returns true, should_ban returns false). #[starknet::contract] pub mod EntryValidatorMock { - use interfaces::entry_requirement_extension::{IENTRY_REQUIREMENT_EXTENSION_ID, IEntryValidator}; + use metagame_extensions_interfaces::entry_requirement_extension::{ + IENTRY_REQUIREMENT_EXTENSION_ID, IEntryRequirementExtension, + }; use openzeppelin_introspection::src5::SRC5Component; use openzeppelin_introspection::src5::SRC5Component::InternalTrait as SRC5InternalTrait; use starknet::ContractAddress; @@ -36,7 +38,7 @@ pub mod EntryValidatorMock { } #[abi(embed_v0)] - impl EntryValidatorImpl of IEntryValidator { + impl EntryValidatorImpl of IEntryRequirementExtension { fn owner_address(self: @ContractState) -> ContractAddress { self.owner_address.read() } diff --git a/packages/test_common/src/mocks/mock_rejecting_entry_validator.cairo b/packages/test_common/src/mocks/mock_rejecting_entry_validator.cairo index 1d151b2..6f13602 100644 --- a/packages/test_common/src/mocks/mock_rejecting_entry_validator.cairo +++ b/packages/test_common/src/mocks/mock_rejecting_entry_validator.cairo @@ -1,7 +1,9 @@ -/// Simple mock that implements IEntryValidator but always rejects entries. +/// Simple mock that implements IEntryRequirementExtension but always rejects entries. #[starknet::contract] pub mod RejectingEntryValidatorMock { - use interfaces::entry_requirement_extension::{IENTRY_REQUIREMENT_EXTENSION_ID, IEntryValidator}; + use metagame_extensions_interfaces::entry_requirement_extension::{ + IENTRY_REQUIREMENT_EXTENSION_ID, IEntryRequirementExtension, + }; use openzeppelin_introspection::src5::SRC5Component; use openzeppelin_introspection::src5::SRC5Component::InternalTrait as SRC5InternalTrait; use starknet::ContractAddress; @@ -35,7 +37,7 @@ pub mod RejectingEntryValidatorMock { } #[abi(embed_v0)] - impl EntryValidatorImpl of IEntryValidator { + impl EntryValidatorImpl of IEntryRequirementExtension { fn owner_address(self: @ContractState) -> ContractAddress { self.owner_address.read() }