[
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      }
    ],
    "name": "getPoolInfo",
    "outputs": [
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "decimals",
            "type": "uint8"
          },
          {
            "name": "balance",
            "type": "uint256"
          },
          {
            "name": "weight",
            "type": "uint256"
          },
          {
            "name": "liability",
            "type": "uint256"
          },
          {
            "name": "custody",
            "type": "uint256"
          }
        ],
        "name": "assets",
        "type": "tuple[]"
      },
      {
        "components": [
          {
            "name": "swapFeeWad",
            "type": "uint256"
          },
          {
            "name": "takerFeeWad",
            "type": "uint256"
          },
          {
            "name": "smartShieldEnabled",
            "type": "bool"
          },
          {
            "components": [
              {
                "name": "thresholdWeightDiffWad",
                "type": "uint256"
              },
              {
                "name": "minOracleWeightWad",
                "type": "uint256"
              }
            ],
            "name": "smartShieldParams",
            "type": "tuple"
          },
          {
            "name": "intentSwapFeeWad",
            "type": "uint256"
          },
          {
            "name": "intentTakerFeeWad",
            "type": "uint256"
          }
        ],
        "name": "params",
        "type": "tuple"
      },
      {
        "name": "totalSupply",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      }
    ],
    "name": "getPoolTotalValueUSD",
    "outputs": [
      {
        "name": "totalValueWad",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "tokenIn",
        "type": "address"
      },
      {
        "name": "tokenOut",
        "type": "address"
      },
      {
        "name": "notionalUsd",
        "type": "uint256"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      }
    ],
    "name": "getSlippageForNotional",
    "outputs": [
      {
        "name": "slippageUsd",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "tokenIn",
        "type": "address"
      },
      {
        "name": "tokenOut",
        "type": "address"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      }
    ],
    "name": "getSpotPrice",
    "outputs": [
      {
        "name": "spotPrice",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "tokenA",
        "type": "address"
      },
      {
        "name": "tokenB",
        "type": "address"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      }
    ],
    "name": "getTokenARateNormalized",
    "outputs": [
      {
        "name": "rate",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "amountsIn",
        "type": "uint256[]"
      }
    ],
    "name": "queryJoinProportional",
    "outputs": [
      {
        "name": "shareOut",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "tokenIn",
        "type": "address"
      },
      {
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      }
    ],
    "name": "queryJoinSingle",
    "outputs": [
      {
        "components": [
          {
            "name": "sharesOut",
            "type": "uint256"
          },
          {
            "name": "wbfApplied",
            "type": "uint256"
          }
        ],
        "name": "result",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "sharesIn",
        "type": "uint256"
      }
    ],
    "name": "queryProportionalExit",
    "outputs": [
      {
        "components": [
          {
            "name": "amountsOut",
            "type": "uint256[]"
          }
        ],
        "name": "result",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "user",
        "type": "address"
      }
    ],
    "name": "queryProportionalExitForUser",
    "outputs": [
      {
        "components": [
          {
            "name": "tokens",
            "type": "address[]"
          },
          {
            "name": "amountsOut",
            "type": "uint256[]"
          }
        ],
        "name": "result",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "tokenIn",
        "type": "address"
      },
      {
        "name": "tokenOut",
        "type": "address"
      },
      {
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      },
      {
        "name": "isIntentSwap",
        "type": "bool"
      }
    ],
    "name": "querySwapExactIn",
    "outputs": [
      {
        "components": [
          {
            "name": "amountCalculated",
            "type": "uint256"
          },
          {
            "components": [
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "swapFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "takerFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "wbfFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "slippageFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "wbrFee",
                "type": "tuple"
              }
            ],
            "name": "feeDetails",
            "type": "tuple"
          },
          {
            "name": "priceImpact",
            "type": "uint256"
          },
          {
            "name": "effectivePrice",
            "type": "uint256"
          }
        ],
        "name": "result",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "pool",
        "type": "address"
      },
      {
        "name": "tokenIn",
        "type": "address"
      },
      {
        "name": "tokenOut",
        "type": "address"
      },
      {
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "components": [
          {
            "name": "token",
            "type": "address"
          },
          {
            "name": "priceWad",
            "type": "uint256"
          }
        ],
        "name": "tokenPrices",
        "type": "tuple[]"
      },
      {
        "name": "isIntentSwap",
        "type": "bool"
      }
    ],
    "name": "querySwapExactOut",
    "outputs": [
      {
        "components": [
          {
            "name": "amountCalculated",
            "type": "uint256"
          },
          {
            "components": [
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "swapFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "takerFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "wbfFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "slippageFee",
                "type": "tuple"
              },
              {
                "components": [
                  {
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "name": "wbrFee",
                "type": "tuple"
              }
            ],
            "name": "feeDetails",
            "type": "tuple"
          },
          {
            "name": "priceImpact",
            "type": "uint256"
          },
          {
            "name": "effectivePrice",
            "type": "uint256"
          }
        ],
        "name": "result",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]
