Feature: oft adapter step2 - bridge limits and fees in OFTAdapter#10
Feature: oft adapter step2 - bridge limits and fees in OFTAdapter#10blueogin wants to merge 39 commits intofeat/oft-adapter-step1from
Conversation
…ncluding removal of outdated scripts and addition of remapping file
There was a problem hiding this comment.
Hey - I've found 1 issue, and left some high level feedback:
- In
GoodDollarOFTAdapter._credittherequestIdis derived fromblock.timestamp,_to,_srcEid, and_amount, which makes it impossible to deterministically pre-approve off-chain (you can’t know the timestamp ahead of time); consider either passing a requestId from the message payload or changing the approval model so it’s usable in practice. - The
BridgeFeesstruct includesminFeeandmaxFee, but_takeFeeand_creditcurrently only usefeeand ignore the min/max fields; either enforce these bounds in the fee calculation or remove the unused fields to avoid confusion. - The
approvedRequestsmapping inGoodDollarOFTAdapteris write-only and never cleared, so approved entries will accumulate indefinitely; consider adding a mechanism to delete or expire approvals after use to avoid unbounded storage growth.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- In `GoodDollarOFTAdapter._credit` the `requestId` is derived from `block.timestamp`, `_to`, `_srcEid`, and `_amount`, which makes it impossible to deterministically pre-approve off-chain (you can’t know the timestamp ahead of time); consider either passing a requestId from the message payload or changing the approval model so it’s usable in practice.
- The `BridgeFees` struct includes `minFee` and `maxFee`, but `_takeFee` and `_credit` currently only use `fee` and ignore the min/max fields; either enforce these bounds in the fee calculation or remove the unused fields to avoid confusion.
- The `approvedRequests` mapping in `GoodDollarOFTAdapter` is write-only and never cleared, so approved entries will accumulate indefinitely; consider adding a mechanism to delete or expire approvals after use to avoid unbounded storage growth.
## Individual Comments
### Comment 1
<location> `packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol:183-190` </location>
<code_context>
+ * @param amount The amount to calculate fee from
+ * @return fee The calculated fee amount
+ */
+ function _takeFee(uint256 amount) internal view returns (uint256 fee) {
+ fee = (amount * bridgeFees.fee) / 10000;
+ }
+
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Bridge fee calculation ignores `minFee`/`maxFee` fields of `BridgeFees`.
`BridgeFees` exposes `minFee` and `maxFee`, but `_takeFee` only uses the BPS value and never enforces these bounds. This can mislead integrators into assuming on-chain caps that don’t exist.
If these fields should be enforced, consider clamping the computed fee, e.g.:
```solidity
uint256 raw = (amount * bridgeFees.fee) / 10000;
if (bridgeFees.minFee > 0 && raw < bridgeFees.minFee) fee = bridgeFees.minFee;
else if (bridgeFees.maxFee > 0 && raw > bridgeFees.maxFee) fee = bridgeFees.maxFee;
else fee = raw;
```
If they’re informational only, consider renaming or removing them to avoid implying enforcement in this function.
```suggestion
/**
* @notice Calculates the fee amount from the given amount
* @param amount The amount to calculate fee from
* @return fee The calculated fee amount
*/
function _takeFee(uint256 amount) internal view returns (uint256 fee) {
uint256 raw = (amount * bridgeFees.fee) / 10000;
uint256 minFee = bridgeFees.minFee;
uint256 maxFee = bridgeFees.maxFee;
if (minFee > 0 && raw < minFee) {
fee = minFee;
} else if (maxFee > 0 && raw > maxFee) {
fee = maxFee;
} else {
fee = raw;
}
}
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
… by integrating IMessagePassingBridge structures, enhancing modularity and clarity
Feature: oft adapter step2 - bridge limits and fees in OFTAdapter
🚨 Report Summary
For more details view the full report in OpenZeppelin Code Inspector |
…er for enhanced bridge fee management
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
sirpy
left a comment
There was a problem hiding this comment.
There are no tests. If you would have added tests then you would see _enforcelimits isnt used
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
…lidating parameters and ensuring checks on both sending and receiving sides
…GoodDollarOFTAdapter contract
…llarOFTAdapter contract for improved fee management
…ed bridge limits management for improved cross-chain transfer functionality
…FTAdapter for improved modularity and clarity in bridge limits management
… in GoodDollarOFTAdapter for improved clarity and maintainability of bridge limits and account tracking
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
…by consolidating checks for approved requests on both sending and receiving sides
…r to streamline logic for sending and receiving operations
…nhance request approval mechanism with bytes32 identifiers for improved cross-chain transfer management
…ontracts package.json for compatibility
…by introducing a structured Request type and improving limit enforcement checks for both sending and receiving operations
…rOFTAdapter, adding predictNextGuid function for improved GUID prediction in cross-chain messaging
…guration in GoodDollarOFTAdapter fork tests
…include receiver address for improved GUID prediction in cross-chain messaging
…n and improving bridge limit checks in tests for better cross-chain messaging functionality
… by replacing structured Request type with a boolean mapping for improved clarity and efficiency
…est handling in GoodDollarOFTAdapter, enhancing error management and limit enforcement for cross-chain transfers
…ating validation logic for improved clarity and efficiency in bridging operations
…for clarity on daily limit checks
…llarOFTAdapter for enhanced fee management
…s to align with updated initialization for improved fee management
…improved error handling in cross-chain transfers
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
| uint256 _amountLD, | ||
| uint32 /* _srcEid */ | ||
| ) internal virtual override returns (uint256 amountReceivedLD) { | ||
| if (_to == address(0x0)) _to = address(0xdead); // _mint(...) does not support address(0x0) |
There was a problem hiding this comment.
do not support sending to address 0 to begin with
There was a problem hiding this comment.
where do you prevent address 0?
There was a problem hiding this comment.
address 0 check is already available in GoodDollar(SuperGoodDollar)
you can check here:
https://github.com/GoodDollar/GoodProtocol/blob/b88e1566a1b6bb2c091e606a0608bc60ef3c443c/contracts/token/superfluid/SuperToken.sol#L276
There was a problem hiding this comment.
we need to prevent sending to address 0
There was a problem hiding this comment.
I will add an address-zero check in the _send function of GoodDollarOFTAdapter to prevent bridging to the zero address from the sender side.
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
…er for improved optimistic period handling in cross-chain transfers
… for bridge limits and streamline limit checks for improved clarity and efficiency in bridging operations
…llarOFTAdapter for clarity, removing redundant comments and enhancing descriptions of key functionalities
…unction in GoodDollarOFTAdapter for improved code clarity
…r to remove owner restriction, enhancing accessibility for request approvals
packages/bridge-contracts/contracts/oft/GoodDollarMinterBurner.sol
Outdated
Show resolved
Hide resolved
packages/bridge-contracts/contracts/oft/GoodDollarOFTAdapter.sol
Outdated
Show resolved
Hide resolved
…g redundant comment for improved clarity
…r to allow owner approval during optimistic window, enhancing flexibility in request handling
…o zero address, enhancing error handling in messaging operations
…eroEndpointMock, MockGoodDollar, and NameServiceMock to enhance testing capabilities
…FTAdapter to ensure functionality and reliability in various scenarios
…ork to validate deployment and configuration functionalities
…rning GoodDollar tokens, enabling cross-chain transfers via LayerZero
|
Hi @sirpy |
Description
This PR inclues smart contracts which implementes bridge limits and fees in GoodDollarOFTAdapter.sol
About #7
How Has This Been Tested?
Please describe the tests that you ran to verify your changes.
Checklist: