Skip to content

Commit 65dd525

Browse files
committed
ref(fulfillment-vault): upgrading fv to pay keeper on fill-order call
1 parent 4f4b660 commit 65dd525

14 files changed

Lines changed: 687 additions & 330 deletions

broadcast/UpgradeFulfillmentVault.s.sol/999/run-1765830030.json

Lines changed: 51 additions & 0 deletions
Large diffs are not rendered by default.

broadcast/UpgradeFulfillmentVault.s.sol/999/run-1765830279.json

Lines changed: 115 additions & 0 deletions
Large diffs are not rendered by default.

broadcast/UpgradeFulfillmentVault.s.sol/999/run-latest.json

Lines changed: 115 additions & 0 deletions
Large diffs are not rendered by default.

lcov.info

Lines changed: 319 additions & 311 deletions
Large diffs are not rendered by default.

script/BaseScript.s.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ contract BaseScript is Script {
1616

1717
function setUp() public virtual {
1818
deployerAddress = vm.envAddress("DEPLOYER_ADDRESS");
19+
console.log("Deployer address: %s", deployerAddress);
1920
// deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY");
2021
isTest = vm.envBool("IS_TEST");
2122

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity ^0.8.20;
3+
4+
import {BaseScript} from "./BaseScript.s.sol";
5+
import {console} from "forge-std/console.sol";
6+
import {FulfillmentVault} from "../src/FulfillmentVault.sol";
7+
import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
8+
9+
contract UpgradeFulfillmentVaultScript is BaseScript {
10+
FulfillmentVault public fulfillmentVault;
11+
12+
function setUp() public virtual override {
13+
super.setUp();
14+
fulfillmentVault = FulfillmentVault(payable(vm.envAddress("FULFILLMENT_VAULT_ADDRESS")));
15+
console.log("Fulfillment vault currently deployed at: %s", address(fulfillmentVault));
16+
}
17+
18+
function run() public virtual override {
19+
vm.startBroadcast();
20+
upgradeFulfillmentVault();
21+
vm.stopBroadcast();
22+
}
23+
24+
function upgradeFulfillmentVault() public {
25+
// Deploy the new implementation of the fulfillmentVault
26+
FulfillmentVault fulfillmentVaultImplementation = new FulfillmentVault();
27+
28+
// Console log the new implementation address
29+
console.log("New fulfillment vault implementation deployed at: %s", address(fulfillmentVaultImplementation));
30+
31+
// Upgrade the fulfillmentVault to the new implementation
32+
fulfillmentVault.upgradeToAndCall(address(fulfillmentVaultImplementation), "");
33+
}
34+
}

src/FulfillmentVault.sol

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,5 +251,10 @@ contract FulfillmentVault is LiquidityVault, IFulfillmentVault {
251251
// Emit event
252252
emit OrderFilled(index, hintPrevIds);
253253
IOrderPool(orderPool()).processOrders(indices, hintPrevIdsList);
254+
// Send collected fees to the keeper by sending the native balance
255+
(bool success,) = _msgSender().call{value: address(this).balance}("");
256+
if (!success) {
257+
revert FailedToWithdrawNativeGas(address(this).balance);
258+
}
254259
}
255260
}

src/RolloverVault.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ contract RolloverVault is LiquidityVault, IRolloverVault {
132132
uint256 ogPoolConsolBalance = IERC20(consol()).balanceOf(address(ogPool));
133133
uint256 ogPoolBalance = ogPool.balanceOf(address(this));
134134
total += Math.mulDiv(ogPoolBalance, ogPoolUsdxBalance, ogPoolTotalSupply)
135-
+ Math.mulDiv(ogPoolBalance, ogPoolConsolBalance, ogPoolTotalSupply);
135+
+ Math.mulDiv(ogPoolBalance, ogPoolConsolBalance, ogPoolTotalSupply);
136136
}
137137
// Add the USDX and Consol balances that are currently in the rollover vault
138138
total += IERC20(usdx()).balanceOf(address(this)) + IERC20(consol()).balanceOf(address(this));

src/Router.sol

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,14 @@ contract Router is
206206
if (creationRequest.base.isCompounding) {
207207
for (uint256 i = 0; i < creationRequest.base.originationPools.length; i++) {
208208
// If compounding, need to collect 1/2 of the collateral amount + commission fee (this is in the form of collateral)
209-
collateralCollected += IOriginationPool(creationRequest.base.originationPools[i])
210-
.calculateReturnAmount((creationRequest.base.collateralAmounts[i] + 1) / 2);
209+
collateralCollected += IOriginationPool(creationRequest.base.originationPools[i]).calculateReturnAmount(
210+
(creationRequest.base.collateralAmounts[i] + 1) / 2
211+
);
211212
(uint256 _cost, uint8 _collateralDecimals) =
212213
_calculateCost(creationRequest.collateral, creationRequest.base.collateralAmounts[i] / 2);
213214
collateralDecimals = _collateralDecimals;
214-
paymentAmount += (2 * _cost)
215-
- IOriginationPool(creationRequest.base.originationPools[i]).calculateReturnAmount(_cost);
215+
paymentAmount +=
216+
(2 * _cost) - IOriginationPool(creationRequest.base.originationPools[i]).calculateReturnAmount(_cost);
216217
}
217218
} else {
218219
for (uint256 i = 0; i < creationRequest.base.originationPools.length; i++) {
@@ -355,13 +356,9 @@ contract Router is
355356
* @param oPoolConfigId The OPoolConfigId of the origination pool config
356357
* @return originationPool The origination pool
357358
*/
358-
function _getOrCreateOriginationPool(OPoolConfigId oPoolConfigId)
359-
internal
360-
returns (IOriginationPool originationPool)
361-
{
362-
originationPool = IOriginationPool(
363-
IOriginationPoolScheduler(originationPoolScheduler).predictOriginationPool(oPoolConfigId)
364-
);
359+
function _getOrCreateOriginationPool(OPoolConfigId oPoolConfigId) internal returns (IOriginationPool originationPool) {
360+
originationPool =
361+
IOriginationPool(IOriginationPoolScheduler(originationPoolScheduler).predictOriginationPool(oPoolConfigId));
365362
if (!IOriginationPoolScheduler(originationPoolScheduler).isRegistered(address(originationPool))) {
366363
IOriginationPool(IOriginationPoolScheduler(originationPoolScheduler).deployOriginationPool(oPoolConfigId));
367364
}

src/interfaces/IFulfillmentVault/IFulfillmentVault.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ pragma solidity ^0.8.20;
33

44
import {ILiquidityVault} from "../ILiquidityVault/ILiquidityVault.sol";
55
import {IFulfillmentVaultEvents} from "./IFulfillmentVaultEvents.sol";
6+
import {IFulfillmentVaultErrors} from "./IFulfillmentVaultErrors.sol";
67

78
/**
89
* @title IFulfillmentVault
910
* @author @SocksNFlops
1011
* @notice Interface for FulfillmentVault, a vault that facilitates liquidity provisioning for fulfilling purchase orders in the OrderPool.
1112
*/
12-
interface IFulfillmentVault is ILiquidityVault, IFulfillmentVaultEvents {
13+
interface IFulfillmentVault is ILiquidityVault, IFulfillmentVaultEvents, IFulfillmentVaultErrors {
1314
/**
1415
* @notice Gets the address of the wrapped native token
1516
* @return The address of the wrapped native token (i.e., whype: 0x555...)

0 commit comments

Comments
 (0)