-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathLendingPoolFactory.sol
More file actions
76 lines (60 loc) · 2.07 KB
/
Copy pathLendingPoolFactory.sol
File metadata and controls
76 lines (60 loc) · 2.07 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
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/access/Ownable.sol";
contract GlobalLedger is Ownable {
mapping(address => bool) public registeredPools;
address public factory;
modifier onlyFactory() {
require(msg.sender == factory, "Not authorized");
_;
}
modifier onlyRegisteredPool() {
require(registeredPools[msg.sender], "Unauthorized pool");
_;
}
constructor(address _factory, address _owner) Ownable(_owner) {
factory = _factory;
}
function registerLendingPool(address pool) external onlyFactory {
registeredPools[pool] = true;
}
function recordDeposit(address user, uint256 amount) external onlyRegisteredPool {
// Logic for recording deposit
}
function recordLoan(address user, uint256 amount) external onlyRegisteredPool {
// Logic for recording loan
}
}
contract LendingPool {
address public globalLedger;
address public owner;
modifier onlyOwner() {
require(msg.sender == owner, "Not authorized");
_;
}
constructor(address _globalLedger, address _owner) {
globalLedger = _globalLedger;
owner = _owner;
}
function deposit(uint256 amount) external {
// Deposit logic
GlobalLedger(globalLedger).recordDeposit(msg.sender, amount);
}
function borrow(uint256 amount) external {
// Borrow logic
GlobalLedger(globalLedger).recordLoan(msg.sender, amount);
}
}
contract LendingPoolFactory {
address public globalLedger;
event LendingPoolDeployed(address pool, address owner);
constructor(address _globalLedger) {
globalLedger = _globalLedger;
}
function deployLendingPool() external returns (address) {
LendingPool newPool = new LendingPool(globalLedger, msg.sender);
GlobalLedger(globalLedger).registerLendingPool(address(newPool));
emit LendingPoolDeployed(address(newPool), msg.sender);
return address(newPool);
}
}