PHP WebShell

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

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

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

import { Serializer, Serializable } from "../serializer";
import { Deserializer } from "../deserializer";
import { FixedBytes } from "./fixedBytes";
import { EntryFunctionArgument } from "../../transactions/instances/transactionArgument";
import { HexInput } from "../../types";

/**
 * This class exists solely to represent a sequence of fixed bytes as a serialized entry function, because
 * serializing an entry function appends a prefix that's *only* used for entry function arguments.
 *
 * NOTE: Using this class for serialized script functions will lead to erroneous and unexpected behavior.
 *
 * If you wish to convert this class back to a TransactionArgument, you must know the type
 * of the argument beforehand, and use the appropriate class to deserialize the bytes within
 * an instance of this class.
 */
export class EntryFunctionBytes extends Serializable implements EntryFunctionArgument {
  public readonly value: FixedBytes;

  /**
   * Creates an instance of the class with a specified hexadecimal input value.
   *
   * @param value - The hexadecimal input to be converted into FixedBytes.
   */
  private constructor(value: HexInput) {
    super();
    this.value = new FixedBytes(value);
  }

  // Note that to see the Move, BCS-serialized representation of the underlying fixed byte vector,
  // we must not serialize the length prefix.
  //
  // In other words, this class is only used to represent a sequence of bytes that are already
  // BCS-serialized as a type. To represent those bytes accurately, the BCS-serialized form is the same exact
  // representation.

  /**
   * Serializes the value using the provided serializer.
   * This function is essential for accurately representing a sequence of bytes that are already BCS-serialized as a type.
   *
   * Note that to see the Move, BCS-serialized representation of the underlying fixed byte vector,
   * we must not serialize the length prefix.
   *
   * @param serializer - The serializer instance used to perform the serialization.
   */
  serialize(serializer: Serializer): void {
    serializer.serialize(this.value);
  }

  // When we serialize these bytes as an entry function argument, we need to
  // serialize the length prefix. This essentially converts the underlying fixed byte vector to a type-agnostic
  // byte vector to an `any` type.
  // NOTE: This, and the lack of a `serializeForScriptFunction`, is the only meaningful difference between this
  // class and FixedBytes.

  /**
   * Serializes the current instance for use as an entry function argument by converting the underlying fixed byte vector to a
   * type-agnostic byte vector.
   * This process includes serializing the length prefix of the byte vector.
   *
   * @param serializer - The serializer instance used to perform the serialization.
   */
  serializeForEntryFunction(serializer: Serializer): void {
    serializer.serializeU32AsUleb128(this.value.value.length);
    serializer.serialize(this);
  }

  /**
   * The only way to create an instance of this class is to use this static method.
   * This function should only be used when deserializing a sequence of EntryFunctionPayload arguments.
   * @param deserializer - The deserializer instance with the buffered bytes.
   * @param length - The length of the bytes to deserialize.
   * @returns An instance of this class, which will now only be usable as an EntryFunctionArgument.
   */
  static deserialize(deserializer: Deserializer, length: number): EntryFunctionBytes {
    const fixedBytes = FixedBytes.deserialize(deserializer, length);
    return new EntryFunctionBytes(fixedBytes.value);
  }
}

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


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