> For the complete documentation index, see [llms.txt](https://docs.alignedlayer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.alignedlayer.com/guides/2_build_your_first_aligned_application/2.2_modify_zkquiz_questions.md).

# Modify ZkQuiz Questions

In [Build your first Aligned Application](/guides/2_build_your_first_aligned_application.md), we show how to build a trivia application, called ZkQuiz. ZKQuiz asks the user three questions, and if answered correctly, generates a ZK Proof of the correct answers, posts the proof on Aligned, and upon verification, mints an NFT via a smart contract.

In this guide, we will show you how to replace those questions with your own custom ones.

{% hint style="warning" %}
This guide assumes you have already read [Build your first Aligned Application](/guides/2_build_your_first_aligned_application.md)
{% endhint %}

## 1. Modify the Questions Asked

First, we need to modify the questions presented to the user. To do this, navigate to our example in `examples/zkquiz/quiz/script/src/main.rs` and change the questions as needed. Here’s a new set of questions with their respective answers:

```rust
let mut user_answers = "".to_string();

let question1 = "What is the capital of France?";
let answers1 = ["Berlin", "Paris", "Madrid"];
user_answers.push(ask_question(question1, &answers1));

let question2 = "What is the chemical symbol for gold?";
let answers2 = ["Au", "Ag", "Fe"];
user_answers.push(ask_question(question2, &answers2));

let question3 = "What is the native cryptocurrency of Ethereum?";
let answers3 = ["Bitcoin", "Ether", "Litecoin"];
user_answers.push(ask_question(question3, &answers3));
```

## 2. Update the Program

Next, we need to update the program to be proven with the new correct answers. As described in [Build your first Aligned Application](/guides/2_build_your_first_aligned_application.md), the program in `examples/zkquiz/quiz/program/src/main.rs` takes the user answers as inputs and checks that the SHA3-256 hash of these inputs matches the expected output. Therefore, we need to update the expected output with the hash of our new correct answers.

If we concatenate the correct answers to the questions above, we get `bab`, so we need to calculate the SHA3-256 hash of that:

```
SHA3-256(bab)
```

You can use any SHA3-256 Rust library or even online tools for this purpose. Here we provide a python script that calculates it for you:

```python
import hashlib

correct_answers = "bab"

# Calculate SHA3-256 hash
hash_object = hashlib.sha3_256(correct_answers.encode())

# Get the hash as a list of integers (byte values)
hash_bytes = list(hash_object.digest())

print(hash_bytes)
```

After executing the script, we get:

```python
[216, 11, 193, 177, 136, 178, 254, 150, 59, 128, 97, 103, 97, 128, 55, 57, 22, 242, 26, 1, 186, 223, 215, 118, 206, 47, 12, 206, 114, 118, 220, 93]
```

Now we can update it in `examples/zkquiz/quiz/program/src/main.rs` as follows:

```rust
if output
        != [
            216, 11, 193, 177, 136, 178, 254, 150, 59, 128, 97, 103, 97, 128, 55, 57, 22, 242, 26,
            1, 186, 223, 215, 118, 206, 47, 12, 206, 114, 118, 220, 93,
        ]
    {
        panic!("Answers do not match");
    }
```

## 3. Compile the Program

Now we need to compile the updated Program, generating the binary file that will be run by the zkVM (ELF). For this, ensure that the [SP1 Rust toolchain](https://docs.succinct.xyz/docs/sp1/introduction) is installed. Run:

```
make compile_elf
```

which will output the compiled ELF to the file program/elf/riscv32im-succinct-zkvm-elf.

## 4. Run the new ZkQuiz

We are ready to run our new version of ZkQuiz.

To do this, follow the same instructions as in the original [Build your first Aligned Application](/guides/2_build_your_first_aligned_application.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.alignedlayer.com/guides/2_build_your_first_aligned_application/2.2_modify_zkquiz_questions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
