// SPDX-License-Identifier: MIT // Filosofía Código Contracts based on Balancer pragma solidity ^0.8.0; import "../ERC20.sol"; struct JoinPoolRequest { address[] assets; uint256[] maxAmountsIn; bytes userData; bool fromInternalBalance; } enum SwapKind { GIVEN_IN, GIVEN_OUT } struct SingleSwap { bytes32 poolId; SwapKind kind; address assetIn; address assetOut; uint256 amount; bytes userData; } struct FundManagement { address sender; bool fromInternalBalance; address payable recipient; bool toInternalBalance; } interface IVault { function joinPool( bytes32 poolId, address sender, address recipient, JoinPoolRequest memory request ) external payable; function swap( SingleSwap memory singleSwap, FundManagement memory funds, uint256 limit, uint256 deadline ) external payable; } interface IWeightedPool2TokensFactory { function create( string memory name, string memory symbol, IERC20[] memory tokens, uint256[] memory weights, uint256 swapFeePercentage, bool oracleEnabled, address owner ) external returns (address); } interface IWeightedPool { function getPoolId() external view returns (bytes32); function balanceOf(address account) external view returns (uint256); }