From 082cff422dddf26573281346e91187f67db2058f Mon Sep 17 00:00:00 2001
From: Yuwen Zhang <yuwen01@gmail.com>
Date: Fri, 18 Oct 2024 17:26:43 -0700
Subject: [PATCH] fix: vkey hash (#10)

---
 README.md                  |  12 ++++++++++--
 example/program/src/lib.rs |   2 +-
 proofs/fibonacci_proof.bin | Bin 1450 -> 1450 bytes
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 27bf7b8..c7d0543 100644
--- a/README.md
+++ b/README.md
@@ -68,8 +68,16 @@ run_verify_instruction(groth16_proof).await;
 
 3. Using the [`solana-program-test`](https://docs.rs/solana-program-test/latest/solana_program_test/) framework, send the `SP1Groth16Proof` to the 
 [`fibonacci-verifier-contract`](./example/program). This smart contract will verify the proof using the `sp1-solana`
-crate against the fibonacci SP1 program vkey and print out the public inputs. Here is a snippet that demonstrates
-how to perform the verification and read the public inputs on chain. 
+crate against the fibonacci SP1 program vkey and print out the public inputs. 
+
+> [!NOTE]
+> In this example, a Groth16 proof and public values are directly passed into the contract as transaction data. 
+> In real use cases, this may not be reasonable, since the upper limit for transaction data is 1232 bytes.
+> Groth16 proofs themselves are already 260 bytes, and public inputs can potentially be very large. 
+> See [this article](https://solana.com/developers/courses/program-optimization/lookup-tables) for a discussion
+> on how to handle this.
+
+Here is a snippet that demonstrates how to perform the verification and read the public inputs on chain. 
 
 ```rust
 // Derived by running `vk.bytes32()` on the program's vkey.
diff --git a/example/program/src/lib.rs b/example/program/src/lib.rs
index f713e0e..24b8b7d 100644
--- a/example/program/src/lib.rs
+++ b/example/program/src/lib.rs
@@ -20,7 +20,7 @@ entrypoint!(process_instruction);
 /// let vkey_hash = vk.bytes32();
 /// ```
 const FIBONACCI_VKEY_HASH: &str =
-    "0x0083e8e370d7f0d1c463337f76c9a60b62ad7cc54c89329107c92c1e62097872";
+    "0x0054c0e58911dd8b993c6d8f249aa50a2e523114ec4b7ef9dd355c5f6bfbf3ce";
 
 /// The instruction data for the program.
 #[derive(BorshDeserialize, BorshSerialize)]
diff --git a/proofs/fibonacci_proof.bin b/proofs/fibonacci_proof.bin
index 97644452c13a19a325144b80ac39d640d533abca..385d535d7d9eea10f8bc0135c85ab58f14f9b436 100644
GIT binary patch
literal 1450
zcmeHHJ&u?)5d9!g8Yn}PJ_SuQ|37Dls3Sz>8QTRCDIz6J3fi0{+A>D~X@x|EI6{s<
zkC$wbBT&SWHL^YPX5O2TA6(b<{Or4hk}f9h02C2~n2rgiERaYbgaODFA*q>Wk(PP<
z@*I>*L4;I^9DewOc;UH<^n-@vtQg6h;K1lek|3Ev4D12HiJ_)KL2(i)pu2%MDdMRG
z==%B-Dq?%H4X0QHxN3{;>N$6?qppMDR#UTR=tiF`O2=y$PRmMMtUX!FcQ21Irg|%b
zLYLthjw4SI*m4wrHMfo+@gBAkG!+3_s`qL#$Xrruph?c`kg+X%gKw+i|3W71aTs`x
zqW086E3duD%;ua_C#!4sEaM6&mbu(=OKGgNT}}}~6;(sFcMZ%Qo3{WHA6;T=7#+T`
z&Con;jIoBo;IL`9q2o?N=pA#eQsC2pHGQ4D?Uc!bWmv~LGK?5>&|^BU9^6MmVW{10
zh2;bx1hg5F4ny$aNdpzC4m%TSx|5{hPOPxloV}V$j>F=uV0ij^8nO@HLp-HhPBTel
zKyrWt%%da^->XJr*sx+gL9!-<SFd+p=HSa5oH>C1$@=;GM>j8j8@GS_`IEl*?$;mj
z?cc9HzP){#uiyXk`^|@UU)_I(5AW^cd;7Wh_OrKNo?O>o-(1(D`@1*v44%Qi*xYKl

literal 1450
zcmeHHz0OcK481LgrHpi8XJA3`fBX!nGeVu5#2zY@0jXUWy7DZDkw+*JLh4lY5qJc4
zjQ9o~p~IIb@=f9#A0J!y&UIZ+dwm^9G?ZyzFF-Z$sXQ1N$b^(Y6$lX!hr5}<U{VI@
z6LSY;moZ5u%KYUU;?*uZ-R7L_Lju!@eApl`K=#4zj5Nq*zjT<Q!Z>mAXe=<(!G;2W
z00XZdzo8;XIx{q_v0{_DdKDc3n#oW#c^5TFokxgbggO~Zm7%JxaiG@RM0(cYN}JJf
z2JbBsNE~U?8Y^|}(4bgKc51n5>FhL7E30<QHD(AyvPoo+%Gz74VGgXtfiMdM8222p
z9qX*9kd{!SlqST;U`*RyD^rNKubNuea%|7TVJ*pG3xb2-iOae)t+?T!Z9Fy>3YW#n
z3}YA#KvG<Tm#j5yo2Bq5=M5-h^WuWV)N=aqh^~x#e`TvIQ7qoCn&<B5ytUP<1Rd!X
znP21ZT42#R!#t4EQlzJolZfpG->3K0bc1s(a_PE^S*DT8!YC8b1Ncxu=|REO<acK%
zObo5&q{MbV+1*ls4tb8Po~AUCGhW~J!EGOOAB_LW`0eq%w=e#V4<G;eRi6F)*K>IF
z-^)+0K0NY2-h6)l_TB3rZhnS$Z|s8``@OmU-QDjGuj}8RuIt{-*`N4iJQ-gA?2~F9