PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@aptos-labs/ts-sdk/src/api/transactionSubmission

Просмотр файла: simulate.ts

// Copyright © Aptos Foundation
// SPDX-License-Identifier: Apache-2.0

import { PublicKey } from "../../core";
import { simulateTransaction } from "../../internal/transactionSubmission";
import { AnyRawTransaction, InputSimulateTransactionOptions } from "../../transactions";
import { UserTransactionResponse } from "../../types";
import { AptosConfig } from "../aptosConfig";
import { ValidateFeePayerDataOnSimulation } from "./helpers";

/**
 * A class to handle all `Simulate` transaction operations.
 */
export class Simulate {
  readonly config: AptosConfig;

  /**
   * Initializes a new instance of the Aptos client with the specified configuration.
   * This allows you to interact with the Aptos blockchain using the provided settings.
   *
   * @param config - The configuration settings for the Aptos client.
   * @param config.network - The network to connect to (e.g., TESTNET, MAINNET).
   * @param config.nodeUrl - The URL of the Aptos node to connect to.
   *
   * @example
   * ```typescript
   * import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
   *
   * async function runExample() {
   *     // Create a configuration for the Aptos client
   *     const config = new AptosConfig({ network: Network.TESTNET }); // Specify your desired network
   *
   *     // Initialize the Aptos client with the configuration
   *     const aptos = new Aptos(config);
   *
   *     console.log("Aptos client initialized:", aptos);
   * }
   * runExample().catch(console.error);
   * ```
   */
  constructor(config: AptosConfig) {
    this.config = config;
  }

  /**
   * Simulates a transaction based on the provided parameters and returns the result.
   * This function helps you understand the outcome of a transaction before executing it on the blockchain.
   *
   * @param args - The parameters for simulating the transaction.
   * @param args.signerPublicKey - The public key of the signer for the transaction (optional).
   * @param args.transaction - The raw transaction data to simulate.
   * @param args.feePayerPublicKey - The public key of the fee payer (optional).
   * @param args.options - Additional options for simulating the transaction (optional).
   *
   * @example
   * ```typescript
   * import {
   *     Account,
   *     Aptos,
   *     AptosConfig,
   *     Network,
   * } from "@aptos-labs/ts-sdk";
   *
   * async function example() {
   *     let sender = Account.generate();
   *     let receiver = Account.generate();
   *
   *     // 0. Set up the client and test accounts
   *     const config = new AptosConfig({ network: Network.DEVNET });
   *     const aptos = new Aptos(config);
   *
   *     await aptos.fundAccount({
   *         accountAddress: sender.accountAddress,
   *         amount: 100_000_000,
   *     });
   *
   *     // 1. Build the transaction to preview the impact of it
   *     const transaction = await aptos.transaction.build.simple({
   *         sender: sender.accountAddress,
   *         data: {
   *             // All transactions on Aptos are implemented via smart contracts.
   *             function: "0x1::aptos_account::transfer",
   *             functionArguments: [receiver.accountAddress, 100],
   *         },
   *     });
   *
   *     // 2. Simulate to see what would happen if we execute this transaction
   *     const [userTransactionResponse] = await aptos.transaction.simulate.simple({
   *         signerPublicKey: sender.publicKey,
   *         transaction,
   *     });
   *     console.log(userTransactionResponse);
   *
   *     // If the fee looks ok, continue to signing!
   *     // ...
   * }
   *
   * example();
   * ```
   */
  @ValidateFeePayerDataOnSimulation
  async simple(args: {
    signerPublicKey?: PublicKey;
    transaction: AnyRawTransaction;
    feePayerPublicKey?: PublicKey;
    options?: InputSimulateTransactionOptions;
  }): Promise<Array<UserTransactionResponse>> {
    return simulateTransaction({ aptosConfig: this.config, ...args });
  }

  /**
   * Simulates a multi-agent transaction by generating a signed transaction and posting it to the Aptos full node.
   * This function helps in understanding the outcome of a transaction involving multiple signers before it is executed.
   *
   * @param args - The parameters for simulating the transaction.
   * @param args.signerPublicKey - The public key of the primary signer (optional).
   * @param args.transaction - The raw transaction to be simulated.
   * @param args.secondarySignersPublicKeys - An array of public keys for secondary signers (optional).
   *        Each element of the array can be optional, allowing the corresponding key check to be skipped.
   * @param args.feePayerPublicKey - The public key of the fee payer (optional).
   * @param args.options - Options for simulating the transaction (optional).
   *
   * @example
   * ```typescript
   * import {
   *     Account,
   *     Aptos,
   *     AptosConfig,
   *     Network,
   * } from "@aptos-labs/ts-sdk";
   *
   * async function example() {
   *     let sender1 = Account.generate();
   *     let sender2 = Account.generate();
   *     let receiver = Account.generate();
   *
   *     // 0. Set up the client and test accounts
   *     const config = new AptosConfig({ network: Network.DEVNET });
   *     const aptos = new Aptos(config);
   *
   *     await aptos.fundAccount({
   *         accountAddress: sender.accountAddress,
   *         amount: 100_000_000,
   *     });
   *
   *     // 1. Build
   *     console.log("\n=== 1. Building the transaction ===\n");
   *     const transaction = await aptos.transaction.build.multiAgent({
   *     sender: sender1.accountAddress,
   *     secondarySignerAddresses: [sender2.accountAddress],
   *     data: {
   *        // REPLACE WITH YOUR MULTI-AGENT FUNCTION HERE
   *        function:
   *          "<REPLACE WITH YOUR MULTI AGENT MOVE ENTRY FUNCTION> (Syntax {address}::{module}::{function})",
   *          functionArguments: [],
   *        },
   *      });
   *      console.log("Transaction:", transaction);
   *
   *      // 2. Simulate (Optional)
   *      console.log("\n === 2. Simulating Response (Optional) === \n");
   *      const [userTransactionResponse] = await aptos.transaction.simulate.multiAgent(
   *        {
   *          signerPublicKey: sender1.publicKey,
   *          secondarySignersPublicKeys: [sender2.publicKey],
   *          transaction,
   *        },
   *      );
   *      console.log(userTransactionResponse);
   *
   *      // If the fee looks ok, continue to signing!
   *      // ...
   * }
   *
   * example();
   * ```
   */
  @ValidateFeePayerDataOnSimulation
  async multiAgent(args: {
    signerPublicKey?: PublicKey;
    transaction: AnyRawTransaction;
    secondarySignersPublicKeys?: Array<PublicKey | undefined>;
    feePayerPublicKey?: PublicKey;
    options?: InputSimulateTransactionOptions;
  }): Promise<Array<UserTransactionResponse>> {
    return simulateTransaction({ aptosConfig: this.config, ...args });
  }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!