From 320e90fa2b63328e52b7c9f632b3bd538165c852 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Sun, 4 Aug 2024 19:02:34 -0400 Subject: [PATCH 1/5] chore: Rename to argument --- .github/CODEOWNERS | 22 +++++++++---------- .github/workflows/bench-deploy.yml | 2 +- .github/workflows/bench-pr-comment.yml | 2 +- .github/workflows/ci.yml | 14 ++++++------ .github/workflows/codecov.yml | 2 +- .github/workflows/docs.yml | 2 +- .../gpu-bench-manual-comparative.yml | 2 +- .../workflows/gpu-bench-merge-regression.yml | 2 +- .../workflows/gpu-bench-workflow-dispatch.yml | 2 +- .github/workflows/gpu-ci.yml | 2 +- .github/workflows/merge-tests.yml | 6 ++--- .github/workflows/nightly.yml | 14 ++++++------ .gitmodules | 2 +- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 16 +++++++------- Cargo.toml | 14 ++++++------ LICENSE-MIT | 2 +- README.md | 16 +++++++------- benches/sha256.rs | 4 ++-- deny.toml | 2 +- examples/keccak.rs | 4 ++-- foil/Cargo.toml | 2 +- notes/reduction-notes.md | 10 ++++----- notes/soundness-notes.md | 6 ++--- src/coprocessor/circom/README.md | 8 +++---- src/proof/tests/nova_tests.rs | 2 +- 26 files changed, 81 insertions(+), 81 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f5f6e63916..aa753e783a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,22 +1,22 @@ # Global Owners: @porcuquine, @huitseeker -* @lurk-lab/lurk-noncircuit +* @argumentcomputer/lurk-noncircuit # CI maintenance -/.circleci/** @lurk-lab/lurk-ci -/.config/** @lurk-lab/lurk-ci -/.github/** @lurk-lab/lurk-ci +/.circleci/** @argumentcomputer/lurk-ci +/.config/** @argumentcomputer/lurk-ci +/.github/** @argumentcomputer/lurk-ci # Benchmarks -/benches/** @lurk-lab/lurk-benches +/benches/** @argumentcomputer/lurk-benches # CLI tools -/src/cli/** @lurk-lab/lurk-cli-tools +/src/cli/** @argumentcomputer/lurk-cli-tools # Circuit -/src/circuit/** @lurk-lab/lurk-circuit -/src/lem/circuit.rs @lurk-lab/lurk-circuit -/src/coprocessor/** @lurk-lab/lurk-circuit -/src/coroutine/** @lurk-lab/lurk-circuit +/src/circuit/** @argumentcomputer/lurk-circuit +/src/lem/circuit.rs @argumentcomputer/lurk-circuit +/src/coprocessor/** @argumentcomputer/lurk-circuit +/src/coroutine/** @argumentcomputer/lurk-circuit # Evaluation model -/src/lem/eval.rs @lurk-lab/lurk-lem +/src/lem/eval.rs @argumentcomputer/lurk-lem diff --git a/.github/workflows/bench-deploy.yml b/.github/workflows/bench-deploy.yml index 6153786d33..8874c3a993 100644 --- a/.github/workflows/bench-deploy.yml +++ b/.github/workflows/bench-deploy.yml @@ -15,7 +15,7 @@ jobs: # Install deps - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/gpu-setup with: gpu-framework: 'cuda' diff --git a/.github/workflows/bench-pr-comment.yml b/.github/workflows/bench-pr-comment.yml index 4327f58a3e..721bc9e759 100644 --- a/.github/workflows/bench-pr-comment.yml +++ b/.github/workflows/bench-pr-comment.yml @@ -16,7 +16,7 @@ jobs: && github.event.issue.state == 'open' && (contains(github.event.comment.body, '!benchmark') || contains(github.event.comment.body, '!gpu-benchmark')) && (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') - uses: lurk-lab/ci-workflows/.github/workflows/bench-pr-comment.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/bench-pr-comment.yml@main with: default-runner: "self-hosted,gpu-bench" default-benches: "fibonacci" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0733c7897f..e7843a6fa5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/ci-env - uses: ./.github/actions/install-deps with: @@ -37,26 +37,26 @@ jobs: # Rustfmt, clippy, doctests code-quality: - uses: lurk-lab/ci-workflows/.github/workflows/lints.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/lints.yml@main with: packages: 'protobuf-compiler libprotobuf-dev' # Checks `cargo build --target wasm32-unknown-unknown` wasm: - uses: lurk-lab/ci-workflows/.github/workflows/wasm.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/wasm.yml@main # Checks MSRV specified by `rust-version` in `Cargo.toml` msrv: - uses: lurk-lab/ci-workflows/.github/workflows/msrv.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/msrv.yml@main with: packages: 'protobuf-compiler libprotobuf-dev' # Check documentation links aren't broken link-checker: - uses: lurk-lab/ci-workflows/.github/workflows/links-check.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/links-check.yml@main with: fail-fast: true - # Lint dependencies for licensing and auditing issues as per https://github.com/lurk-lab/lurk-rs/blob/main/deny.toml + # Lint dependencies for licensing and auditing issues as per https://github.com/argumentcomputer/lurk-rs/blob/main/deny.toml licenses-audits: - uses: lurk-lab/ci-workflows/.github/workflows/licenses-audits.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/licenses-audits.yml@main diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index 30f249caa3..3a3cb3f85e 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -5,4 +5,4 @@ on: jobs: codecov-grcov: - uses: lurk-lab/ci-workflows/.github/workflows/codecov.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/codecov.yml@main diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e53d4e5fdb..f778b5b931 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -12,4 +12,4 @@ on: jobs: docs: - uses: lurk-lab/ci-workflows/.github/workflows/docs.yml@main \ No newline at end of file + uses: argumentcomputer/ci-workflows/.github/workflows/docs.yml@main \ No newline at end of file diff --git a/.github/workflows/gpu-bench-manual-comparative.yml b/.github/workflows/gpu-bench-manual-comparative.yml index f32532b137..94bdfa1375 100644 --- a/.github/workflows/gpu-bench-manual-comparative.yml +++ b/.github/workflows/gpu-bench-manual-comparative.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/gpu-setup with: gpu-framework: 'cuda' diff --git a/.github/workflows/gpu-bench-merge-regression.yml b/.github/workflows/gpu-bench-merge-regression.yml index 095ddaf4fc..39f4272d00 100644 --- a/.github/workflows/gpu-bench-merge-regression.yml +++ b/.github/workflows/gpu-bench-merge-regression.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/gpu-setup with: gpu-framework: 'cuda' diff --git a/.github/workflows/gpu-bench-workflow-dispatch.yml b/.github/workflows/gpu-bench-workflow-dispatch.yml index 5d0861da22..562e310617 100644 --- a/.github/workflows/gpu-bench-workflow-dispatch.yml +++ b/.github/workflows/gpu-bench-workflow-dispatch.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/gpu-setup with: gpu-framework: 'cuda' diff --git a/.github/workflows/gpu-ci.yml b/.github/workflows/gpu-ci.yml index 53e2dbc91c..3169b5001c 100644 --- a/.github/workflows/gpu-ci.yml +++ b/.github/workflows/gpu-ci.yml @@ -15,4 +15,4 @@ concurrency: jobs: gpu-ci: name: Rust GPU tests - uses: lurk-lab/ci-workflows/.github/workflows/gpu-ci-cuda.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/gpu-ci-cuda.yml@main diff --git a/.github/workflows/merge-tests.yml b/.github/workflows/merge-tests.yml index fc956e877b..9a6d0b315e 100644 --- a/.github/workflows/merge-tests.yml +++ b/.github/workflows/merge-tests.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/install-deps with: packages: 'pkg-config libssl-dev protobuf-compiler libprotobuf-dev' @@ -42,7 +42,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/install-deps with: packages: 'pkg-config libssl-dev protobuf-compiler libprotobuf-dev' @@ -65,7 +65,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - name: Install dependencies run: | brew install protobuf diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1b0d8adf82..6297c2eb88 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: lurk-lab/ci-workflows + repository: argumentcomputer/ci-workflows - uses: ./.github/actions/ci-env - uses: actions/checkout@v4 with: @@ -52,15 +52,15 @@ jobs: - name: Amend MESSAGE for tests if: steps.tests.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Exhaustive test run failed in https://github.com/lurk-lab/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Exhaustive test run failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Amend MESSAGE for benches if: steps.benches.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Bench compilation failed in https://github.com/lurk-lab/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Bench compilation failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Amend MESSAGE for doctests if: steps.doctests.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Doc test run failed in https://github.com/lurk-lab/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Doc test run failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Find the last report issue open id: last_issue @@ -103,12 +103,12 @@ jobs: automated issue unused-dependencies: - uses: lurk-lab/ci-workflows/.github/workflows/unused-deps.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/unused-deps.yml@main with: packages: 'protobuf-compiler libprotobuf-dev' rust-version-check: - uses: lurk-lab/ci-workflows/.github/workflows/rust-version-check.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/rust-version-check.yml@main typos: - uses: lurk-lab/ci-workflows/.github/workflows/typos.yml@main + uses: argumentcomputer/ci-workflows/.github/workflows/typos.yml@main diff --git a/.gitmodules b/.gitmodules index 6db8534f7c..50c8b97ea4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "lurk-lib"] path = lurk-lib - url = https://github.com/lurk-lab/lurk-lib.git + url = https://github.com/argumentcomputer/lurk-lib.git diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index b0e902bbcf..b7dfd2582b 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at community@lurk-lab.com. +reported to the community leaders responsible for enforcement at community@argument.xyz. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 81269b501d..cf27327914 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,19 +68,19 @@ Welcome to the Lurk-rs project! Here's an introduction to the branch organizatio ### Major Dependencies -The main repo is [lurk-rs](https://github.com/lurk-lab/lurk-rs) with major dependencies: +The main repo is [lurk-rs](https://github.com/argumentcomputer/lurk-rs) with major dependencies: -- [bellpepper](https://github.com/lurk-lab/bellpepper) -- [neptune](https://github.com/lurk-lab/neptune) -- [arecibo](https://github.com/lurk-lab/arecibo) - a fork of the upstream repo [nova](https://github.com/microsoft/Nova) +- [bellpepper](https://github.com/argumentcomputer/bellpepper) +- [neptune](https://github.com/argumentcomputer/neptune) +- [arecibo](https://github.com/argumentcomputer/arecibo) - a fork of the upstream repo [nova](https://github.com/microsoft/Nova) ### Forked Dependencies Additionally, Lurk-rs depends on the following forked repositories: -- [pasta_curves](https://github.com/lurk-lab/pasta_curves) (forked from [zcash/pasta_curves](https://github.com/zcash/pasta_curves)) -- [pasta-msm](https://github.com/lurk-lab/pasta-msm) (forked from [supranational/pasta-msm](https://github.com/supranational/pasta-msm)) -- [ec-gpu](https://github.com/lurk-lab/ec-gpu) (forked from [filecoin-project/ec-gpu](https://github.com/filecoin-project/ec-gpu)) +- [pasta_curves](https://github.com/argumentcomputer/pasta_curves) (forked from [zcash/pasta_curves](https://github.com/zcash/pasta_curves)) +- [pasta-msm](https://github.com/argumentcomputer/pasta-msm) (forked from [supranational/pasta-msm](https://github.com/supranational/pasta-msm)) +- [ec-gpu](https://github.com/argumentcomputer/ec-gpu) (forked from [filecoin-project/ec-gpu](https://github.com/filecoin-project/ec-gpu)) For rapid iterations and to address issues in these dependencies, Lurk's **main** branch directly depends on the **dev** branch of its dependencies (transitively). @@ -129,7 +129,7 @@ To trigger a benchmark: Then, check the following link for the benchmark reports: -https://lurk-lab.github.io/lurk-rs/benchmarks/criterion/reports/ +https://argumentcomputer.github.io/lurk-rs/benchmarks/criterion/reports/ Ask a maintainer for a benchmark report if you can't find a recent one. diff --git a/Cargo.toml b/Cargo.toml index 968c655e3b..6279f6a586 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,14 +56,14 @@ thiserror = { workspace = true } abomonation = { workspace = true } abomonation_derive = { version = "0.1.0", package = "abomonation_derive_ng" } byteorder = "1.4.3" -circom-scotia = { git = "https://github.com/lurk-lab/circom-scotia", branch = "main" } +circom-scotia = { git = "https://github.com/argumentcomputer/circom-scotia", branch = "main" } sha2 = { version = "0.10.2" } reqwest = { version = "0.12.2", features = ["stream", "blocking"] } ansi_term = "0.12.1" tracing = { workspace = true } tracing-texray = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } -elsa = { version = "1.9.0", git = "https://github.com/lurk-lab/elsa", branch = "sync_frozen", features = ["indexmap"] } +elsa = { version = "1.9.0", git = "https://github.com/argumentcomputer/elsa", branch = "sync_frozen", features = ["indexmap"] } arc-swap = "1.6.0" halo2curves = { version = "0.6.0", features = ["bits", "derive_serde"] } @@ -117,15 +117,15 @@ members = ["foil", "lurk-macros", "lurk-metrics", "chain-server"] [workspace.dependencies] abomonation = "0.7.3" anyhow = "1.0.72" -bellpepper = { git = "https://github.com/lurk-lab/bellpepper", branch = "dev" } +bellpepper = { git = "https://github.com/argumentcomputer/bellpepper", branch = "dev" } bellpepper-core = { version = "0.4.0" } bincode = "1.3.3" camino = "1.1.6" clap = "4.3.17" ff = "0.13" metrics = "0.23.0" -neptune = { git = "https://github.com/lurk-lab/neptune", branch = "dev", default-features = false, features = ["abomonation"] } -nova = { git = "https://github.com/lurk-lab/arecibo", branch = "dev", package = "arecibo", features = ["abomonate"]} +neptune = { git = "https://github.com/argumentcomputer/neptune", branch = "dev", default-features = false, features = ["abomonation"] } +nova = { git = "https://github.com/argumentcomputer/arecibo", branch = "dev", package = "arecibo", features = ["abomonate"]} once_cell = "1.18.0" pairing = { version = "0.23" } pasta_curves = { version = "0.5.0" } @@ -143,11 +143,11 @@ tracing-subscriber = "0.3.17" # All workspace members should inherit these keys # for package declarations. [workspace.package] -authors = ["Lurk Lab Engineering "] +authors = ["Argument Engineering "] edition = "2021" homepage = "https://lurk-lang.org/" license = "MIT OR Apache-2.0" -repository = "https://github.com/lurk-lab/lurk-rs" +repository = "https://github.com/argumentcomputer/lurk-rs" rust-version = "1.74.1" [[bin]] diff --git a/LICENSE-MIT b/LICENSE-MIT index 60e830f59c..4fe373e605 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Lurk Lab +Copyright (c) 2023 Argument Computer Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2e8d424a30..80145a3cbc 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Lurk -![lurk-rs](https://github.com/lurk-lab/lurk-rs/actions/workflows/ci.yml/badge.svg) +![lurk-rs](https://github.com/argumentcomputer/lurk-rs/actions/workflows/ci.yml/badge.svg) ![minimum rustc 1.70][msrv-image] -[![dependency status](https://deps.rs/repo/github/lurk-lab/lurk-rs/status.svg)](https://deps.rs/repo/github/lurk-lab/lurk-rs) +[![dependency status](https://deps.rs/repo/github/argumentcomputer/lurk-rs/status.svg)](https://deps.rs/repo/github/argumentcomputer/lurk-rs) ![crates.io][crates-image] [msrv-image]: https://img.shields.io/badge/rustc-1.70+-blue.svg @@ -12,25 +12,25 @@ Lurk is currently in [Beta](https://blog.lurk-lang.org/posts/lurk-beta/), which is backwards compatible with code that ran in Lurk Alpha and is expected to be compatible with Lurk 1.0. However, some low-level data representations are anticipated to change, and we will be refactoring the evaluation model (and consequently its circuit) for efficiency purposes. Also note that since Lurk inherits some security properties from the underlying proving system, those who would rely on Lurk should investigate the security and status of Nova/SuperNova itself. We encourage early adopters to begin writing real applications taking advantage of Lurk so you can begin to familiarize yourself with the programming model. Likewise, we welcome your feedback -- which will help ensure ongoing development meets user need. -For support and discussions, please visit our [Zulip forum](https://zulip.lurk-lab.com/). +For support and discussions, please visit our [Zulip forum](https://zulip.argument.xyz/). # Overview -Lurk is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp. A reference implementation focused on describing and developing the core language can be found in the [`lurk`](https://github.com/lurk-lab/lurk-lisp) repo. +Lurk is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp. A reference implementation focused on describing and developing the core language can be found in the [`lurk`](https://github.com/argumentcomputer/lurk-lisp) repo. Lurk's distinguishing feature relative to most programming languages is that correct execution of Lurk programs can be directly proved using zk-SNARKs. The resulting proofs are succinct: they are relatively small, can be verified quickly, and they reveal only the information explicitly contained in the statement to be proved. For more detailed information, refer to the paper: [https://eprint.iacr.org/2023/369](https://eprint.iacr.org/2023/369) -Lurk's distinguishing feature relative to most zk-SNARK authoring languages is that Lurk is Turing complete, so arbitrary computational claims can be made and proved (subject to resource limitations, obviously). Because Lurk is a Lisp, its code is simply Lurk data, and any Lurk data can be directly evaluated as a Lurk program. Lurk constructs compound data using SNARK-friendly Poseidon hashes (provided by [Neptune](https://github.com/lurk-lab/neptune)), so its data is naturally content-addressable. +Lurk's distinguishing feature relative to most zk-SNARK authoring languages is that Lurk is Turing complete, so arbitrary computational claims can be made and proved (subject to resource limitations, obviously). Because Lurk is a Lisp, its code is simply Lurk data, and any Lurk data can be directly evaluated as a Lurk program. Lurk constructs compound data using SNARK-friendly Poseidon hashes (provided by [Neptune](https://github.com/argumentcomputer/neptune)), so its data is naturally content-addressable. # Proofs Integration with backend proving systems and tooling for proof generation are both still very early. Performance and user experience still have room for significant optimization and improvement, but simple examples can be found in the [demo example directory](demo/). # Backends -- Nova is Lurk's officially-supported IVC backend. It uses Lurk Lab's Arecibo fork of the [Nova proving system](https://github.com/lurk-lab/arecibo) and the Pasta Curves. -- SuperNova is Lurk's in-development NIVC backend. It uses Arecibo's [SuperNova extension to the Nova proving system](https://github.com/lurk-lab/arecibo/tree/dev/src/supernova) and the Pasta Curves. +- Nova is Lurk's officially-supported IVC backend. It uses Argument Computer Corporation's Arecibo fork of the [Nova proving system](https://github.com/argumentcomputer/arecibo) and the Pasta Curves. +- SuperNova is Lurk's in-development NIVC backend. It uses Arecibo's [SuperNova extension to the Nova proving system](https://github.com/argumentcomputer/arecibo/tree/dev/src/supernova) and the Pasta Curves. - Future work may target Halo2 or other proving systems. It is an explicit design goal that statements about the evaluation of Lurk programs have identical semantic meaning across backends, with the qualification that Lurk language instances are themselves parameterized on scalar field and hash function. When backends use the same scalar field and hash function, they can be used to generate equivalent proofs. This is because the concrete representation of content-addressed data is fixed. @@ -57,7 +57,7 @@ Please note that the Lurk language and spec will be versioned independently from ## Submodules -Lurk source files used in tests are in the [lurk-lib](https://github.com/lurk-lab/lurk-lib) submodule. You must +Lurk source files used in tests are in the [lurk-lib](https://github.com/argumentcomputer/lurk-lib) submodule. You must initialize and update submodules before test will pass: ```ignore diff --git a/benches/sha256.rs b/benches/sha256.rs index d880a90322..12ea32adfd 100644 --- a/benches/sha256.rs +++ b/benches/sha256.rs @@ -378,7 +378,7 @@ cfg_if::cfg_if! { targets = nivc_prove_benchmarks // TODO: Add when compressed SNARK is implemented for SuperNova - // https://github.com/lurk-lab/arecibo/issues/27https://github.com/lurk-lab/arecibo/issues/27 + // https://github.com/argumentcomputer/arecibo/issues/27https://github.com/argumentcomputer/arecibo/issues/27 // nivc_prove_compressed_benchmarks } } else { @@ -399,7 +399,7 @@ cfg_if::cfg_if! { targets = nivc_prove_benchmarks // TODO: Add when compressed SNARK is implemented for SuperNova - // https://github.com/lurk-lab/arecibo/issues/27https://github.com/lurk-lab/arecibo/issues/27 + // https://github.com/argumentcomputer/arecibo/issues/27https://github.com/argumentcomputer/arecibo/issues/27 // nivc_prove_compressed_benchmarks } } diff --git a/deny.toml b/deny.toml index 280fb6299b..cdb75491df 100644 --- a/deny.toml +++ b/deny.toml @@ -270,7 +270,7 @@ allow-git = [] [sources.allow-org] # 1 or more github.com organizations to allow git sources for -github = ["lurk-lab"] +github = ["argumentcomputer"] # 1 or more gitlab.com organizations to allow git sources for # gitlab = [""] # 1 or more bitbucket.org organizations to allow git sources for diff --git a/examples/keccak.rs b/examples/keccak.rs index df93a02349..eace54a0e0 100644 --- a/examples/keccak.rs +++ b/examples/keccak.rs @@ -5,7 +5,7 @@ //! Declare a `CircomGadget` implementing a `reference` pointing to a valid Circom Gadget repository //! and an existing release `version`. If the `CircomCoprocessor` can not find it locally it will directly //! fetch the r1cs and wasm files from Github. When doing so, the files will be fetched from the repository -//! `https://github.com/lurk-lab/keccak-circom-gadget` and the release `v0.1.0`. +//! `https://github.com/argumentcomputer/keccak-circom-gadget` and the release `v0.1.0`. use bellpepper_core::boolean::{AllocatedBit, Boolean}; use bellpepper_core::num::AllocatedNum; use bellpepper_core::{ConstraintSystem, SynthesisError}; @@ -234,7 +234,7 @@ impl CircomKeccak { CircomKeccak { n, _p: PhantomData, - reference: CircomGadgetReference::new("lurk-lab/keccak-circom-gadget").unwrap(), + reference: CircomGadgetReference::new("argumentcomputer/keccak-circom-gadget").unwrap(), } } } diff --git a/foil/Cargo.toml b/foil/Cargo.toml index ab5afc96de..ed3b7ef261 100644 --- a/foil/Cargo.toml +++ b/foil/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" authors = ["porcuquine "] description = "Flat Optimization Intermediate Language" -repository = "https://github.com/lurk-lab/lurk-rs" +repository = "https://github.com/argumentcomputer/lurk-rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/notes/reduction-notes.md b/notes/reduction-notes.md index 6ae7b1e587..d65a618705 100644 --- a/notes/reduction-notes.md +++ b/notes/reduction-notes.md @@ -3,7 +3,7 @@ This document contains general notes about the design, rationale, and implementation of the Lurk reduction step. For a more normalized (but still WIP) specification, see the [Eval Spec](eval.md) -The [Lurk Language Specification](https://github.com/lurk-lab/lurk/blob/master/spec/v0-1.md) defines evaluation +The [Lurk Language Specification](https://github.com/argumentcomputer/lurk/blob/master/spec/v0-1.md) defines evaluation semantics without specifying the internal data structures or computational steps which an implementation must use to calculate an evaluation. `lurk-rs` implements a concrete instance of the Lurk language for which proofs of correct evaluation can be generated. `lurk-rs` generates zk-SNARK proofs for multiple backends, and verification of these @@ -13,7 +13,7 @@ corresponding arithmetic circuit. The initial Lurk circuit implementation is spe Because the circuit must check the computation to be proved, many aspects of the implementation itself must be fully specified. The reference implementation of Lurk expression evaluation in -[`eval.rs`](https://github.com/lurk-lab/lurk-rs/blob/main/src/lem/eval.rs) provides an intermediate step between the +[`eval.rs`](https://github.com/argumentcomputer/lurk-rs/blob/main/src/lem/eval.rs) provides an intermediate step between the high-level specification and the low-level circuit. Not every aspect of the implementation is essential, but every part which directly corresponds to the layout of the constraint system is. @@ -29,10 +29,10 @@ This is true in three distinct ways: 3. When parallelizing synthesis (not currently implemented) of many logically sequential steps. Taking these one at a time: -1. Because the SNARK-friendly Poseidon hashes (provided by the [Neptune](https://github.com/lurk-lab/neptune) +1. Because the SNARK-friendly Poseidon hashes (provided by the [Neptune](https://github.com/argumentcomputer/neptune) library) are relatively expensive, and because Lurk does not provide explicit access to the hash values, we avoid computing them during evaluation -- instead relying on the - [Store](https://github.com/lurk-lab/lurk-rs/blob/main/src/lem/store.rs) to manage cheaper expression pointers in a way + [Store](https://github.com/argumentcomputer/lurk-rs/blob/main/src/lem/store.rs) to manage cheaper expression pointers in a way that preserves equality. All such pointers are resolved to content-addressable tagged hashes before circuit synthesis. The Store is used during synthesis when the preimage of a hash known at synthesis needs to be 'looked up'. @@ -44,7 +44,7 @@ Taking these one at a time: As a matter of interest, we note that the `lurk-rs` evaluator runs about 7x faster than the one implemented in [Common -Lisp](https://github.com/lurk-lab/lurk/blob/master/api/api.lisp). The latter's design does not target speed, and we +Lisp](https://github.com/argumentcomputer/lurk/blob/master/api/api.lisp). The latter's design does not target speed, and we make this observation only to support our suggestion that the `lurk-rs` evaluator performs well relative to the cost of proving. It makes sense to evaluate many frames at a time before proving because doing so is cheap. diff --git a/notes/soundness-notes.md b/notes/soundness-notes.md index aff7edbb95..9dec13c40e 100644 --- a/notes/soundness-notes.md +++ b/notes/soundness-notes.md @@ -100,10 +100,10 @@ the result of a previous commitment, then the committed value is already known. possible to find another such value-secret pair. In other words, if a proof of commitment opening can be created at all, then we claim that the private input used in the proof *must* have been one initially produced via `commit`. -We delegate this claim to [neptune](https://github.com/lurk-lab/neptune) -- Lurk's underlying Poseidon +We delegate this claim to [neptune](https://github.com/argumentcomputer/neptune) -- Lurk's underlying Poseidon implementation. Poseidon's cryptographic security is described in [the paper](https://eprint.iacr.org/2019/458.pdf), and `neptune`'s implementation has been -[audited](https://github.com/lurk-lab/neptune/blob/master/poseidon-in-filecoin-final-report.pdf). +[audited](https://github.com/argumentcomputer/neptune/blob/master/poseidon-in-filecoin-final-report.pdf). ### Implicit Commitments (expressions) @@ -158,7 +158,7 @@ from the expression. Immediate values are derived with the identity function, an their constituents (both type and value elements) using a hash of appropriate arity and a type-specific preimage layout. For example, an actual Lurk cons has type tag -[`0x01`](https://github.com/lurk-lab/lurk-rs/blob/a1242270a1285c15b7edb0ab1440f2247f950ead/src/store.rs#L2790), and its +[`0x01`](https://github.com/argumentcomputer/lurk-rs/blob/a1242270a1285c15b7edb0ab1440f2247f950ead/src/store.rs#L2790), and its value is `P4(t0, v0, t1, v1)` -- where `P4` is a 4-ary Poseidon hash, `t0` is the type tag of the first paired expression, `v0` is the value element of the first paired expression, `t1` is the type tag of the second paired expression, and `v1` is the value element of the second paired expression. diff --git a/src/coprocessor/circom/README.md b/src/coprocessor/circom/README.md index b645371c91..097b8d0e40 100644 --- a/src/coprocessor/circom/README.md +++ b/src/coprocessor/circom/README.md @@ -8,8 +8,8 @@ with this particular programing language. ## Overview There are two key components to have in mind when thinking about the Circom Coprocessor: -- `CircomCoprocessor`: The shim that exposes a Circom gadget as a Lurk Coprocessor. It leverages [`circom-scotia`](https://github.com/lurk-lab/circom-scotia) -to compile Circom-based circuits to [Bellpepper](https://github.com/lurk-lab/bellpepper), thus making them usable in our stack. +- `CircomCoprocessor`: The shim that exposes a Circom gadget as a Lurk Coprocessor. It leverages [`circom-scotia`](https://github.com/argumentcomputer/circom-scotia) +to compile Circom-based circuits to [Bellpepper](https://github.com/argumentcomputer/bellpepper), thus making them usable in our stack. - `CircomGadget`: The Circom gadget proper. Refers to the r1cs and wasm files compiled from the targeted circom circuit that will be used in our proving flow. Those compiled files can live either locally or in a Github release. @@ -36,8 +36,8 @@ For remote gadgets, the `CircomCoprocessor` will use the _reference_ of the `Ci Github repository. In this case, there are a few constraints that needs to be followed: 1. _reference_ format: **must** be formatted as `/` as would a Github repository 2. Compiled Circom files available in a release: the compiled circom files, r1cs and wasm, **must** be made available in an release -in the repository. To help fulfill this constraint, we provide [a template of a Gadget repository](https://github.com/lurk-lab/template-circom-gadget). -3. Compiled Circom files names: The name of the compiled circom files **must** be the same as the repository (e.g.: `lurk-lab/keccak` -> `keccak.wasm` & `keccak.r1cs`). +in the repository. To help fulfill this constraint, we provide [a template of a Gadget repository](https://github.com/argumentcomputer/template-circom-gadget). +3. Compiled Circom files names: The name of the compiled circom files **must** be the same as the repository (e.g.: `argumentcomputer/keccak` -> `keccak.wasm` & `keccak.r1cs`). This effectively limits the number of circuit available per repository to one. 4. _version_ specification: As we are looking for file in a specific release the `CircomGadget` **must** be specified with a correct release version. diff --git a/src/proof/tests/nova_tests.rs b/src/proof/tests/nova_tests.rs index f5672b9f28..995c4b58e9 100644 --- a/src/proof/tests/nova_tests.rs +++ b/src/proof/tests/nova_tests.rs @@ -1851,7 +1851,7 @@ fn test_prove_fibonacci() { ); } -/// This test is a follow up to https://github.com/lurk-lab/lurk-rs/pull/931, +/// This test is a follow up to https://github.com/argumentcomputer/lurk-rs/pull/931, /// which reverts a PR that made the "parallel steps" flow break #[test] #[ignore] From f042a906774138817a63cb2a5e601b33ccdef356 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:55:48 -0400 Subject: [PATCH 2/5] Cleanup --- README.md | 4 ++-- benches/sha256.rs | 4 ++-- notes/reduction-notes.md | 4 ++-- notes/soundness-notes.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 80145a3cbc..a7621ebec2 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ For support and discussions, please visit our [Zulip forum](https://zulip.argume # Overview -Lurk is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp. A reference implementation focused on describing and developing the core language can be found in the [`lurk`](https://github.com/argumentcomputer/lurk-lisp) repo. +Lurk is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp. A reference implementation focused on describing and developing the core language can be found in the [`lurk-lisp`](https://github.com/argumentcomputer/lurk-lisp) repo. Lurk's distinguishing feature relative to most programming languages is that correct execution of Lurk programs can be directly proved using zk-SNARKs. The resulting proofs are succinct: they are relatively small, can be verified quickly, and they reveal only the information explicitly contained in the statement to be proved. @@ -29,7 +29,7 @@ Lurk's distinguishing feature relative to most zk-SNARK authoring languages is t Integration with backend proving systems and tooling for proof generation are both still very early. Performance and user experience still have room for significant optimization and improvement, but simple examples can be found in the [demo example directory](demo/). # Backends -- Nova is Lurk's officially-supported IVC backend. It uses Argument Computer Corporation's Arecibo fork of the [Nova proving system](https://github.com/argumentcomputer/arecibo) and the Pasta Curves. +- Nova is Lurk's officially-supported IVC backend. It uses Argument's Arecibo fork of the [Nova proving system](https://github.com/argumentcomputer/arecibo) and the Pasta Curves. - SuperNova is Lurk's in-development NIVC backend. It uses Arecibo's [SuperNova extension to the Nova proving system](https://github.com/argumentcomputer/arecibo/tree/dev/src/supernova) and the Pasta Curves. - Future work may target Halo2 or other proving systems. diff --git a/benches/sha256.rs b/benches/sha256.rs index 12ea32adfd..718257b032 100644 --- a/benches/sha256.rs +++ b/benches/sha256.rs @@ -378,7 +378,7 @@ cfg_if::cfg_if! { targets = nivc_prove_benchmarks // TODO: Add when compressed SNARK is implemented for SuperNova - // https://github.com/argumentcomputer/arecibo/issues/27https://github.com/argumentcomputer/arecibo/issues/27 + // https://github.com/argumentcomputer/arecibo/issues/27 // nivc_prove_compressed_benchmarks } } else { @@ -399,7 +399,7 @@ cfg_if::cfg_if! { targets = nivc_prove_benchmarks // TODO: Add when compressed SNARK is implemented for SuperNova - // https://github.com/argumentcomputer/arecibo/issues/27https://github.com/argumentcomputer/arecibo/issues/27 + // https://github.com/argumentcomputer/arecibo/issues/27 // nivc_prove_compressed_benchmarks } } diff --git a/notes/reduction-notes.md b/notes/reduction-notes.md index d65a618705..29c70e7e65 100644 --- a/notes/reduction-notes.md +++ b/notes/reduction-notes.md @@ -3,7 +3,7 @@ This document contains general notes about the design, rationale, and implementation of the Lurk reduction step. For a more normalized (but still WIP) specification, see the [Eval Spec](eval.md) -The [Lurk Language Specification](https://github.com/argumentcomputer/lurk/blob/master/spec/v0-1.md) defines evaluation +The [Lurk Language Specification](https://github.com/argumentcomputer/lurk-lisp/blob/master/spec/v0-1.md) defines evaluation semantics without specifying the internal data structures or computational steps which an implementation must use to calculate an evaluation. `lurk-rs` implements a concrete instance of the Lurk language for which proofs of correct evaluation can be generated. `lurk-rs` generates zk-SNARK proofs for multiple backends, and verification of these @@ -44,7 +44,7 @@ Taking these one at a time: As a matter of interest, we note that the `lurk-rs` evaluator runs about 7x faster than the one implemented in [Common -Lisp](https://github.com/argumentcomputer/lurk/blob/master/api/api.lisp). The latter's design does not target speed, and we +Lisp](https://github.com/argumentcomputer/lurk-lisp/blob/master/api/api.lisp). The latter's design does not target speed, and we make this observation only to support our suggestion that the `lurk-rs` evaluator performs well relative to the cost of proving. It makes sense to evaluate many frames at a time before proving because doing so is cheap. diff --git a/notes/soundness-notes.md b/notes/soundness-notes.md index 9dec13c40e..faf07bdd9c 100644 --- a/notes/soundness-notes.md +++ b/notes/soundness-notes.md @@ -4,7 +4,7 @@ This document contains general notes about the soundness of Lurk proofs. We choose a somewhat elaborate functional commitment code example (lightly modified from [A Programmer's Introduction to -Lurk](https://blog.lurk-lang.org/posts/prog-intro/)) because it exercises many language features. +Lurk](https://argument.xyz/blog/prog-intro/)) because it exercises many language features. ``` > (letrec ((reduce (lambda (acc f list) From 05eb13a1be79491a0ada17f83b236d2f2b711dd0 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:39:02 -0400 Subject: [PATCH 3/5] Rename `lurk-rs` -> `lurk-beta` --- .github/workflows/ci.yml | 2 +- .github/workflows/nightly.yml | 6 +++--- CONTRIBUTING.md | 14 +++++++------- Cargo.toml | 3 +-- README.md | 16 ++++++++-------- benches/common/mod.rs | 2 +- foil/Cargo.toml | 2 +- notes/reduction-notes.md | 22 +++++++++++----------- notes/soundness-notes.md | 2 +- src/cli/config.rs | 2 +- src/config.rs | 4 ++-- src/proof/tests/nova_tests.rs | 2 +- 12 files changed, 38 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7843a6fa5..8f3b2b608d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,6 +57,6 @@ jobs: with: fail-fast: true - # Lint dependencies for licensing and auditing issues as per https://github.com/argumentcomputer/lurk-rs/blob/main/deny.toml + # Lint dependencies for licensing and auditing issues as per https://github.com/argumentcomputer/lurk-beta/blob/main/deny.toml licenses-audits: uses: argumentcomputer/ci-workflows/.github/workflows/licenses-audits.yml@main diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 6297c2eb88..7b2277d2ee 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -52,15 +52,15 @@ jobs: - name: Amend MESSAGE for tests if: steps.tests.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Exhaustive test run failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Exhaustive test run failed in https://github.com/argumentcomputer/lurk-beta/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Amend MESSAGE for benches if: steps.benches.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Bench compilation failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Bench compilation failed in https://github.com/argumentcomputer/lurk-beta/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Amend MESSAGE for doctests if: steps.doctests.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Doc test run failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Doc test run failed in https://github.com/argumentcomputer/lurk-beta/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Find the last report issue open id: last_issue diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cf27327914..d667e64fb0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,13 +62,13 @@ flowchart TD ## Issues We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue. -## Lurk-rs Repository Organization and Dependency Management +## Lurk-beta Repository Organization and Dependency Management -Welcome to the Lurk-rs project! Here's an introduction to the branch organization and the chain of dependencies in the Lurk-rs repository. +Welcome to the Lurk-beta project! Here's an introduction to the branch organization and the chain of dependencies in the Lurk-beta repository. ### Major Dependencies -The main repo is [lurk-rs](https://github.com/argumentcomputer/lurk-rs) with major dependencies: +The main repo is [lurk-beta](https://github.com/argumentcomputer/lurk-beta) with major dependencies: - [bellpepper](https://github.com/argumentcomputer/bellpepper) - [neptune](https://github.com/argumentcomputer/neptune) @@ -76,7 +76,7 @@ The main repo is [lurk-rs](https://github.com/argumentcomputer/lurk-rs) with maj ### Forked Dependencies -Additionally, Lurk-rs depends on the following forked repositories: +Additionally, Lurk-beta depends on the following forked repositories: - [pasta_curves](https://github.com/argumentcomputer/pasta_curves) (forked from [zcash/pasta_curves](https://github.com/zcash/pasta_curves)) - [pasta-msm](https://github.com/argumentcomputer/pasta-msm) (forked from [supranational/pasta-msm](https://github.com/supranational/pasta-msm)) @@ -105,7 +105,7 @@ For rapid iterations and to address issues in these dependencies, Lurk's **main* ```mermaid graph TD - LURK[lurk-rs] --> BELL[bellpepper] + LURK[lurk-beta] --> BELL[bellpepper] LURK --> NEPT[neptune] LURK --> AREC[arecibo] AREC --> NOVA[nova] @@ -129,9 +129,9 @@ To trigger a benchmark: Then, check the following link for the benchmark reports: -https://argumentcomputer.github.io/lurk-rs/benchmarks/criterion/reports/ +https://argumentcomputer.github.io/lurk-beta/benchmarks/criterion/reports/ Ask a maintainer for a benchmark report if you can't find a recent one. ## License -By contributing to lurk-lang, you agree that your contributions will be licensed under both [MIT](https://opensource.org/license/MIT) and [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) licenses. +By contributing to `lurk-beta`, you agree that your contributions will be licensed under both [MIT](https://opensource.org/license/MIT) and [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) licenses. diff --git a/Cargo.toml b/Cargo.toml index 6279f6a586..8b50666974 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,9 +145,8 @@ tracing-subscriber = "0.3.17" [workspace.package] authors = ["Argument Engineering "] edition = "2021" -homepage = "https://lurk-lang.org/" license = "MIT OR Apache-2.0" -repository = "https://github.com/argumentcomputer/lurk-rs" +repository = "https://github.com/argumentcomputer/lurk-beta" rust-version = "1.74.1" [[bin]] diff --git a/README.md b/README.md index a7621ebec2..5784109940 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ # Lurk -![lurk-rs](https://github.com/argumentcomputer/lurk-rs/actions/workflows/ci.yml/badge.svg) +![lurk-beta](https://github.com/argumentcomputer/lurk-beta/actions/workflows/ci.yml/badge.svg) ![minimum rustc 1.70][msrv-image] -[![dependency status](https://deps.rs/repo/github/argumentcomputer/lurk-rs/status.svg)](https://deps.rs/repo/github/argumentcomputer/lurk-rs) +[![dependency status](https://deps.rs/repo/github/argumentcomputer/lurk-beta/status.svg)](https://deps.rs/repo/github/argumentcomputer/lurk-beta) ![crates.io][crates-image] [msrv-image]: https://img.shields.io/badge/rustc-1.70+-blue.svg [crates-image]: https://img.shields.io/crates/v/lurk.svg -# Status (Beta) +# Status +> [!NOTE] This repository is in maintenance mode. Development has moved to https://github.com/argumentcomputer/lurk. -Lurk is currently in [Beta](https://blog.lurk-lang.org/posts/lurk-beta/), which is backwards compatible with code that ran in Lurk Alpha and is expected to be compatible with Lurk 1.0. However, some low-level data representations are anticipated to change, and we will be refactoring the evaluation model (and consequently its circuit) for efficiency purposes. Also note that since Lurk inherits some security properties from the underlying proving system, those who would rely on Lurk should investigate the security and status of Nova/SuperNova itself. We encourage early adopters to begin writing real applications taking advantage of Lurk so you can begin to familiarize yourself with the programming model. Likewise, we welcome your feedback -- which will help ensure ongoing development meets user need. +This repository contains the implementation for [Lurk Beta](https://argument.xyz/blog/lurk-beta/), which is backwards compatible with code that ran in Lurk Alpha and is expected to be compatible with Lurk 1.0. However, some low-level data representations are anticipated to change, and we will be refactoring the evaluation model (and consequently its circuit) for efficiency purposes. Also note that since Lurk inherits some security properties from the underlying proving system, those who would rely on Lurk should investigate the security and status of Nova/SuperNova itself. We encourage early adopters to begin writing real applications taking advantage of Lurk so you can begin to familiarize yourself with the programming model. Likewise, we welcome your feedback -- which will help ensure ongoing development meets user need. For support and discussions, please visit our [Zulip forum](https://zulip.argument.xyz/). @@ -40,12 +41,11 @@ It is an explicit design goal that statements about the evaluation of Lurk progr Lurk backend integration is still immature, so current performance is not representative. As a rough approximation, we estimate that for entirely general computation using Lurk's universal circuit, Nova proving throughput will be on the order of 1,000 iterations per second per GPU. We expect that most compute-heavy applications will use optimized 'coprocessor' circuits, which will dramatically improve performance. Planned improvements to Nova will allow for smaller inner circuits, further improving throughput -- and for full parallelization of reduction proofs. # Specs -- [Lurk Spec](https://blog.lurk-lang.org/posts/circuit-spec) - [Evaluation Spec](notes/eval.md) - [Reduction Notes](notes/reduction-notes.md) # Security Audit -Lurk's Alpha release has undergone a [security audit](https://blog.lurk-lang.org/posts/alpha-audit/inference-security-assessment-3-2023.pdf) as of 03/29/2023, performed by [Inference](https://inference.ag/about-us/). +Lurk's Alpha release has undergone a [security audit](https://argument.xyz/inference-security-assessment-3-2023.pdf) as of 03/29/2023, performed by [Inference](https://inference.ag/about-us/). # Versioning @@ -96,7 +96,7 @@ Set the environment variable `LURK_FIELD` to specify the scalar field of the Lur - `LURK_FIELD=VESTA`: scalar field of Vesta ```ignore -➜ lurk-rs ✗ bin/lurk +➜ lurk-beta ✗ bin/lurk Finished release [optimized] target(s) in 0.06s Running `target/release/lurk` Lurk REPL welcomes you. @@ -107,7 +107,7 @@ Lurk REPL welcomes you. Or enable `info` log-level for a trace of reduction frames: ```ignore -➜ lurk-rs ✗ RUST_LOG=lurk::lem::eval=info bin/lurk +➜ lurk-beta ✗ RUST_LOG=lurk::lem::eval=info bin/lurk Finished release [optimized] target(s) in 0.05s Running `target/release/lurk` Lurk REPL welcomes you. diff --git a/benches/common/mod.rs b/benches/common/mod.rs index 3a8c172a9c..0bfa2de125 100644 --- a/benches/common/mod.rs +++ b/benches/common/mod.rs @@ -6,7 +6,7 @@ use lurk::config::lurk_config; use once_cell::sync::Lazy; /// Edit this path to use a config file specific to benchmarking -/// E.g. `Utf8PathBuf::from("/home//lurk-rs/lurk-bench.toml");` +/// E.g. `Utf8PathBuf::from("/home//lurk-beta/lurk-bench.toml");` pub(crate) static BENCH_CONFIG_PATH: Lazy = Lazy::new(|| lurk_default_dir().join("lurk.toml")); diff --git a/foil/Cargo.toml b/foil/Cargo.toml index ed3b7ef261..5895716e9a 100644 --- a/foil/Cargo.toml +++ b/foil/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" authors = ["porcuquine "] description = "Flat Optimization Intermediate Language" -repository = "https://github.com/argumentcomputer/lurk-rs" +repository = "https://github.com/argumentcomputer/lurk-beta" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/notes/reduction-notes.md b/notes/reduction-notes.md index 29c70e7e65..5c47dd9ca8 100644 --- a/notes/reduction-notes.md +++ b/notes/reduction-notes.md @@ -5,15 +5,15 @@ more normalized (but still WIP) specification, see the [Eval Spec](eval.md) The [Lurk Language Specification](https://github.com/argumentcomputer/lurk-lisp/blob/master/spec/v0-1.md) defines evaluation semantics without specifying the internal data structures or computational steps which an implementation must use to -calculate an evaluation. `lurk-rs` implements a concrete instance of the Lurk language for which proofs of correct -evaluation can be generated. `lurk-rs` generates zk-SNARK proofs for multiple backends, and verification of these +calculate an evaluation. `lurk-beta` implements a concrete instance of the Lurk language for which proofs of correct +evaluation can be generated. `lurk-beta` generates zk-SNARK proofs for multiple backends, and verification of these proofs requires reference to a verification key whose identity is derived from the computation encoded in the corresponding arithmetic circuit. The initial Lurk circuit implementation is specified as a Rank-1 Constraint System (R1CS), from which Nova or SuperNova proofs are created. Because the circuit must check the computation to be proved, many aspects of the implementation itself must be fully specified. The reference implementation of Lurk expression evaluation in -[`eval.rs`](https://github.com/argumentcomputer/lurk-rs/blob/main/src/lem/eval.rs) provides an intermediate step between the +[`eval.rs`](https://github.com/argumentcomputer/lurk-beta/blob/main/src/lem/eval.rs) provides an intermediate step between the high-level specification and the low-level circuit. Not every aspect of the implementation is essential, but every part which directly corresponds to the layout of the constraint system is. @@ -32,7 +32,7 @@ Taking these one at a time: 1. Because the SNARK-friendly Poseidon hashes (provided by the [Neptune](https://github.com/argumentcomputer/neptune) library) are relatively expensive, and because Lurk does not provide explicit access to the hash values, we avoid computing them during evaluation -- instead relying on the - [Store](https://github.com/argumentcomputer/lurk-rs/blob/main/src/lem/store.rs) to manage cheaper expression pointers in a way + [Store](https://github.com/argumentcomputer/lurk-beta/blob/main/src/lem/store.rs) to manage cheaper expression pointers in a way that preserves equality. All such pointers are resolved to content-addressable tagged hashes before circuit synthesis. The Store is used during synthesis when the preimage of a hash known at synthesis needs to be 'looked up'. @@ -43,9 +43,9 @@ Taking these one at a time: can then be fully parallelized as desired. -As a matter of interest, we note that the `lurk-rs` evaluator runs about 7x faster than the one implemented in [Common +As a matter of interest, we note that the `lurk-beta` evaluator runs about 7x faster than the one implemented in [Common Lisp](https://github.com/argumentcomputer/lurk-lisp/blob/master/api/api.lisp). The latter's design does not target speed, and we -make this observation only to support our suggestion that the `lurk-rs` evaluator performs well relative to the cost of +make this observation only to support our suggestion that the `lurk-beta` evaluator performs well relative to the cost of proving. It makes sense to evaluate many frames at a time before proving because doing so is cheap. @@ -64,9 +64,9 @@ Read from lurk-lib/example/fib.lurk: (LETREC bin/lurk lurk-lib/example/fib.lurk 2.02s user 0.32s system 98% cpu 2.366 total ``` -## `lurk-rs` (Rust), `(fib 5400)` +## `lurk-beta` (Rust), `(fib 5400)` ``` -➜ lurk-rs git:(spec) ✗ time bin/lurk ../lurk/lurk-lib/example/fib.lurk +➜ lurk-beta git:(spec) ✗ time bin/lurk ../lurk/lurk-lib/example/fib.lurk Finished release [optimized] target(s) in 0.06s Running `target/release/examples/lurk ../lurk/lurk-lib/example/fib.lurk` Lurk REPL welcomes you. @@ -86,7 +86,7 @@ Evaled: 0x1c5d87e5252b038cb7badf6ba7618014c7c16b1541ebece39ab9a40d4f030cbd bin/lurk ../lurk/lurk-lib/example/fib.lurk 0.21s user 0.04s system 74% cpu 0.335 total ``` -Because it also highlights an important detail of the formal reduction algorithm, we note that `lurk-rs` evaluation +Because it also highlights an important detail of the formal reduction algorithm, we note that `lurk-beta` evaluation automatically performs tail-call elimination, which the Common Lisp implementation currently does not. For that reason, the CL implementation encounters a stack overflow by `(fib 5500)`. @@ -108,10 +108,10 @@ This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away. ``` -Meanwhile, `lurk-rs` happily computes `(fib 500000)` in 12 seconds. +Meanwhile, `lurk-beta` happily computes `(fib 500000)` in 12 seconds. ``` -➜ lurk-rs git:(spec) ✗ time bin/lurk ../lurk/lurk-lib/example/fib.lurk +➜ lurk-beta git:(spec) ✗ time bin/lurk ../lurk/lurk-lib/example/fib.lurk Finished release [optimized] target(s) in 0.06s Running `target/release/examples/lurk ../lurk/lurk-lib/example/fib.lurk` Lurk REPL welcomes you. diff --git a/notes/soundness-notes.md b/notes/soundness-notes.md index faf07bdd9c..b339f70b37 100644 --- a/notes/soundness-notes.md +++ b/notes/soundness-notes.md @@ -158,7 +158,7 @@ from the expression. Immediate values are derived with the identity function, an their constituents (both type and value elements) using a hash of appropriate arity and a type-specific preimage layout. For example, an actual Lurk cons has type tag -[`0x01`](https://github.com/argumentcomputer/lurk-rs/blob/a1242270a1285c15b7edb0ab1440f2247f950ead/src/store.rs#L2790), and its +[`0x01`](https://github.com/argumentcomputer/lurk-beta/blob/a1242270a1285c15b7edb0ab1440f2247f950ead/src/store.rs#L2790), and its value is `P4(t0, v0, t1, v1)` -- where `P4` is a 4-ary Poseidon hash, `t0` is the type tag of the first paired expression, `v0` is the value element of the first paired expression, `t1` is the type tag of the second paired expression, and `v1` is the value element of the second paired expression. diff --git a/src/cli/config.rs b/src/cli/config.rs index 2c0d24a0d6..58837c00fc 100644 --- a/src/cli/config.rs +++ b/src/cli/config.rs @@ -17,7 +17,7 @@ pub(crate) static CLI_CONFIG: OnceCell = OnceCell::new(); /// Gets the `CLI_CONFIG` settings. If uninitialized, sets the global variable /// in the following order (greatest to least precedence): -/// - `settings` map if provided, e.g. with key ("proofs", "$HOME/lurk-rs/proofs") +/// - `settings` map if provided, e.g. with key ("proofs", "$HOME/lurk-beta/proofs") /// This contains any CLI args, set e.g. by `lurk --proofs-dir /path/to/proofs_dir` /// - Env var per setting, e.g. `LURK_PROOFS_DIR` /// - Config file, which also has a configurable location (see `lurk_config_file()`), diff --git a/src/config.rs b/src/config.rs index 8ac79c02aa..f1cba94c89 100644 --- a/src/config.rs +++ b/src/config.rs @@ -17,7 +17,7 @@ pub static LURK_CONFIG_FILE: OnceCell = OnceCell::new(); /// Gets the `LURK_CONFIG` settings. If uninitialized, sets the global variable /// in the following order (greatest to least precedence): -/// - `settings` map if provided, e.g. with key ("public_params_dir", "$HOME/lurk-rs/public_params") +/// - `settings` map if provided, e.g. with key ("public_params_dir", "$HOME/lurk-beta/public_params") /// - Env var per setting, e.g. `LURK_PUBLIC_PARAMS_DIR` /// - Config file, which also has a configurable location (see `lurk_config_file()`), /// and has the following syntax for e.g. TOML: @@ -36,7 +36,7 @@ pub fn lurk_config( /// Gets the `LURK_CONFIG_FILE` path. If uninitialized, sets the global variable /// in the following order (greatest to least precedence): -/// - `config_file` parameter if provided, e.g. "$HOME/lurk-rs/lurk-local.toml" +/// - `config_file` parameter if provided, e.g. "$HOME/lurk-beta/lurk-local.toml" /// - `LURK_CONFIG_FILE` env var /// - Default location at `$HOME/.lurk/lurk.toml` or `/.config/lurk.toml` on WASM. pub fn lurk_config_file(config_file: Option<&Utf8PathBuf>) -> &'static Utf8PathBuf { diff --git a/src/proof/tests/nova_tests.rs b/src/proof/tests/nova_tests.rs index 995c4b58e9..3fbc1fa9a5 100644 --- a/src/proof/tests/nova_tests.rs +++ b/src/proof/tests/nova_tests.rs @@ -1851,7 +1851,7 @@ fn test_prove_fibonacci() { ); } -/// This test is a follow up to https://github.com/argumentcomputer/lurk-rs/pull/931, +/// This test is a follow up to https://github.com/argumentcomputer/lurk-beta/pull/931, /// which reverts a PR that made the "parallel steps" flow break #[test] #[ignore] From c5245e199f7345646cd4749e7e3f5be3da245e4b Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:57:02 -0400 Subject: [PATCH 4/5] clippy --- .github/workflows/ci.yml | 2 +- Cargo.toml | 5 +++-- chain-server/src/client.rs | 1 + chain-server/src/server.rs | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f3b2b608d..cd0c9fe47e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ concurrency: jobs: linux: - runs-on: buildjet-16vcpu-ubuntu-2204 + runs-on: warp-ubuntu-2404-x64-16x steps: - uses: actions/checkout@v4 with: diff --git a/Cargo.toml b/Cargo.toml index 8b50666974..dbaf0f4a4f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ repository.workspace = true authors.workspace = true homepage.workspace = true license.workspace = true -rust-version = "1.74.1" # allows msrv verify to work in CI +rust-version = "1.79" # allows msrv verify to work in CI [dependencies] anyhow = { workspace = true } @@ -146,8 +146,9 @@ tracing-subscriber = "0.3.17" authors = ["Argument Engineering "] edition = "2021" license = "MIT OR Apache-2.0" +homepage = "https://argument.xyz" repository = "https://github.com/argumentcomputer/lurk-beta" -rust-version = "1.74.1" +rust-version = "1.79" [[bin]] name = "lurk" diff --git a/chain-server/src/client.rs b/chain-server/src/client.rs index fa4530f499..69052dbf87 100644 --- a/chain-server/src/client.rs +++ b/chain-server/src/client.rs @@ -26,6 +26,7 @@ use lurk::{ pub mod chain_prover { #![allow(unreachable_pub)] + #![allow(clippy::derive_partial_eq_without_eq)] tonic::include_proto!("chain_prover"); } diff --git a/chain-server/src/server.rs b/chain-server/src/server.rs index f2dad28722..146fc7bca3 100644 --- a/chain-server/src/server.rs +++ b/chain-server/src/server.rs @@ -42,6 +42,7 @@ use lurk::{ pub mod chain_prover { #![allow(unreachable_pub)] + #![allow(clippy::derive_partial_eq_without_eq)] tonic::include_proto!("chain_prover"); } From 8463d226a047f4c262d7cd2eceb2915702969b4f Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:35:51 -0400 Subject: [PATCH 5/5] Switch to Warpbuild for reliability --- .github/workflows/merge-tests.yml | 4 ++-- .github/workflows/nightly.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/merge-tests.yml b/.github/workflows/merge-tests.yml index 9a6d0b315e..a99225efd3 100644 --- a/.github/workflows/merge-tests.yml +++ b/.github/workflows/merge-tests.yml @@ -14,7 +14,7 @@ concurrency: jobs: linux-ignored: if: github.event_name != 'pull_request' || github.event.action == 'enqueued' - runs-on: buildjet-16vcpu-ubuntu-2204 + runs-on: warp-ubuntu-2404-x64-16x env: RUSTFLAGS: -D warnings steps: @@ -36,7 +36,7 @@ jobs: linux-arm: if: github.event_name != 'pull_request' || github.event.action == 'enqueued' - runs-on: buildjet-16vcpu-ubuntu-2204-arm + runs-on: warp-ubuntu-latest-arm64-16x env: RUSTFLAGS: -D warnings steps: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 7b2277d2ee..53966c52cb 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -9,7 +9,7 @@ on: jobs: linux_exhaustive: - runs-on: buildjet-16vcpu-ubuntu-2204 + runs-on: warp-ubuntu-2404-x64-32x steps: - uses: actions/checkout@v4 with: