Skip to content

Commit 12eeb57

Browse files
Emit amounts on hub (#386)
* chore: emit amounts on hub * chore: snapshot * chore: emit shares also, emit index tmp * chore: 🎉 optimiser is smart, no gas penalty * fix: ci --------- Co-authored-by: Cheyenne Atapour <[email protected]>
1 parent 15e9d89 commit 12eeb57

File tree

8 files changed

+110
-58
lines changed

8 files changed

+110
-58
lines changed

.github/workflows/tests-merge.yml

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
name: Tests
2-
3-
on:
4-
push:
5-
branches:
6-
- main
7-
8-
jobs:
9-
test:
10-
name: Foundry build n test
11-
runs-on: ubuntu-latest
12-
steps:
13-
- uses: actions/checkout@v4
14-
with:
15-
submodules: recursive
16-
token: ${{ secrets.READ_ONLY_PAT || github.token }}
17-
18-
- name: Run Foundry setup
19-
uses: bgd-labs/github-workflows/.github/actions/foundry-setup@main
20-
with:
21-
FOUNDRY_VERSION: stable
22-
23-
- name: Run Forge tests
24-
id: test
25-
uses: bgd-labs/github-workflows/.github/actions/foundry-test@main
26-
with:
27-
FOUNDRY_PROFILE: ci
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
test:
10+
name: Foundry build n test
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
with:
15+
submodules: recursive
16+
token: ${{ secrets.READ_ONLY_PAT || github.token }}
17+
18+
- name: Run Foundry setup
19+
uses: bgd-labs/github-workflows/.github/actions/foundry-setup@main
20+
with:
21+
FOUNDRY_VERSION: stable
22+
23+
- name: Run Forge tests
24+
id: test
25+
uses: bgd-labs/github-workflows/.github/actions/foundry-test@main
26+
with:
27+
FOUNDRY_PROFILE: ci

snapshots/Hub.Operations.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"add": "184993",
3-
"draw": "121174",
4-
"remove: full": "78409",
5-
"remove: partial": "94695",
6-
"restore: full": "92349",
7-
"restore: partial": "101949"
2+
"add": "186822",
3+
"draw": "123006",
4+
"remove: full": "80241",
5+
"remove: partial": "96527",
6+
"restore: full": "94178",
7+
"restore: partial": "103778"
88
}

snapshots/Spoke.Operations.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
2-
"borrow": "478986",
3-
"repay: full": "219877",
4-
"repay: partial": "287534",
5-
"supply: 0 debt, collateralDisabled": "170307",
6-
"supply: 0 debt, collateralEnabled": "170283",
7-
"supply: 1 debt": "170331",
8-
"supply: 2 debt": "170342",
9-
"supply: 3 debt": "170295",
10-
"usingAsCollateral": "50661",
11-
"withdraw: full": "215505",
12-
"withdraw: partial": "226456"
2+
"borrow": "480818",
3+
"repay: full": "221340",
4+
"repay: partial": "289363",
5+
"supply: 0 debt, collateralDisabled": "172136",
6+
"supply: 0 debt, collateralEnabled": "172112",
7+
"supply: 1 debt": "172160",
8+
"supply: 2 debt": "172171",
9+
"supply: 3 debt": "172124",
10+
"usingAsCollateral": "50683",
11+
"withdraw: full": "217337",
12+
"withdraw: partial": "228288"
1313
}

src/contracts/LiquidityHub.sol

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ contract LiquidityHub is ILiquidityHub {
130130
// TODO: fee-on-transfer
131131
assetsList[assetId].safeTransferFrom(from, address(this), amount);
132132

133-
emit Add(assetId, msg.sender, suppliedShares);
133+
emit Add(assetId, msg.sender, suppliedShares, amount);
134134

135135
return suppliedShares;
136136
}
@@ -156,7 +156,7 @@ contract LiquidityHub is ILiquidityHub {
156156

157157
assetsList[assetId].safeTransfer(to, amount);
158158

159-
emit Remove(assetId, msg.sender, withdrawnShares);
159+
emit Remove(assetId, msg.sender, withdrawnShares, amount);
160160

161161
return withdrawnShares;
162162
}
@@ -182,7 +182,7 @@ contract LiquidityHub is ILiquidityHub {
182182

183183
assetsList[assetId].safeTransfer(to, amount);
184184

185-
emit Draw(assetId, msg.sender, drawnShares);
185+
emit Draw(assetId, msg.sender, drawnShares, amount);
186186

187187
return drawnShares;
188188
}
@@ -215,7 +215,7 @@ contract LiquidityHub is ILiquidityHub {
215215

216216
assetsList[assetId].safeTransferFrom(from, address(this), totalRestoredAmount);
217217

218-
emit Restore(assetId, msg.sender, baseDrawnSharesRestored);
218+
emit Restore(assetId, msg.sender, baseDrawnSharesRestored, totalRestoredAmount);
219219

220220
return baseDrawnSharesRestored;
221221
}

