Skip to content

Commit

Permalink
BT-129 - IRS ERC3643 implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Mihalis authored and Mihalis committed Dec 6, 2024
1 parent c3cf7c5 commit 26414b1
Showing 1 changed file with 177 additions and 0 deletions.
177 changes: 177 additions & 0 deletions contracts/registry/implementation/IdentityRegistryStorageERC3643.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
// SPDX-License-Identifier: GPL-3.0
//
// :+#####%%%%%%%%%%%%%%+
// .-*@@@%+.:+%@@@@@%%#***%@@%=
// :=*%@@@#=. :#@@% *@@@%=
// .-+*%@%*-.:+%@@@@@@+. -*+: .=#. :%@@@%-
// :=*@@@@%%@@@@@@@@@%@@@- .=#@@@%@%= =@@@@#.
// -=+#%@@%#*=:. :%@@@@%. -*@@#*@@@@@@@#=:- *@@@@+
// =@@%=:. :=: *@@@@@%#- =%*%@@@@#+-. =+ :%@@@%-
// -@@%. .+@@@ =+=-. @@#- +@@@%- =@@@@%:
// :@@@. .+@@#%: : .=*=-::.-%@@@+*@@= +@@@@#.
// %@@: +@%%* =%@@@@@@@@@@@#. .*@%- +@@@@*.
// #@@= .+@@@@%:=*@@@@@- :%@%: .*@@@@+
// *@@* +@@@#-@@%-:%@@* +@@#. :%@@@@-
// -@@% .:-=++*##%%%@@@@@@@@@@@@*. :@+.@@@%: .#@@+ =@@@@#:
// .@@@*-+*#%%%@@@@@@@@@@@@@@@@%%#**@@%@@@. *@=*@@# :#@%= .#@@@@#-
// -%@@@@@@@@@@@@@@@*+==-:-@@@= *@# .#@*-=*@@@@%= -%@@@* =@@@@@%-
// -+%@@@#. %@%%= -@@:+@: -@@* *@@*-:: -%@@%=. .*@@@@@#
// *@@@* +@* *@@##@@- #@*@@+ -@@= . :+@@@#: .-+@@@%+-
// +@@@%*@@:..=@@@@* .@@@* .#@#. .=+- .=%@@@*. :+#@@@@*=:
// =@@@@%@@@@@@@@@@@@@@@@@@@@@@%- :+#*. :*@@@%=. .=#@@@@%+:
// .%@@= ..... .=#@@+. .#@@@*: -*%@@@@%+.
// +@@#+===---:::... .=%@@*- +@@@+. -*@@@@@%+.
// -@@@@@@@@@@@@@@@@@@@@@@%@@@@= -@@@+ -#@@@@@#=.
// ..:::---===+++***###%%%@@@#- .#@@+ -*@@@@@#=.
// @@@@@@+. +@@*. .+@@@@@%=.
// -@@@@@= =@@%: -#@@@@%+.
// +@@@@@. =@@@= .+@@@@@*:
// #@@@@#:%@@#. :*@@@@#-
// @@@@@%@@@= :#@@@@+.
// :@@@@@@@#.:#@@@%-
// +@@@@@@-.*@@@*:
// #@@@@#.=@@@+.
// @@@@+-%@%=
// :@@@#%@%=
// +@@@@%-
// :#%%=
//
/**
* NOTICE
*
* The T-REX software is licensed under a proprietary license or the GPL v.3.
* If you choose to receive it under the GPL v.3 license, the following applies:
* T-REX is a suite of smart contracts implementing the ERC-3643 standard and
* developed by Tokeny to manage and transfer financial assets on EVM blockchains
*
* Copyright (C) 2023, Tokeny sàrl.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

pragma solidity 0.8.27;

import "../../errors/InvalidArgumentErrors.sol";

import "../../roles/AgentRoleUpgradeable.sol";
import "../../roles/IERC173.sol";
import "../interface/IIdentityRegistryStorage.sol";
import "../storage/IRSStorage.sol";
import "@onchain-id/solidity/contracts/factory/IIdFactory.sol";
import "@onchain-id/solidity/contracts/interface/IIdentity.sol";
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";

/// Errors

/// @dev Thrown when address is already stored
error AddressAlreadyStored();

/// @dev Thrown when address is not yet stored.
error AddressNotYetStored();

/// @dev Thrown when trying to call write functions.
error ContractIsReadOnly();

/// @dev Thrown when maximum numbe of identity registry by identity registry storage is reached.
/// @param _max miximum number of IR by IRS.
error MaxIRByIRSReached(uint256 _max);


contract IdentityRegistryStorage is IERC3643IdentityRegistryStorage, AgentRoleUpgradeable, IRSStorage, IERC165 {
IIdFactory internal iidFactory;

Check failure on line 92 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

'iidFactory' should start with _
function init(_identityFactoryAddress) external initializer {
require(_identityFactoryAddress != address(0), ZeroAddress());
iidFactory = IIdFactory(_identityFactoryAddress);
__Ownable_init();
}

/**
* @dev See {IIdentityRegistryStorage-addIdentityToStorage}.
*/
function addIdentityToStorage(
address _userAddress,

Check failure on line 103 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_userAddress" is unused
IIdentity _identity,

Check failure on line 104 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_identity" is unused
uint16 _country

Check failure on line 105 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_country" is unused
) external view override onlyAgent {
revert ContractIsReadOnly();
}

