-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathDocumentEngineModule.sol
More file actions
116 lines (101 loc) · 4.41 KB
/
DocumentEngineModule.sol
File metadata and controls
116 lines (101 loc) · 4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// SPDX-License-Identifier: MPL-2.0
pragma solidity ^0.8.20;
/* ==== OpenZeppelin=== */
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
/* ==== Engine === */
import {IERC1643, IDocumentEngine} from "../../../interfaces/engine/IDocumentEngine.sol";
import {IDocumentEngineModule} from "../../../interfaces/modules/IDocumentEngineModule.sol";
/**
* @title Document module (ERC1643)
* @dev
*
* Retrieve documents from a documentEngine (external contract)
*/
abstract contract DocumentEngineModule is Initializable, IDocumentEngineModule {
/* ============ ERC-7201 ============ */
bytes32 public constant DOCUMENT_ROLE = keccak256("DOCUMENT_ROLE");
// keccak256(abi.encode(uint256(keccak256("CMTAT.storage.DocumentEngineModule")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant DocumentEngineModuleStorageLocation = 0xbd0905600c85d707dc53eba2e146c1c2527cd32ac3ff6b86846155151b3e2700;
/* ==== ERC-7201 State Variables === */
struct DocumentEngineModuleStorage {
IERC1643 _documentEngine;
}
/* ============ Modifier ============ */
modifier onlyDocumentManager() {
_authorizeDocumentManagement();
_;
}
/* ============ Initializer Function ============ */
/**
* @dev
*
* - set a DocumentEngine if address different from zero
* Warning: not used in the different deployment version to reduce contract code size and simplify code
* If not used, the function will not be included in the final bytecode if compiled with the optimizer enabled
*/
function __DocumentEngineModule_init_unchained(IERC1643 documentEngine_)
internal virtual onlyInitializing {
if (address(documentEngine_) != address (0)) {
DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage();
_setDocumentEngine($, documentEngine_);
}
}
/*//////////////////////////////////////////////////////////////
PUBLIC/EXTERNAL FUNCTIONS
//////////////////////////////////////////////////////////////*/
/**
* @inheritdoc IDocumentEngineModule
*/
function documentEngine() public view virtual override(IDocumentEngineModule) returns (IERC1643 documentEngine_) {
DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage();
return $._documentEngine;
}
/**
* @inheritdoc IERC1643
*/
function getDocument(string memory name) public view virtual override(IERC1643) returns (Document memory document){
DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage();
if(address($._documentEngine) != address(0)){
return $._documentEngine.getDocument(name);
} else{
return Document("", 0x0, 0);
}
}
/**
* @inheritdoc IERC1643
*/
function getAllDocuments() public view virtual override(IERC1643) returns (string[] memory documentNames_){
DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage();
if(address($._documentEngine) != address(0)){
documentNames_ = $._documentEngine.getAllDocuments();
}
}
/* ============ Restricted Functions ============ */
/**
* @inheritdoc IDocumentEngineModule
*/
function setDocumentEngine(
IERC1643 documentEngine_
) public virtual override(IDocumentEngineModule) onlyDocumentManager {
DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage();
require(address($._documentEngine) != address(documentEngine_), CMTAT_DocumentEngineModule_SameValue());
_setDocumentEngine($, documentEngine_);
}
/*//////////////////////////////////////////////////////////////
INTERNAL/PRIVATE FUNCTIONS
//////////////////////////////////////////////////////////////*/
function _setDocumentEngine(
DocumentEngineModuleStorage storage $, IERC1643 documentEngine_
) internal virtual {
$._documentEngine = documentEngine_;
emit DocumentEngine(documentEngine_);
}
/* ============ Access Control ============ */
function _authorizeDocumentManagement() internal virtual;
/* ============ ERC-7201 ============ */
function _getDocumentEngineModuleStorage() private pure returns (DocumentEngineModuleStorage storage $) {
assembly {
$.slot := DocumentEngineModuleStorageLocation
}
}
}