Skip to content

Commit

Permalink
Merge pull request #425 from superform-xyz/SUP-5103
Browse files Browse the repository at this point in the history
fix: LIFI validator [SUP-5007, SUP-5103]
  • Loading branch information
sujithsomraaj authored Jan 16, 2024
2 parents cb87167 + d5fcf36 commit dbb3385
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 7 deletions.
8 changes: 7 additions & 1 deletion src/crosschain-liquidity/lifi/LiFiValidator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { GenericSwapFacet } from "src/vendor/lifi/GenericSwapFacet.sol";
/// @dev Asserts LiFi input txData is valid
/// @author Zeropoint Labs
contract LiFiValidator is BridgeValidator, LiFiTxDataExtractor {

//////////////////////////////////////////////////////////////
// CONSTRUCTOR //
//////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -98,6 +97,12 @@ contract LiFiValidator is BridgeValidator, LiFiTxDataExtractor {
bytes4 selector = _extractSelector(txData_);
if (selector == GenericSwapFacet.swapTokensGeneric.selector) {
(token_, amount_,,,) = extractGenericSwapParameters(txData_);

/// @dev remap of address 0 to NATIVE because of how LiFi produces txData
if (token_ == address(0)) {
token_ = NATIVE;
}

return (token_, amount_);
} else {
revert Error.INVALID_ACTION();
Expand Down Expand Up @@ -256,6 +261,7 @@ contract LiFiValidator is BridgeValidator, LiFiTxDataExtractor {
if (sendingAssetId == address(0)) {
sendingAssetId = NATIVE;
}

/// @dev 3. token validations
if (args_.liqDataToken != sendingAssetId) revert Error.INVALID_TXDATA_TOKEN();

Expand Down
15 changes: 10 additions & 5 deletions src/vendor/lifi/LiFiTxDataExtractor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,10 @@ contract LiFiTxDataExtractor {
(bridgeData, stargateData) =
abi.decode(_slice(callData, 4, callData.length - 4), (ILiFi.BridgeData, StargateFacet.StargateData));

receiver = abi.decode(stargateData.callTo, (address));
bytes memory to = stargateData.callTo;
assembly {
receiver := mload(add(to, 20))
}

return (bridgeData, receiver);
}
Expand All @@ -132,8 +135,10 @@ contract LiFiTxDataExtractor {
_slice(callData, 4, callData.length - 4),
(ILiFi.BridgeData, LibSwap.SwapData[], StargateFacet.StargateData)
);
receiver = abi.decode(stargateData.callTo, (address));

bytes memory to = stargateData.callTo;
assembly {
receiver := mload(add(to, 20))
}
return (bridgeData, receiver);
}

Expand All @@ -143,7 +148,7 @@ contract LiFiTxDataExtractor {
(bridgeData, celerIMData) =
abi.decode(_slice(callData, 4, callData.length - 4), (ILiFi.BridgeData, CelerIM.CelerIMData));

receiver = abi.decode(celerIMData.callTo, (address));
receiver = bridgeData.receiver;

return (bridgeData, receiver);
}
Expand All @@ -153,7 +158,7 @@ contract LiFiTxDataExtractor {
(bridgeData,, celerIMData) = abi.decode(
_slice(callData, 4, callData.length - 4), (ILiFi.BridgeData, LibSwap.SwapData[], CelerIM.CelerIMData)
);
receiver = abi.decode(celerIMData.callTo, (address));
receiver = bridgeData.receiver;

return (bridgeData, receiver);
}
Expand Down
Loading

0 comments on commit dbb3385

Please sign in to comment.