diff --git a/src/aztec/DataProvider.sol b/src/aztec/DataProvider.sol index 8e0c079ff..2e96e6012 100644 --- a/src/aztec/DataProvider.sol +++ b/src/aztec/DataProvider.sol @@ -225,8 +225,9 @@ contract DataProvider is Ownable { uint256 criteria = abi.decode(returnData, (uint256)); uint256 ethSub = SUBSIDY.getAccumulatedSubsidyAmount(vars.bridgeAddress, criteria); + uint256 gasCovered = block.basefee == 0 ? 0 : ethSub / block.basefee; - return (criteria, ethSub, ethSub / block.basefee); + return (criteria, ethSub, gasCovered); } function _aztecAsset(uint256 _assetId) internal view returns (AztecTypes.AztecAsset memory) { diff --git a/src/test/aztec/dataprovider/DataProvider.t.sol b/src/test/aztec/dataprovider/DataProvider.t.sol index 07ddc8464..6d3407dea 100644 --- a/src/test/aztec/dataprovider/DataProvider.t.sol +++ b/src/test/aztec/dataprovider/DataProvider.t.sol @@ -238,4 +238,20 @@ contract DataProviderTest is BridgeTestBase { assertGe(subsidy, gasUnits * block.basefee, "Invalid gas units accrued"); assertEq(gasUnits, subsidy / block.basefee, "Invalid gas units accrued"); } + + function testZeroBaseFee() public { + AztecTypes.AztecAsset memory eth = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory virtualAsset = + AztecTypes.AztecAsset({id: 0, erc20Address: address(0), assetType: AztecTypes.AztecAssetType.VIRTUAL}); + + uint256 bridgeCallData = ROLLUP_ENCODER.encodeBridgeCallData(7, virtualAsset, eth, virtualAsset, eth, 0); + + vm.fee(0); + + (uint256 criteria, uint256 subsidy, uint256 gasUnits) = provider.getAccumulatedSubsidyAmount(bridgeCallData); + assertEq(criteria, 0, "Wrong criteria"); + assertEq(subsidy, 0, "No subsidy accrued"); + assertEq(subsidy, 0, "Invalid gas units accrued"); + assertEq(gasUnits, 0, "Invalid gas units accrued"); + } }