|
| 1 | +--- |
| 2 | +title: "Aptos Transaction generated using Move Script" |
| 3 | +--- |
| 4 | + |
| 5 | +import { Callout, Steps } from "nextra/components" |
| 6 | + |
| 7 | +## Overview: |
| 8 | + |
| 9 | +This section outlines how to create test transactions with Move scripts. |
| 10 | + |
| 11 | +## Prerequisites |
| 12 | + |
| 13 | +1. Clone the [aptos-core](https://github.com/aptos-labs/aptos-core) repository: |
| 14 | + - Navigate to the `aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator` directory. |
| 15 | + |
| 16 | +## How to Generate Test Transactions using Move Script |
| 17 | +<Steps> |
| 18 | +### Set up `move_fixtures` folder |
| 19 | +Before proceeding, ensure you have the move_fixtures folder set up in the appropriate location: |
| 20 | +1. Location: |
| 21 | + 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. |
| 22 | + |
| 23 | + <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> |
| 24 | +2. Steps to set up the follder: |
| 25 | + - if starting fresh, remove all existing files and projects in the `move_fixtures` folder in the aptos-core repo |
| 26 | + - Create your own Move projects/scripts in the move_fixtures folder (detailed in the next step) |
| 27 | + |
| 28 | + ### Create Your Move Project |
| 29 | + |
| 30 | + 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). |
| 31 | + |
| 32 | + ### Set Up Test Accounts |
| 33 | + |
| 34 | + 1. These accounts will be used to deploy your module. |
| 35 | + 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. |
| 36 | + 3. Update `aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator/imported_transactions/testing_accounts.yaml` with your accounts. |
| 37 | + |
| 38 | + <Callout> **Note:** Do not use real accounts here. Only use test accounts created in the CLI specifically for testing. </Callout> |
| 39 | + |
| 40 | + ### Create a Configuration File |
| 41 | +Each configuration file defines a sequences of transactions for a test scenario. |
| 42 | + 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. |
| 43 | + 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. Example configuration: |
| 44 | + output_name: the name of the transaction json output |
| 45 | + script_path: the path to the Move script |
| 46 | + sender_address: the address of the account that will send the transaction |
| 47 | + |
| 48 | + ```yaml |
| 49 | + transactions: |
| 50 | + - output_name: simple_user_script1 |
| 51 | + script_path: simple_user_script |
| 52 | + sender_address: <account_address> |
| 53 | + - output_name: simple_user_script2 |
| 54 | + script_path: simple_user_script2 |
| 55 | + sender_address: <account_address> |
| 56 | + ``` |
| 57 | +
|
| 58 | + ### Generate JSON Files and Rust File |
| 59 | +
|
| 60 | + Once the Move files and configuration are set up, run the same command used to import transactions: |
| 61 | + - testing-folder is where your Move files are stored. |
| 62 | + - output-folder can be set to any folder where you want to store the generated files. |
| 63 | +
|
| 64 | + ```bash |
| 65 | + cd ~/aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator |
| 66 | + cargo run -- --testing-folder ./imported_transactions --output-folder ../indexer-test-transactions/src/ |
| 67 | + ``` |
| 68 | + |
| 69 | + This command will: |
| 70 | + |
| 71 | + 1. Read the configuration in the `move_fixtures` folder. |
| 72 | + 2. Execute the specified Move scripts. |
| 73 | + 3. Output the generated JSON files to the designated folder (`~/aptos-core/ecosystem/indexer-grpc/indexer-transaction-generator/json_transactions`). |
| 74 | + 4. Update `generated_transactions.rs` with the new transaction names specified in step 3. |
| 75 | + |
| 76 | +</Steps> |
| 77 | + |
| 78 | +## How to Use Test Transactions |
| 79 | + |
| 80 | +- **Export the Generated File**: |
| 81 | + |
| 82 | + Update the [`mod.rs`](https://github.com/aptos-labs/aptos-indexer-processor-example/blob/main/test-transactions-example/src/json_transactions/mod.rs) file to include the generated Rust file containing the transaction constants. |
| 83 | + |
| 84 | +- **Export the `json_transactions` Folder**: |
| 85 | + |
| 86 | + Ensure the `json_transactions` folder is properly exported in the library file. |
| 87 | + |
| 88 | + [Example](https://github.com/aptos-labs/aptos-indexer-processor-example/blob/main/test-transactions-example/src/lib.rs). |
| 89 | + |
| 90 | +- **Add as a Dependency**: |
| 91 | + |
| 92 | + Include the crate containing the generated transactions as a dependency in the `Cargo.toml` file of your test crate. (Internally, transactions are stored in `aptos-core` and used in the [processor repo](https://github.com/aptos-labs/aptos-indexer-processors/blob/0c92d323b0f560b5f8601a831a36520ad9b72d68/rust/Cargo.toml#L34)). |
| 93 | + |
| 94 | +- **Integrate into Test Cases**: |
| 95 | + |
| 96 | + Use the exported transaction constants directly in your test cases to simulate real transactions and validate processing logic. |
| 97 | + |
| 98 | + [Example usage](https://github.com/aptos-labs/aptos-indexer-processor-example/tree/main/test-transactions-example). |
| 99 | + |
| 100 | + |
| 101 | +## Next Steps |
| 102 | +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](). |
0 commit comments