Skip to content

Commit

Permalink
stas issue fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
kelemeno committed Oct 1, 2024
1 parent f6e3538 commit ffcc50f
Show file tree
Hide file tree
Showing 16 changed files with 101 additions and 80 deletions.
5 changes: 5 additions & 0 deletions l1-contracts/contracts/bridge/BridgedStandardERC20.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {IBridgedStandardToken} from "./interfaces/IBridgedStandardToken.sol";
import {Unauthorized, NonSequentialVersion, ZeroAddress} from "../common/L1ContractErrors.sol";
import {L2_NATIVE_TOKEN_VAULT_ADDR} from "../common/L2ContractAddresses.sol";
import {DataEncoding} from "../common/libraries/DataEncoding.sol";
import {INativeTokenVault} from "../bridge/ntv/INativeTokenVault.sol";

/// @author Matter Labs
/// @custom:security-contact [email protected]
Expand Down Expand Up @@ -53,6 +54,10 @@ contract BridgedStandardERC20 is ERC20PermitUpgradeable, IBridgedStandardToken,
if (ntv == address(0)) {
ntv = L2_NATIVE_TOKEN_VAULT_ADDR;
nativeTokenVault = L2_NATIVE_TOKEN_VAULT_ADDR;
assetId = DataEncoding.encodeNTVAssetId(
INativeTokenVault(L2_NATIVE_TOKEN_VAULT_ADDR).L1_CHAIN_ID(),
originToken
);
}
if (msg.sender != ntv) {
revert Unauthorized(msg.sender);
Expand Down
2 changes: 1 addition & 1 deletion l1-contracts/contracts/bridge/L1Nullifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -702,7 +702,7 @@ contract L1Nullifier is IL1Nullifier, ReentrancyGuard, Ownable2StepUpgradeable,
) external override onlyLegacyBridge {
bytes memory assetData = abi.encode(_amount, _depositSender);
/// the legacy bridge can only be used with L1 native tokens.
bytes32 assetId = INativeTokenVault(address(l1NativeTokenVault)).calculateAssetId(block.chainid, _l1Asset);
bytes32 assetId = DataEncoding.encodeNTVAssetId(block.chainid, _l1Asset);

_verifyAndClearFailedTransfer({
_checkedInLegacyBridge: true,
Expand Down
9 changes: 7 additions & 2 deletions l1-contracts/contracts/bridge/L2WrappedBaseToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ contract L2WrappedBaseToken is ERC20PermitUpgradeable, IL2WrappedBaseToken, IBri
/// @dev Address of the native token vault.
address public override nativeTokenVault;

/// @dev The assetId of the token.
/// @dev The assetId of the token. The wrapped token does not have its own assetId.
bytes32 public override assetId;

modifier onlyBridge() {
Expand Down Expand Up @@ -66,7 +66,8 @@ contract L2WrappedBaseToken is ERC20PermitUpgradeable, IL2WrappedBaseToken, IBri
string calldata name_,
string calldata symbol_,
address _l2Bridge,
address _l1Address
address _l1Address,
bytes32 _baseTokenAssetId
) external reinitializer(2) {
if (_l2Bridge == address(0)) {
revert ZeroAddress();
Expand All @@ -75,9 +76,13 @@ contract L2WrappedBaseToken is ERC20PermitUpgradeable, IL2WrappedBaseToken, IBri
if (_l1Address == address(0)) {
revert ZeroAddress();
}
if (_baseTokenAssetId == bytes32(0)) {
revert ZeroAddress();
}
l2Bridge = _l2Bridge;
l1Address = _l1Address;
nativeTokenVault = L2_NATIVE_TOKEN_VAULT_ADDR;
assetId = _baseTokenAssetId;

// Set decoded values for name and symbol.
__ERC20_init_unchained(name_, symbol_);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ contract L1AssetRouter is AssetRouterBase, IL1AssetRouter, ReentrancyGuard {
/// @param _token The native token address which should be registered with native token vault.
/// @return assetId The asset ID of the token provided.
function _ensureTokenRegisteredWithNTV(address _token) internal override returns (bytes32 assetId) {
assetId = nativeTokenVault.calculateAssetId(block.chainid, _token);
assetId = DataEncoding.encodeNTVAssetId(block.chainid, _token);
if (nativeTokenVault.tokenAddress(assetId) == address(0)) {
nativeTokenVault.registerToken(_token);
}
Expand Down
4 changes: 2 additions & 2 deletions l1-contracts/contracts/bridge/asset-router/L2AssetRouter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,12 @@ contract L2AssetRouter is AssetRouterBase, IL2AssetRouter {
/// @param _assetId The asset id of the withdrawn asset
/// @param _assetData The data that is passed to the asset handler contract
function withdraw(bytes32 _assetId, bytes memory _assetData) public override returns (bytes32) {
_withdrawSender(_assetId, _assetData, msg.sender, true);
return _withdrawSender(_assetId, _assetData, msg.sender, true);
}

function withdrawToken(address _l2NativeToken, bytes memory _assetData) public returns (bytes32) {
bytes32 assetId = _ensureTokenRegisteredWithNTV(_l2NativeToken);
_withdrawSender(assetId, _assetData, msg.sender, true);
return _withdrawSender(assetId, _assetData, msg.sender, true);
}

/// @notice Initiates a withdrawal by burning funds on the contract and sending the message to L1
Expand Down
4 changes: 4 additions & 0 deletions l1-contracts/contracts/bridge/ntv/INativeTokenVault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ interface INativeTokenVault {

/// @notice The AssetRouter contract
function ASSET_ROUTER() external view returns (IAssetRouterBase);

/// @notice The chain ID of the L1 chain
function L1_CHAIN_ID() external view returns (uint256);

/// @notice Returns the chain ID of the origin chain for a given asset ID
function originChainId(bytes32 assetId) external view returns (uint256);

Expand Down
14 changes: 11 additions & 3 deletions l1-contracts/test/foundry/l1/integration/AssetRouterTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pragma solidity 0.8.24;

import {Test} from "forge-std/Test.sol";
import {Vm} from "forge-std/Vm.sol";
import {console2 as console} from "forge-std/console2.sol";

import {L2TransactionRequestDirect, L2TransactionRequestTwoBridgesOuter} from "contracts/bridgehub/IBridgehub.sol";
import {TestnetERC20Token} from "contracts/dev-contracts/TestnetERC20Token.sol";
Expand All @@ -24,6 +25,7 @@ import {IZKChain} from "contracts/state-transition/chain-interfaces/IZKChain.sol
import {IChainTypeManager} from "contracts/state-transition/IChainTypeManager.sol";
import {IL1AssetRouter} from "contracts/bridge/asset-router/IL1AssetRouter.sol";
import {IL1NativeTokenVault} from "contracts/bridge/ntv/IL1NativeTokenVault.sol";
import {INativeTokenVault} from "contracts/bridge/ntv/INativeTokenVault.sol";
import {IL1Nullifier, FinalizeL1DepositParams} from "contracts/bridge/interfaces/IL1Nullifier.sol";
import {IL1AssetRouter} from "contracts/bridge/asset-router/IL1AssetRouter.sol";
import {IAssetRouterBase, LEGACY_ENCODING_VERSION, NEW_ENCODING_VERSION} from "contracts/bridge/asset-router/IAssetRouterBase.sol";
Expand Down Expand Up @@ -79,12 +81,12 @@ contract AssetRouterTest is L1ContractDeployer, ZKChainDeployer, TokenDeployer,

function depositToL1(address _tokenAddress) public {
vm.mockCall(
address(bridgeHub),
address(bridgehub),
abi.encodeWithSelector(IBridgehub.proveL2MessageInclusion.selector),
abi.encode(true)
);
uint256 chainId = eraZKChainId;
l2TokenAssetId = DataEncoding.encodeNTVAssetId(chainId, address(1));
l2TokenAssetId = DataEncoding.encodeNTVAssetId(chainId, _tokenAddress);
bytes memory transferData = DataEncoding.encodeBridgeMintData({
_originalCaller: ETH_TOKEN_ADDRESS,
_l2Receiver: address(this),
Expand Down Expand Up @@ -152,7 +154,13 @@ contract AssetRouterTest is L1ContractDeployer, ZKChainDeployer, TokenDeployer,
function test_BridgeTokenBurn() public {
depositToL1(ETH_TOKEN_ADDRESS);
BridgedStandardERC20 bridgedToken = BridgedStandardERC20(l1NativeTokenVault.tokenAddress(l2TokenAssetId));
// setting nativeTokenVault to zero address.
vm.store(address(bridgedToken), bytes32(uint256(207)), bytes32(0));
vm.mockCall(
address(L2_NATIVE_TOKEN_VAULT_ADDR),
abi.encodeWithSelector(INativeTokenVault.L1_CHAIN_ID.selector),
abi.encode(block.chainid)
);
vm.broadcast(L2_NATIVE_TOKEN_VAULT_ADDR); // kl todo call ntv, or even assetRouter/bridgehub
bridgedToken.bridgeBurn(address(this), 100);
}
Expand All @@ -164,7 +172,7 @@ contract AssetRouterTest is L1ContractDeployer, ZKChainDeployer, TokenDeployer,
abi.encode(l2TokenAssetId, abi.encode(uint256(100), address(this)))
);
IERC20(tokenL1Address).approve(address(l1NativeTokenVault), 100);
bridgeHub.requestL2TransactionTwoBridges{value: 250000000000100}(
bridgehub.requestL2TransactionTwoBridges{value: 250000000000100}(
L2TransactionRequestTwoBridgesOuter({
chainId: eraZKChainId,
mintValue: 250000000000100,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionTwoBridges{value: mintValue}(requestTx);
bytes32 resultantHash = bridgehub.requestL2TransactionTwoBridges{value: mintValue}(requestTx);
Vm.Log[] memory logs = vm.getRecordedLogs();
NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);

Expand Down Expand Up @@ -320,7 +320,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionTwoBridges{value: l2Value}(requestTx);
bytes32 resultantHash = bridgehub.requestL2TransactionTwoBridges{value: l2Value}(requestTx);
Vm.Log[] memory logs = vm.getRecordedLogs();
NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);

Expand Down Expand Up @@ -375,7 +375,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionTwoBridges(requestTx);
bytes32 resultantHash = bridgehub.requestL2TransactionTwoBridges(requestTx);
Vm.Log[] memory logs = vm.getRecordedLogs();
NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);

Expand Down Expand Up @@ -420,7 +420,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionDirect{value: mintValue}(txRequest);
bytes32 resultantHash = bridgehub.requestL2TransactionDirect{value: mintValue}(txRequest);
Vm.Log[] memory logs = vm.getRecordedLogs();

NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);
Expand Down Expand Up @@ -464,7 +464,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionDirect(txRequest);
bytes32 resultantHash = bridgehub.requestL2TransactionDirect(txRequest);
Vm.Log[] memory logs = vm.getRecordedLogs();

NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);
Expand Down Expand Up @@ -509,7 +509,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.mockCall(
bridgeHubProxyAddress,
bridgehubProxyAddress,
// solhint-disable-next-line func-named-parameters
abi.encodeWithSelector(
IBridgehub.proveL2MessageInclusion.selector,
Expand Down Expand Up @@ -565,7 +565,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.mockCall(
bridgeHubProxyAddress,
bridgehubProxyAddress,
// solhint-disable-next-line func-named-parameters
abi.encodeWithSelector(
IBridgehub.proveL2MessageInclusion.selector,
Expand Down Expand Up @@ -643,7 +643,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
}

function getAddressesToExclude() public returns (address[] memory) {
addressesToExclude.push(bridgeHubProxyAddress);
addressesToExclude.push(bridgehubProxyAddress);
addressesToExclude.push(address(sharedBridge));

for (uint256 i = 0; i < users.length; i++) {
Expand Down
16 changes: 8 additions & 8 deletions l1-contracts/test/foundry/l1/integration/BridgehubTests.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionTwoBridges{value: mintValue}(requestTx);
bytes32 resultantHash = bridgehub.requestL2TransactionTwoBridges{value: mintValue}(requestTx);
Vm.Log[] memory logs = vm.getRecordedLogs();
NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);

Expand Down Expand Up @@ -320,7 +320,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionTwoBridges{value: l2Value}(requestTx);
bytes32 resultantHash = bridgehub.requestL2TransactionTwoBridges{value: l2Value}(requestTx);
Vm.Log[] memory logs = vm.getRecordedLogs();
NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);

Expand Down Expand Up @@ -375,7 +375,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionTwoBridges(requestTx);
bytes32 resultantHash = bridgehub.requestL2TransactionTwoBridges(requestTx);
Vm.Log[] memory logs = vm.getRecordedLogs();
NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);

Expand Down Expand Up @@ -420,7 +420,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionDirect{value: mintValue}(txRequest);
bytes32 resultantHash = bridgehub.requestL2TransactionDirect{value: mintValue}(txRequest);
Vm.Log[] memory logs = vm.getRecordedLogs();

NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);
Expand Down Expand Up @@ -464,7 +464,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.recordLogs();
bytes32 resultantHash = bridgeHub.requestL2TransactionDirect(txRequest);
bytes32 resultantHash = bridgehub.requestL2TransactionDirect(txRequest);
Vm.Log[] memory logs = vm.getRecordedLogs();

NewPriorityRequest memory request = _getNewPriorityQueueFromLogs(logs);
Expand Down Expand Up @@ -509,7 +509,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.mockCall(
bridgeHubProxyAddress,
bridgehubProxyAddress,
// solhint-disable-next-line func-named-parameters
abi.encodeWithSelector(
IBridgehub.proveL2MessageInclusion.selector,
Expand Down Expand Up @@ -565,7 +565,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
});

vm.mockCall(
bridgeHubProxyAddress,
bridgehubProxyAddress,
// solhint-disable-next-line func-named-parameters
abi.encodeWithSelector(
IBridgehub.proveL2MessageInclusion.selector,
Expand Down Expand Up @@ -643,7 +643,7 @@ contract BridgeHubInvariantTests is L1ContractDeployer, ZKChainDeployer, TokenDe
}

function getAddressesToExclude() public returns (address[] memory) {
addressesToExclude.push(bridgeHubProxyAddress);
addressesToExclude.push(bridgehubProxyAddress);
addressesToExclude.push(address(sharedBridge));

for (uint256 i = 0; i < users.length; i++) {
Expand Down
Loading

0 comments on commit ffcc50f

Please sign in to comment.