/
UrdFactory.sol
42 lines (33 loc) · 1.34 KB
/
UrdFactory.sol
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
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity 0.8.19;
import {IUrdFactory} from "./interfaces/IUrdFactory.sol";
import {IUniversalRewardsDistributor} from "./interfaces/IUniversalRewardsDistributor.sol";
import {EventsLib} from "./libraries/EventsLib.sol";
import {UniversalRewardsDistributor} from "./UniversalRewardsDistributor.sol";
/// @title Universal Rewards Distributor Factory
/// @author Morpho Labs
/// @custom:contact security@morpho.org
/// @notice This contract allows to create UniversalRewardsDistributor (URD) contracts, and to index them easily.
contract UrdFactory is IUrdFactory {
/* STORAGE */
mapping(address => bool) public isUrd;
/* EXTERNAL */
/// @inheritdoc IUrdFactory
function createUrd(
address initialOwner,
uint256 initialTimelock,
bytes32 initialRoot,
bytes32 initialIpfsHash,
bytes32 salt
) public returns (IUniversalRewardsDistributor urd) {
urd = IUniversalRewardsDistributor(
address(
new UniversalRewardsDistributor{salt: salt}(initialOwner, initialTimelock, initialRoot, initialIpfsHash)
)
);
isUrd[address(urd)] = true;
emit EventsLib.UrdCreated(
address(urd), msg.sender, initialOwner, initialTimelock, initialRoot, initialIpfsHash, salt
);
}
}