diff --git a/README.md b/README.md index 7853e10..6f952bc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ NettedX Blockchain is the smart contract layer of the NettedX settlement system. -The project implements blockchain-based trade netting and settlement using Solidity and Foundry. It includes settlement management, netting, liquidity pool management, ERC-20 test tokens, and other functionalities. +The project implements blockchain-based trade netting and settlement using Solidity and Foundry. It includes settlement management, netting, liquidity buffer management, ERC-20 test tokens, and other functionalities. ## Prerequisites @@ -151,7 +151,7 @@ The main contracts are: ```text Netting Settlement -LiquidityPool +LiquidityBuffer MockUSDC MockBond ``` @@ -259,7 +259,7 @@ NettedX-Blockchain/ │ ├── core/ │ │ ├── Netting.sol │ │ ├── Settlement.sol -│ │ └── LiquidityPool.sol +│ │ └── LiquidityBuffer.sol │ ├── interfaces/ │ └── libraries/ ├── test/ diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 93fd256..3983926 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -8,12 +8,12 @@ import {MockBond} from "../src/tokens/MockBond.sol"; import {Settlement} from "../src/core/Settlement.sol"; import {Netting} from "../src/core/Netting.sol"; -import {LiquidityPool} from "../src/core/LiquidityPool.sol"; +import {LiquidityBuffer} from "../src/core/LiquidityBuffer.sol"; contract Deploy is Script { function run() external - returns (MockUSDC usdc, MockBond bond, Settlement settlement, Netting netting, LiquidityPool liquidityPool) + returns (MockUSDC usdc, MockBond bond, Settlement settlement, Netting netting, LiquidityBuffer liquidityBuffer) { // ========================================================= // Get deployer private key @@ -56,10 +56,10 @@ contract Deploy is Script { netting = new Netting(deployer, address(usdc), address(bond), address(settlement)); // ========================================================= - // 5. Deploy LiquidityPool + // 5. Deploy LiquidityBuffer // ========================================================= - liquidityPool = new LiquidityPool(); + liquidityBuffer = new LiquidityBuffer(); // ========================================================= // 6. Initialize Settlement -> Netting @@ -68,16 +68,16 @@ contract Deploy is Script { settlement.setNetting(address(netting)); // ========================================================= - // 7. Initialize Settlement -> LiquidityPool + // 7. Initialize Settlement -> LiquidityBuffer // ========================================================= - settlement.setLiquidityPool(address(liquidityPool)); + settlement.setLiquidityBuffer(address(liquidityBuffer)); // ========================================================= - // 8. Initialize LiquidityPool -> Settlement + // 8. Initialize LiquidityBuffer -> Settlement // ========================================================= - liquidityPool.setSettlement(address(settlement)); + liquidityBuffer.setSettlement(address(settlement)); // ========================================================= // Stop deployment @@ -97,6 +97,6 @@ contract Deploy is Script { console2.log("NETTING:", address(netting)); - console2.log("LIQUIDITY_POOL:", address(liquidityPool)); + console2.log("LIQUIDITY_BUFFER:", address(liquidityBuffer)); } } diff --git a/src/core/LiquidityPool.sol b/src/core/LiquidityBuffer.sol similarity index 93% rename from src/core/LiquidityPool.sol rename to src/core/LiquidityBuffer.sol index 27bc2d5..f0b19e0 100644 --- a/src/core/LiquidityPool.sol +++ b/src/core/LiquidityBuffer.sol @@ -6,9 +6,9 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; -import "../interfaces/ILiquidityPool.sol"; +import "../interfaces/ILiquidityBuffer.sol"; -contract LiquidityPool is ILiquidityPool, Ownable, ReentrancyGuard { +contract LiquidityBuffer is ILiquidityBuffer, Ownable, ReentrancyGuard { using SafeERC20 for IERC20; /** @@ -39,10 +39,10 @@ contract LiquidityPool is ILiquidityPool, Ownable, ReentrancyGuard { mapping(address => mapping(address => uint256)) public override debt; /** - * @notice Create LiquidityPool. + * @notice Create LiquidityBuffer. * * Settlement is configured separately because - * LiquidityPool and Settlement may have deployment + * LiquidityBuffer and Settlement may have deployment * dependencies. */ constructor() Ownable(msg.sender) {} @@ -69,7 +69,7 @@ contract LiquidityPool is ILiquidityPool, Ownable, ReentrancyGuard { } /** - * @notice Deposit tokens into the pool. + * @notice Deposit tokens into the buffer. */ function deposit(address asset, uint256 amount) external override nonReentrant { require(asset != address(0), "Zero asset"); @@ -109,7 +109,7 @@ contract LiquidityPool is ILiquidityPool, Ownable, ReentrancyGuard { * This function does NOT transfer tokens to the debtor. * * It transfers the required amount directly from the - * LiquidityPool to Settlement. + * LiquidityBuffer to Settlement. * * Settlement can then use those funds to complete * the settlement process. diff --git a/src/core/Settlement.sol b/src/core/Settlement.sol index 363f8c4..026d0b1 100644 --- a/src/core/Settlement.sol +++ b/src/core/Settlement.sol @@ -8,7 +8,7 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "../interfaces/INetting.sol"; import "../interfaces/ISettlement.sol"; -import "../interfaces/ILiquidityPool.sol"; +import "../interfaces/ILiquidityBuffer.sol"; import "../libraries/Types.sol"; import "../libraries/Errors.sol"; @@ -29,11 +29,11 @@ contract Settlement is ISettlement, ReentrancyGuard, Ownable { address public netting; /** - * @notice Liquidity Pool contract address. + * @notice Liquidity Buffer contract address. * - * LiquidityPool is configured after deployment. + * LiquidityBuffer is configured after deployment. */ - address public liquidityPool; + address public liquidityBuffer; // ============================================================= // Constructor @@ -62,19 +62,19 @@ contract Settlement is ISettlement, ReentrancyGuard, Ownable { } /** - * @notice Set Liquidity Pool contract address. + * @notice Set Liquidity Buffer contract address. * @dev Can only be called once by the owner. */ - function setLiquidityPool(address liquidityPool_) external onlyOwner { - if (liquidityPool != address(0)) { - revert Errors.LiquidityPoolAlreadySet(); + function setLiquidityBuffer(address liquidityBuffer_) external onlyOwner { + if (liquidityBuffer != address(0)) { + revert Errors.LiquidityBufferAlreadySet(); } - if (liquidityPool_ == address(0)) { + if (liquidityBuffer_ == address(0)) { revert Errors.ZeroAddress(); } - liquidityPool = liquidityPool_; + liquidityBuffer = liquidityBuffer_; } // ============================================================= @@ -111,19 +111,19 @@ contract Settlement is ISettlement, ReentrancyGuard, Ownable { * ↓ * Payer pays what they have * ↓ - * LiquidityPool provides shortfall + * LiquidityBuffer provides shortfall * ↓ * Settlement -> Receiver * - * The LiquidityPool records the shortfall as debt. + * The LiquidityBuffer records the shortfall as debt. */ function settle(Types.NetPosition[] calldata positions) external override onlyNetting nonReentrant { if (positions.length == 0) { revert Errors.InvalidPosition(); } - if (liquidityPool == address(0)) { - revert Errors.LiquidityPoolNotSet(); + if (liquidityBuffer == address(0)) { + revert Errors.LiquidityBufferNotSet(); } uint256 transferCount = 0; @@ -192,13 +192,13 @@ contract Settlement is ISettlement, ReentrancyGuard, Ownable { uint256 payerAmount = balance < amount ? balance : amount; // ================================================= - // Liquidity Pool covers the shortfall. + // Liquidity Buffer covers the shortfall. // ================================================= - uint256 poolAmount = amount - payerAmount; + uint256 bufferAmount = amount - payerAmount; - if (poolAmount > 0) { - ILiquidityPool(liquidityPool).provideLiquidity(asset, payer, poolAmount); + if (bufferAmount > 0) { + ILiquidityBuffer(liquidityBuffer).provideLiquidity(asset, payer, bufferAmount); } // ================================================= @@ -214,13 +214,13 @@ contract Settlement is ISettlement, ReentrancyGuard, Ownable { } // ================================================= - // LiquidityPool funds are now sitting in Settlement. + // LiquidityBuffer funds are now sitting in Settlement. // // Send them to receiver. // ================================================= - if (poolAmount > 0) { - token.safeTransfer(receiver, poolAmount); + if (bufferAmount > 0) { + token.safeTransfer(receiver, bufferAmount); } emit Events.Transferred(INetting(netting).currentWindowId(), asset, payer, receiver, amount); diff --git a/src/interfaces/ILiquidityPool.sol b/src/interfaces/ILiquidityBuffer.sol similarity index 90% rename from src/interfaces/ILiquidityPool.sol rename to src/interfaces/ILiquidityBuffer.sol index ba7cd21..ece6995 100644 --- a/src/interfaces/ILiquidityPool.sol +++ b/src/interfaces/ILiquidityBuffer.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -interface ILiquidityPool { +interface ILiquidityBuffer { /** - * @notice Deposit ERC20 tokens into the liquidity pool. + * @notice Deposit ERC20 tokens into the liquidity buffer. */ function deposit(address asset, uint256 amount) external; diff --git a/src/libraries/Errors.sol b/src/libraries/Errors.sol index c171996..687815a 100644 --- a/src/libraries/Errors.sol +++ b/src/libraries/Errors.sol @@ -22,6 +22,6 @@ library Errors { error InsufficientAllowance(); error InvalidAsset(); - error LiquidityPoolAlreadySet(); - error LiquidityPoolNotSet(); + error LiquidityBufferAlreadySet(); + error LiquidityBufferNotSet(); } diff --git a/test/integration/EndToEnd.t.sol b/test/integration/EndToEnd.t.sol index af11e5a..8d3ec55 100644 --- a/test/integration/EndToEnd.t.sol +++ b/test/integration/EndToEnd.t.sol @@ -8,7 +8,7 @@ import {MockBond} from "../../src/tokens/MockBond.sol"; import {Settlement} from "../../src/core/Settlement.sol"; import {Netting} from "../../src/core/Netting.sol"; -import {LiquidityPool} from "../../src/core/LiquidityPool.sol"; +import {LiquidityBuffer} from "../../src/core/LiquidityBuffer.sol"; contract EndToEndTest is Test { MockUSDC usdc; @@ -16,7 +16,7 @@ contract EndToEndTest is Test { Settlement settlement; Netting netting; - LiquidityPool liquidityPool; + LiquidityBuffer liquidityBuffer; address alice; address bob; @@ -47,10 +47,10 @@ contract EndToEndTest is Test { settlement = new Settlement(); // ================================================== - // 4. Deploy LiquidityPool + // 4. Deploy LiquidityBuffer // ================================================== - liquidityPool = new LiquidityPool(); + liquidityBuffer = new LiquidityBuffer(); // ================================================== // 5. Deploy Netting @@ -65,11 +65,11 @@ contract EndToEndTest is Test { // Settlement -> Netting settlement.setNetting(address(netting)); - // Settlement -> LiquidityPool - settlement.setLiquidityPool(address(liquidityPool)); + // Settlement -> LiquidityBuffer + settlement.setLiquidityBuffer(address(liquidityBuffer)); - // LiquidityPool -> Settlement - liquidityPool.setSettlement(address(settlement)); + // LiquidityBuffer -> Settlement + liquidityBuffer.setSettlement(address(settlement)); // ================================================== // 7. Mint user assets @@ -79,7 +79,7 @@ contract EndToEndTest is Test { bond.mint(bob, 10); // ================================================== - // 8. Mint liquidity for LiquidityPool + // 8. Mint liquidity for LiquidityBuffer // ================================================== usdc.mint(liquidityProvider, 1_000 * USDC); @@ -102,15 +102,15 @@ contract EndToEndTest is Test { vm.prank(liquidityProvider); - usdc.approve(address(liquidityPool), type(uint256).max); + usdc.approve(address(liquidityBuffer), type(uint256).max); // ================================================== - // 11. Deposit USDC into LiquidityPool + // 11. Deposit USDC into LiquidityBuffer // ================================================== vm.prank(liquidityProvider); - liquidityPool.deposit(address(usdc), 1_000 * USDC); + liquidityBuffer.deposit(address(usdc), 1_000 * USDC); } function testFullFlow() public { @@ -126,7 +126,7 @@ contract EndToEndTest is Test { assertEq(bond.balanceOf(bob), 10); - assertEq(liquidityPool.liquidity(address(usdc)), 1_000 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 1_000 * USDC); // ================================================== // 2. Submit trade @@ -192,7 +192,7 @@ contract EndToEndTest is Test { assertEq(bond.balanceOf(bob), 5); // ================================================== - // 7. LiquidityPool + // 7. LiquidityBuffer // // This trade does NOT need liquidity because // Alice has enough USDC. @@ -200,13 +200,13 @@ contract EndToEndTest is Test { // Therefore: // // Initial liquidity = 1000 USDC - // Pool liquidity = 1000 USDC + // Buffer liquidity = 1000 USDC // Debt = 0 // ================================================== - assertEq(liquidityPool.liquidity(address(usdc)), 1_000 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 1_000 * USDC); - assertEq(liquidityPool.debt(alice, address(usdc)), 0); + assertEq(liquidityBuffer.debt(alice, address(usdc)), 0); // ================================================== // 8. Window should advance @@ -233,10 +233,10 @@ contract EndToEndTest is Test { assertEq(usdc.balanceOf(alice), 200 * USDC); // ================================================== - // 2. LiquidityPool has 1000 USDC + // 2. LiquidityBuffer has 1000 USDC // ================================================== - assertEq(liquidityPool.liquidity(address(usdc)), 1_000 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 1_000 * USDC); // ================================================== // 3. Alice buys 5 BOND for 500 USDC @@ -267,7 +267,7 @@ contract EndToEndTest is Test { // 200 USDC -> 0 USDC // 0 BOND -> 5 BOND // - // LiquidityPool: + // LiquidityBuffer: // provides 300 USDC // // Bob: @@ -284,17 +284,17 @@ contract EndToEndTest is Test { assertEq(bond.balanceOf(bob), 5); // ================================================== - // 7. LiquidityPool state + // 7. LiquidityBuffer state // // Initial liquidity = 1000 - // Pool provides = 300 + // Buffer provides = 300 // Remaining = 700 // ================================================== - assertEq(liquidityPool.liquidity(address(usdc)), 700 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 700 * USDC); - // Alice now owes the Pool 300 USDC. - assertEq(liquidityPool.debt(alice, address(usdc)), 300 * USDC); + // Alice now owes the Buffer 300 USDC. + assertEq(liquidityBuffer.debt(alice, address(usdc)), 300 * USDC); // ================================================== // 8. Alice repays the debt @@ -304,22 +304,22 @@ contract EndToEndTest is Test { vm.prank(alice); - usdc.approve(address(liquidityPool), 300 * USDC); + usdc.approve(address(liquidityBuffer), 300 * USDC); vm.prank(alice); - liquidityPool.repay(address(usdc), 300 * USDC); + liquidityBuffer.repay(address(usdc), 300 * USDC); // ================================================== // 9. Debt should be zero // ================================================== - assertEq(liquidityPool.debt(alice, address(usdc)), 0); + assertEq(liquidityBuffer.debt(alice, address(usdc)), 0); // ================================================== // 10. Liquidity should be restored // ================================================== - assertEq(liquidityPool.liquidity(address(usdc)), 1_000 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 1_000 * USDC); } } diff --git a/test/unit/LiquidityPool.t.sol b/test/unit/LiquidityBuffer.t.sol similarity index 52% rename from test/unit/LiquidityPool.t.sol rename to test/unit/LiquidityBuffer.t.sol index bea5d03..9d79da0 100644 --- a/test/unit/LiquidityPool.t.sol +++ b/test/unit/LiquidityBuffer.t.sol @@ -4,11 +4,11 @@ pragma solidity ^0.8.24; import {Test} from "forge-std/Test.sol"; import {MockUSDC} from "../../src/tokens/MockUSDC.sol"; -import {LiquidityPool} from "../../src/core/LiquidityPool.sol"; +import {LiquidityBuffer} from "../../src/core/LiquidityBuffer.sol"; -contract LiquidityPoolTest is Test { +contract LiquidityBufferTest is Test { MockUSDC usdc; - LiquidityPool pool; + LiquidityBuffer buffer; address alice = address(0x1); address bob = address(0x2); @@ -17,31 +17,31 @@ contract LiquidityPoolTest is Test { function setUp() public { usdc = new MockUSDC(address(this)); - pool = new LiquidityPool(); + buffer = new LiquidityBuffer(); - pool.setSettlement(settlement); + buffer.setSettlement(settlement); usdc.mint(alice, 10_000 * 10 ** 6); usdc.mint(bob, 10_000 * 10 ** 6); vm.prank(alice); - usdc.approve(address(pool), type(uint256).max); + usdc.approve(address(buffer), type(uint256).max); vm.prank(bob); - usdc.approve(address(pool), type(uint256).max); + usdc.approve(address(buffer), type(uint256).max); } function testDeposit() public { uint256 amount = 1_000 * 10 ** 6; vm.prank(alice); - pool.deposit(address(usdc), amount); + buffer.deposit(address(usdc), amount); - assertEq(pool.liquidity(address(usdc)), amount); + assertEq(buffer.liquidity(address(usdc)), amount); - assertEq(pool.deposits(alice, address(usdc)), amount); + assertEq(buffer.deposits(alice, address(usdc)), amount); - assertEq(usdc.balanceOf(address(pool)), amount); + assertEq(usdc.balanceOf(address(buffer)), amount); } function testWithdraw() public { @@ -49,15 +49,15 @@ contract LiquidityPoolTest is Test { vm.startPrank(alice); - pool.deposit(address(usdc), amount); + buffer.deposit(address(usdc), amount); - pool.withdraw(address(usdc), amount); + buffer.withdraw(address(usdc), amount); vm.stopPrank(); - assertEq(pool.liquidity(address(usdc)), 0); + assertEq(buffer.liquidity(address(usdc)), 0); - assertEq(pool.deposits(alice, address(usdc)), 0); + assertEq(buffer.deposits(alice, address(usdc)), 0); } function testOnlySettlementCanProvideLiquidity() public { @@ -65,13 +65,13 @@ contract LiquidityPoolTest is Test { vm.prank(alice); - pool.deposit(address(usdc), amount); + buffer.deposit(address(usdc), amount); vm.prank(alice); vm.expectRevert("Only Settlement"); - pool.provideLiquidity(address(usdc), bob, 100 * 10 ** 6); + buffer.provideLiquidity(address(usdc), bob, 100 * 10 ** 6); } function testProvideLiquidity() public { @@ -80,15 +80,15 @@ contract LiquidityPoolTest is Test { vm.prank(alice); - pool.deposit(address(usdc), depositAmount); + buffer.deposit(address(usdc), depositAmount); vm.prank(settlement); - pool.provideLiquidity(address(usdc), bob, provideAmount); + buffer.provideLiquidity(address(usdc), bob, provideAmount); - assertEq(pool.liquidity(address(usdc)), depositAmount - provideAmount); + assertEq(buffer.liquidity(address(usdc)), depositAmount - provideAmount); - assertEq(pool.debt(bob, address(usdc)), provideAmount); + assertEq(buffer.debt(bob, address(usdc)), provideAmount); assertEq(usdc.balanceOf(settlement), provideAmount); } @@ -99,21 +99,21 @@ contract LiquidityPoolTest is Test { vm.prank(alice); - pool.deposit(address(usdc), depositAmount); + buffer.deposit(address(usdc), depositAmount); vm.prank(settlement); - pool.provideLiquidity(address(usdc), bob, provideAmount); + buffer.provideLiquidity(address(usdc), bob, provideAmount); vm.prank(bob); - pool.repay(address(usdc), provideAmount); + buffer.repay(address(usdc), provideAmount); - assertEq(pool.debt(bob, address(usdc)), 0); + assertEq(buffer.debt(bob, address(usdc)), 0); - assertEq(pool.liquidity(address(usdc)), depositAmount); + assertEq(buffer.liquidity(address(usdc)), depositAmount); - assertEq(usdc.balanceOf(address(pool)), depositAmount); + assertEq(usdc.balanceOf(address(buffer)), depositAmount); } function testCannotProvideMoreThanLiquidity() public { @@ -122,13 +122,13 @@ contract LiquidityPoolTest is Test { vm.prank(alice); - pool.deposit(address(usdc), depositAmount); + buffer.deposit(address(usdc), depositAmount); vm.prank(settlement); vm.expectRevert("Insufficient liquidity"); - pool.provideLiquidity(address(usdc), bob, provideAmount); + buffer.provideLiquidity(address(usdc), bob, provideAmount); } function testCannotRepayMoreThanDebt() public { @@ -136,6 +136,6 @@ contract LiquidityPoolTest is Test { vm.expectRevert("Repay exceeds debt"); - pool.repay(address(usdc), 100 * 10 ** 6); + buffer.repay(address(usdc), 100 * 10 ** 6); } } diff --git a/test/unit/Netting.t.sol b/test/unit/Netting.t.sol index b4d7b87..7d61c15 100644 --- a/test/unit/Netting.t.sol +++ b/test/unit/Netting.t.sol @@ -8,7 +8,7 @@ import {MockBond} from "../../src/tokens/MockBond.sol"; import {Settlement} from "../../src/core/Settlement.sol"; import {Netting} from "../../src/core/Netting.sol"; -import {LiquidityPool} from "../../src/core/LiquidityPool.sol"; +import {LiquidityBuffer} from "../../src/core/LiquidityBuffer.sol"; import {Types} from "../../src/libraries/Types.sol"; import {Errors} from "../../src/libraries/Errors.sol"; @@ -18,7 +18,7 @@ contract NettingTest is Test { Settlement settlement; Netting netting; - LiquidityPool liquidityPool; + LiquidityBuffer liquidityBuffer; address alice; address bob; @@ -38,8 +38,8 @@ contract NettingTest is Test { // Deploy Settlement settlement = new Settlement(); - // Deploy LiquidityPool - liquidityPool = new LiquidityPool(); + // Deploy LiquidityBuffer + liquidityBuffer = new LiquidityBuffer(); // Deploy Netting netting = new Netting(address(this), address(usdc), address(bond), address(settlement)); @@ -47,11 +47,11 @@ contract NettingTest is Test { // Two-phase initialization settlement.setNetting(address(netting)); - // Settlement -> LiquidityPool - settlement.setLiquidityPool(address(liquidityPool)); + // Settlement -> LiquidityBuffer + settlement.setLiquidityBuffer(address(liquidityBuffer)); - // LiquidityPool -> Settlement - liquidityPool.setSettlement(address(settlement)); + // LiquidityBuffer -> Settlement + liquidityBuffer.setSettlement(address(settlement)); // Initial balances usdc.mint(alice, 1_000 * USDC); diff --git a/test/unit/Settlement.t.sol b/test/unit/Settlement.t.sol index 936b3cf..f8fc0c3 100644 --- a/test/unit/Settlement.t.sol +++ b/test/unit/Settlement.t.sol @@ -8,7 +8,7 @@ import {MockBond} from "../../src/tokens/MockBond.sol"; import {Settlement} from "../../src/core/Settlement.sol"; import {Netting} from "../../src/core/Netting.sol"; -import {LiquidityPool} from "../../src/core/LiquidityPool.sol"; +import {LiquidityBuffer} from "../../src/core/LiquidityBuffer.sol"; import {Types} from "../../src/libraries/Types.sol"; @@ -18,7 +18,7 @@ contract SettlementTest is Test { Settlement settlement; Netting netting; - LiquidityPool liquidityPool; + LiquidityBuffer liquidityBuffer; address alice; address bob; @@ -49,10 +49,10 @@ contract SettlementTest is Test { settlement = new Settlement(); // ========================================================= - // Deploy LiquidityPool + // Deploy LiquidityBuffer // ========================================================= - liquidityPool = new LiquidityPool(); + liquidityBuffer = new LiquidityBuffer(); // ========================================================= // Deploy Netting @@ -67,11 +67,11 @@ contract SettlementTest is Test { // Settlement -> Netting settlement.setNetting(address(netting)); - // Settlement -> LiquidityPool - settlement.setLiquidityPool(address(liquidityPool)); + // Settlement -> LiquidityBuffer + settlement.setLiquidityBuffer(address(liquidityBuffer)); - // LiquidityPool -> Settlement - liquidityPool.setSettlement(address(settlement)); + // LiquidityBuffer -> Settlement + liquidityBuffer.setSettlement(address(settlement)); // ========================================================= // Initial balances @@ -103,9 +103,9 @@ contract SettlementTest is Test { function testInitialState() public view { assertEq(settlement.netting(), address(netting)); - assertEq(settlement.liquidityPool(), address(liquidityPool)); + assertEq(settlement.liquidityBuffer(), address(liquidityBuffer)); - assertEq(liquidityPool.settlement(), address(settlement)); + assertEq(liquidityBuffer.settlement(), address(settlement)); } // ============================================================ @@ -167,13 +167,13 @@ contract SettlementTest is Test { } // ============================================================ - // 4. LiquidityPool Configuration + // 4. LiquidityBuffer Configuration // ============================================================ - function testLiquidityPoolConfigured() public view { - assertEq(settlement.liquidityPool(), address(liquidityPool)); + function testLiquidityBufferConfigured() public view { + assertEq(settlement.liquidityBuffer(), address(liquidityBuffer)); - assertEq(liquidityPool.settlement(), address(settlement)); + assertEq(liquidityBuffer.settlement(), address(settlement)); } // ============================================================ @@ -185,10 +185,10 @@ contract SettlementTest is Test { } // ============================================================ - // 6. Liquidity Pool Covers Shortfall + // 6. Liquidity Buffer Covers Shortfall // ============================================================ - function testSettlementWithLiquidityPool() public { + function testSettlementWithLiquidityBuffer() public { // ======================================================== // Alice only has 100 USDC. // @@ -213,13 +213,13 @@ contract SettlementTest is Test { vm.prank(liquidityProvider); - usdc.approve(address(liquidityPool), type(uint256).max); + usdc.approve(address(liquidityBuffer), type(uint256).max); vm.prank(liquidityProvider); - liquidityPool.deposit(address(usdc), 500 * USDC); + liquidityBuffer.deposit(address(usdc), 500 * USDC); - assertEq(liquidityPool.liquidity(address(usdc)), 500 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 500 * USDC); // ======================================================== // Submit trade @@ -244,7 +244,7 @@ contract SettlementTest is Test { // ======================================================== // Alice paid 100 USDC. - // Pool paid remaining 400 USDC. + // Buffer paid remaining 400 USDC. // ======================================================== assertEq(usdc.balanceOf(alice), 0); @@ -254,16 +254,16 @@ contract SettlementTest is Test { assertEq(usdc.balanceOf(bob), 500 * USDC); // ======================================================== - // Alice now owes Pool 400 USDC. + // Alice now owes Buffer 400 USDC. // ======================================================== - assertEq(liquidityPool.debt(alice, address(usdc)), 400 * USDC); + assertEq(liquidityBuffer.debt(alice, address(usdc)), 400 * USDC); // ======================================================== - // Pool liquidity decreased from 500 -> 100. + // Buffer liquidity decreased from 500 -> 100. // ======================================================== - assertEq(liquidityPool.liquidity(address(usdc)), 100 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 100 * USDC); // ======================================================== // Bob should still receive 5 BOND. @@ -275,10 +275,10 @@ contract SettlementTest is Test { } // ============================================================ - // 7. Liquidity Pool Debt Repayment + // 7. Liquidity Buffer Debt Repayment // ============================================================ - function testLiquidityPoolRepayment() public { + function testLiquidityBufferRepayment() public { // ======================================================== // Alice only has 100 USDC. // ======================================================== @@ -297,11 +297,11 @@ contract SettlementTest is Test { vm.prank(liquidityProvider); - usdc.approve(address(liquidityPool), type(uint256).max); + usdc.approve(address(liquidityBuffer), type(uint256).max); vm.prank(liquidityProvider); - liquidityPool.deposit(address(usdc), 500 * USDC); + liquidityBuffer.deposit(address(usdc), 500 * USDC); // ======================================================== // Submit trade. @@ -328,10 +328,10 @@ contract SettlementTest is Test { // Alice owes 400 USDC. // ======================================================== - assertEq(liquidityPool.debt(alice, address(usdc)), 400 * USDC); + assertEq(liquidityBuffer.debt(alice, address(usdc)), 400 * USDC); - // Pool currently has 100 USDC left. - assertEq(liquidityPool.liquidity(address(usdc)), 100 * USDC); + // Buffer currently has 100 USDC left. + assertEq(liquidityBuffer.liquidity(address(usdc)), 100 * USDC); // ======================================================== // Alice gets 400 USDC later. @@ -344,12 +344,12 @@ contract SettlementTest is Test { assertEq(usdc.balanceOf(alice), 400 * USDC); // ======================================================== - // Alice approves LiquidityPool. + // Alice approves LiquidityBuffer. // ======================================================== vm.prank(alice); - usdc.approve(address(liquidityPool), 400 * USDC); + usdc.approve(address(liquidityBuffer), 400 * USDC); // ======================================================== // Alice repays debt. @@ -357,19 +357,19 @@ contract SettlementTest is Test { vm.prank(alice); - liquidityPool.repay(address(usdc), 400 * USDC); + liquidityBuffer.repay(address(usdc), 400 * USDC); // ======================================================== // Debt becomes zero. // ======================================================== - assertEq(liquidityPool.debt(alice, address(usdc)), 0); + assertEq(liquidityBuffer.debt(alice, address(usdc)), 0); // ======================================================== - // Pool liquidity returns to 500 USDC. + // Buffer liquidity returns to 500 USDC. // ======================================================== - assertEq(liquidityPool.liquidity(address(usdc)), 500 * USDC); + assertEq(liquidityBuffer.liquidity(address(usdc)), 500 * USDC); // ======================================================== // Alice has no remaining USDC.