src/interfaces/ILiquidityHub.sol

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,31 @@ interface ILiquidityHub {
2020
uint256 supplyCap
2121
);
2222

23-
event Add(uint256 indexed assetId, address indexed spoke, uint256 suppliedShares);
24-
event Remove(uint256 indexed assetId, address indexed spoke, uint256 suppliedShares);
25-
event Draw(uint256 indexed assetId, address indexed spoke, uint256 drawnShares);
26-
event Restore(uint256 indexed assetId, address indexed spoke, uint256 drawnShares);
23+
event DrawnIndexUpdate(uint256 indexed assetId, uint256 drawnIndex);
24+
event Add(
25+
uint256 indexed assetId,
26+
address indexed spoke,
27+
uint256 suppliedShares,
28+
uint256 suppliedAmount
29+
);
30+
event Remove(
31+
uint256 indexed assetId,
32+
address indexed spoke,
33+
uint256 withdrawnShares,
34+
uint256 withdrawnAmount
35+
);
36+
event Draw(
37+
uint256 indexed assetId,
38+
address indexed spoke,
39+
uint256 drawnShares,
40+
uint256 drawnAmount
41+
);
42+
event Restore(
43+
uint256 indexed assetId,
44+
address indexed spoke,
45+
uint256 baseRestoredShares,
46+
uint256 totalRestoredAmount
47+
);
2748
event RefreshPremiumDebt(
2849
uint256 indexed assetId,
2950
address indexed spoke,
@@ -55,13 +76,17 @@ interface ILiquidityHub {
5576
error InvalidDebtChange();
5677

5778
function addAsset(DataTypes.AssetConfig memory params, address asset) external;
79+
5880
function updateAssetConfig(uint256 assetId, DataTypes.AssetConfig memory config) external;
81+
5982
function addSpoke(uint256 assetId, DataTypes.SpokeConfig memory params, address spoke) external;
83+
6084
function addSpokes(
6185
uint256[] calldata assetIds,
6286
DataTypes.SpokeConfig[] memory configs,
6387
address spoke
6488
) external;
89+
6590
function updateSpokeConfig(
6691
uint256 assetId,
6792
address spoke,
@@ -152,32 +177,52 @@ interface ILiquidityHub {
152177
) external;
153178

154179
function convertToDrawnAssets(uint256 assetId, uint256 shares) external view returns (uint256);
180+
155181
function convertToDrawnShares(uint256 assetId, uint256 assets) external view returns (uint256);
182+
156183
function convertToSuppliedAssets(uint256 assetId, uint256 shares) external view returns (uint256);
184+
157185
function convertToSuppliedShares(uint256 assetId, uint256 assets) external view returns (uint256);
186+
158187
function previewOffset(uint256 assetId, uint256 shares) external view returns (uint256);
188+
159189
function getAsset(uint256 assetId) external view returns (DataTypes.Asset memory);
190+
160191
function getAssetConfig(uint256 assetId) external view returns (DataTypes.AssetConfig memory);
192+
161193
function getAssetDebt(uint256 assetId) external view returns (uint256, uint256);
194+
162195
function getAssetSuppliedAmount(uint256 assetId) external view returns (uint256);
196+
163197
function getAssetSuppliedShares(uint256 assetId) external view returns (uint256);
198+
164199
function getAssetTotalDebt(uint256 assetId) external view returns (uint256);
200+
165201
function getAvailableLiquidity(uint256 assetId) external view returns (uint256);
202+
166203
function getBaseInterestRate(uint256 assetId) external view returns (uint256);
204+
167205
function getSpoke(
168206
uint256 assetId,
169207
address spoke
170208
) external view returns (DataTypes.SpokeData memory);
209+
171210
function getSpokeConfig(
172211
uint256 assetId,
173212
address spoke
174213
) external view returns (DataTypes.SpokeConfig memory);
214+
175215
function getSpokeDebt(uint256 assetId, address spoke) external view returns (uint256, uint256);
216+
176217
function getSpokeSuppliedAmount(uint256 assetId, address spoke) external view returns (uint256);
218+
177219
function getSpokeSuppliedShares(uint256 assetId, address spoke) external view returns (uint256);
220+
178221
function getSpokeTotalDebt(uint256 assetId, address spoke) external view returns (uint256);
179222

180223
function assetCount() external view returns (uint256);
224+
181225
function assetsList(uint256 assetId) external view returns (IERC20);
226+
182227
function MAX_ALLOWED_ASSET_DECIMALS() external view returns (uint256);
183228
}

src/libraries/logic/AssetLogic.sol

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.0;
33

4+
import {ILiquidityHub} from 'src/interfaces/ILiquidityHub.sol';
5+
46
import {WadRayMathExtended} from 'src/libraries/math/WadRayMathExtended.sol';
57
import {DataTypes} from 'src/libraries/types/DataTypes.sol';
68
import {MathUtils} from 'src/libraries/math/MathUtils.sol';
@@ -23,6 +25,7 @@ library AssetLogic {
2325
) internal view returns (uint256) {
2426
return shares.rayMulUp(asset.previewIndex());
2527
}
28+
2629
function toDrawnAssetsDown(
2730
DataTypes.Asset storage asset,
2831
uint256 shares
@@ -36,6 +39,7 @@ library AssetLogic {
3639
) internal view returns (uint256) {
3740
return assets.rayDivUp(asset.previewIndex());
3841
}
42+
3943
function toDrawnSharesDown(
4044
DataTypes.Asset storage asset,
4145
uint256 assets
@@ -75,6 +79,7 @@ library AssetLogic {
7579
) internal view returns (uint256) {
7680
return shares.toAssetsUp(asset.totalSuppliedAssets(), asset.totalSuppliedShares());
7781
}
82+
7883
function toSuppliedAssetsDown(
7984
DataTypes.Asset storage asset,
8085
uint256 shares
@@ -88,6 +93,7 @@ library AssetLogic {
8893
) internal view returns (uint256) {
8994
return assets.toSharesUp(asset.totalSuppliedAssets(), asset.totalSuppliedShares());
9095
}
96+
9197
function toSuppliedSharesDown(
9298
DataTypes.Asset storage asset,
9399
uint256 assets
@@ -120,8 +126,9 @@ library AssetLogic {
120126

121127
// @dev Utilizes existing `asset.baseBorrowRate`
122128
function accrue(DataTypes.Asset storage asset) internal {
123-
asset.baseDebtIndex = asset.previewIndex();
129+
uint256 baseDebtIndex = asset.baseDebtIndex = asset.previewIndex();
124130
asset.lastUpdateTimestamp = block.timestamp;
131+
emit ILiquidityHub.DrawnIndexUpdate(asset.id, baseDebtIndex);
125132
}
126133

127134
function previewIndex(DataTypes.Asset storage asset) internal view returns (uint256) {

tests/unit/LiquidityHub/LiquidityHub.Draw.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ contract LiquidityHubDrawTest is LiquidityHubBase {
3636

3737
// spoke1 draw all dai reserve liquidity
3838
vm.expectEmit(address(hub));
39-
emit ILiquidityHub.Draw(daiAssetId, address(spoke1), drawAmount);
39+
emit ILiquidityHub.Draw(daiAssetId, address(spoke1), drawAmount, drawAmount);
4040
vm.prank(address(spoke1));
4141
hub.draw({assetId: daiAssetId, amount: drawAmount, to: alice});
4242

@@ -90,7 +90,7 @@ contract LiquidityHubDrawTest is LiquidityHubBase {
9090

9191
// spoke1 draw all dai reserve liquidity
9292
vm.expectEmit(address(hub));
93-
emit ILiquidityHub.Draw(assetId, address(spoke1), drawAmount);
93+
emit ILiquidityHub.Draw(assetId, address(spoke1), drawAmount, drawAmount);
9494
vm.prank(address(spoke1));
9595
hub.draw({assetId: assetId, amount: drawAmount, to: alice});
9696

tests/unit/LiquidityHub/LiquidityHub.Supply.t.sol

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ contract LiquidityHubSupplyTest is LiquidityHubBase {
179179
assertEq(tokenList.dai.balanceOf(address(hub)), 0);
180180

181181
vm.expectEmit(address(hub));
182-
emit ILiquidityHub.Add(daiAssetId, address(spoke1), amount);
182+
emit ILiquidityHub.Add(daiAssetId, address(spoke1), amount, amount);
183183
vm.prank(address(spoke1));
184184
hub.add(daiAssetId, amount, alice);
185185

@@ -221,7 +221,7 @@ contract LiquidityHubSupplyTest is LiquidityHubBase {
221221
vm.expectEmit(address(asset));
222222
emit IERC20.Transfer(alice, address(hub), amount);
223223
vm.expectEmit(address(hub));
224-
emit ILiquidityHub.Add(assetId, address(spoke1), amount);
224+
emit ILiquidityHub.Add(assetId, address(spoke1), amount, amount);
225225

226226
vm.prank(address(spoke1));
227227
hub.add(assetId, amount, alice);
@@ -269,15 +269,15 @@ contract LiquidityHubSupplyTest is LiquidityHubBase {
269269
vm.expectEmit(address(asset));
270270
emit IERC20.Transfer(alice, address(hub), amount);
271271
vm.expectEmit(address(hub));
272-
emit ILiquidityHub.Add(assetId, address(spoke1), amount);
272+
emit ILiquidityHub.Add(assetId, address(spoke1), amount, amount);
273273

274274
vm.prank(address(spoke1));
275275
hub.add(assetId, amount, alice);
276276

277277
vm.expectEmit(address(asset2));
278278
emit IERC20.Transfer(alice, address(hub), amount2);
279279
vm.expectEmit(address(hub));
280-
emit ILiquidityHub.Add(assetId2, address(spoke2), amount2);
280+
emit ILiquidityHub.Add(assetId2, address(spoke2), amount2, amount2);
281281

282282
vm.prank(address(spoke2));
283283
hub.add(assetId2, amount2, alice);

0 commit comments

Comments
 (0)