diff --git a/.github/workflows/end2end.yml b/.github/workflows/end2end.yml index 64fbc13..cd6040e 100644 --- a/.github/workflows/end2end.yml +++ b/.github/workflows/end2end.yml @@ -34,6 +34,12 @@ jobs: with: submodules: recursive + - name: Set environment variables for generate_contract_input.py (Nova URL and commit) + id: parse-comment + run: + echo "::set-env name=NOVA_URL::https://github.com/lurk-lab/Nova" + echo "::set-env name=NOVA_COMMIT::ea4f75c225cb29f523780858ec84f1ff51c229bc" + - name: Checkout PR branch run: gh pr checkout $PR_NUMBER env: @@ -55,9 +61,13 @@ jobs: echo "CONTRACT_ADDRESS=$(forge script script/Deployment.s.sol:NovaVerifierDeployer --fork-url $ANVIL_URL --private-key $ANVIL_PRIVATE_KEY --broadcast --non-interactive | sed -n 's/.*Contract Address: //p' | tail -1)" >> $GITHUB_OUTPUT id: deployment + - name: Generate proof and public parameters from commit hash + run: | + python ci_pasta_keys_verifier_script.py $NOVA_URL $NOVA_COMMIT + - name: Load proof and public parameters run: | - python loader.py pp-verifier-key.json pp-compressed-snark.json ${{steps.deployment.outputs.CONTRACT_ADDRESS}} $ANVIL_URL $ANVIL_PRIVATE_KEY + python loader.py vk.json compressed-snark.json ${{steps.deployment.outputs.CONTRACT_ADDRESS}} $ANVIL_URL $ANVIL_PRIVATE_KEY - name: Check proof verification status run: | diff --git a/generate_contract_input.py b/generate_contract_input.py new file mode 100644 index 0000000..03e87e2 --- /dev/null +++ b/generate_contract_input.py @@ -0,0 +1,57 @@ +import subprocess +import sys +import os +import re + +file_path = 'rust-reference-info.txt' + +def parse_variables_from_file(file_path): + variables = {} + with open(file_path, 'r') as file: + content = file.read() + # Define regex patterns for matching variables + nova_url_pattern = r'\$NOVA_URL\s*=\s*\"(.+?)\"' + nova_commit_pattern = r'\$NOVA_COMMIT\s*=\s*\"(.+?)\"' + + # Match variables using regular expressions + nova_url_match = re.search(nova_url_pattern, content) + nova_commit_match = re.search(nova_commit_pattern, content) + + # Extract matched variables + if nova_url_match: + variables['NOVA_URL'] = nova_url_match.group(1) + if nova_commit_match: + variables['NOVA_COMMIT'] = nova_commit_match.group(1) + + return variables + +# python generate_contract_input.py https://github.com/artem-bakuta/Nova.git 3838031868ca3f2783c01299546849860bfd36d2 +if __name__ == "__main__": + nova_repo_arg = "" + nova_commit_arg = "" + + if len(sys.argv) > 1: + nova_repo_arg = sys.argv[1] + nova_commit_arg = sys.argv[2] + + # Configurations + parsed_variables = parse_variables_from_file(file_path) + nova_repo_url = nova_repo_arg if nova_repo_arg else parsed_variables['NOVA_URL'] + nova_commit_hash = nova_commit_arg if nova_commit_arg else parsed_variables['NOVA_COMMIT'] + print("Pulling project from: " + nova_repo_url + " " + nova_commit_hash) + target_directory = "verify_cache" + nova_directory = "nova" + + if os.path.exists(target_directory): + subprocess.run(['rm', '-rf', target_directory], check=True) + os.mkdir(target_directory) + os.mkdir(target_directory + "/" + nova_directory) + os.chdir(target_directory) + os.system(f"git clone {nova_repo_url} {nova_directory}") + os.chdir(nova_directory) + os.system(f"git checkout {nova_commit_hash}") + + # Build the Nova project + os.system(f"cargo test solidity_compatibility_e2e_pasta --release -- --ignored") + print("Copy generated keys from Nova...") + os.system(f"cp vk.json compressed-snark.json ../../.") diff --git a/rust-reference-info.txt b/rust-reference-info.txt new file mode 100644 index 0000000..389c460 --- /dev/null +++ b/rust-reference-info.txt @@ -0,0 +1,7 @@ +# generate_contract_input.py script params + +# NOVA_URL variable +$NOVA_URL = "https://github.com/lurk-lab/Nova.git" + +# NOVA_COMMIT variable +$NOVA_COMMIT = "d5f5fb5e557b99cb111f2d5693aa34fe30722750" \ No newline at end of file