TLDR: You likely aren't doing anything wrong here. This is a limitation with the current state of simulations and we are working on a more robust solution.
Phantom simulates transactions via Solana web3js's simulateTransation method. Currently, when multiple instructions and/or transactions are present, Phantom will add all instructions to a single transaction and attempt to simulate them together. We do this because there is currently no simulateTransactions
(plural) endpoint, and we need to show the result of applying a series of transactions to the current state of the chain.
This works great when all instructions are able to simulated within a single transaction (things like 1 or 2 NFT mints). However, as you noted, this fails when the payload is too large. We don't batch requests to send multiple simulateTransaction
requests because each transaction would be simulated independently on top of the current state and then reverted before the next is simulated. This would not show the true result of approving the transaction.
We're in the middle of upgrading our simulator across the board and will soon have a better solution for properly simulating these large transactions!