Documentation ¶
Index ¶
Constants ¶
const DefaultCircuitConfigurationTag = "dev"
DefaultCircuitConfigurationTag constant contains the tag value that points to the default ZkSnark circuit configuration. It ensures that at least one circuit configuration is available so the configuration referred by this tag must be defined.
Variables ¶
var BaseDir = ""
BaseDir is where the artifact cache is expected to be found. If the artifacts are not found there, they will be downloaded and stored. If unset ("") it will default to ~/.cache/vocdoni/zkCircuits/
In any case, the LocalDir path associated with the circuit config will be appended at the end
var CircuitsConfigurations = map[string]ZkCircuitConfig{
"dev": {
URI: "https://raw.githubusercontent.com/vocdoni/" +
"zk-franchise-proof-circuit/master",
CircuitPath: "artifacts/zkCensus/dev/160",
Levels: 160,
ProvingKeyHash: hexToBytes("0x48596c390d24a173c796b0dae68f3c08db034171917ca1b2f253ce9476a35945"),
ProvingKeyFilename: "proving_key.zkey",
VerificationKeyHash: hexToBytes("0x411c78a012d6d163e02704d9ce33b6d84e84ee67f62179f53158ffabd88da44a"),
VerificationKeyFilename: "verification_key.json",
WasmHash: hexToBytes("0xcc1af3eb9462788840284e83dd777d5b43782d9a7ca89ce8d88709237a2e18e9"),
WasmFilename: "circuit.wasm",
},
}
CircuitsConfiguration stores the relation between the different vochain nets and the associated circuit configuration. Any circuit configuration must have the remote and local location of the circuits artifacts and their metadata such as artifacts hash or the number of parameters.
Functions ¶
This section is empty.
Types ¶
type CircuitInputs ¶
type CircuitInputs struct { CensusRoot string `json:"censusRoot"` CensusSiblings []string `json:"censusSiblings"` VotingWeight string `json:"votingWeight"` FactoryWeight string `json:"factoryWeight"` PrivateKey string `json:"privateKey"` VoteHash []string `json:"voteHash"` ProcessId []string `json:"processId"` Nullifier string `json:"nullifier"` }
CircuitInputs wraps all the necessary circuit parameters. They must all be strings or slices of strings, and the struct must be able to be encoded in json.
func GenerateCircuitInput ¶
func GenerateCircuitInput(zkAddr *zk.ZkAddress, censusRoot, electionId []byte, factoryWeight, votingWeight *big.Int, censusSiblings []string) (*CircuitInputs, error)
GenerateCircuitInput receives the required parameters to encode them correctly to return the expected CircuitInputs. This function uses the ZkAddress to get the private key and generates the nullifier. Also encodes the census root, the election id and the weight provided, and includes the census siblings provided into the result.
type ZkCircuit ¶
type ZkCircuit struct { ProvingKey []byte VerificationKey []byte Wasm []byte Config ZkCircuitConfig }
ZkCircuit struct wraps the circuit configuration and contains the file content of the circuit artifacts (provingKey, verificationKey and wasm)
func LoadZkCircuit ¶
func LoadZkCircuit(ctx context.Context, config ZkCircuitConfig) (*ZkCircuit, error)
LoadZkCircuit load the circuit artifacts based on the configuration provided. First, tries to load the artifacts from local storage, if they are not available, tries to download from their remote location.
func LoadZkCircuitByTag ¶
LoadZkCircuitByTag gets the circuit configuration associated to the provided tag or gets the default one and load its artifacts to prepare the circuit to be used.
func (*ZkCircuit) LoadLocal ¶
LoadLocal tries to read the content of current circuit artifacts from its local path (provingKey, verificationKey and wasm). If any of the read operations fails, returns an error.
func (*ZkCircuit) LoadRemote ¶
LoadRemote downloads the content of the current circuit artifacts from its remote location. If any of the downloads fails, returns an error.
func (*ZkCircuit) VerifiedCircuitArtifacts ¶
VerifiedCircuitArtifacts checks that the computed hash of every circuit artifact matches with the expected hash, from the circuit config.
type ZkCircuitConfig ¶
type ZkCircuitConfig struct { // URI defines the URI from where to download the files URI string `json:"uri"` // CircuitPath defines the path from where the files are downloaded. // Locally, they will be cached inside circuit.BaseDir path, // under that directory it will follow the CircuitPath dir structure CircuitPath string `json:"circuitPath"` // Levels refers the number of levels that the merkle tree associated to the // current circuit configuration artifacts has Levels int `json:"levels"` // ProvingKeyHash contains the expected hash for the file filenameZKey ProvingKeyHash []byte `json:"zKeyHash"` // FilenameProvingKey defines the name of the file of the circom ProvingKey ProvingKeyFilename string `json:"zKeyFilename"` // proving_key.zkey // VerificationKeyHash contains the expected hash for the file filenameVK VerificationKeyHash []byte `json:"vKeyHash"` // FilenameVerificationKey defines the name of the file of the circom // VerificationKey VerificationKeyFilename string `json:"vKeyFilename"` // verification_key.json // WasmHash contains the expected hash for the file filenameWasm WasmHash []byte `json:"wasmHash"` // FilenameWasm defines the name of the file of the circuit wasm compiled // version WasmFilename string `json:"wasmFilename"` // circuit.wasm }
ZkCircuitConfig defines the configuration of the files to be downloaded
func GetCircuitConfiguration ¶
func GetCircuitConfiguration(configTag string) ZkCircuitConfig
GetCircuitConfiguration returns the circuit configuration associated with the provided tag or gets the default one.
func (ZkCircuitConfig) KeySize ¶
func (config ZkCircuitConfig) KeySize() int
KeySize returns the maximum number of bytes of a leaf key according to the number of levels of the current circuit (nBytes = nLevels / 8).