Last active
February 6, 2024 09:56
-
-
Save artem-bakuta/143c0c759cab99596e44ef7086b2b6bc to your computer and use it in GitHub Desktop.
Python Script to verify vk.json and compression-snark.json with generating them from https://github.com/artem-bakuta/Nova/tree/solidity-verifier-pp-spartan-keys_verifier
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import subprocess | |
import sys | |
import os | |
import re | |
def execute_shell_command(command): | |
try: | |
result = subprocess.run(command, shell=True, capture_output=True, text=True) | |
return result.stdout | |
except subprocess.CalledProcessError as e: | |
print(f"Error occurred: {e}") | |
return None | |
def extract_contract_addresses(input_string): | |
# Regular expression pattern to match contract addresses | |
pattern = r'Contract Address: (0x[0-9a-fA-F]+)' | |
# Find all matches using re.findall() | |
matches = re.findall(pattern, input_string) | |
return matches | |
# python3 VkCompressionSnarkVerifier.py https://github.com/artem-bakuta/Nova.git 24563368378592c41ddb551238b593863f7b136b http://127.0.0.1:8545 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 | |
if __name__ == "__main__": | |
# Configurations | |
nova_repo_url = sys.argv[1] | |
solidity_verifier_repo_url = "https://github.com/lurk-lab/solidity-verifier.git" | |
nova_commit_hash = sys.argv[2] | |
node_url = sys.argv[3] | |
node_private_key = sys.argv[4] | |
target_directory = "verify_cache" | |
nova_directory = "nova" | |
solidity_verifier_directory = "solidity-verifier" | |
# Main logic | |
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.mkdir(target_directory + "/" + solidity_verifier_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}") | |
os.system(f"cargo +nightly test solidity_compatibility_e2e_pasta --release") | |
os.chdir("..") | |
os.system(f"git clone {solidity_verifier_repo_url} {solidity_verifier_directory}") | |
os.chdir(solidity_verifier_directory) | |
os.system(f"git checkout pasta") | |
os.system(f"git pull") | |
os.system(f"forge clean") | |
os.system(f"forge build") | |
output = execute_shell_command(f"forge script script/Deployment.s.sol NovaVerifierDeployer --fork-url {node_url} --private-key {node_private_key} --broadcast --non-interactive") | |
contract_addresses = extract_contract_addresses(output) | |
contract_address = contract_addresses[-1] | |
print("Copy generated keys form Nova...") | |
os.system(f"cp ../{nova_directory}/vk.json ../{nova_directory}/compressed-snark.json .") | |
print("Loading keys into contract...") | |
os.system(f"python3 loader.py vk.json compressed-snark.json {contract_address} {node_url} {node_private_key}") | |
print("Deploying contract...") | |
print("Result:") | |
os.system(f"cast call {contract_address} \"verify(uint32,uint256[],uint256[],bool)(bool)\" \"3\" \"[1]\" \"[0]\" \"true\" --rpc-url {node_url} --private-key {node_private_key}") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment