123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384(*****************************************************************************)(* *)(* Open Source License *)(* Copyright (c) 2022 Nomadic Labs, <contact@nomadic-labs.com> *)(* *)(* Permission is hereby granted, free of charge, to any person obtaining a *)(* copy of this software and associated documentation files (the "Software"),*)(* to deal in the Software without restriction, including without limitation *)(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *)(* and/or sell copies of the Software, and to permit persons to whom the *)(* Software is furnished to do so, subject to the following conditions: *)(* *)(* The above copyright notice and this permission notice shall be included *)(* in all copies or substantial portions of the Software. *)(* *)(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*)(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *)(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *)(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*)(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *)(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *)(* DEALINGS IN THE SOFTWARE. *)(* *)(*****************************************************************************)typeError_monad.error+=No_trusted_setupofstringlistlet()=Error_monad.register_error_kind`Permanent~id:"node.config.trusted_setup_not_found"~title:"No trusted setup found"~description:"No trusted setup found in the explored paths"~pp:(funppflocations->Format.fprintfppf"@[<v>cannot find Trusted setup in any of:@,%a@]@."(Format.pp_print_list(funfmt->Format.fprintffmt"- %s"))locations)Data_encoding.(obj1(req"paths"(liststring)))(functionNo_trusted_setupparameter->Someparameter|_->None)(funparameter->No_trusted_setupparameter)(* FIXME https://gitlab.com/tezos/tezos/-/issues/3410
This function should be factored out with the one of sapling. *)letfind_trusted_setup_files?(getenv_opt=Sys.getenv_opt)?(getcwd=Sys.getcwd)?(file_exists=Sys.file_exists)()=let(//)=Filename.concatinletenv?splitnamepath=matchgetenv_optnamewith|None->[]|Somevalue->(matchsplitwith|None->[Filename.concatvaluepath]|Somechar->List.map(fundir->dir//path)(String.split_on_charcharvalue))inletcwdpath=try[getcwd()//path]withSys_error_->[]inletcandidate_directories=env"XDG_DATA_HOME"".local/share/dal-trusted-setup"@env~split:':'"XDG_DATA_DIRS""dal-trusted-setup"@env"OPAM_SWITCH_PREFIX""share/dal-trusted-setup"@env"PWD""_opam/share/dal-trusted-setup"@cwd"_opam/share/dal-trusted-setup"@env"HOME"".dal-trusted-setup"@env"HOME"".local/share/dal-trusted-setup"@env"DAL_TRUSTED_SETUP"""@env"HOMEBREW_PREFIX""share/dal-trusted-setup"@["/usr/local/share/dal-trusted-setup";"/usr/share/dal-trusted-setup"]in(* Files we are looking for. *)letg1_file="srs_zcash_g1"inletg2_file="srs_zcash_g2"in(* Find the first candidate directory that contains the expected files. *)letcontains_trusted_setup_filesdirectory=file_exists(directory//g1_file)&&file_exists(directory//g2_file)inmatchList.find_optcontains_trusted_setup_filescandidate_directorieswith|None->Error[No_trusted_setupcandidate_directories]|Somedirectory->letg1_path=directory//g1_fileinletg2_path=directory//g2_fileinOk(g1_path,g2_path)