Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Field ¶
type Field struct { Name string NameTag string FullName string Visibility Visibility Type FieldType SubFields []Field // will be set only if it's a struct, or an array of struct ArraySize int }
Field represent a schema Field and is analogous to reflect.StructField (but simplified)
type FieldType ¶
type FieldType uint8
FieldType represents the type a field is allowed to have in a gnark Schema
type InitHook ¶
type InitHook interface {
GnarkInitHook() // TODO @gbotrel find a better home for this
}
An object implementing an init hook knows how to "init" itself when parsed at compile time
type LeafCount ¶
LeafCount stores the number of secret and public interface of type target(reflect.Type) found by the walker.
type LeafHandler ¶
LeafHandler is the handler function that will be called when Walk reaches leafs of the struct
type LeafInfo ¶
type LeafInfo struct { Visibility Visibility FullName func() string // in most instances, we don't need to actually evaluate the name. // contains filtered or unexported fields }
LeafInfo stores the leaf visibility (always set to Secret or Public) and the fully qualified name of the path to reach the leaf in the circuit struct.
type Schema ¶
Schema represents the structure of a gnark circuit (/ witness)
func New ¶
New builds a schema.Schema walking through the provided interface (a circuit structure).
schema.Walk performs better and should be used when possible.
func (Schema) Instantiate ¶
Instantiate builds a concrete type using reflect matching the provided schema
It replaces leafs by provided type, such that one can do:
struct { A []frontend.Variable} -> Schema -> struct {A [12]fr.Element}
Default behavior is to add "json:,omitempty" to the generated struct
func (Schema) WriteSequence ¶
WriteSequence writes the expected sequence order of the witness on provided writer witness elements are identified by their tag name, or if unset, struct & field name
The expected sequence matches the binary encoding protocol [public | secret]
type TagOpt ¶
type TagOpt string
TagOpt is a (optional) struct tag one can add to a Variable field in the circuit definition to specify compiler behaviour and witness parsing. The order of the tag matters, the first element in the tag list is always the assumed name of the witness element and the rest of the tags define the properties of the witness element. Valid tag options are given by constants
- TagOptPublic ("public"): element belongs to the public part of the witness;
- TagOptSecret ("secret"): element belongs to the secret part of the witness;
- TagOptInherit ("inherit"): element's visibility is inherited from its parent visibility. Is useful for defining custom types to allow consistent visibility;
- TagOptOmit ("-"): do not insert the element into a witness.
Examples ¶
In the code, it would look like this:
type MyCircuit struct { Y frontend.Variable `gnark:"name,option"` }
If no tags are defined, then the parser by default deduces the name from the field name in the struct. If the witness element is defined on the circuit type level, then applies "secret" visibility and otherwise inherits the visibility of its parent. For example, for a circuit defined as:
type DefaultCircuit struct { X frontend.Variable }
the assumed name of the field "X" would be "X" and its visibility would be "secret".
To define only a name tag, the options part of tag can be left empty i.e.:
type NameOnlyCircuit struct { X frontend.Variable `gnark:"Result"` // assumed visibility "secret" }
To define only options tag (and have the parser assume the name for the witness element), keep the name part empty i.e.:
type OptionOnlyCircuit struct { X frontend.Variable `gnark:",public"` // assumed name "X" }
The tag "-" instructs the compiler to ignore the variable in parsing and compiling. In that case, it is the responsibility of the developer to assign a value to the ignored variable in circuit. Such circuit would look like:
type NoWitnessCircuit struct { X frontend.Variable `gnark:"-"` }
When defining a custom type we use the "inherit" tag. For example, if there is a custom type
type List struct { Vals []frontend.Variable `gnark:",inherit"` }
then we can use this type in the in the circuit definition:
type ListCircuit struct { X List `gnark:",secret"` }
type Visibility ¶
type Visibility uint8
Visibility encodes a Variable (or wire) visibility Possible values are Unset, Internal, Secret or Public
const ( Unset Visibility = iota Internal Secret Public Virtual )
func (Visibility) String ¶
func (v Visibility) String() string
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
reflectwalk
reflectwalk is a package that allows you to "walk" complex structures similar to how you may "walk" a filesystem: visiting every element one by one and calling callback functions allowing you to handle and manipulate those elements.
|
reflectwalk is a package that allows you to "walk" complex structures similar to how you may "walk" a filesystem: visiting every element one by one and calling callback functions allowing you to handle and manipulate those elements. |