I tried to use Balancer Vault Swap in my smart contract.
function swap() external payable returns (uint256 wstETHAmount) {
uint256 amount = msg.value;
IBalancerRouter.SingleSwap memory singleSwap = IBalancerRouter.SingleSwap({
poolId: 0x36bf227d6bac96e2ab1ebb5492ecec69c691943f000200000000000000000316,
kind: IBalancerRouter.SwapKind.GIVEN_IN,
assetIn: IAsset(address(0)),
assetOut: IAsset(wstETH),
amount: amount,
userData: bytes("")
});
IBalancerRouter.FundManagement memory funds = IBalancerRouter.FundManagement({
sender: msg.sender,
fromInternalBalance: false,
recipient: payable(msg.sender),
toInternalBalance: false
});
uint256 amountOut = amount * _getPrice() / 1e18;
uint256 limit = 999 * amountOut / 1000;
uint256 deadline = block.timestamp + 5 minutes;
//console.log(address(this).balance);
wstETHAmount = IBalancerRouter(BalancerVault).swap(singleSwap, funds, limit, deadline);
}
And i wrote foundry tests for it, but in my case it was failed.
Can anyone help me with this problem?