---
title: "FAQ"
---

When writing or interacting with Solana programs, there are common questions or
challenges that often come up. Below are resources to help answer these
questions.

If not addressed here, the Solana [#developers](https://discord.gg/RxeGBH)
Discord channel is a great resource.

## `CallDepth` error

This error means that that cross-program invocation exceeded the allowed
invocation call depth.

See [cross-program invocation Call
Depth](developing/programming-model/calling-between-programs.md#call-depth)

## `CallDepthExceeded` error

This error means the BPF stack depth was exceeded.

See [call depth](overview.md#call-depth)

## Computational constraints

See [computational
constraints](developing/programming-model/runtime.md#compute-budget)

## Float Rust types

See [float support](overview.md#float-support)

## Heap size

See [heap](overview.md#heap)

## InvalidAccountData

This program error can happen for a lot of reasons. Usually, it's caused by
passing an account to the program that the program is not expecting, either in
the wrong position in the instruction or an account not compatible with the
instruction being executed.

An implementation of a program might also cause this error when performing a
cross-program instruction and forgetting to provide the account for the program
that you are calling.

## InvalidInstructionData

This program error can occur while trying to deserialize the instruction, check
that the structure passed in matches exactly the instruction. There may be some
padding between fields. If the program implements the Rust `Pack` trait then try
packing and unpacking the instruction type `T` to determine the exact encoding
the program expects:

https://github.com/solana-labs/solana/blob/v1.4/sdk/program/src/program_pack.rs

## MissingRequiredSignature

Some instructions require the account to be a signer; this error is returned if
an account is expected to be signed but is not.

An implementation of a program might also cause this error when performing a
cross-program invocation that requires a signed program address, but the passed
signer seeds passed to [`invoke_signed`](developing/programming-model/calling-between-programs.md)
don't match the signer seeds used to create the program address
[`create_program_address`](developing/programming-model/calling-between-programs.md#program-derived-addresses).

## `rand` Rust dependency causes compilation failure

See [Rust Project Dependencies](developing-rust.md#project-dependencies)

## Rust restrictions

See [Rust restrictions](developing-rust.md#restrictions)

## Stack size

See [stack](overview.md#stack)