# Gadgets

The Orchard circuit makes use of the following gadgets from the `halo2_gadgets` crate:

- Elliptic curve:
  - `FixedPoint`
  - `FixedPointBaseField`
  - `FixedPointShort`
  - `NonIdentityPoint`
  - `Point`
- Poseidon:
  - `Hash<ConstantLength>`
- Sinsemilla:
  - `CommitDomain`
  - `Message`
  - `MessagePiece`
  - `MerklePath`

It instantiates the instruction sets required for these gadgets with the following chips:

- `halo2_gadgets::ecc::chip::EccChip`
- `halo2_gadgets::poseidon::Pow5Chip`
- `halo2_gadgets::sinsemilla::chip::SinsemillaChip`
- `halo2_gadgets::sinsemilla::merkle::chip::MerkleChip`
- `halo2_gadgets::utilities::UtilitiesInstructions`
- `halo2_gadgets::utilities::lookup_range_check::LookupRangeCheckConfig`

It also makes use of the following utility functions for standardising constraints:

- `halo2_gadgets::utilities::{bitrange_subset, bool_check}`