Skip to content

Commit

Permalink
Fix arbitrum L1 to L2 crosschain call detection (#3578)
Browse files Browse the repository at this point in the history
* Fix arbitrum L1 to L2 crosschain call detection

* fix BridgeArbitrumL2Mock

* update changelog

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
(cherry picked from commit 81336ae)
  • Loading branch information
Amxx authored and frangio committed Jul 26, 2022
1 parent 41c7b25 commit 4337192
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 10 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog

## 4.7.2

* `LibArbitrumL2`, `CrossChainEnabledArbitrumL2`: Fixed detection of cross-chain calls for EOAs. Previously, calls from EOAs would be classified as cross-chain calls. ([#3578](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3578))

## 4.7.1 (2022-07-19)

* `SignatureChecker`: Fix an issue that causes `isValidSignatureNow` to revert when the target contract returns ill-encoded data. ([#3552](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3552))
Expand Down
7 changes: 2 additions & 5 deletions contracts/crosschain/arbitrum/LibArbitrumL2.sol
Expand Up @@ -21,7 +21,7 @@ library LibArbitrumL2 {
address public constant ARBSYS = 0x0000000000000000000000000000000000000064;

function isCrossChain(address arbsys) internal view returns (bool) {
return ArbitrumL2_Bridge(arbsys).isTopLevelCall();
return ArbitrumL2_Bridge(arbsys).wasMyCallersAddressAliased();
}

/**
Expand All @@ -35,9 +35,6 @@ library LibArbitrumL2 {
function crossChainSender(address arbsys) internal view returns (address) {
if (!isCrossChain(arbsys)) revert NotCrossChainCall();

return
ArbitrumL2_Bridge(arbsys).wasMyCallersAddressAliased()
? ArbitrumL2_Bridge(arbsys).myCallersAddressWithoutAliasing()
: msg.sender;
return ArbitrumL2_Bridge(arbsys).myCallersAddressWithoutAliasing();
}
}
6 changes: 1 addition & 5 deletions contracts/mocks/crosschain/bridges.sol
Expand Up @@ -70,14 +70,10 @@ contract BridgeArbitrumL1Outbox {
}

contract BridgeArbitrumL2Mock is BaseRelayMock {
function isTopLevelCall() public view returns (bool) {
function wasMyCallersAddressAliased() public view returns (bool) {
return _currentSender != address(0);
}

function wasMyCallersAddressAliased() public pure returns (bool) {
return true;
}

function myCallersAddressWithoutAliasing() public view returns (address) {
return _currentSender;
}
Expand Down

0 comments on commit 4337192

Please sign in to comment.