transfercall with ERC20 tokens. With batched transactions you can approve and transfer in a single transaction. If the approve call fails then the transfer call won't happen since the transaction before it failed. If the approve succeeds but the transfer fails then approve call is reverted and cancelled. If the approve succeeds and transfer succeeds then the entire transaction is successful.
estimateGasBatchon the provider. This will return an array of numbers that represent the estimated gas, one for each transaction in the batch.