Skip to content

Commit 5e0df9c

Browse files
authored
Merge pull request #123 from otimlabs/ahmad/release_workflow_pr_template_update
chore: remove Linear url ref from PR template
2 parents c9a72c7 + f54973f commit 5e0df9c

File tree

4 files changed

+80
-43
lines changed

4 files changed

+80
-43
lines changed

.gas-snapshot

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ CrossRatePriceFeedTest:test_constructor_numeratorZeroAddress() (gas: 37234)
3535
CrossRatePriceFeedTest:test_constructor_setsDecimals() (gas: 27032)
3636
CrossRatePriceFeedTest:test_constructor_setsDescription() (gas: 46894)
3737
CrossRatePriceFeedTest:test_constructor_setsVersion() (gas: 5562)
38-
CrossRatePriceFeedTest:test_latestRoundData_answeredInRoundZero() (gas: 44825)
38+
CrossRatePriceFeedTest:test_latestRoundData_answeredInRoundZero() (gas: 60295)
3939
CrossRatePriceFeedTest:test_latestRoundData_invalidDenominatorPrice(int256) (runs: 256, μ: 907422, ~: 907984)
4040
CrossRatePriceFeedTest:test_latestRoundData_invalidNumeratorPrice(int256) (runs: 256, μ: 907390, ~: 907952)
41-
CrossRatePriceFeedTest:test_latestRoundData_realValuesFork() (gas: 58772)
41+
CrossRatePriceFeedTest:test_latestRoundData_realValuesFork() (gas: 70243)
4242
CrossRatePriceFeedTest:test_latestRoundData_realValuesFuzz18(int256,int256) (runs: 256, μ: 1301519, ~: 1301597)
43-
CrossRatePriceFeedTest:test_latestRoundData_realValuesFuzz8(int256,int256) (runs: 256, μ: 1301327, ~: 1301620)
44-
CrossRatePriceFeedTest:test_latestRoundData_revertsOnOverflow(int256) (runs: 256, μ: 907234, ~: 907228)
45-
CrossRatePriceFeedTest:test_latestRoundData_roundIdOne() (gas: 44848)
46-
CrossRatePriceFeedTest:test_latestRoundData_staleDenominatorPrice(uint256) (runs: 256, μ: 906848, ~: 907132)
47-
CrossRatePriceFeedTest:test_latestRoundData_staleNumeratorPrice(uint256) (runs: 256, μ: 906762, ~: 907046)
48-
CrossRatePriceFeedTest:test_latestRoundData_startedAtZero() (gas: 44862)
49-
CrossRatePriceFeedTest:test_latestRoundData_usesEarlierUpdatedAt() (gas: 57427)
43+
CrossRatePriceFeedTest:test_latestRoundData_realValuesFuzz8(int256,int256) (runs: 256, μ: 1301321, ~: 1301621)
44+
CrossRatePriceFeedTest:test_latestRoundData_revertsOnOverflow(int256) (runs: 257, μ: 935241, ~: 935235)
45+
CrossRatePriceFeedTest:test_latestRoundData_roundIdOne() (gas: 60318)
46+
CrossRatePriceFeedTest:test_latestRoundData_staleDenominatorPrice(uint256) (runs: 256, μ: 906768, ~: 907044)
47+
CrossRatePriceFeedTest:test_latestRoundData_staleNumeratorPrice(uint256) (runs: 256, μ: 906770, ~: 907046)
48+
CrossRatePriceFeedTest:test_latestRoundData_startedAtZero() (gas: 60332)
49+
CrossRatePriceFeedTest:test_latestRoundData_usesEarlierUpdatedAt() (gas: 68898)
5050
DeactivateInstruction:test_deactivateInstruction_alreadyDeactivated() (gas: 20424)
5151
DeactivateInstruction:test_deactivateInstruction_happyPath() (gas: 47568)
5252
DeactivateInstruction:test_deactivateInstruction_happyPath_beforeActivation() (gas: 80965)
@@ -74,33 +74,33 @@ DeploymentAddressesTest:test_transferOnceERC20Action_deployedAddress() (gas: 650
7474
DeploymentAddressesTest:test_treasury_deployedAddress() (gas: 389464)
7575
DeploymentAddressesTest:test_uniswapV3ExactInputAction_deployedAddress() (gas: 1826284)
7676
DeploymentAddressesTest:test_withdrawERC4626Action_deployedAddress() (gas: 864746)
77-
DepositERC4626Test:test_depositERC4626_happyPath() (gas: 420268)
78-
DepositERC4626Test:test_depositERC4626_insufficientBalance() (gas: 216700)
77+
DepositERC4626Test:test_depositERC4626_happyPath() (gas: 419978)
78+
DepositERC4626Test:test_depositERC4626_insufficientBalance() (gas: 216555)
7979
DepositERC4626Test:test_depositERC4626_maxDepositReached() (gas: 150609)
8080
DepositERC4626Test:test_depositERC4626_maxDepositTooLow() (gas: 38646)
8181
DepositERC4626Test:test_depositERC4626_minTotalSharesZero() (gas: 36832)
8282
DepositERC4626Test:test_depositERC4626_recipientZero() (gas: 36769)
8383
DepositERC4626Test:test_depositERC4626_totalSharesTooLow() (gas: 39187)
8484
DepositERC4626Test:test_depositERC4626_valueZero() (gas: 36815)
8585
DepositERC4626Test:test_depositERC4626_vaultZero() (gas: 36798)
86-
EstimateCallOnceGasConstant:testFuzz_callOnce_gasConstant(uint256,(address,bool,uint256,uint256,uint16,bytes4,bytes,(address,uint256,uint256,uint256))) (runs: 256, μ: 4114, ~: 3858)
87-
EstimateDeactivateInstructionGasConstant:testFuzz_deactivateInstruction_gasConstant(uint256,(bytes32,(address,uint256,uint256,uint256))) (runs: 256, μ: 1954, ~: 1905)
88-
EstimateDepositERC4626GasConstant:testFuzz_depositERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4507, ~: 4452)
89-
EstimateRefuelERC20GasConstant:testFuzz_refuelERC20_gasConstant(uint256,uint256,(address,address,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3011, ~: 3006)
90-
EstimateRefuelGasConstant:testFuzz_refuel_gasConstant(uint256,uint256,(address,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2893, ~: 2826)
91-
EstimateSweepCCTPGasConstant:testFuzz_sweepCCTP_gasConstant(uint256,uint256,(address,uint32,bytes32,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3355, ~: 3342)
92-
EstimateSweepDepositERC4626GasConstant:testFuzz_sweepDepositERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3535, ~: 3516)
93-
EstimateSweepERC20GasConstant:testFuzz_sweepERC20_gasConstant(uint256,uint256,(address,address,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3029, ~: 3042)
94-
EstimateSweepGasConstant:testFuzz_sweep_gasConstant(uint256,uint256,(address,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2848, ~: 2790)
95-
EstimateSweepUniswapV3GasConstant:testFuzz_sweepUniswapV3_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint256,uint32,uint32,(address,uint256,uint256,uint256))) (runs: 256, μ: 4422, ~: 4398)
96-
EstimateSweepWithdrawERC4626GasConstant:testFuzz_sweepWithdrawERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3287, ~: 3288)
97-
EstimateTransferCCTPGasConstant:testFuzz_transferCCTP_gasConstant(uint256,uint256,(address,uint256,uint32,bytes32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4216, ~: 4206)
98-
EstimateTransferERC20GasConstant:testFuzz_transferERC20_gasConstant(uint256,uint256,(address,address,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4005, ~: 3942)
99-
EstimateTransferGasConstant:testFuzz_transfer_gasConstant(uint256,uint256,(address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 3771, ~: 3762)
100-
EstimateTransferOnceERC20GasConstant:testFuzz_transferERC20Once_gasConstant(uint256,(address,address,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2576, ~: 2586)
86+
EstimateCallOnceGasConstant:testFuzz_callOnce_gasConstant(uint256,(address,bool,uint256,uint256,uint16,bytes4,bytes,(address,uint256,uint256,uint256))) (runs: 256, μ: 4128, ~: 3894)
87+
EstimateDeactivateInstructionGasConstant:testFuzz_deactivateInstruction_gasConstant(uint256,(bytes32,(address,uint256,uint256,uint256))) (runs: 256, μ: 1960, ~: 1914)
88+
EstimateDepositERC4626GasConstant:testFuzz_depositERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4489, ~: 4416)
89+
EstimateRefuelERC20GasConstant:testFuzz_refuelERC20_gasConstant(uint256,uint256,(address,address,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3026, ~: 3024)
90+
EstimateRefuelGasConstant:testFuzz_refuel_gasConstant(uint256,uint256,(address,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2887, ~: 2826)
91+
EstimateSweepCCTPGasConstant:testFuzz_sweepCCTP_gasConstant(uint256,uint256,(address,uint32,bytes32,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3364, ~: 3342)
92+
EstimateSweepDepositERC4626GasConstant:testFuzz_sweepDepositERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3576, ~: 3534)
93+
EstimateSweepERC20GasConstant:testFuzz_sweepERC20_gasConstant(uint256,uint256,(address,address,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3013, ~: 3024)
94+
EstimateSweepGasConstant:testFuzz_sweep_gasConstant(uint256,uint256,(address,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2871, ~: 2808)
95+
EstimateSweepUniswapV3GasConstant:testFuzz_sweepUniswapV3_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint256,uint32,uint32,(address,uint256,uint256,uint256))) (runs: 256, μ: 4426, ~: 4407)
96+
EstimateSweepWithdrawERC4626GasConstant:testFuzz_sweepWithdrawERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3284, ~: 3270)
97+
EstimateTransferCCTPGasConstant:testFuzz_transferCCTP_gasConstant(uint256,uint256,(address,uint256,uint32,bytes32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4239, ~: 4188)
98+
EstimateTransferERC20GasConstant:testFuzz_transferERC20_gasConstant(uint256,uint256,(address,address,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4000, ~: 3960)
99+
EstimateTransferGasConstant:testFuzz_transfer_gasConstant(uint256,uint256,(address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 3766, ~: 3762)
100+
EstimateTransferOnceERC20GasConstant:testFuzz_transferERC20Once_gasConstant(uint256,(address,address,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2562, ~: 2586)
101101
EstimateTransferOnceGasConstant:testFuzz_transferOnce_gasConstant(uint256,(address,uint256,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 2322, ~: 2298)
102-
EstimateUniswapV3ExactInputGasConstant:testFuzz_uniswapV3ExactInput_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint32,uint32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 5336, ~: 5334)
103-
EstimateWithdrawERC4626GasConstant:testFuzz_withdrawERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4223, ~: 4197)
102+
EstimateUniswapV3ExactInputGasConstant:testFuzz_uniswapV3ExactInput_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint32,uint32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 5314, ~: 5298)
103+
EstimateWithdrawERC4626GasConstant:testFuzz_withdrawERC4626_gasConstant(uint256,uint256,(address,address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4243, ~: 4206)
104104
FeeTokenRegistryTest:test_addFeeToken_alreadyRegistered() (gas: 1898)
105105
FeeTokenRegistryTest:test_addFeeToken_happyPath() (gas: 37590)
106106
FeeTokenRegistryTest:test_addFeeToken_roundIdZero() (gas: 12004)
@@ -213,7 +213,7 @@ SweepCCTPTest:test_sweepCCTP_tokenNotSupported() (gas: 36792)
213213
SweepCCTPTest:test_sweepCCTP_tokenZero() (gas: 34886)
214214
SweepDepositERC4626Test:test_sweepDepositERC4626_balanceUnderThreshold() (gas: 38503)
215215
SweepDepositERC4626Test:test_sweepDepositERC4626_endBalanceOverThreshold() (gas: 35287)
216-
SweepDepositERC4626Test:test_sweepDepositERC4626_happyPath() (gas: 398837)
216+
SweepDepositERC4626Test:test_sweepDepositERC4626_happyPath() (gas: 398547)
217217
SweepDepositERC4626Test:test_sweepDepositERC4626_maxDepositReached() (gas: 149430)
218218
SweepDepositERC4626Test:test_sweepDepositERC4626_maxDepositTooLow() (gas: 36753)
219219
SweepDepositERC4626Test:test_sweepDepositERC4626_minTotalSharesZero() (gas: 35304)
@@ -253,7 +253,7 @@ SweepUniswapV3Test:test_sweepUniswapV3_tokenToEth() (gas: 3042)
253253
SweepUniswapV3Test:test_sweepUniswapV3_tokenToToken() (gas: 3086)
254254
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_balanceUnderThreshold() (gas: 56923)
255255
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_endBalanceOverThreshold() (gas: 34904)
256-
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_happyPath() (gas: 320595)
256+
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_happyPath() (gas: 320160)
257257
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_maxWithdrawReached() (gas: 100002)
258258
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_maxWithdrawTooLow() (gas: 38358)
259259
SweepWithdrawERC4626Test:test_sweepWithdrawERC4626_recipientZero() (gas: 34875)
@@ -312,7 +312,7 @@ UniswapV3ExactInputTest:test_uniswapV3ExactInput_recipientZero() (gas: 38513)
312312
UniswapV3ExactInputTest:test_uniswapV3ExactInput_sameToken() (gas: 38484)
313313
UniswapV3ExactInputTest:test_uniswapV3ExactInput_tokenToEth() (gas: 3042)
314314
UniswapV3ExactInputTest:test_uniswapV3ExactInput_tokenToToken() (gas: 3064)
315-
WithdrawERC4626Test:test_withdrawERC4626_happyPath() (gas: 267475)
315+
WithdrawERC4626Test:test_withdrawERC4626_happyPath() (gas: 267185)
316316
WithdrawERC4626Test:test_withdrawERC4626_maxWithdrawReached() (gas: 96775)
317317
WithdrawERC4626Test:test_withdrawERC4626_maxWithdrawTooLow() (gas: 37566)
318318
WithdrawERC4626Test:test_withdrawERC4626_recipientZero() (gas: 36481)

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ Thank you for your Pull Request! Please provide the details below to help with c
55
## Motivation
66

77
<!--
8-
Add your Linear issue ID using the format "ENG-123". This can automatically update
9-
the issue status using Linear's magic words. Examples of magic words:
10-
- Closing: closes, fixes, resolves, completes
11-
- Non-closing: ref, references, related to, contributes to
8+
Add your GitHub issue ID using the format "#123". This can automatically update
9+
the issue status using GitHub's closing keywords. Examples of closing keywords:
10+
- Closing: closes, fixes, resolves
11+
- Non-closing: ref, references, related to, see
1212
13-
For PRs without a Linear issue, briefly explain why you're making this change.
14-
Keep it concise - if the explanation becomes lengthy, consider creating a Linear ticket.
13+
For PRs without a GitHub issue, briefly explain why you're making this change.
14+
Keep it concise - if the explanation becomes lengthy, consider creating a GitHub issue.
1515
-->
1616

17-
[Linear Issue ID (if applicable)](https://linear.app/otim/team/ENG/all)
17+
[GitHub Issue (if applicable)](https://github.com/otimlabs/otim-protocol/issues)
1818

1919
## Solution
2020

.github/workflows/release.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: Create Release
2+
3+
on:
4+
workflow_dispatch:
5+
schedule:
6+
- cron: '0 0 * * 1' # Mondays at midnight UTC
7+
8+
jobs:
9+
release:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
contents: write
13+
steps:
14+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
15+
with:
16+
fetch-depth: 0
17+
18+
- uses: go-semantic-release/action@2e9dc4247a6004f8377781bef4cb9dad273a741f # v1.24.1
19+
with:
20+
github-token: ${{ secrets.GITHUB_TOKEN }}
21+
force-bump-patch-version: true # ensure patch version updates trigger releases

test/infrastructure/CrossRatePriceFeed.t.sol

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ contract CrossRatePriceFeedTest is Test {
3333
crossRatePriceFeed = new CrossRatePriceFeed(USDC_USD_FEED, ETH_USD_FEED, USDC_USD_HEARTBEAT, ETH_USD_HEARTBEAT);
3434
}
3535

36+
/// @notice Helper function to warp time so the price feeds are fresh
37+
function _warpToFreshPrice() internal {
38+
(,,, uint256 numeratorUpdatedAt,) = usdcUsdFeed.latestRoundData();
39+
(,,, uint256 denominatorUpdatedAt,) = ethUsdFeed.latestRoundData();
40+
41+
// Warp to the later of the two update times to ensure both are fresh
42+
uint256 latestUpdate = numeratorUpdatedAt > denominatorUpdatedAt ? numeratorUpdatedAt : denominatorUpdatedAt;
43+
vm.warp(latestUpdate);
44+
}
45+
3646
/// @notice test constructor reverts with zero numerator feed
3747
function test_constructor_numeratorZeroAddress() public {
3848
vm.expectRevert();
@@ -111,14 +121,16 @@ contract CrossRatePriceFeedTest is Test {
111121
}
112122

113123
/// @notice test latestRoundData returns roundId == 1
114-
function test_latestRoundData_roundIdOne() public view {
124+
function test_latestRoundData_roundIdOne() public {
125+
_warpToFreshPrice();
115126
(uint80 roundId,,,,) = crossRatePriceFeed.latestRoundData();
116127

117128
assertEq(roundId, 1);
118129
}
119130

120131
/// @notice test latestRoundData uses earlier updated at timestamp
121-
function test_latestRoundData_usesEarlierUpdatedAt() public view {
132+
function test_latestRoundData_usesEarlierUpdatedAt() public {
133+
_warpToFreshPrice();
122134
(,,, uint256 numeratorUpdatedAt,) = usdcUsdFeed.latestRoundData();
123135
(,,, uint256 denominatorUpdatedAt,) = ethUsdFeed.latestRoundData();
124136
(,,, uint256 crossUpdatedAt,) = crossRatePriceFeed.latestRoundData();
@@ -130,14 +142,16 @@ contract CrossRatePriceFeedTest is Test {
130142
}
131143

132144
/// @notice test latestRoundData returns startedAt == 0
133-
function test_latestRoundData_startedAtZero() public view {
145+
function test_latestRoundData_startedAtZero() public {
146+
_warpToFreshPrice();
134147
(,, uint256 startedAt,,) = crossRatePriceFeed.latestRoundData();
135148

136149
assertEq(startedAt, 0);
137150
}
138151

139152
/// @notice test latestRoundData returns answeredInRound == 0
140-
function test_latestRoundData_answeredInRoundZero() public view {
153+
function test_latestRoundData_answeredInRoundZero() public {
154+
_warpToFreshPrice();
141155
(,,,, uint80 answeredInRound) = crossRatePriceFeed.latestRoundData();
142156

143157
assertEq(answeredInRound, 0);
@@ -218,12 +232,14 @@ contract CrossRatePriceFeedTest is Test {
218232
crossRatePriceFeed =
219233
new CrossRatePriceFeed(address(overflowFeed), ETH_USD_FEED, USDC_USD_HEARTBEAT, ETH_USD_HEARTBEAT);
220234

235+
_warpToFreshPrice();
221236
vm.expectRevert(stdError.arithmeticError);
222237
crossRatePriceFeed.latestRoundData();
223238
}
224239

225240
/// @notice test latestRoundData returns correct answer with values from Sepolia price feeds
226-
function test_latestRoundData_realValuesFork() public view {
241+
function test_latestRoundData_realValuesFork() public {
242+
_warpToFreshPrice();
227243
(, int256 numeratorAnswer,,,) = usdcUsdFeed.latestRoundData();
228244
(, int256 denominatorAnswer,,,) = ethUsdFeed.latestRoundData();
229245
(, int256 answer,,,) = crossRatePriceFeed.latestRoundData();

0 commit comments

Comments
 (0)