github.com/consensys/gnark@v0.11.0/std/hints.go (about)

     1  package std
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/consensys/gnark/constraint/solver"
     7  	"github.com/consensys/gnark/std/algebra/emulated/fields_bls12381"
     8  	"github.com/consensys/gnark/std/algebra/emulated/fields_bn254"
     9  	"github.com/consensys/gnark/std/algebra/emulated/fields_bw6761"
    10  	"github.com/consensys/gnark/std/algebra/emulated/sw_emulated"
    11  	"github.com/consensys/gnark/std/algebra/native/fields_bls12377"
    12  	"github.com/consensys/gnark/std/algebra/native/fields_bls24315"
    13  	"github.com/consensys/gnark/std/algebra/native/sw_bls12377"
    14  	"github.com/consensys/gnark/std/algebra/native/sw_bls24315"
    15  	"github.com/consensys/gnark/std/evmprecompiles"
    16  	"github.com/consensys/gnark/std/internal/logderivarg"
    17  	"github.com/consensys/gnark/std/math/bits"
    18  	"github.com/consensys/gnark/std/math/bitslice"
    19  	"github.com/consensys/gnark/std/math/cmp"
    20  	"github.com/consensys/gnark/std/math/emulated"
    21  	"github.com/consensys/gnark/std/rangecheck"
    22  	"github.com/consensys/gnark/std/selector"
    23  )
    24  
    25  var registerOnce sync.Once
    26  
    27  // RegisterHints register all gnark/std hints
    28  // In the case where the Solver/Prover code is loaded alongside the circuit, this is not useful.
    29  // However, if a Solver/Prover services consumes serialized constraint systems, it has no way to
    30  // know which hints were registered; caller code may add them through backend.WithHints(...).
    31  func RegisterHints() {
    32  	registerOnce.Do(registerHints)
    33  }
    34  
    35  func registerHints() {
    36  	// note that importing these packages may already trigger a call to solver.RegisterHint(...)
    37  	solver.RegisterHint(bits.GetHints()...)
    38  	solver.RegisterHint(cmp.GetHints()...)
    39  	solver.RegisterHint(selector.GetHints()...)
    40  	solver.RegisterHint(emulated.GetHints()...)
    41  	solver.RegisterHint(rangecheck.GetHints()...)
    42  	solver.RegisterHint(evmprecompiles.GetHints()...)
    43  	solver.RegisterHint(logderivarg.GetHints()...)
    44  	solver.RegisterHint(bitslice.GetHints()...)
    45  	// emulated fields
    46  	solver.RegisterHint(fields_bls12381.GetHints()...)
    47  	solver.RegisterHint(fields_bn254.GetHints()...)
    48  	solver.RegisterHint(fields_bw6761.GetHints()...)
    49  	// native fields
    50  	solver.RegisterHint(fields_bls12377.GetHints()...)
    51  	solver.RegisterHint(fields_bls24315.GetHints()...)
    52  	// emulated curves
    53  	solver.RegisterHint(sw_emulated.GetHints()...)
    54  	// native curves
    55  	solver.RegisterHint(sw_bls12377.GetHints()...)
    56  	solver.RegisterHint(sw_bls24315.GetHints()...)
    57  }
    58  
    59  func init() {
    60  	RegisterHints()
    61  }