From 2d199c05c979b092fd7dfc5be964e686978f331f Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Wed, 29 May 2024 14:01:19 -0700 Subject: [PATCH 1/8] chore: rename release, set latest release to pre-release --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e2316c50..507d599a7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,7 +42,7 @@ jobs: echo "release_name=Nightly ($(date '+%Y-%m-%d'))" >> $GITHUB_OUTPUT elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then echo "tag_name=latest" >> $GITHUB_OUTPUT - echo "release_name=Latest Release" >> $GITHUB_OUTPUT + echo "release_name=Latest" >> $GITHUB_OUTPUT else echo "tag_name=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT echo "release_name=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT @@ -205,14 +205,14 @@ jobs: with: name: ${{ needs.prepare.outputs.release_name }} tag_name: ${{ needs.prepare.outputs.tag_name }} - prerelease: ${{ env.IS_NIGHTLY }} + prerelease: ${{ env.IS_NIGHTLY || needs.prepare.outputs.tag_name == 'latest' }} body: ${{ needs.prepare.outputs.changelog }} files: | ${{ steps.artifacts.outputs.file_name }} ${{ steps.man.outputs.cargo_prove_man }} # If this is a nightly release, it also updates the release - # tagged `nightly` for compatibility with `foundryup` + # tagged `nightly` for compatibility with `sp1up` - name: Update nightly release if: ${{ env.IS_NIGHTLY }} uses: softprops/action-gh-release@v1 From 3d2d41f48afbfba8ed2101b171e19b6344638a6e Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Wed, 29 May 2024 16:32:12 -0700 Subject: [PATCH 2/8] fix: should say feature plonk --- sdk/src/provers/local.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/provers/local.rs b/sdk/src/provers/local.rs index 87379e164..41c9f56cf 100644 --- a/sdk/src/provers/local.rs +++ b/sdk/src/provers/local.rs @@ -80,7 +80,7 @@ impl Prover for LocalProver { public_values, }) } else { - panic!("plonk bn254 feature not enabled") + panic!("plonk feature not enabled") } } } From e25126c63dcf3915e81a3acd0f76dfbe7499cc14 Mon Sep 17 00:00:00 2001 From: Chris T Date: Wed, 29 May 2024 16:50:14 -0700 Subject: [PATCH 3/8] fix: double fibonacci program (#781) Co-authored-by: John Guibas Co-authored-by: Ratan Kaliani --- .github/workflows/pr.yml | 1 + examples/Cargo.lock | 20 +++++++++--------- .../aggregation => program}/Cargo.lock | 0 .../aggregation => program}/Cargo.toml | 2 +- .../elf/riscv32im-succinct-zkvm-elf | Bin 148932 -> 148792 bytes .../aggregation => program}/src/main.rs | 0 .../programs/fibonacci/src/main.rs | 20 ------------------ examples/aggregation/script/Cargo.toml | 3 +-- examples/aggregation/script/build.rs | 7 ++---- examples/aggregation/script/src/main.rs | 5 ++--- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1987812 -> 1987668 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 115988 -> 115988 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 127628 -> 127496 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 190336 -> 190204 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 295424 -> 295292 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 200476 -> 200476 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1174964 -> 1174828 bytes 17 files changed, 17 insertions(+), 41 deletions(-) rename examples/aggregation/{programs/aggregation => program}/Cargo.lock (100%) rename examples/aggregation/{programs/aggregation => program}/Cargo.toml (78%) rename examples/aggregation/{programs/aggregation => program}/elf/riscv32im-succinct-zkvm-elf (77%) rename examples/aggregation/{programs/aggregation => program}/src/main.rs (100%) delete mode 100644 examples/aggregation/programs/fibonacci/src/main.rs diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 656151dc7..47151dbc2 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -15,6 +15,7 @@ on: - "sdk/**" - "zkvm/**" - "tests/**" + - "examples/**" - ".github/workflows/**" merge_group: diff --git a/examples/Cargo.lock b/examples/Cargo.lock index 494c0d0f2..47160c32a 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -49,6 +49,16 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "aggregation-script" +version = "0.1.0" +dependencies = [ + "hex", + "sp1-helper", + "sp1-sdk", + "tracing", +] + [[package]] name = "ahash" version = "0.8.11" @@ -4660,16 +4670,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sp1-aggregation-example-script" -version = "0.1.0" -dependencies = [ - "hex", - "sp1-helper", - "sp1-sdk", - "tracing", -] - [[package]] name = "sp1-core" version = "0.1.0" diff --git a/examples/aggregation/programs/aggregation/Cargo.lock b/examples/aggregation/program/Cargo.lock similarity index 100% rename from examples/aggregation/programs/aggregation/Cargo.lock rename to examples/aggregation/program/Cargo.lock diff --git a/examples/aggregation/programs/aggregation/Cargo.toml b/examples/aggregation/program/Cargo.toml similarity index 78% rename from examples/aggregation/programs/aggregation/Cargo.toml rename to examples/aggregation/program/Cargo.toml index d3897f5ff..ee70949a7 100644 --- a/examples/aggregation/programs/aggregation/Cargo.toml +++ b/examples/aggregation/program/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] hex = "0.4.3" sha2 = "0.10.8" -sp1-zkvm = { path = "../../../../zkvm/entrypoint", features = ["verify"] } +sp1-zkvm = { path = "../../../zkvm/entrypoint", features = ["verify"] } [patch.crates-io] sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes.git", package = "sha2", branch = "patch-v0.10.8" } diff --git a/examples/aggregation/programs/aggregation/elf/riscv32im-succinct-zkvm-elf b/examples/aggregation/program/elf/riscv32im-succinct-zkvm-elf similarity index 77% rename from examples/aggregation/programs/aggregation/elf/riscv32im-succinct-zkvm-elf rename to examples/aggregation/program/elf/riscv32im-succinct-zkvm-elf index 1574c0edaef09cf75b2d89499b8b694d8de88174..755e55b012bcf4ab679be123be40d97b4f313caa 100755 GIT binary patch delta 4195 zcmbuCeNa`$8OGl|f`L&GDQ#(jVQ&;Q<-;ogq%9q-qT^&tHMP&)yVr9}r!$@A`~maZ zclX`*Fx`BE#yT+1zLkYD`Rnb z0B4hCsu;0e4WBz7u(g&VrP41zwg|HNITEHATWrH6SaY~om2u>?D_-vt85yzsY z9w{a|{IUhn3XiTt`qel##YJtcAUd{_)1cz;_a|^x4X05VdGk&bVw#0~Wh5bQ5rtQ9 z3X=8%;6$)9^OviMQozp4Pk{?e_E|MV+ragX^(ysYz^{@Mmkz&KOElll0&=AOH_3?4 zUW!?DM2oyE_6rDOz8;IIa(aFLdj)>VVL|Dry5(7d!S9cTD zW5N{a;OWN4OT12RTFR!da$@fY~c z9^Es6RWMa6LWa8yO~gPW4=jczGAoHL)pN>`8yx`0HbA42-vgI|eWb=tBH`JX?<4K2 z_M+ur6v|!zY9^Wt|KdYSr_(|VjAOuFGE}S>JPLMJsCl0jwT$Ik#tVtcn>by;LQ%=@ zAn>$32G7;5E@N|&Z*L>Y!&z{{G^V&v?9Yi3o^i55Wndq$_=Kd+f#bnUvKILO};PVVQm3TyWX}C``uD0q$=xl){_P zkXFPc?ZeHu1h9U#W4$-c--iw&fKlmit>&?Ut?+&cg={=z_~|Lr^H;D;rd}$+1~3fC z`P)&kr)F5_d9Vm@1e^kPR&dI8Bw*qf!M#YxP0p_Yx0w=tA55nCw_1n>A9d7KrRalj z(8eiN22k7zMnEo-6At0*z=3mv-CznZ0=fnk8+u|`1kBs80r~oycCTaJ9kn>JF;!sM$K)Go`E&Ahg6jy`{=r3Rw zV*z<+9;p!6(h|Ij7|xP@YfJR}RMx4mTrD__onKhefp_$jalkKvFPtRZdXzk)`inx&8QvsC|AxbaIYSo~7V^ zFv78~s|TMp@rU3uCiX*Ber@8{kpAEu<6_y^M|9S(tMm>AI0A5Cb5C({T#Mf4)rA9m4? zOz^r03(b+-4W2RALJ4yIU2qLv#mo7H;0MK0lUIbWs;Q;GPD1vl1&dgDLUaw;!_U zTJ{+hRr?R+>)y7|h)`=7ep(|#Bf`S0k>OhRzu0Q^Kga2R3um4!Bt3mYM#%r|Akqp4 z>X-5m`ej3y>-*n497<%$BKHfiWdCRVNo{qE@|0^(5u-#c>09h8T4Rjj{Tqw<2Ot0d delta 4272 zcmb7|e^8ZG8pogW3JR$SM9L&A=V~Gei}&6x2u5xi7CVuWnTwhVcquj!QPFfoU-C!t zOTk25P!thV{Ee&Zi>@dMHqNGL#g1)}%dC!>wvDaUxK81I&%NjRzRb8g?)wk(InQ~X z^PK0`xkGc2Z+o$C8E01yTc#{zD>p7#xQjI%3C-P@j6X-(=f2oCDQ)SzMY-b_ESR@I z<3223-{-@s`mj0Lcs~}(mgyOO>?>dPoIds`7U9ia(dLG-p}wyKS;&uwinXdxR?MdB z!#L|3rgALz#WEv>cKv}UYau5uu%a*;xQr+V94z@hI6|6XibCV^i1wR!4fu|U&w@{Y zqlJC!@4LLG{nrDiKSb`&i+;GT?|+GH_qDgLgx*R{FEFhQiqfhHE!V4s<`b<2j`S?>cT#8&)^S;@2uKZX`+td*bp}uoLWw%jk0Go8)!i)!<6EzDhBhh=NNwacOWDI6l|{ zatCI1g`44@D^PXd1V4-GKoPhr;1{r82m@}1yRa39xxRiSHG$TV#j z4%e1|y`{lSaK1^t2b^d+;0CzbB#)>fDg*bH`dQ!#lfC%OL=A{&KOuL(hm;PblUTTg1y{%rF;+{|1@=TJc!w4>jjga` zq4-O-a_WSlh~zQR4BHGopq-z_MyAhQLzIVJ@NwDqqV}~!DMLK0P#**~5G+1XQojXH z1~bVe;7YKcu5E7` zQIFCv9eh;}nZYJ9wHpDPyu-+3(FQcxP{YB0R}qziML>na?;*gIJ2^qkb?%Sg%sNz< z^dlSjzLX77E}%mo#`&`(-AZ6>vcm#%{yT$Pzt! z7RzR8G9r2cf_AyzyO3z`(-wLOEF4S(JHeg^7K6)8{0X=j7xIz&{fZD6(}gF2$+UmY zPNLQa8TD4F1q;m$oD!u2Y&RGVc}ea7--Q9s0fQPK7-l#$4J;0P9LvJtYH%y~HF;}rd~qDPdC^!e$A-y~YK6==&Hv_Li;89LXq`V9rk=OKq?esMkN=zI4 zcR}F*Muc=I4eVtoP@(pV69x9!`*=06oFnb}uhp|N*g=K;sD)&*3*(dncx6u-4L%Wk zvBls$;DS?}PDuT*gG52YEg*MV-#(~E{hn=O_67*N!Yy=G3cdy3!A4Jk79PTg1G_s_ zp=TQP?swQH%4_d5B0p_LVNLiWBKgdN_|un1Fk4KoMetFg8pyrnLAEB$%D-{fK_dTc zS_t~bGFQjMGnr`we+L$ysK?uSOE$Z}*r(dM99A>r8(7Wi;77F{wK8Czl_0h8-9Fb$W@B|GZBXa zo_;O@AHfDse$Ih)a4+e=fsbI23Y`j~n3m(H0sh`PZi~7Ht+vk^6JNdEj=*N3U1pXO98`N@1D zYn#D~z>%N3=abMs2~I4+_?PzXft{Zk7qY*H=Kv0tAZ`JqGRnq6!Y%IVe_>!BxB)j5 zc@ylj5(;20IRpINGENOBKq0RJKb`K*vp@Bwap<5%Ikx@L?1kWXyg#W@KL!K&)?Q8t z!T}Wq&fuqkvw+iGxnbfuqBjdUr(A_d6&pU@iW?(GInv<3ZTJy(kCRjKoO+~aJEvA@AZ#bN zl~aM_gP7pu@(K1wUoOB4n~xVbR?2tdg*2zMA09fHQq^^XY%G{_I&43FZwOZj%RUO9^RsJu{r%$SbrxPSr|g~3Hw zcoS9ZG3bYxn*#?t24b3tuA^!*Wl^QH=)YRUDgs7CC8cH0%Z`ePwWVdG+ii~7c3WIr zoXu*Bjmxmkj?IX%+n;?a#u{ad)=D<9FlKlEc~*<8V6SQs6>K<*(Q7MM)!SOpZ5AJ4 zi*-2djS3aP&$vx(V=rrw_t~JphlX`= zH+w@X{f0f(bW{2EMc=MOa{VV@u=aI=GT1wQ6{A!wZ8UpA^Bb@D1yzGzZbhBR4;AM6 F{sVfl7M1`2 diff --git a/examples/aggregation/programs/aggregation/src/main.rs b/examples/aggregation/program/src/main.rs similarity index 100% rename from examples/aggregation/programs/aggregation/src/main.rs rename to examples/aggregation/program/src/main.rs diff --git a/examples/aggregation/programs/fibonacci/src/main.rs b/examples/aggregation/programs/fibonacci/src/main.rs deleted file mode 100644 index edad87d4c..000000000 --- a/examples/aggregation/programs/fibonacci/src/main.rs +++ /dev/null @@ -1,20 +0,0 @@ -//! A simple fibonacci program to be proven inside the zkVM. - -#![no_main] -sp1_zkvm::entrypoint!(main); - -pub fn main() { - let n = sp1_zkvm::io::read::(); - let mut a: u128 = 0; - let mut b: u128 = 1; - let mut sum: u128; - - for _ in 1..n { - sum = a + b; - a = b; - b = sum; - } - - sp1_zkvm::io::commit(&n); - sp1_zkvm::io::commit(&b); -} diff --git a/examples/aggregation/script/Cargo.toml b/examples/aggregation/script/Cargo.toml index 7f28d4c10..1e1087753 100644 --- a/examples/aggregation/script/Cargo.toml +++ b/examples/aggregation/script/Cargo.toml @@ -1,8 +1,7 @@ [package] version = "0.1.0" -name = "sp1-aggregation-example-script" +name = "aggregation-script" edition = "2021" -default-run = "sp1-aggregation-example-script" [dependencies] hex = "0.4.3" diff --git a/examples/aggregation/script/build.rs b/examples/aggregation/script/build.rs index 4717ffebf..5afa1d66b 100644 --- a/examples/aggregation/script/build.rs +++ b/examples/aggregation/script/build.rs @@ -1,10 +1,7 @@ fn main() { + sp1_helper::build_program(&format!("{}/../program", env!("CARGO_MANIFEST_DIR"))); sp1_helper::build_program(&format!( - "{}/../programs/aggregation", - env!("CARGO_MANIFEST_DIR") - )); - sp1_helper::build_program(&format!( - "{}/../programs/fibonacci", + "{}/../../fibonacci/program", env!("CARGO_MANIFEST_DIR") )); } diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs index 252034343..b22a10d1a 100644 --- a/examples/aggregation/script/src/main.rs +++ b/examples/aggregation/script/src/main.rs @@ -3,12 +3,11 @@ use sp1_sdk::{HashableKey, ProverClient, SP1CompressedProof, SP1Stdin, SP1VerifyingKey}; /// A program that aggregates the proofs of the simple program. -const AGGREGATION_ELF: &[u8] = - include_bytes!("../../programs/aggregation/elf/riscv32im-succinct-zkvm-elf"); +const AGGREGATION_ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); /// A program that just runs a simple computation. const FIBONACCI_ELF: &[u8] = - include_bytes!("../../programs/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + include_bytes!("../../../fibonacci/program/elf/riscv32im-succinct-zkvm-elf"); /// An input to the aggregation program. /// diff --git a/examples/chess/program/elf/riscv32im-succinct-zkvm-elf b/examples/chess/program/elf/riscv32im-succinct-zkvm-elf index 6c501c33cd851ca330f6788838de1db6b706c69c..0466a204d48810ec02ab5894058164d908dc7da1 100755 GIT binary patch delta 17419 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 b^%DMkM`;p2BGSLp4Pc+Qz*iqcuJZgJtf&a0 diff --git a/examples/cycle-tracking/program/elf/riscv32im-succinct-zkvm-elf b/examples/cycle-tracking/program/elf/riscv32im-succinct-zkvm-elf index 494c24675cd2f4aef205eca665defa4fc0ef00d4..7748da170ee17609908dc9f65f611138b4160716 100755 GIT binary patch delta 214 zcmbQz#XhBryVNeg%dY1_lNp21W*+PzHt_XB8MSpnQKIKLCk81<2Rfqre~m zmA?bz-`SwR5Wxh|&m6|U;IK=9Ap|OK1LP;1RA86_neN-gIB&W~CnMi>oo>b#mH_%vF@*pC delta 211 zcmbQz#XhBryVJ9t8#o1_lNp21W+OPzHt_XB8MSp!^gdKLClp63D-^L4hHH z38MZ2kngZdfguE{o->SrA>pI~!xSjr9mrSNufPxk>1UkUj!12X45w~Fe+`&bYK+loNm&^=resoCu7U>nl8pg V(`!2!ji-BbGV*QL>1KRk2>_SRFz5gP diff --git a/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf b/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf index 6d448181ef03c9c95d8d4b5e9dd3f56c8fecd93a..6665fa85dcb0c309b5507d1a358273096496dbb5 100755 GIT binary patch delta 4114 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 KTs}B0?&rVzI{K9W diff --git a/examples/io/program/elf/riscv32im-succinct-zkvm-elf b/examples/io/program/elf/riscv32im-succinct-zkvm-elf index 20458bce07fe4b7911f1068c3dff84f0c8bcc493..e5f2f6b5c0b5a0385927a2eb4a669c94f7a2cf8c 100755 GIT binary patch delta 5194 zcmbuDdvs4%7RUEFe!+~CP^(QzIk%oe8c8I-#MEdQENj}TSG%l^7L|}`Q;AYClDeT- zX^RArn<|xxN2o_axE@hKNKg_LLt8XVygDcquS#pa=XcM|z3rM=Yu5Dl2kUe8IeYK3 z&-XlT(khzN9chv&SkQEBi^ie~by7bM-F!H{CDDyHHEM!3Mx0*ykZ9dgf;?c(8FiRL zQ~(ZA{3-bIIE?~if6nQj;5v-Axx-wdz6lPG1N(y`RsWA#l6k3+9cjqAnOn9o-7h>T zo2c_Uf?}8zaWOc4vY-UTrQoV54qwkU$9~RUW4(`mM0Bi7L)tPGKkB>~17|s@dRG#q zmuuACXKzR;;Nm1FwHBsd32Wxjk1j`t_XU-3D}hFNL?s^zsz$Rc!LfXznQvug%A<<%&zu#|y$WT##X^+GVoo2+DSKQN#EMpZ+-)#_yEJqV>NzF`gG?5L>44*G(lJa{P`~^5h@sD8t1%g^Cjdfd1 z)IL+tFlBGFnJ75}cEyDz(HyYSNFVykHgv#%YSkeZ95C6@$a!!r*jG|iw8M6y8n9i# z7-RoIrfY$iM?kiq)5=X8_^OLjjJQKAQGWtkYX!DeV{~KOLrEWlFb^9OZ@}e>lLh==9YND?nE@pkyZ!zyLde z2E_>A;{Mlqg0@Fxe(+MXCdE2;$NbY*537_E1#p_@FRb+a(TPWtw-1f zrmuxk1C}~UeG(! zkZk^HCy#HIVI@!ictIXGQOw(wERpGTIIYXkuT%{$Ttakmsz&{N{W#TvMT#SlsHK>n zi>HDop}(z&VsI>2{^Wdr1{Z^EiFGN##Z@n9Kb=z1P?|4j00zi{{ICa%gzTeX|6Uy9 z2xtdryblgt2|Ndu0h_9TbHSPz%g-6!=M>y#cOTBknlM&|{#W(`y9@ zw97np<18$2v4$h55-fMNwC~xEg-mtgHaGz3Vq!9HS>Qq7mtmLdBnz||$-#hNmB5SGD8W1GJJ1qv&+QI#xm<-fVO9Sj z;3AiOY8h^S-I;bV*zMoH9CC*}$X5m|$3VmHYc{gQH0W{#;wGty>{@J2{+eyze8)kf z;~93ecNqqb*ykLfEf1m+dmSDRjxH5ctQ`Cc>_0;TS?dvOMxJHMSlC;Ki0+{s?tJUC z0el&3uhYQ8*dSoc&u0%Y{i<0-1N}PMhgYHUYT}7sKzHSiZigO)&SuuHFMV4!y|ZCgjlMTb6bSk+|PDu zdJ=pOjC6eCo5gY zKd_N{HAGV$?-ckc6e={w@e>OcU|Wo1uy7GBesBVZ4(4UsCt~6&z}Df$X$!caG9RmDukq2Fzs2$Kf=0! zxa!~Z9G#H`2hpd6au^d{CzNDgR~0f%6Da7%s{9Q&R1fRS7PPCX(h6q1yD3!Djw+Y<=M z#5wAkP$GC(jX)J;f1S}bG+b@0`97DVgVytLGn5Hhq5`IXt6lsJxIJbVpzP5Lh{R<< zR~5evj({B@dtXP5&{j?!q33Qz_1^so+YIicp+IFQE+%EzXb+z*_L?@l=Zy*WODuH%t? zO5M=SaqdRu;09lfyHF)?9$dFpP+t{bLN0FnseR$sc8mLjM;x4T7s*JYpqW2p;r6Pg^LB-ILKq!y*NLsdTOochRV4148BOA+L?-{m?t>j+R_*j z$U6jgr;z7Ik53#Q5*O+Xj|z((-MvS6Xpgwi*T;+<8y6edBXV?j_sF=Y*s&qrC}VIS z?`RAP-6&~j85fL33<&B644K=!E^Jk5MXLvJXcm{7_h?n^5 zdPqXT^^4dvxe;av?p0|GysE*$WUI_Fr8XduH&*&HnTGeP$e* z!JC?C3;BQ{=79_RW!7QPE9Cnlp9aA}BfisVApVCQ>wi^7?@PQ>U<6*n7tYnU;=r(e F{|3Fa-t+(f delta 5240 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 Q*YZ;*urt&TiVFPx1D9{`ng9R* diff --git a/examples/rsa/program/elf/riscv32im-succinct-zkvm-elf b/examples/rsa/program/elf/riscv32im-succinct-zkvm-elf index 9ae0321c3743929f65569d8ca60f937c8ece23ed..531ed1e072c535b0f44c3a05546a2f2a723662e9 100755 GIT binary patch delta 6491 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 delta 6551 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 EAEe#3SpWb4 diff --git a/examples/ssz-withdrawals/program/elf/riscv32im-succinct-zkvm-elf b/examples/ssz-withdrawals/program/elf/riscv32im-succinct-zkvm-elf index ce2ba4d05cfaae0d5be0740453e635f35ce40f8a..a4b95a24cfa7b07e19b769b9a1ad0447004e5979 100755 GIT binary patch delta 216 zcmbO;k7v$2o`x32Eldgy^=Il78Dbb17=#!Y85Eis7#t=mGGsvc$w2;%NeKQ5AYZ0R zkwF3~{{hHP$x&p8V1nouZ((3KQL4xg0+kN{@(=VVGH5{Mdx88HeTocIpz^0%7}yxj zv;!^JzSM!KM{;^Z6qDcdvr$ay)0Y7WMziS+QA}!#2Gb8jGf8h3h-NyQJ^k!3LyW+Bm{pike`yH z$PmE6%y1;NKQM`&zh)QwE x^v0b`lG6h=F$qpTb(~3RdiZfB-sy_Rnaa06IL;)@IQ`Z!Cgbg&PcUh^0RU{LJ&*tZ diff --git a/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf b/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf index 1173f0e585f29a2db805d5010ad18012f7882b0e..8227fc8b855f16f528dc1f21262505260ac49d4b 100755 GIT binary patch delta 9220 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 MLe27@S8ZMX8}rF!y8r+H delta 9322 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 bI_|Yqsh2J~oSj{3CEAKdu>QlD_x}C^fKP;c From 7ee5d5fd328c3f1bc03615a1ec585e3cf5fcb18e Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Wed, 29 May 2024 17:56:56 -0700 Subject: [PATCH 4/8] encode proof solidity --- recursion/gnark-ffi/go/sp1/prove.go | 2 +- recursion/gnark-ffi/go/sp1/utils.go | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/recursion/gnark-ffi/go/sp1/prove.go b/recursion/gnark-ffi/go/sp1/prove.go index c921d1143..d5d3865d3 100644 --- a/recursion/gnark-ffi/go/sp1/prove.go +++ b/recursion/gnark-ffi/go/sp1/prove.go @@ -5,7 +5,7 @@ import ( "os" "github.com/consensys/gnark-crypto/ecc" - "github.com/consensys/gnark/backend/plonk" + plonk "github.com/consensys/gnark/backend/plonk" "github.com/consensys/gnark/frontend" ) diff --git a/recursion/gnark-ffi/go/sp1/utils.go b/recursion/gnark-ffi/go/sp1/utils.go index ac898c28b..338c6e10d 100644 --- a/recursion/gnark-ffi/go/sp1/utils.go +++ b/recursion/gnark-ffi/go/sp1/utils.go @@ -4,7 +4,8 @@ import ( "bytes" "encoding/hex" - "github.com/consensys/gnark/backend/plonk" + plonk "github.com/consensys/gnark/backend/plonk" + plonk_bn254 "github.com/consensys/gnark/backend/plonk/bn254" "github.com/consensys/gnark/frontend" "github.com/succinctlabs/sp1-recursion-gnark/sp1/babybear" ) @@ -17,11 +18,15 @@ func NewSP1PlonkBn254Proof(proof *plonk.Proof, witnessInput WitnessInput) Proof var publicInputs [2]string publicInputs[0] = witnessInput.VkeyHash publicInputs[1] = witnessInput.CommitedValuesDigest - encodedProof := hex.EncodeToString(proofBytes) + + // Cast plonk proof into plonk_bn254 proof. + p := (*proof).(*plonk_bn254.Proof) + + encodedProof := p.MarshalSolidity() return Proof{ PublicInputs: publicInputs, - EncodedProof: encodedProof, + EncodedProof: hex.EncodeToString(encodedProof), RawProof: hex.EncodeToString(proofBytes), } } From 2328ec6fbb4413562f25e1df08cfe83407ef460b Mon Sep 17 00:00:00 2001 From: ratan kaliani Date: Wed, 29 May 2024 18:25:10 -0700 Subject: [PATCH 5/8] encode proof solidity --- sdk/src/lib.rs | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 389586bcf..38ae6183c 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -425,19 +425,6 @@ mod tests { client.execute(elf, stdin).unwrap(); } - #[test] - fn test_e2e_prove_local() { - utils::setup_logger(); - let client = ProverClient::local(); - let elf = - include_bytes!("../../examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf"); - let (pk, vk) = client.setup(elf); - let mut stdin = SP1Stdin::new(); - stdin.write(&10usize); - let proof = client.prove(&pk, stdin).unwrap(); - client.verify(&proof, &vk).unwrap(); - } - #[test] fn test_e2e_prove_plonk() { utils::setup_logger(); @@ -451,19 +438,6 @@ mod tests { client.verify_plonk(&proof, &vk).unwrap(); } - #[test] - fn test_e2e_prove_mock() { - utils::setup_logger(); - let client = ProverClient::mock(); - let elf = - include_bytes!("../../examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf"); - let (pk, vk) = client.setup(elf); - let mut stdin = SP1Stdin::new(); - stdin.write(&10usize); - let proof = client.prove(&pk, stdin).unwrap(); - client.verify(&proof, &vk).unwrap(); - } - #[test] fn test_e2e_prove_plonk_mock() { utils::setup_logger(); From aad1502c02efc05153ad03266144752d11ee7dce Mon Sep 17 00:00:00 2001 From: ratan kaliani Date: Wed, 29 May 2024 18:28:57 -0700 Subject: [PATCH 6/8] lint --- recursion/gnark-ffi/go/sp1/prove.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recursion/gnark-ffi/go/sp1/prove.go b/recursion/gnark-ffi/go/sp1/prove.go index d5d3865d3..c921d1143 100644 --- a/recursion/gnark-ffi/go/sp1/prove.go +++ b/recursion/gnark-ffi/go/sp1/prove.go @@ -5,7 +5,7 @@ import ( "os" "github.com/consensys/gnark-crypto/ecc" - plonk "github.com/consensys/gnark/backend/plonk" + "github.com/consensys/gnark/backend/plonk" "github.com/consensys/gnark/frontend" ) From 9102946c12332c5a14a7b764a655f9640918c7ff Mon Sep 17 00:00:00 2001 From: ratan kaliani Date: Wed, 29 May 2024 18:29:24 -0700 Subject: [PATCH 7/8] docs --- recursion/gnark-ffi/go/sp1/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recursion/gnark-ffi/go/sp1/utils.go b/recursion/gnark-ffi/go/sp1/utils.go index 338c6e10d..f4711d9c6 100644 --- a/recursion/gnark-ffi/go/sp1/utils.go +++ b/recursion/gnark-ffi/go/sp1/utils.go @@ -19,7 +19,7 @@ func NewSP1PlonkBn254Proof(proof *plonk.Proof, witnessInput WitnessInput) Proof publicInputs[0] = witnessInput.VkeyHash publicInputs[1] = witnessInput.CommitedValuesDigest - // Cast plonk proof into plonk_bn254 proof. + // Cast plonk proof into plonk_bn254 proof so we can call MarshalSolidity. p := (*proof).(*plonk_bn254.Proof) encodedProof := p.MarshalSolidity() From 513466e0b9b2d9be6520c1a05dc16d113bbdaa8f Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Wed, 29 May 2024 19:05:42 -0700 Subject: [PATCH 8/8] chore: remove pr workflow activation on push to dev --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 47151dbc2..120f0e981 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,7 +2,7 @@ name: PR on: push: - branches: [main, dev] + branches: [main] pull_request: branches: - "**"