Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix arbitrum L1 to L2 crosschain call detection #3578

Merged
merged 3 commits into from Jul 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Expand Up @@ -17,6 +17,10 @@

ERC-721 integrators that interpret contract state from events should make sure that they implement the clearing of approval that is implicit in every transfer according to the EIP. Previous versions of OpenZeppellin Contracts emitted an explicit `Approval` event even though it was not required by the specification, and this is no longer the case.

## 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

* `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