MCPcopy Create free account
hub / github.com/BitVM/BitVM / test_final_circuit

Function test_final_circuit

prover/src/lib.rs:193–259  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

191 /// Run this test only when build for the mainnet
192 #[test]
193 fn test_final_circuit() {
194 let final_circuit_elf = include_bytes!("../elfs/mainnet-final-spv-guest.bin");
195 let header_chain_circuit_elf = include_bytes!("../elfs/mainnet-header-chain-guest.bin");
196 println!(
197 "Header chain circuit id: {:#?}",
198 compute_image_id(header_chain_circuit_elf)
199 .unwrap()
200 .as_words()
201 );
202 let final_proof = include_bytes!("../data/mainnet_first_10.bin");
203 let final_circuit_id = compute_image_id(final_circuit_elf).unwrap();
204
205 let receipt: Receipt = Receipt::try_from_slice(final_proof).unwrap();
206
207 let mut mmr_native = MMRNative::new();
208 for block_hash in MAINNET_BLOCK_HASHES.iter() {
209 mmr_native.append(*block_hash);
210 }
211
212 let output = BlockHeaderCircuitOutput::try_from_slice(&receipt.journal.bytes).unwrap();
213 let tx: CircuitTransaction = CircuitTransaction(bitcoin::consensus::deserialize(&Vec::<u8>::from_hex("01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000").unwrap()).unwrap());
214 let block_header: CircuitBlockHeader = CircuitBlockHeader::try_from_slice(Vec::<u8>::from_hex("0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c").unwrap().as_slice()).unwrap();
215 let bitcoin_merkle_tree: BitcoinMerkleTree = BitcoinMerkleTree::new(vec![tx.txid()]);
216 let bitcoin_inclusion_proof = bitcoin_merkle_tree.generate_proof(0);
217 let (_, mmr_inclusion_proof) = mmr_native.generate_proof(0);
218 let spv: SPV = SPV::new(
219 tx,
220 bitcoin_inclusion_proof,
221 block_header,
222 mmr_inclusion_proof,
223 );
224 let final_circuit_input: FinalCircuitInput = FinalCircuitInput {
225 block_header_circuit_output: output,
226 spv: spv,
227 };
228 let env = ExecutorEnv::builder()
229 .write_slice(&borsh::to_vec(&final_circuit_input).unwrap())
230 .add_assumption(receipt)
231 .build()
232 .unwrap();
233
234 let prover = default_prover();
235
236 let receipt = prover
237 .prove_with_opts(env, final_circuit_elf, &ProverOpts::succinct())
238 .unwrap()
239 .receipt;
240
241 let succinct_receipt = receipt.inner.succinct().unwrap().clone();
242 let receipt_claim = succinct_receipt.clone().claim;
243 println!("Receipt claim: {:#?}", receipt_claim);
244 let journal: [u8; 32] = receipt.journal.bytes.clone().try_into().unwrap();
245 let (proof, output_json_bytes) =
246 stark_to_succinct(succinct_receipt, &receipt.journal.bytes);
247 print!("Proof: {:#?}", proof);
248 let constants_digest = calculate_succinct_output_prefix(final_circuit_id.as_bytes());
249 println!("Constants digest: {:#?}", constants_digest);
250 println!("Journal: {:#?}", receipt.journal);

Callers

nothing calls this directly

Calls 8

CircuitTransactionClass · 0.85
deserializeFunction · 0.85
stark_to_succinctFunction · 0.85
cloneMethod · 0.80
appendMethod · 0.45
generate_proofMethod · 0.45
finalizeMethod · 0.45

Tested by

no test coverage detected