-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBaseUnionMember.sol
More file actions
51 lines (46 loc) · 1.7 KB
/
BaseUnionMember.sol
File metadata and controls
51 lines (46 loc) · 1.7 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
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./interfaces/IMarketRegistry.sol";
import "./interfaces/IUserManager.sol";
import "./interfaces/IUToken.sol";
/**
* @title BaseUnionMember Contract
* @dev This contract has the basic functions of Union member.
*/
abstract contract BaseUnionMember {
IMarketRegistry public immutable marketRegistry;
IUserManager public immutable userManager;
IUToken public immutable uToken;
IERC20 public immutable unionToken;
IERC20 public immutable underlyingToken;
/**
* @dev Constructor
* @param _marketRegistry Union's MarketRegistry contract address
* @param _unionToken UNION token address
* @param _underlyingToken Underlying asset address
*/
constructor(address _marketRegistry, address _unionToken, address _underlyingToken) {
(address _uToken, address _userManager) = IMarketRegistry(_marketRegistry).tokens(_underlyingToken);
marketRegistry = IMarketRegistry(_marketRegistry);
userManager = IUserManager(_userManager);
uToken = IUToken(_uToken);
unionToken = IERC20(_unionToken);
underlyingToken = IERC20(_underlyingToken);
}
/**
* @dev Return member's status
* @return Member's status
*/
function isMember() public view returns (bool) {
return userManager.checkIsMember(address(this));
}
/**
* @dev Register to become a Union member
*/
function _registerMember() internal {
uint256 newMemberFee = userManager.newMemberFee();
unionToken.approve(address(userManager), newMemberFee);
userManager.registerMember(address(this));
}
}