diff --git a/contracts/src/access_control/access_controller.cairo b/contracts/src/access_control/access_controller.cairo index 1375027bd..4bf5c7f3c 100644 --- a/contracts/src/access_control/access_controller.cairo +++ b/contracts/src/access_control/access_controller.cairo @@ -5,6 +5,7 @@ mod AccessController { use chainlink::libraries::access_control::{AccessControlComponent, IAccessController}; use chainlink::libraries::ownable::{OwnableComponent, IOwnable}; + use chainlink::libraries::type_and_version::ITypeAndVersion; use chainlink::libraries::upgradeable::{Upgradeable, IUpgradeable}; component!(path: OwnableComponent, storage: ownable, event: OwnableEvent); @@ -42,13 +43,11 @@ mod AccessController { self.access_control.initializer(); } - /// - /// Upgradeable - /// - - // #[view] - fn type_and_version(self: @ContractState) -> felt252 { - 'AccessController 1.0.0' + #[abi(embed_v0)] + impl TypeAndVersionImpl of ITypeAndVersion { + fn type_and_version(self: @ContractState) -> felt252 { + 'AccessController 1.0.0' + } } #[external(v0)] diff --git a/contracts/src/emergency/sequencer_uptime_feed.cairo b/contracts/src/emergency/sequencer_uptime_feed.cairo index f854e59d7..06d0a59c6 100644 --- a/contracts/src/emergency/sequencer_uptime_feed.cairo +++ b/contracts/src/emergency/sequencer_uptime_feed.cairo @@ -30,6 +30,7 @@ mod SequencerUptimeFeed { use chainlink::libraries::ownable::{OwnableComponent, IOwnable}; use chainlink::libraries::access_control::{AccessControlComponent, IAccessController}; use chainlink::libraries::access_control::AccessControlComponent::InternalTrait as AccessControlInternalTrait; + use chainlink::libraries::type_and_version::ITypeAndVersion; use chainlink::ocr2::aggregator::Round; use chainlink::ocr2::aggregator::IAggregator; use chainlink::ocr2::aggregator::{Transmission}; @@ -108,6 +109,13 @@ mod SequencerUptimeFeed { to_address: EthAddress } + #[abi(embed_v0)] + impl TypeAndVersion of ITypeAndVersion { + fn type_and_version(self: @ContractState) -> felt252 { + 'SequencerUptimeFeed 1.0.0' + } + } + #[external(v0)] impl AggregatorImpl of IAggregator { fn latest_round_data(self: @ContractState) -> Round { @@ -143,10 +151,6 @@ mod SequencerUptimeFeed { fn decimals(self: @ContractState) -> u8 { 0_u8 } - - fn type_and_version(self: @ContractState) -> felt252 { - 'SequencerUptimeFeed 1.0.0' - } } #[constructor] diff --git a/contracts/src/libraries.cairo b/contracts/src/libraries.cairo index 2fd5588af..dcfe47c1b 100644 --- a/contracts/src/libraries.cairo +++ b/contracts/src/libraries.cairo @@ -3,3 +3,4 @@ mod access_control; mod token; mod upgradeable; mod mocks; +mod type_and_version; diff --git a/contracts/src/libraries/type_and_version.cairo b/contracts/src/libraries/type_and_version.cairo new file mode 100644 index 000000000..b0481055d --- /dev/null +++ b/contracts/src/libraries/type_and_version.cairo @@ -0,0 +1,4 @@ +#[starknet::interface] +trait ITypeAndVersion { + fn type_and_version(self: @TContractState) -> felt252; +} diff --git a/contracts/src/multisig.cairo b/contracts/src/multisig.cairo index 3d6ffe6e1..1728d3bde 100644 --- a/contracts/src/multisig.cairo +++ b/contracts/src/multisig.cairo @@ -49,7 +49,6 @@ trait IMultisig { fn is_confirmed(self: @TContractState, nonce: u128, signer: ContractAddress) -> bool; fn is_executed(self: @TContractState, nonce: u128) -> bool; fn get_transaction(self: @TContractState, nonce: u128) -> (Transaction, Array::); - fn type_and_version(self: @TContractState) -> felt252; fn submit_transaction( ref self: TContractState, to: ContractAddress, @@ -92,6 +91,7 @@ mod Multisig { use starknet::storage_write_syscall; use starknet::class_hash::ClassHash; + use chainlink::libraries::type_and_version::ITypeAndVersion; use chainlink::libraries::upgradeable::{Upgradeable, IUpgradeable}; #[event] @@ -161,6 +161,13 @@ mod Multisig { self._set_threshold(threshold); } + #[abi(embed_v0)] + impl TypeAndVersionImpl of ITypeAndVersion { + fn type_and_version(self: @ContractState,) -> felt252 { + 'Multisig 1.0.0' + } + } + #[external(v0)] impl UpgradeableImpl of IUpgradeable { fn upgrade(ref self: ContractState, new_impl: ClassHash) { @@ -215,10 +222,6 @@ mod Multisig { (transaction, calldata) } - fn type_and_version(self: @ContractState,) -> felt252 { - 'Multisig 1.0.0' - } - /// Externals fn submit_transaction( diff --git a/contracts/src/ocr2/aggregator.cairo b/contracts/src/ocr2/aggregator.cairo index be65509f5..873585924 100644 --- a/contracts/src/ocr2/aggregator.cairo +++ b/contracts/src/ocr2/aggregator.cairo @@ -63,7 +63,6 @@ trait IAggregator { fn round_data(self: @TContractState, round_id: u128) -> Round; fn description(self: @TContractState) -> felt252; fn decimals(self: @TContractState) -> u8; - fn type_and_version(self: @TContractState) -> felt252; } #[derive(Copy, Drop, Serde)] @@ -205,6 +204,7 @@ mod Aggregator { use chainlink::libraries::access_control::{ IAccessControllerDispatcher, IAccessControllerDispatcherTrait }; + use chainlink::libraries::type_and_version::ITypeAndVersion; component!(path: OwnableComponent, storage: ownable, event: OwnableEvent); component!(path: AccessControlComponent, storage: access_control, event: AccessControlEvent); @@ -326,6 +326,13 @@ mod Aggregator { } } + #[abi(embed_v0)] + impl TypeAndVersionImpl of ITypeAndVersion { + fn type_and_version(self: @ContractState) -> felt252 { + 'ocr2/aggregator.cairo 1.0.0' + } + } + #[external(v0)] impl AggregatorImpl of super::IAggregator { fn latest_round_data(self: @ContractState) -> Round { @@ -362,10 +369,6 @@ mod Aggregator { self._require_read_access(); self._decimals.read() } - - fn type_and_version(self: @ContractState) -> felt252 { - 'ocr2/aggregator.cairo 1.0.0' - } } // --- diff --git a/contracts/src/ocr2/aggregator_proxy.cairo b/contracts/src/ocr2/aggregator_proxy.cairo index 0b077ceae..4204dddfb 100644 --- a/contracts/src/ocr2/aggregator_proxy.cairo +++ b/contracts/src/ocr2/aggregator_proxy.cairo @@ -9,7 +9,6 @@ trait IAggregatorProxy { fn round_data(self: @TContractState, round_id: felt252) -> Round; fn description(self: @TContractState) -> felt252; fn decimals(self: @TContractState) -> u8; - fn type_and_version(self: @TContractState) -> felt252; } #[starknet::interface] @@ -53,6 +52,9 @@ mod AggregatorProxy { use chainlink::libraries::access_control::{AccessControlComponent, IAccessController}; use chainlink::libraries::access_control::AccessControlComponent::InternalTrait as AccessControlInternalTrait; use chainlink::utils::split_felt; + use chainlink::libraries::type_and_version::{ + ITypeAndVersion, ITypeAndVersionDispatcher, ITypeAndVersionDispatcherTrait + }; use chainlink::libraries::upgradeable::{Upgradeable, IUpgradeable}; const SHIFT: felt252 = 0x100000000000000000000000000000000; @@ -148,10 +150,13 @@ mod AggregatorProxy { let aggregator = IAggregatorDispatcher { contract_address: phase.aggregator }; aggregator.decimals() } + } + #[abi(embed_v0)] + impl TypeAndVersion of ITypeAndVersion { fn type_and_version(self: @ContractState) -> felt252 { let phase = self._current_phase.read(); - let aggregator = IAggregatorDispatcher { contract_address: phase.aggregator }; + let aggregator = ITypeAndVersionDispatcher { contract_address: phase.aggregator }; aggregator.type_and_version() } } diff --git a/contracts/src/ocr2/mocks/mock_aggregator.cairo b/contracts/src/ocr2/mocks/mock_aggregator.cairo index 4a8ab2038..038a3ba18 100644 --- a/contracts/src/ocr2/mocks/mock_aggregator.cairo +++ b/contracts/src/ocr2/mocks/mock_aggregator.cairo @@ -18,6 +18,7 @@ mod MockAggregator { use chainlink::ocr2::aggregator::IAggregator; use chainlink::ocr2::aggregator::Aggregator::{Transmission, NewTransmission}; use chainlink::ocr2::aggregator::Round; + use chainlink::libraries::type_and_version::ITypeAndVersion; #[event] use chainlink::ocr2::aggregator::Aggregator::Event; @@ -83,6 +84,13 @@ mod MockAggregator { } } + #[abi(embed_v0)] + impl TypeAndVersionImpl of ITypeAndVersion { + fn type_and_version(self: @ContractState) -> felt252 { + 'mock_aggregator.cairo 1.0.0' + } + } + #[external(v0)] impl Aggregator of IAggregator { fn round_data(self: @ContractState, round_id: u128) -> Round { @@ -109,9 +117,5 @@ mod MockAggregator { fn description(self: @ContractState) -> felt252 { 'mock' } - - fn type_and_version(self: @ContractState) -> felt252 { - 'mock_aggregator.cairo 1.0.0' - } } } diff --git a/contracts/src/token/link_token.cairo b/contracts/src/token/link_token.cairo index 7b5369f5b..c3e139c89 100644 --- a/contracts/src/token/link_token.cairo +++ b/contracts/src/token/link_token.cairo @@ -16,6 +16,7 @@ mod LinkToken { use openzeppelin::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait}; use chainlink::libraries::token::erc677::ERC677Component; use chainlink::libraries::ownable::{OwnableComponent, IOwnable}; + use chainlink::libraries::type_and_version::ITypeAndVersion; use chainlink::libraries::upgradeable::{Upgradeable, IUpgradeable}; use openzeppelin::token::erc20::ERC20Component; @@ -94,14 +95,13 @@ mod LinkToken { self._minter.read() } - // TODO #[view] - fn type_and_version(self: @ContractState) -> felt252 { - 'LinkToken 1.0.0' + #[abi(embed_v0)] + impl TypeAndVersionImpl of ITypeAndVersion { + fn type_and_version(self: @ContractState) -> felt252 { + 'LinkToken 1.0.0' + } } - // - // Upgradeable - // #[external(v0)] impl UpgradeableImpl of IUpgradeable { fn upgrade(ref self: ContractState, new_impl: ClassHash) {