Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

generating test transactions with move script #775

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions apps/nextra/next.config.mjs
Original file line number Diff line number Diff line change
@@ -466,6 +466,13 @@ export default withBundleAnalyzer(
"/en/build/indexer/indexer-sdk/documentation/advanced-tutorials/txn-importer",
permanent: true,
},
{
source:
"/indexer/indexer-sdk/documentation/advanced-tutorials/txn-script",
destination:
"/en/build/indexer/indexer-sdk/documentation/advanced-tutorials/txn-script",
permanent: true,
},
{
source: "/indexer/txn-stream/labs-hosted",
destination: "/en/build/indexer/api/labs-hosted",
Original file line number Diff line number Diff line change
@@ -5,4 +5,7 @@ export default {
"txn-importer": {
title: "Importing Transactions",
},
"txn-script": {
title: "Generating Transactions with Move Scripts",
},
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Aptos Transaction Import"
title: "Importing Transactions"
---

## Overview
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
---
title: "Generating Transactions with Move Scripts"
---

import { Callout, Steps } from "nextra/components"

## Overview:

This section outlines how to create test transactions with Move scripts.

## Prerequisites

1. Clone the [aptos-core](https://github.com/aptos-labs/aptos-core) repository:
- Navigate to the `aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator` directory.

## How to Generate Test Transactions using Move Script
<Steps>
### Set up `move_fixtures` folder
Before proceeding, ensure you have the `move_fixtures` folder set up in the appropriate location:
1. Location:
The `move_fixtures` folder should be created in the `aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator/imported_transactions` directory. This is the folder where Move scripts and their configurations for test transactions will be stored.

<Callout> **Note:** Do not create the `move_fixtures` folder in your processor repository. All Move-related files should reside in the `aptos-core` repository under the specified directory. </Callout>
2. Steps to set up the folder:
- if starting fresh, remove all existing files and projects in the `move_fixtures` folder in the aptos-core repo
- Create your own Move projects/scripts in the move_fixtures folder (detailed in the next step)

### Create Your Move Project and Write your Move Script

Create your Move project and write a module to output the scenario that you would like to test in your processor. You can refer to an example [here](https://github.com/aptos-labs/aptos-core/tree/main/ecosystem/indexer-grpc/indexer-transaction-generator/imported_transactions/move_fixtures).

### Set Up Test Accounts

1. These accounts will be used to deploy your module.
2. Set up as many accounts as you need. These accounts will be used to send the scripted transactions. Refer to the guide [here](https://aptos.dev/en/build/cli/setup-cli) to create accounts.
3. Update [`aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator/imported_transactions/testing_accounts.yaml`](https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/indexer-grpc/indexer-transaction-generator/imported_transactions/testing_accounts.yaml) with your accounts.

<Callout> **Note:** Do not use real accounts here. Only use **test accounts** created in the CLI specifically for testing. Always select **devnet** when setting up a test account, as it will be required later in the script to configure the account profile and fund it using the faucet. </Callout>

### Create a Configuration File
Each configuration file defines a sequences of transactions for a test scenario.
1. Create a configuration file in the `move_fixtures` [directory](https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/indexer-grpc/indexer-transaction-generator/imported_transactions/move_fixtures). Name the configuration file according to the test scenario it corresponds to.
2. This configuration file should contain unique transaction names and details for each transaction. The transactions should be listed in the order they are to be executed.
The configuration file should be structured like this:
- output_name: This field specifies the name of the output file where the results of the transaction will be saved.
- script_path: This field holds the path to the Move script file that will be executed as part of the transaction.
- sender_address: : This field contains the address of the account that will send the transaction.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a duplicate colon in sender_address: : - one colon is sufficient here.

Spotted by Graphite Reviewer

Is this helpful? React 👍 or 👎 to let us know.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a duplicate colon in sender_address: : - this should be sender_address:

Spotted by Graphite Reviewer

Is this helpful? React 👍 or 👎 to let us know.


The number of output is totally up to you, but the output name should be unique for each transaction. Add as many transactions as you need to test your processor.
```yaml
transactions:
- output_name: simple_user_script1
script_path: simple_user_script
sender_address: <account_address>
- output_name: simple_user_script2
script_path: simple_user_script2
sender_address: <account_address>
```

### Generate JSON Files and Rust File

Once the Move files and configuration are set up, run the same command used to import transactions but with extra flag `mode`:
- testing-folder is where your Move files are stored.
- output-folder can be set to any folder where you want to store the generated files.
- The `--mode=script` flag specifies that the transaction generator should operate in script mode, meaning it will execute Move scripts and generate corresponding transaction data. By default, the mode is set to import, which fetches transactions from the network.

```bash
cd ~/aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator
cargo run -- --testing-folder ./imported_transactions --output-folder ../indexer-test-transactions/src/ --script
```

This command will:

1. Read the configuration in the `move_fixtures` folder.
2. Execute the specified Move scripts.
3. Output the generated JSON files to the designated folder (`~/aptos-core/ecosystem/indexer-grpc/indexer-test-transactions/src/json_transactions`).
4. Overwrite `generated_transactions.rs` with the new transaction data based on the generated JSON files. This file contains the transaction constants that can be used in tests.

### Verification

Verify that the json_transactions folder in the target directory contains the generated JSON files with the specified names from the configuration file, and ensure that generated_transactions.rs has been updated accordingly.

</Steps>

## How to Use Test Transactions

### Export the Generated File

Update the `mod.rs` file to include the generated Rust file containing the transaction constants. If `mod.rs` doesn't exist, create one in the target folder:

[Reference mod.rs](https://github.com/aptos-labs/aptos-indexer-processor-example/blob/main/test-transactions-example/src/json_transactions/mod.rs).

### Export the `json_transactions` Folder

Since the `generated_transactions.rs` relies on the `json_transactions` Ensure the `json_transactions` folder is properly exported in the library file for your tests have direct access to the transaction data.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing comma after "json_transactions" in this sentence. The corrected version should read: "Since the generated_transactions.rs relies on the json_transactions, ensure..."

Spotted by Graphite Reviewer

Is this helpful? React 👍 or 👎 to let us know.


[Reference lib.rs](https://github.com/aptos-labs/aptos-indexer-processor-example/blob/main/test-transactions-example/src/lib.rs).

### Integrate into Test Cases

If you decided to output the rust file in a different crate, you can update you cargo.toml to import the crate containing the generated file as a dependency. Otherwise, you can simply import the generated file directly in your test file.
[Example](https://github.com/aptos-labs/aptos-indexer-processors-v2/blob/main/integration-tests/Cargo.toml#L19).

## Next Steps
Once the transaction constants are integrated, you can use them in processor tests to validate functionality. For detailed instructions on writing processor tests, refer to Writing Processor Tests.

[Example](https://github.com/aptos-labs/aptos-indexer-processors-v2/blob/main/integration-tests/src/sdk_tests/events_processor_tests.rs)