/**
* @dev See {IIdentityRegistryStorage-modifyStoredIdentity}.
*/
function modifyStoredIdentity(address _userAddress, IIdentity _identity) external view override onlyAgent {

Check failure on line 113 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_userAddress" is unused

Check failure on line 113 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_identity" is unused
revert ContractIsReadOnly();

}

/**
* @dev See {IIdentityRegistryStorage-modifyStoredInvestorCountry}.
*/
function modifyStoredInvestorCountry(address _userAddress, uint16 _country) external view override onlyAgent {

Check failure on line 121 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_userAddress" is unused

Check failure on line 121 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_country" is unused
revert ContractIsReadOnly();

}

/**
* @dev See {IIdentityRegistryStorage-removeIdentityFromStorage}.
*/
function removeIdentityFromStorage(address _userAddress) external view override onlyAgent {

Check failure on line 129 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_userAddress" is unused
revert ContractIsReadOnly();
}

/**
* @dev See {IIdentityRegistryStorage-bindIdentityRegistry}.
*/
function bindIdentityRegistry(address _identityRegistry) external view override {

Check failure on line 136 in contracts/registry/implementation/IdentityRegistryStorageERC3643.sol

View workflow job for this annotation

GitHub Actions / Lint sources (18.x)

Variable "_identityRegistry" is unused
revert ContractIsReadOnly();
}

/**
* @dev See {IIdentityRegistryStorage-unbindIdentityRegistry}.
*/
function unbindIdentityRegistry(address _identityRegistry) external view override {
revert ContractIsReadOnly();
}

/**
* @dev See {IIdentityRegistryStorage-linkedIdentityRegistries}.
*/
function linkedIdentityRegistries() external view override returns (address[] memory) {
return _identityRegistries;
}

/**
* @dev See {IIdentityRegistryStorage-storedIdentity}.
*/
function storedIdentity(address _userAddress) external view override returns (IIdentity) {
return IIdentity(iidFactory.getIdentity(_userAddress));
}

/**
* @dev See {IIdentityRegistryStorage-storedInvestorCountry}.
*/
function storedInvestorCountry(address _userAddress) external view override returns (uint16) {
return _identities[_userAddress].investorCountry;
}

/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public pure virtual override returns (bool) {
return
interfaceId == type(IERC3643IdentityRegistryStorage).interfaceId ||
interfaceId == type(IERC173).interfaceId ||
interfaceId == type(IERC165).interfaceId;
}
}

0 comments on commit 26414b1

Please sign in to comment.