> For the complete documentation index, see [llms.txt](https://deenz.gitbook.io/bq-core/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://deenz.gitbook.io/bq-core/using-the-bqsdk/bqsdk/solve-mode.md).

# Using a bqTest in solve mode

First, we will need to define a new solving mode *bqTest*. We can do so simply by running:

```js
const solveModeTest = await bqTest.solveMode(
    testId,
    ethersProvider,
    testCreatorAddress,
    openAnswerHashes = null
)
```

The initialization is the same as in [reading mode](/bq-core/using-the-bqsdk/bqsdk/read-mode.md), except for the additional *openAnswerHashes* parameter, used for both open answer and mixed tests.

If left undefined, *openAnswerHashes* will be retreived from the blockchain. For this, it must have been defined prior by the *credential issuer* [verifying their test](/bq-core/direct-smart-contract-interfacing/creating-tests/verifying-test.md), else the test will not be solvable. Multiple choice tests need not define this parameter.

As the protocol still lacks an official deployed contract, this test creator address is left for the user to define after they themselves deploy it. In future versions this will be given a default value deployed on a specified chain.

When defined on solve mode, a *bqTest* object can be used to

* [Grade solutions](/bq-core/using-the-bqsdk/bqsdk/solve-mode/grading.md)
* [Generate the corresponding proofs](/bq-core/using-the-bqsdk/bqsdk/solve-mode/generating-proof.md)
* [Verify generated proofs](/bq-core/using-the-bqsdk/bqsdk/solve-mode/verifying-proof.md)
* [Sending the solving transactions on chain](/bq-core/using-the-bqsdk/bqsdk/solve-mode/sending-tx.md)

For each of these sections we will make use of the testnet deployed [TestCreator.sol](https://mumbai.polygonscan.com/address/0x403E6BBCB3Ddbe3487c09E8827e5dEf058FE6db4#code) to provide implementation examples, and thus we define:

```js
const solveModeTest = await bqTest.solveMode(
    '1',
    ethersProvider,
    '0x403E6BBCB3Ddbe3487c09E8827e5dEf058FE6db4'
)
```

We provide no *openAnswerHashes* as the test has already been verified on-chain. You will not need to define this data as the bqTest object will retrieve it directly from the blockchain.
