findProgramAddress static method

ProgramAddress findProgramAddress(
  1. List<List<int>> seeds,
  2. Pubkey programId
)

Finds a valid program address for the given seeds and programId.

Valid program addresses must fall off the ed25519 curve. This function iterates a nonce until it finds one that can be combined with the seeds to produce a valid program address.

Throws an AssertionError if seeds contains an invalid seed.

Throws a PubkeyException if a valid program address could not be found.

Implementation

static ProgramAddress findProgramAddress(
  final List<List<int>> seeds,
  final Pubkey programId,
) {
  for (int nonce = 255; nonce > 0; --nonce) {
    try {
      final List<List<int>> seedsWithNonce = seeds +
          [
            [nonce]
          ];
      final Pubkey address = createProgramAddress(seedsWithNonce, programId);
      return ProgramAddress(address, nonce);
    } on AssertionError {
      rethrow;
    } catch (_) {}
  }

  throw const PubkeyException(
      'Unable to find a viable program address nonce.');
}