{"version":3,"sources":["../src/account/supra_account.ts","../src/utils/hd-key.ts","../src/utils/misc.ts","../src/utils/hex_string.ts","../src/utils/memoize-decorator.ts","../src/supra_types/index.ts","../src/bcs/index.ts","../src/bcs/consts.ts","../src/bcs/serializer.ts","../src/bcs/deserializer.ts","../src/bcs/helper.ts","../src/supra_types/transaction.ts","../src/supra_types/account_address.ts","../src/supra_types/ed25519.ts","../src/supra_types/multi_ed25519.ts","../src/supra_types/authenticator.ts","../src/supra_types/identifier.ts","../src/supra_types/type_tag.ts","../src/supra_types/abi.ts","../src/supra_types/authentication_key.ts","../src/supra_types/rotation_proof_challenge.ts","../src/transaction_builder/builder.ts","../src/transaction_builder/builder_utils.ts","../src/generated/index.ts","../src/generated/models/AptosErrorCode.ts","../src/generated/models/MoveFunctionVisibility.ts","../src/generated/models/RoleType.ts"],"sourcesContent":["// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport nacl from \"tweetnacl\";\nimport * as bip39 from \"@scure/bip39\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha3_256 as sha3Hash } from \"@noble/hashes/sha3\";\nimport { derivePath } from \"../utils/hd-key\";\nimport { HexString, MaybeHexString, Memoize } from \"../utils\";\nimport * as Gen from \"../generated/index\";\nimport { AccountAddress, AuthenticationKey, Ed25519PublicKey } from \"../supra_types\";\nimport { bcsToBytes } from \"../bcs\";\n\nexport interface SupraAccountObject {\n  address?: Gen.HexEncodedBytes;\n  publicKeyHex?: Gen.HexEncodedBytes;\n  privateKeyHex: Gen.HexEncodedBytes;\n}\n\n/**\n * Class for creating and managing Supra account\n */\nexport class SupraAccount {\n  /**\n   * A private key and public key, associated with the given account\n   */\n  readonly signingKey: nacl.SignKeyPair;\n\n  /**\n   * Address associated with the given account\n   */\n  private readonly accountAddress: HexString;\n\n  static fromSupraAccountObject(obj: SupraAccountObject): SupraAccount {\n    return new SupraAccount(HexString.ensure(obj.privateKeyHex).toUint8Array(), obj.address);\n  }\n\n  /**\n   * Check's if the derive path is valid\n   */\n  static isValidPath(path: string): boolean {\n    return /^m\\/44'\\/637'\\/[0-9]+'\\/[0-9]+'\\/[0-9]+'+$/.test(path);\n  }\n\n  /**\n   * Creates new account with bip44 path and mnemonics,\n   * @param path. (e.g. m/44'/637'/0'/0'/0')\n   * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki}\n   * @param mnemonics.\n   * @returns SupraAccount\n   */\n  static fromDerivePath(path: string, mnemonics: string): SupraAccount {\n    if (!SupraAccount.isValidPath(path)) {\n      throw new Error(\"Invalid derivation path\");\n    }\n\n    const normalizeMnemonics = mnemonics\n      .trim()\n      .split(/\\s+/)\n      .map((part) => part.toLowerCase())\n      .join(\" \");\n\n    const { key } = derivePath(path, bytesToHex(bip39.mnemonicToSeedSync(normalizeMnemonics)));\n\n    return new SupraAccount(key);\n  }\n\n  /**\n   * Creates new account instance. Constructor allows passing in an address,\n   * to handle account key rotation, where auth_key != public_key\n   * @param privateKeyBytes  Private key from which account key pair will be generated.\n   * If not specified, new key pair is going to be created.\n   * @param address Account address (e.g. 0xe8012714cd17606cee7188a2a365eef3fe760be598750678c8c5954eb548a591).\n   * If not specified, a new one will be generated from public key\n   */\n  constructor(privateKeyBytes?: Uint8Array | undefined, address?: MaybeHexString) {\n    if (privateKeyBytes) {\n      this.signingKey = nacl.sign.keyPair.fromSeed(privateKeyBytes.slice(0, 32));\n    } else {\n      this.signingKey = nacl.sign.keyPair();\n    }\n    this.accountAddress = HexString.ensure(address || this.authKey().hex());\n  }\n\n  /**\n   * This is the key by which Supra account is referenced.\n   * It is the 32-byte of the SHA-3 256 cryptographic hash\n   * of the public key(s) concatenated with a signature scheme identifier byte\n   * @returns Address associated with the given account\n   */\n  address(): HexString {\n    return this.accountAddress;\n  }\n\n  /**\n   * This key enables account owners to rotate their private key(s)\n   * associated with the account without changing the address that hosts their account.\n   * @returns Authentication key for the associated account\n   */\n  @Memoize()\n  authKey(): HexString {\n    const pubKey = new Ed25519PublicKey(this.signingKey.publicKey);\n    const authKey = AuthenticationKey.fromEd25519PublicKey(pubKey);\n    return authKey.derivedAddress();\n  }\n\n  /**\n   * Takes source address and seeds and returns the resource account address\n   * @param sourceAddress Address used to derive the resource account\n   * @param seed The seed bytes\n   * @returns The resource account address\n   */\n  static getResourceAccountAddress(sourceAddress: MaybeHexString, seed: Uint8Array): HexString {\n    const source = bcsToBytes(AccountAddress.fromHex(sourceAddress));\n\n    const bytes = new Uint8Array([...source, ...seed, AuthenticationKey.DERIVE_RESOURCE_ACCOUNT_SCHEME]);\n\n    const hash = sha3Hash.create();\n    hash.update(bytes);\n\n    return HexString.fromUint8Array(hash.digest());\n  }\n\n  /**\n   * Takes creator address and collection name and returns the collection id hash.\n   * Collection id hash are generated as sha256 hash of (`creator_address::collection_name`)\n   *\n   * @param creatorAddress Collection creator address\n   * @param collectionName The collection name\n   * @returns The collection id hash\n   */\n  static getCollectionID(creatorAddress: MaybeHexString, collectionName: string): HexString {\n    const seed = new TextEncoder().encode(`${creatorAddress}::${collectionName}`);\n    const hash = sha256.create();\n    hash.update(seed);\n    return HexString.fromUint8Array(hash.digest());\n  }\n\n  /**\n   * This key is generated with Ed25519 scheme.\n   * Public key is used to check a signature of transaction, signed by given account\n   * @returns The public key for the associated account\n   */\n  pubKey(): HexString {\n    return HexString.fromUint8Array(this.signingKey.publicKey);\n  }\n\n  /**\n   * Signs specified `buffer` with account's private key\n   * @param buffer A buffer to sign\n   * @returns A signature HexString\n   */\n  signBuffer(buffer: Uint8Array): HexString {\n    const signature = nacl.sign.detached(buffer, this.signingKey.secretKey);\n    return HexString.fromUint8Array(signature);\n  }\n\n  /**\n   * Signs specified `hexString` with account's private key\n   * @param hexString A regular string or HexString to sign\n   * @returns A signature HexString\n   */\n  signHexString(hexString: MaybeHexString): HexString {\n    const toSign = HexString.ensure(hexString).toUint8Array();\n    return this.signBuffer(toSign);\n  }\n\n  /**\n   * Verifies the signature of the message with the public key of the account\n   * @param message a signed message\n   * @param signature the signature of the message\n   */\n  verifySignature(message: MaybeHexString, signature: MaybeHexString): boolean {\n    const rawMessage = HexString.ensure(message).toUint8Array();\n    const rawSignature = HexString.ensure(signature).toUint8Array();\n    return nacl.sign.detached.verify(rawMessage, rawSignature, this.signingKey.publicKey);\n  }\n\n  /**\n   * Derives account address, public key and private key\n   * @returns SupraAccountObject instance.\n   * @example An example of the returned SupraAccountObject object\n   * ```\n   * {\n   *    address: \"0xe8012714cd17606cee7188a2a365eef3fe760be598750678c8c5954eb548a591\",\n   *    publicKeyHex: \"0xf56d8524faf79fbc0f48c13aeed3b0ce5dd376b4db93b8130a107c0a5e04ba04\",\n   *    privateKeyHex: `0x009c9f7c992a06cfafe916f125d8adb7a395fca243e264a8e56a4b3e6accf940\n   *      d2b11e9ece3049ce60e3c7b4a1c58aebfa9298e29a30a58a67f1998646135204`\n   * }\n   * ```\n   */\n  toPrivateKeyObject(): SupraAccountObject {\n    return {\n      address: this.address().hex(),\n      publicKeyHex: this.pubKey().hex(),\n      privateKeyHex: HexString.fromUint8Array(this.signingKey.secretKey.slice(0, 32)).hex(),\n    };\n  }\n}\n\n// Returns an account address as a HexString given either an SupraAccount or a MaybeHexString.\nexport function getAddressFromAccountOrAddress(accountOrAddress: SupraAccount | MaybeHexString): HexString {\n  return accountOrAddress instanceof SupraAccount ? accountOrAddress.address() : HexString.ensure(accountOrAddress);\n}\n","import nacl from \"tweetnacl\";\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { hexToBytes } from \"@noble/hashes/utils\";\n\nexport type Keys = {\n  key: Uint8Array;\n  chainCode: Uint8Array;\n};\n\nconst pathRegex = /^m(\\/[0-9]+')+$/;\n\nconst replaceDerive = (val: string): string => val.replace(\"'\", \"\");\n\nconst HMAC_KEY = \"ed25519 seed\";\nconst HARDENED_OFFSET = 0x80000000;\n\nexport const getMasterKeyFromSeed = (seed: string): Keys => {\n  const h = hmac.create(sha512, HMAC_KEY);\n  const I = h.update(hexToBytes(seed)).digest();\n  const IL = I.slice(0, 32);\n  const IR = I.slice(32);\n  return {\n    key: IL,\n    chainCode: IR,\n  };\n};\n\nexport const CKDPriv = ({ key, chainCode }: Keys, index: number): Keys => {\n  const buffer = new ArrayBuffer(4);\n  new DataView(buffer).setUint32(0, index);\n  const indexBytes = new Uint8Array(buffer);\n  const zero = new Uint8Array([0]);\n  const data = new Uint8Array([...zero, ...key, ...indexBytes]);\n\n  const I = hmac.create(sha512, chainCode).update(data).digest();\n  const IL = I.slice(0, 32);\n  const IR = I.slice(32);\n  return {\n    key: IL,\n    chainCode: IR,\n  };\n};\n\nexport const getPublicKey = (privateKey: Uint8Array, withZeroByte = true): Uint8Array => {\n  const keyPair = nacl.sign.keyPair.fromSeed(privateKey);\n  const signPk = keyPair.secretKey.subarray(32);\n  const zero = new Uint8Array([0]);\n  return withZeroByte ? new Uint8Array([...zero, ...signPk]) : signPk;\n};\n\nexport const isValidPath = (path: string): boolean => {\n  if (!pathRegex.test(path)) {\n    return false;\n  }\n  return !path\n    .split(\"/\")\n    .slice(1)\n    .map(replaceDerive)\n    .some(Number.isNaN as any);\n};\n\nexport const derivePath = (path: string, seed: string, offset = HARDENED_OFFSET): Keys => {\n  if (!isValidPath(path)) {\n    throw new Error(\"Invalid derivation path\");\n  }\n\n  const { key, chainCode } = getMasterKeyFromSeed(seed);\n  const segments = path\n    .split(\"/\")\n    .slice(1)\n    .map(replaceDerive)\n    .map((el) => parseInt(el, 10));\n\n  return segments.reduce((parentKeys, segment) => CKDPriv(parentKeys, segment + offset), { key, chainCode });\n};\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nexport const DEFAULT_MAX_GAS_AMOUNT = 200000;\n// Transaction expire timestamp\nexport const DEFAULT_TXN_EXP_SEC_FROM_NOW = 20;\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport { HexEncodedBytes } from \"../generated\";\n\n// eslint-disable-next-line no-use-before-define\nexport type MaybeHexString = HexString | string | HexEncodedBytes;\n\n/**\n * A util class for working with hex strings.\n * Hex strings are strings that are prefixed with `0x`\n */\nexport class HexString {\n  /// We want to make sure this hexString has the `0x` hex prefix\n  private readonly hexString: string;\n\n  /**\n   * Creates new hex string from Buffer\n   * @param buffer A buffer to convert\n   * @returns New HexString\n   */\n  static fromBuffer(buffer: Uint8Array): HexString {\n    return HexString.fromUint8Array(buffer);\n  }\n\n  /**\n   * Creates new hex string from Uint8Array\n   * @param arr Uint8Array to convert\n   * @returns New HexString\n   */\n  static fromUint8Array(arr: Uint8Array): HexString {\n    return new HexString(bytesToHex(arr));\n  }\n\n  /**\n   * Ensures `hexString` is instance of `HexString` class\n   * @param hexString String to check\n   * @returns New HexString if `hexString` is regular string or `hexString` if it is HexString instance\n   * @example\n   * ```\n   *  const regularString = \"string\";\n   *  const hexString = new HexString(\"string\"); // \"0xstring\"\n   *  HexString.ensure(regularString); // \"0xstring\"\n   *  HexString.ensure(hexString); // \"0xstring\"\n   * ```\n   */\n  static ensure(hexString: MaybeHexString): HexString {\n    if (typeof hexString === \"string\") {\n      return new HexString(hexString);\n    }\n    return hexString;\n  }\n\n  /**\n   * Creates new HexString instance from regular string. If specified string already starts with \"0x\" prefix,\n   * it will not add another one\n   * @param hexString String to convert\n   * @example\n   * ```\n   *  const string = \"string\";\n   *  new HexString(string); // \"0xstring\"\n   * ```\n   */\n  constructor(hexString: string | HexEncodedBytes) {\n    if (hexString.startsWith(\"0x\")) {\n      this.hexString = hexString;\n    } else {\n      this.hexString = `0x${hexString}`;\n    }\n  }\n\n  /**\n   * Getter for inner hexString\n   * @returns Inner hex string\n   */\n  hex(): string {\n    return this.hexString;\n  }\n\n  /**\n   * Getter for inner hexString without prefix\n   * @returns Inner hex string without prefix\n   * @example\n   * ```\n   *  const hexString = new HexString(\"string\"); // \"0xstring\"\n   *  hexString.noPrefix(); // \"string\"\n   * ```\n   */\n  noPrefix(): string {\n    return this.hexString.slice(2);\n  }\n\n  /**\n   * Overrides default `toString` method\n   * @returns Inner hex string\n   */\n  toString(): string {\n    return this.hex();\n  }\n\n  /**\n   * Trimmes extra zeroes in the begining of a string\n   * @returns Inner hexString without leading zeroes\n   * @example\n   * ```\n   *  new HexString(\"0x000000string\").toShortString(); // result = \"0xstring\"\n   * ```\n   */\n  toShortString(): string {\n    const trimmed = this.hexString.replace(/^0x0*/, \"\");\n    return `0x${trimmed}`;\n  }\n\n  /**\n   * Converts hex string to a Uint8Array\n   * @returns Uint8Array from inner hexString without prefix\n   */\n  toUint8Array(): Uint8Array {\n    return Uint8Array.from(hexToBytes(this.noPrefix()));\n  }\n}\n","/**\n * Credits to https://github.com/darrylhodgins/typescript-memoize\n */\n\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-restricted-syntax */\n\ninterface MemoizeArgs {\n  // ttl in milliseconds for cached items. After `ttlMs`, cached items are evicted automatically. If no `ttlMs`\n  // is provided, cached items won't get auto-evicted.\n  ttlMs?: number;\n  // produces the cache key based on `args`.\n  hashFunction?: boolean | ((...args: any[]) => any);\n  // cached items can be taged with `tags`. `tags` can be used to evict cached items\n  tags?: string[];\n}\n\nexport function Memoize(args?: MemoizeArgs | MemoizeArgs[\"hashFunction\"]) {\n  let hashFunction: MemoizeArgs[\"hashFunction\"];\n  let ttlMs: MemoizeArgs[\"ttlMs\"];\n  let tags: MemoizeArgs[\"tags\"];\n\n  if (typeof args === \"object\") {\n    hashFunction = args.hashFunction;\n    ttlMs = args.ttlMs;\n    tags = args.tags;\n  } else {\n    hashFunction = args;\n  }\n\n  return (target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) => {\n    if (descriptor.value != null) {\n      descriptor.value = getNewFunction(descriptor.value, hashFunction, ttlMs, tags);\n    } else if (descriptor.get != null) {\n      descriptor.get = getNewFunction(descriptor.get, hashFunction, ttlMs, tags);\n    } else {\n      throw new Error(\"Only put a Memoize() decorator on a method or get accessor.\");\n    }\n  };\n}\n\nexport function MemoizeExpiring(ttlMs: number, hashFunction?: MemoizeArgs[\"hashFunction\"]) {\n  return Memoize({\n    ttlMs,\n    hashFunction,\n  });\n}\n\nconst clearCacheTagsMap: Map<string, Map<any, any>[]> = new Map();\n\nexport function clear(tags: string[]): number {\n  const cleared: Set<Map<any, any>> = new Set();\n  for (const tag of tags) {\n    const maps = clearCacheTagsMap.get(tag);\n    if (maps) {\n      for (const mp of maps) {\n        if (!cleared.has(mp)) {\n          mp.clear();\n          cleared.add(mp);\n        }\n      }\n    }\n  }\n  return cleared.size;\n}\n\nfunction getNewFunction(\n  originalMethod: () => void,\n  hashFunction?: MemoizeArgs[\"hashFunction\"],\n  ttlMs: number = 0,\n  tags?: MemoizeArgs[\"tags\"],\n) {\n  const propMapName = Symbol(\"__memoized_map__\");\n\n  // The function returned here gets called instead of originalMethod.\n  // eslint-disable-next-line func-names\n  return function (...args: any[]) {\n    let returnedValue: any;\n\n    // @ts-ignore\n    const that: any = this;\n\n    // Get or create map\n    // eslint-disable-next-line no-prototype-builtins\n    if (!that.hasOwnProperty(propMapName)) {\n      Object.defineProperty(that, propMapName, {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: new Map<any, any>(),\n      });\n    }\n    const myMap: Map<any, any> = that[propMapName];\n\n    if (Array.isArray(tags)) {\n      for (const tag of tags) {\n        if (clearCacheTagsMap.has(tag)) {\n          clearCacheTagsMap.get(tag)!.push(myMap);\n        } else {\n          clearCacheTagsMap.set(tag, [myMap]);\n        }\n      }\n    }\n\n    if (hashFunction || args.length > 0 || ttlMs > 0) {\n      let hashKey: any;\n\n      // If true is passed as first parameter, will automatically use every argument, passed to string\n      if (hashFunction === true) {\n        hashKey = args.map((a) => a.toString()).join(\"!\");\n      } else if (hashFunction) {\n        hashKey = hashFunction.apply(that, args);\n      } else {\n        // eslint-disable-next-line prefer-destructuring\n        hashKey = args[0];\n      }\n\n      const timestampKey = `${hashKey}__timestamp`;\n      let isExpired: boolean = false;\n      if (ttlMs > 0) {\n        if (!myMap.has(timestampKey)) {\n          // \"Expired\" since it was never called before\n          isExpired = true;\n        } else {\n          const timestamp = myMap.get(timestampKey);\n          isExpired = Date.now() - timestamp > ttlMs;\n        }\n      }\n\n      if (myMap.has(hashKey) && !isExpired) {\n        returnedValue = myMap.get(hashKey);\n      } else {\n        returnedValue = originalMethod.apply(that, args as any);\n        myMap.set(hashKey, returnedValue);\n        if (ttlMs > 0) {\n          myMap.set(timestampKey, Date.now());\n        }\n      }\n    } else {\n      const hashKey = that;\n      if (myMap.has(hashKey)) {\n        returnedValue = myMap.get(hashKey);\n      } else {\n        returnedValue = originalMethod.apply(that, args as any);\n        myMap.set(hashKey, returnedValue);\n      }\n    }\n\n    return returnedValue;\n  };\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from \"./abi\";\nexport * from \"./account_address\";\nexport * from \"./authenticator\";\nexport * from \"./transaction\";\nexport * from \"./type_tag\";\nexport * from \"./identifier\";\nexport * from \"./ed25519\";\nexport * from \"./multi_ed25519\";\nexport * from \"./authentication_key\";\nexport * from \"./rotation_proof_challenge\";\n\nexport type SigningMessage = Uint8Array;\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from \"./types\";\nexport * from \"./serializer\";\nexport * from \"./deserializer\";\nexport * from \"./helper\";\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Uint128, Uint16, Uint32, Uint64, Uint8, Uint256 } from \"./types\";\n\n// Upper bound values for uint8, uint16, uint64 and uint128\nexport const MAX_U8_NUMBER: Uint8 = 255;\nexport const MAX_U16_NUMBER: Uint16 = 65535;\nexport const MAX_U32_NUMBER: Uint32 = 4294967295;\nexport const MAX_U64_BIG_INT: Uint64 = 18446744073709551615n;\nexport const MAX_U128_BIG_INT: Uint128 = 340282366920938463463374607431768211455n;\nexport const MAX_U256_BIG_INT: Uint256 =\n  115792089237316195423570985008687907853269984665640564039457584007913129639935n;\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport {\n  MAX_U128_BIG_INT,\n  MAX_U16_NUMBER,\n  MAX_U32_NUMBER,\n  MAX_U64_BIG_INT,\n  MAX_U8_NUMBER,\n  MAX_U256_BIG_INT,\n} from \"./consts\";\nimport { AnyNumber, Bytes, Uint16, Uint32, Uint8 } from \"./types\";\n\nexport class Serializer {\n  private buffer: ArrayBuffer;\n\n  private offset: number;\n\n  constructor() {\n    this.buffer = new ArrayBuffer(64);\n    this.offset = 0;\n  }\n\n  private ensureBufferWillHandleSize(bytes: number) {\n    while (this.buffer.byteLength < this.offset + bytes) {\n      const newBuffer = new ArrayBuffer(this.buffer.byteLength * 2);\n      new Uint8Array(newBuffer).set(new Uint8Array(this.buffer));\n      this.buffer = newBuffer;\n    }\n  }\n\n  protected serialize(values: Bytes) {\n    this.ensureBufferWillHandleSize(values.length);\n    new Uint8Array(this.buffer, this.offset).set(values);\n    this.offset += values.length;\n  }\n\n  private serializeWithFunction(\n    fn: (byteOffset: number, value: number, littleEndian?: boolean) => void,\n    bytesLength: number,\n    value: number,\n  ) {\n    this.ensureBufferWillHandleSize(bytesLength);\n    const dv = new DataView(this.buffer, this.offset);\n    fn.apply(dv, [0, value, true]);\n    this.offset += bytesLength;\n  }\n\n  /**\n   * Serializes a string. UTF8 string is supported. Serializes the string's bytes length \"l\" first,\n   * and then serializes \"l\" bytes of the string content.\n   *\n   * BCS layout for \"string\": string_length | string_content. string_length is the bytes length of\n   * the string that is uleb128 encoded. string_length is a u32 integer.\n   *\n   * @example\n   * ```ts\n   * const serializer = new Serializer();\n   * serializer.serializeStr(\"çå∞≠¢õß∂ƒ∫\");\n   * assert(serializer.getBytes() === new Uint8Array([24, 0xc3, 0xa7, 0xc3, 0xa5, 0xe2, 0x88, 0x9e,\n   * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]));\n   * ```\n   */\n  serializeStr(value: string): void {\n    const textEncoder = new TextEncoder();\n    this.serializeBytes(textEncoder.encode(value));\n  }\n\n  /**\n   * Serializes an array of bytes.\n   *\n   * BCS layout for \"bytes\": bytes_length | bytes. bytes_length is the length of the bytes array that is\n   * uleb128 encoded. bytes_length is a u32 integer.\n   */\n  serializeBytes(value: Bytes): void {\n    this.serializeU32AsUleb128(value.length);\n    this.serialize(value);\n  }\n\n  /**\n   * Serializes an array of bytes with known length. Therefore length doesn't need to be\n   * serialized to help deserialization.  When deserializing, the number of\n   * bytes to deserialize needs to be passed in.\n   */\n  serializeFixedBytes(value: Bytes): void {\n    this.serialize(value);\n  }\n\n  /**\n   * Serializes a boolean value.\n   *\n   * BCS layout for \"boolean\": One byte. \"0x01\" for True and \"0x00\" for False.\n   */\n  serializeBool(value: boolean): void {\n    if (typeof value !== \"boolean\") {\n      throw new Error(\"Value needs to be a boolean\");\n    }\n    const byteValue = value ? 1 : 0;\n    this.serialize(new Uint8Array([byteValue]));\n  }\n\n  /**\n   * Serializes a uint8 number.\n   *\n   * BCS layout for \"uint8\": One byte. Binary format in little-endian representation.\n   */\n  @checkNumberRange(0, MAX_U8_NUMBER)\n  serializeU8(value: Uint8): void {\n    this.serialize(new Uint8Array([value]));\n  }\n\n  /**\n   * Serializes a uint16 number.\n   *\n   * BCS layout for \"uint16\": Two bytes. Binary format in little-endian representation.\n   * @example\n   * ```ts\n   * const serializer = new Serializer();\n   * serializer.serializeU16(4660);\n   * assert(serializer.getBytes() === new Uint8Array([0x34, 0x12]));\n   * ```\n   */\n  @checkNumberRange(0, MAX_U16_NUMBER)\n  serializeU16(value: Uint16): void {\n    this.serializeWithFunction(DataView.prototype.setUint16, 2, value);\n  }\n\n  /**\n   * Serializes a uint32 number.\n   *\n   * BCS layout for \"uint32\": Four bytes. Binary format in little-endian representation.\n   * @example\n   * ```ts\n   * const serializer = new Serializer();\n   * serializer.serializeU32(305419896);\n   * assert(serializer.getBytes() === new Uint8Array([0x78, 0x56, 0x34, 0x12]));\n   * ```\n   */\n  @checkNumberRange(0, MAX_U32_NUMBER)\n  serializeU32(value: Uint32): void {\n    this.serializeWithFunction(DataView.prototype.setUint32, 4, value);\n  }\n\n  /**\n   * Serializes a uint64 number.\n   *\n   * BCS layout for \"uint64\": Eight bytes. Binary format in little-endian representation.\n   * @example\n   * ```ts\n   * const serializer = new Serializer();\n   * serializer.serializeU64(1311768467750121216);\n   * assert(serializer.getBytes() === new Uint8Array([0x00, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12]));\n   * ```\n   */\n  @checkNumberRange(BigInt(0), MAX_U64_BIG_INT)\n  serializeU64(value: AnyNumber): void {\n    const low = BigInt(value.toString()) & BigInt(MAX_U32_NUMBER);\n    const high = BigInt(value.toString()) >> BigInt(32);\n\n    // write little endian number\n    this.serializeU32(Number(low));\n    this.serializeU32(Number(high));\n  }\n\n  /**\n   * Serializes a uint128 number.\n   *\n   * BCS layout for \"uint128\": Sixteen bytes. Binary format in little-endian representation.\n   */\n  @checkNumberRange(BigInt(0), MAX_U128_BIG_INT)\n  serializeU128(value: AnyNumber): void {\n    const low = BigInt(value.toString()) & MAX_U64_BIG_INT;\n    const high = BigInt(value.toString()) >> BigInt(64);\n\n    // write little endian number\n    this.serializeU64(low);\n    this.serializeU64(high);\n  }\n\n  /**\n   * Serializes a uint256 number.\n   *\n   * BCS layout for \"uint256\": Sixteen bytes. Binary format in little-endian representation.\n   */\n  @checkNumberRange(BigInt(0), MAX_U256_BIG_INT)\n  serializeU256(value: AnyNumber): void {\n    const low = BigInt(value.toString()) & MAX_U128_BIG_INT;\n    const high = BigInt(value.toString()) >> BigInt(128);\n\n    // write little endian number\n    this.serializeU128(low);\n    this.serializeU128(high);\n  }\n\n  /**\n   * Serializes a uint32 number with uleb128.\n   *\n   * BCS use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n   */\n  @checkNumberRange(0, MAX_U32_NUMBER)\n  serializeU32AsUleb128(val: Uint32): void {\n    let value = val;\n    const valueArray = [];\n    while (value >>> 7 !== 0) {\n      valueArray.push((value & 0x7f) | 0x80);\n      value >>>= 7;\n    }\n    valueArray.push(value);\n    this.serialize(new Uint8Array(valueArray));\n  }\n\n  /**\n   * Returns the buffered bytes\n   */\n  getBytes(): Bytes {\n    return new Uint8Array(this.buffer).slice(0, this.offset);\n  }\n}\n\n/**\n * Creates a decorator to make sure the arg value of the decorated function is within a range.\n * @param minValue The arg value of decorated function must >= minValue\n * @param maxValue The arg value of decorated function must <= maxValue\n * @param message Error message\n */\nfunction checkNumberRange<T extends AnyNumber>(minValue: T, maxValue: T, message?: string) {\n  return (target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => {\n    const childFunction = descriptor.value;\n    // eslint-disable-next-line no-param-reassign\n    descriptor.value = function deco(value: AnyNumber) {\n      const valueBigInt = BigInt(value.toString());\n      if (valueBigInt > BigInt(maxValue.toString()) || valueBigInt < BigInt(minValue.toString())) {\n        throw new Error(message || \"Value is out of range\");\n      }\n      childFunction.apply(this, [value]);\n    };\n    return descriptor;\n  };\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport { MAX_U32_NUMBER } from \"./consts\";\nimport { Bytes, Uint128, Uint16, Uint256, Uint32, Uint64, Uint8 } from \"./types\";\n\nexport class Deserializer {\n  private buffer: ArrayBuffer;\n\n  private offset: number;\n\n  constructor(data: Bytes) {\n    // copies data to prevent outside mutation of buffer.\n    this.buffer = new ArrayBuffer(data.length);\n    new Uint8Array(this.buffer).set(data, 0);\n    this.offset = 0;\n  }\n\n  private read(length: number): ArrayBuffer {\n    if (this.offset + length > this.buffer.byteLength) {\n      throw new Error(\"Reached to the end of buffer\");\n    }\n\n    const bytes = this.buffer.slice(this.offset, this.offset + length);\n    this.offset += length;\n    return bytes;\n  }\n\n  /**\n   * Deserializes a string. UTF8 string is supported. Reads the string's bytes length \"l\" first,\n   * and then reads \"l\" bytes of content. Decodes the byte array into a string.\n   *\n   * BCS layout for \"string\": string_length | string_content. string_length is the bytes length of\n   * the string that is uleb128 encoded. string_length is a u32 integer.\n   *\n   * @example\n   * ```ts\n   * const deserializer = new Deserializer(new Uint8Array([24, 0xc3, 0xa7, 0xc3, 0xa5, 0xe2, 0x88, 0x9e,\n   * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]));\n   * assert(deserializer.deserializeStr() === \"çå∞≠¢õß∂ƒ∫\");\n   * ```\n   */\n  deserializeStr(): string {\n    const value = this.deserializeBytes();\n    const textDecoder = new TextDecoder();\n    return textDecoder.decode(value);\n  }\n\n  /**\n   * Deserializes an array of bytes.\n   *\n   * BCS layout for \"bytes\": bytes_length | bytes. bytes_length is the length of the bytes array that is\n   * uleb128 encoded. bytes_length is a u32 integer.\n   */\n  deserializeBytes(): Bytes {\n    const len = this.deserializeUleb128AsU32();\n    return new Uint8Array(this.read(len));\n  }\n\n  /**\n   * Deserializes an array of bytes. The number of bytes to read is already known.\n   *\n   */\n  deserializeFixedBytes(len: number): Bytes {\n    return new Uint8Array(this.read(len));\n  }\n\n  /**\n   * Deserializes a boolean value.\n   *\n   * BCS layout for \"boolean\": One byte. \"0x01\" for True and \"0x00\" for False.\n   */\n  deserializeBool(): boolean {\n    const bool = new Uint8Array(this.read(1))[0];\n    if (bool !== 1 && bool !== 0) {\n      throw new Error(\"Invalid boolean value\");\n    }\n    return bool === 1;\n  }\n\n  /**\n   * Deserializes a uint8 number.\n   *\n   * BCS layout for \"uint8\": One byte. Binary format in little-endian representation.\n   */\n  deserializeU8(): Uint8 {\n    return new DataView(this.read(1)).getUint8(0);\n  }\n\n  /**\n   * Deserializes a uint16 number.\n   *\n   * BCS layout for \"uint16\": Two bytes. Binary format in little-endian representation.\n   * @example\n   * ```ts\n   * const deserializer = new Deserializer(new Uint8Array([0x34, 0x12]));\n   * assert(deserializer.deserializeU16() === 4660);\n   * ```\n   */\n  deserializeU16(): Uint16 {\n    return new DataView(this.read(2)).getUint16(0, true);\n  }\n\n  /**\n   * Deserializes a uint32 number.\n   *\n   * BCS layout for \"uint32\": Four bytes. Binary format in little-endian representation.\n   * @example\n   * ```ts\n   * const deserializer = new Deserializer(new Uint8Array([0x78, 0x56, 0x34, 0x12]));\n   * assert(deserializer.deserializeU32() === 305419896);\n   * ```\n   */\n  deserializeU32(): Uint32 {\n    return new DataView(this.read(4)).getUint32(0, true);\n  }\n\n  /**\n   * Deserializes a uint64 number.\n   *\n   * BCS layout for \"uint64\": Eight bytes. Binary format in little-endian representation.\n   * @example\n   * ```ts\n   * const deserializer = new Deserializer(new Uint8Array([0x00, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12]));\n   * assert(deserializer.deserializeU64() === 1311768467750121216);\n   * ```\n   */\n  deserializeU64(): Uint64 {\n    const low = this.deserializeU32();\n    const high = this.deserializeU32();\n\n    // combine the two 32-bit values and return (little endian)\n    return BigInt((BigInt(high) << BigInt(32)) | BigInt(low));\n  }\n\n  /**\n   * Deserializes a uint128 number.\n   *\n   * BCS layout for \"uint128\": Sixteen bytes. Binary format in little-endian representation.\n   */\n  deserializeU128(): Uint128 {\n    const low = this.deserializeU64();\n    const high = this.deserializeU64();\n\n    // combine the two 64-bit values and return (little endian)\n    return BigInt((high << BigInt(64)) | low);\n  }\n\n  /**\n   * Deserializes a uint256 number.\n   *\n   * BCS layout for \"uint256\": Thirty-two bytes. Binary format in little-endian representation.\n   */\n  deserializeU256(): Uint256 {\n    const low = this.deserializeU128();\n    const high = this.deserializeU128();\n\n    // combine the two 128-bit values and return (little endian)\n    return BigInt((high << BigInt(128)) | low);\n  }\n\n  /**\n   * Deserializes a uleb128 encoded uint32 number.\n   *\n   * BCS use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n   */\n  deserializeUleb128AsU32(): Uint32 {\n    let value: bigint = BigInt(0);\n    let shift = 0;\n\n    while (value < MAX_U32_NUMBER) {\n      const byte = this.deserializeU8();\n      value |= BigInt(byte & 0x7f) << BigInt(shift);\n\n      if ((byte & 0x80) === 0) {\n        break;\n      }\n      shift += 7;\n    }\n\n    if (value > MAX_U32_NUMBER) {\n      throw new Error(\"Overflow while parsing uleb128-encoded uint32 value\");\n    }\n\n    return Number(value);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Deserializer } from \"./deserializer\";\nimport { Serializer } from \"./serializer\";\nimport { AnyNumber, Bytes, Seq, Uint16, Uint32, Uint8 } from \"./types\";\n\ninterface Serializable {\n  serialize(serializer: Serializer): void;\n}\n\n/**\n * Serializes a vector values that are \"Serializable\".\n */\nexport function serializeVector<T extends Serializable>(\n  value: Seq<T>,\n  serializer: Serializer\n): void {\n  serializer.serializeU32AsUleb128(value.length);\n  value.forEach((item: T) => {\n    item.serialize(serializer);\n  });\n}\n\n/**\n * Serializes a vector of bytes.\n */\nexport function serializeVectorOfBytes(\n  value: Seq<Bytes>,\n  serializer: Serializer\n): void {\n  serializer.serializeU32AsUleb128(value.length);\n  value.forEach((item: Bytes) => {\n    serializer.serializeBytes(item);\n  });\n}\n\n/**\n * Serializes a vector with specified item serialization function.\n * Very dynamic function and bypasses static typechecking.\n */\nexport function serializeVectorWithFunc(value: any[], func: string): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU32AsUleb128(value.length);\n  const f = (serializer as any)[func];\n  value.forEach((item) => {\n    f.call(serializer, item);\n  });\n  return serializer.getBytes();\n}\n\n/**\n * Deserializes a vector of values.\n */\nexport function deserializeVector(deserializer: Deserializer, cls: any): any[] {\n  const length = deserializer.deserializeUleb128AsU32();\n  const list: Seq<typeof cls> = [];\n  for (let i = 0; i < length; i += 1) {\n    list.push(cls.deserialize(deserializer));\n  }\n  return list;\n}\n\n/**\n * Deserializes a vector of bytes.\n */\nexport function deserializeVectorOfBytes(deserializer: Deserializer): Bytes[] {\n  const length = deserializer.deserializeUleb128AsU32();\n  const list: Seq<Bytes> = [];\n  for (let i = 0; i < length; i += 1) {\n    list.push(deserializer.deserializeBytes());\n  }\n  return list;\n}\n\nexport function bcsToBytes<T extends Serializable>(value: T): Bytes {\n  const serializer = new Serializer();\n  value.serialize(serializer);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeUint64(value: AnyNumber): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU64(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeU8(value: Uint8): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU8(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeU16(value: Uint16): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU16(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeU32(value: Uint32): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU32(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeU128(value: AnyNumber): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU128(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeU256(value: AnyNumber): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeU256(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeBool(value: boolean): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeBool(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeStr(value: string): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeStr(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeBytes(value: Bytes): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeBytes(value);\n  return serializer.getBytes();\n}\n\nexport function bcsSerializeFixedBytes(value: Bytes): Bytes {\n  const serializer = new Serializer();\n  serializer.serializeFixedBytes(value);\n  return serializer.getBytes();\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable max-classes-per-file */\nimport { sha3_256 as sha3Hash } from \"@noble/hashes/sha3\";\nimport { HexString } from \"../utils\";\nimport {\n  Deserializer,\n  Serializer,\n  Uint64,\n  Bytes,\n  Seq,\n  Uint8,\n  Uint128,\n  deserializeVector,\n  serializeVector,\n  bcsToBytes,\n  Uint16,\n  Uint256,\n  serializeVectorOfBytes,\n  deserializeVectorOfBytes,\n} from \"../bcs\";\nimport {\n  AccountAuthenticator,\n  TransactionAuthenticator,\n  TransactionAuthenticatorMultiAgent,\n} from \"./authenticator\";\nimport { Identifier } from \"./identifier\";\nimport { TypeTag } from \"./type_tag\";\nimport { AccountAddress } from \"./account_address\";\n\nexport class RawTransaction {\n  /**\n   * RawTransactions contain the metadata and payloads that can be submitted to Supra chain for execution.\n   * RawTransactions must be signed before Supra chain can execute them.\n   *\n   * @param sender Account address of the sender.\n   * @param sequence_number Sequence number of this transaction. This must match the sequence number stored in\n   *   the sender's account at the time the transaction executes.\n   * @param payload Instructions for the Supra Blockchain, including publishing a module,\n   *   execute a entry function or execute a script payload.\n   * @param max_gas_amount Maximum total gas to spend for this transaction. The account must have more\n   *   than this gas or the transaction will be discarded during validation.\n   * @param gas_unit_price Price to be paid per gas unit.\n   * @param expiration_timestamp_secs The blockchain timestamp at which the blockchain would discard this transaction.\n   * @param chain_id The chain ID of the blockchain that this transaction is intended to be run on.\n   */\n  constructor(\n    public readonly sender: AccountAddress,\n    public readonly sequence_number: Uint64,\n    public readonly payload: TransactionPayload,\n    public readonly max_gas_amount: Uint64,\n    public readonly gas_unit_price: Uint64,\n    public readonly expiration_timestamp_secs: Uint64,\n    public readonly chain_id: ChainId\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    this.sender.serialize(serializer);\n    serializer.serializeU64(this.sequence_number);\n    this.payload.serialize(serializer);\n    serializer.serializeU64(this.max_gas_amount);\n    serializer.serializeU64(this.gas_unit_price);\n    serializer.serializeU64(this.expiration_timestamp_secs);\n    this.chain_id.serialize(serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): RawTransaction {\n    const sender = AccountAddress.deserialize(deserializer);\n    const sequence_number = deserializer.deserializeU64();\n    const payload = TransactionPayload.deserialize(deserializer);\n    const max_gas_amount = deserializer.deserializeU64();\n    const gas_unit_price = deserializer.deserializeU64();\n    const expiration_timestamp_secs = deserializer.deserializeU64();\n    const chain_id = ChainId.deserialize(deserializer);\n    return new RawTransaction(\n      sender,\n      sequence_number,\n      payload,\n      max_gas_amount,\n      gas_unit_price,\n      expiration_timestamp_secs,\n      chain_id\n    );\n  }\n}\n\nexport class Script {\n  /**\n   * Scripts contain the Move bytecodes payload that can be submitted to Supra chain for execution.\n   * @param code Move bytecode\n   * @param ty_args Type arguments that bytecode requires.\n   *\n   * @example\n   * A coin transfer function has one type argument \"CoinType\".\n   * ```\n   * public(script) fun transfer<CoinType>(from: &signer, to: address, amount: u64,)\n   * ```\n   * @param args Arugments to bytecode function.\n   *\n   * @example\n   * A coin transfer function has three arugments \"from\", \"to\" and \"amount\".\n   * ```\n   * public(script) fun transfer<CoinType>(from: &signer, to: address, amount: u64,)\n   * ```\n   */\n  constructor(\n    public readonly code: Bytes,\n    public readonly ty_args: Seq<TypeTag>,\n    public readonly args: Seq<TransactionArgument>\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeBytes(this.code);\n    serializeVector<TypeTag>(this.ty_args, serializer);\n    serializeVector<TransactionArgument>(this.args, serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): Script {\n    const code = deserializer.deserializeBytes();\n    const ty_args = deserializeVector(deserializer, TypeTag);\n    const args = deserializeVector(deserializer, TransactionArgument);\n    return new Script(code, ty_args, args);\n  }\n}\n\nexport class EntryFunction {\n  /**\n   * Contains the payload to run a function within a module.\n   * @param module_name Fully qualified module name. ModuleId consists of account address and module name.\n   * @param function_name The function to run.\n   * @param ty_args Type arguments that move function requires.\n   *\n   * @example\n   * A coin transfer function has one type argument \"CoinType\".\n   * ```\n   * public(script) fun transfer<CoinType>(from: &signer, to: address, amount: u64,)\n   * ```\n   * @param args Arugments to the move function.\n   *\n   * @example\n   * A coin transfer function has three arugments \"from\", \"to\" and \"amount\".\n   * ```\n   * public(script) fun transfer<CoinType>(from: &signer, to: address, amount: u64,)\n   * ```\n   */\n  constructor(\n    public readonly module_name: ModuleId,\n    public readonly function_name: Identifier,\n    public readonly ty_args: Seq<TypeTag>,\n    public readonly args: Seq<Bytes>\n  ) {}\n\n  /**\n   *\n   * @param module Fully qualified module name in format \"AccountAddress::module_name\" e.g. \"0x1::coin\"\n   * @param func Function name\n   * @param ty_args Type arguments that move function requires.\n   *\n   * @example\n   * A coin transfer function has one type argument \"CoinType\".\n   * ```\n   * public(script) fun transfer<CoinType>(from: &signer, to: address, amount: u64,)\n   * ```\n   * @param args Arugments to the move function.\n   *\n   * @example\n   * A coin transfer function has three arugments \"from\", \"to\" and \"amount\".\n   * ```\n   * public(script) fun transfer<CoinType>(from: &signer, to: address, amount: u64,)\n   * ```\n   * @returns\n   */\n  static natural(\n    module: string,\n    func: string,\n    ty_args: Seq<TypeTag>,\n    args: Seq<Bytes>\n  ): EntryFunction {\n    return new EntryFunction(\n      ModuleId.fromStr(module),\n      new Identifier(func),\n      ty_args,\n      args\n    );\n  }\n\n  /**\n   * `natual` is deprecated, please use `natural`\n   *\n   * @deprecated.\n   */\n  static natual(\n    module: string,\n    func: string,\n    ty_args: Seq<TypeTag>,\n    args: Seq<Bytes>\n  ): EntryFunction {\n    return EntryFunction.natural(module, func, ty_args, args);\n  }\n\n  serialize(serializer: Serializer): void {\n    this.module_name.serialize(serializer);\n    this.function_name.serialize(serializer);\n    serializeVector<TypeTag>(this.ty_args, serializer);\n\n    serializer.serializeU32AsUleb128(this.args.length);\n    this.args.forEach((item: Bytes) => {\n      serializer.serializeBytes(item);\n    });\n  }\n\n  static deserialize(deserializer: Deserializer): EntryFunction {\n    const module_name = ModuleId.deserialize(deserializer);\n    const function_name = Identifier.deserialize(deserializer);\n    const ty_args = deserializeVector(deserializer, TypeTag);\n\n    const length = deserializer.deserializeUleb128AsU32();\n    const list: Seq<Bytes> = [];\n    for (let i = 0; i < length; i += 1) {\n      list.push(deserializer.deserializeBytes());\n    }\n\n    const args = list;\n    return new EntryFunction(module_name, function_name, ty_args, args);\n  }\n}\n\nexport class MultiSigTransactionPayload {\n  /**\n   * Contains the payload to run a multisig account transaction.\n   * @param transaction_payload The payload of the multisig transaction. This can only be EntryFunction for now but\n   * Script might be supported in the future.\n   */\n  constructor(public readonly transaction_payload: EntryFunction) {}\n\n  serialize(serializer: Serializer): void {\n    // We can support multiple types of inner transaction payload in the future.\n    // For now it's only EntryFunction but if we support more types, we need to serialize with the right enum values\n    // here\n    serializer.serializeU32AsUleb128(0);\n    this.transaction_payload.serialize(serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): MultiSigTransactionPayload {\n    // TODO: Support other types of payload beside EntryFunction.\n    // This is the enum value indicating which type of payload the multisig tx contains.\n    deserializer.deserializeUleb128AsU32();\n    return new MultiSigTransactionPayload(\n      EntryFunction.deserialize(deserializer)\n    );\n  }\n}\n\nexport class MultiSig {\n  /**\n   * Contains the payload to run a multisig account transaction.\n   * @param multisig_address The multisig account address the transaction will be executed as.\n   * @param transaction_payload The payload of the multisig transaction. This is optional when executing a multisig\n   *  transaction whose payload is already stored on chain.\n   */\n  constructor(\n    public readonly multisig_address: AccountAddress,\n    public readonly transaction_payload?: MultiSigTransactionPayload\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    this.multisig_address.serialize(serializer);\n    // Options are encoded with an extra u8 field before the value - 0x0 is none and 0x1 is present.\n    // We use serializeBool below to create this prefix value.\n    if (this.transaction_payload === undefined) {\n      serializer.serializeBool(false);\n    } else {\n      serializer.serializeBool(true);\n      this.transaction_payload.serialize(serializer);\n    }\n  }\n\n  static deserialize(deserializer: Deserializer): MultiSig {\n    const multisig_address = AccountAddress.deserialize(deserializer);\n    const payloadPresent = deserializer.deserializeBool();\n    let transaction_payload;\n    if (payloadPresent) {\n      transaction_payload =\n        MultiSigTransactionPayload.deserialize(deserializer);\n    }\n    return new MultiSig(multisig_address, transaction_payload);\n  }\n}\n\nexport class Module {\n  /**\n   * Contains the bytecode of a Move module that can be published to the Supra chain.\n   * @param code Move bytecode of a module.\n   */\n  constructor(public readonly code: Bytes) {}\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeBytes(this.code);\n  }\n\n  static deserialize(deserializer: Deserializer): Module {\n    const code = deserializer.deserializeBytes();\n    return new Module(code);\n  }\n}\n\nexport class ModuleId {\n  /**\n   * Full name of a module.\n   * @param address The account address.\n   * @param name The name of the module under the account at \"address\".\n   */\n  constructor(\n    public readonly address: AccountAddress,\n    public readonly name: Identifier\n  ) {}\n\n  /**\n   * Converts a string literal to a ModuleId\n   * @param moduleId String literal in format \"AccountAddress::module_name\", e.g. \"0x1::coin\"\n   * @returns\n   */\n  static fromStr(moduleId: string): ModuleId {\n    const parts = moduleId.split(\"::\");\n    if (parts.length !== 2) {\n      throw new Error(\"Invalid module id.\");\n    }\n    return new ModuleId(\n      AccountAddress.fromHex(new HexString(parts[0])),\n      new Identifier(parts[1])\n    );\n  }\n\n  serialize(serializer: Serializer): void {\n    this.address.serialize(serializer);\n    this.name.serialize(serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): ModuleId {\n    const address = AccountAddress.deserialize(deserializer);\n    const name = Identifier.deserialize(deserializer);\n    return new ModuleId(address, name);\n  }\n}\n\nexport class ChangeSet {\n  serialize(serializer: Serializer): void {\n    throw new Error(\"Not implemented.\");\n  }\n\n  static deserialize(deserializer: Deserializer): ChangeSet {\n    throw new Error(\"Not implemented.\");\n  }\n}\n\nexport class WriteSet {\n  serialize(serializer: Serializer): void {\n    throw new Error(\"Not implmented.\");\n  }\n\n  static deserialize(deserializer: Deserializer): WriteSet {\n    throw new Error(\"Not implmented.\");\n  }\n}\n\nexport class SignedTransaction {\n  /**\n   * A SignedTransaction consists of a raw transaction and an authenticator. The authenticator\n   * contains a client's public key and the signature of the raw transaction.\n   *\n   *\n   * @param raw_txn\n   * @param authenticator Contains a client's public key and the signature of the raw transaction.\n   *   Authenticator has 3 flavors: single signature, multi-signature and multi-agent.\n   *   @see authenticator.ts for details.\n   */\n  constructor(\n    public readonly raw_txn: RawTransaction,\n    public readonly authenticator: TransactionAuthenticator\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    this.raw_txn.serialize(serializer);\n    this.authenticator.serialize(serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): SignedTransaction {\n    const raw_txn = RawTransaction.deserialize(deserializer);\n    const authenticator = TransactionAuthenticator.deserialize(deserializer);\n    return new SignedTransaction(raw_txn, authenticator);\n  }\n}\n\nexport abstract class RawTransactionWithData {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): RawTransactionWithData {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return MultiAgentRawTransaction.load(deserializer);\n      case 1:\n        return FeePayerRawTransaction.load(deserializer);\n      default:\n        throw new Error(\n          `Unknown variant index for RawTransactionWithData: ${index}`\n        );\n    }\n  }\n}\n\nexport class MultiAgentRawTransaction extends RawTransactionWithData {\n  constructor(\n    public readonly raw_txn: RawTransaction,\n    public readonly secondary_signer_addresses: Seq<AccountAddress>\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    // enum variant index\n    serializer.serializeU32AsUleb128(0);\n    this.raw_txn.serialize(serializer);\n    serializeVector<TransactionArgument>(\n      this.secondary_signer_addresses,\n      serializer\n    );\n  }\n\n  static load(deserializer: Deserializer): MultiAgentRawTransaction {\n    const rawTxn = RawTransaction.deserialize(deserializer);\n    const secondarySignerAddresses = deserializeVector(\n      deserializer,\n      AccountAddress\n    );\n\n    return new MultiAgentRawTransaction(rawTxn, secondarySignerAddresses);\n  }\n}\n\nexport class FeePayerRawTransaction extends RawTransactionWithData {\n  constructor(\n    public readonly raw_txn: RawTransaction,\n    public readonly secondary_signer_addresses: Seq<AccountAddress>,\n    public readonly fee_payer_address: AccountAddress\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    // enum variant index\n    serializer.serializeU32AsUleb128(1);\n    this.raw_txn.serialize(serializer);\n    serializeVector<TransactionArgument>(\n      this.secondary_signer_addresses,\n      serializer\n    );\n    this.fee_payer_address.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): FeePayerRawTransaction {\n    const rawTxn = RawTransaction.deserialize(deserializer);\n    const secondarySignerAddresses = deserializeVector(\n      deserializer,\n      AccountAddress\n    );\n    const feePayerAddress = AccountAddress.deserialize(deserializer);\n\n    return new FeePayerRawTransaction(\n      rawTxn,\n      secondarySignerAddresses,\n      feePayerAddress\n    );\n  }\n}\n\nexport abstract class TransactionPayload {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): TransactionPayload {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return TransactionPayloadScript.load(deserializer);\n      // TODO: change to 1 once ModuleBundle has been removed from rust\n      case 2:\n        return TransactionPayloadEntryFunction.load(deserializer);\n      case 3:\n        return TransactionPayloadMultisig.load(deserializer);\n      case 4:\n        return TransactionPayloadAutomationRegistration.load(deserializer);\n      default:\n        throw new Error(\n          `Unknown variant index for TransactionPayload: ${index}`\n        );\n    }\n  }\n}\n\nexport class TransactionPayloadScript extends TransactionPayload {\n  constructor(public readonly value: Script) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionPayloadScript {\n    const value = Script.deserialize(deserializer);\n    return new TransactionPayloadScript(value);\n  }\n}\n\nexport class TransactionPayloadEntryFunction extends TransactionPayload {\n  constructor(public readonly value: EntryFunction) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(2);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionPayloadEntryFunction {\n    const value = EntryFunction.deserialize(deserializer);\n    return new TransactionPayloadEntryFunction(value);\n  }\n}\n\nexport class TransactionPayloadMultisig extends TransactionPayload {\n  constructor(public readonly value: MultiSig) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(3);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionPayloadMultisig {\n    const value = MultiSig.deserialize(deserializer);\n    return new TransactionPayloadMultisig(value);\n  }\n}\n\nexport class TransactionPayloadAutomationRegistration extends TransactionPayload {\n  constructor(public readonly value: AutomationRegistrationParams) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(4);\n    this.value.serialize(serializer);\n  }\n\n  static load(\n    deserializer: Deserializer\n  ): TransactionPayloadAutomationRegistration {\n    const value = AutomationRegistrationParams.deserialize(deserializer);\n    return new TransactionPayloadAutomationRegistration(value);\n  }\n}\n\nexport abstract class AutomationRegistrationParams {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): AutomationRegistrationParams {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return AutomationRegistrationParamsV1.load(deserializer);\n      default:\n        throw new Error(\n          `Unknown variant index for AutomationRegistrationParams: ${index}`\n        );\n    }\n  }\n}\n\nexport class AutomationRegistrationParamsV1 extends AutomationRegistrationParams {\n  constructor(public readonly value: AutomationRegistrationParamsV1Data) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AutomationRegistrationParamsV1 {\n    const value = AutomationRegistrationParamsV1Data.deserialize(deserializer);\n    return new AutomationRegistrationParamsV1(value);\n  }\n}\n\nexport class AutomationRegistrationParamsV1Data {\n  constructor(\n    public readonly automated_function: EntryFunction,\n    public readonly max_gas_amount: Uint64,\n    public readonly gas_price_cap: Uint64,\n    public readonly automation_fee_cap_for_epoch: Uint64,\n    public readonly expiration_timestamp_secs: Uint64,\n    public readonly aux_data: Seq<Bytes>\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    this.automated_function.serialize(serializer);\n    serializer.serializeU64(this.max_gas_amount);\n    serializer.serializeU64(this.gas_price_cap);\n    serializer.serializeU64(this.automation_fee_cap_for_epoch);\n    serializer.serializeU64(this.expiration_timestamp_secs);\n    serializeVectorOfBytes(this.aux_data, serializer);\n  }\n\n  static deserialize(\n    deserializer: Deserializer\n  ): AutomationRegistrationParamsV1Data {\n    const automated_function = EntryFunction.deserialize(deserializer);\n    const max_gas_amount = deserializer.deserializeU64();\n    const gas_price_cap = deserializer.deserializeU64();\n    const automation_fee_cap_for_epoch = deserializer.deserializeU64();\n    const expiration_timestamp_secs = deserializer.deserializeU64();\n    const aux_data = deserializeVectorOfBytes(deserializer);\n\n    return new AutomationRegistrationParamsV1Data(\n      automated_function,\n      max_gas_amount,\n      gas_price_cap,\n      automation_fee_cap_for_epoch,\n      expiration_timestamp_secs,\n      aux_data\n    );\n  }\n}\n\nexport class ChainId {\n  constructor(public readonly value: Uint8) {}\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU8(this.value);\n  }\n\n  static deserialize(deserializer: Deserializer): ChainId {\n    const value = deserializer.deserializeU8();\n    return new ChainId(value);\n  }\n}\n\nexport abstract class TransactionArgument {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): TransactionArgument {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return TransactionArgumentU8.load(deserializer);\n      case 1:\n        return TransactionArgumentU64.load(deserializer);\n      case 2:\n        return TransactionArgumentU128.load(deserializer);\n      case 3:\n        return TransactionArgumentAddress.load(deserializer);\n      case 4:\n        return TransactionArgumentU8Vector.load(deserializer);\n      case 5:\n        return TransactionArgumentBool.load(deserializer);\n      case 6:\n        return TransactionArgumentU16.load(deserializer);\n      case 7:\n        return TransactionArgumentU32.load(deserializer);\n      case 8:\n        return TransactionArgumentU256.load(deserializer);\n      default:\n        throw new Error(\n          `Unknown variant index for TransactionArgument: ${index}`\n        );\n    }\n  }\n}\n\nexport class TransactionArgumentU8 extends TransactionArgument {\n  constructor(public readonly value: Uint8) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    serializer.serializeU8(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU8 {\n    const value = deserializer.deserializeU8();\n    return new TransactionArgumentU8(value);\n  }\n}\n\nexport class TransactionArgumentU16 extends TransactionArgument {\n  constructor(public readonly value: Uint16) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(6);\n    serializer.serializeU16(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU16 {\n    const value = deserializer.deserializeU16();\n    return new TransactionArgumentU16(value);\n  }\n}\n\nexport class TransactionArgumentU32 extends TransactionArgument {\n  constructor(public readonly value: Uint16) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(7);\n    serializer.serializeU32(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU32 {\n    const value = deserializer.deserializeU32();\n    return new TransactionArgumentU32(value);\n  }\n}\n\nexport class TransactionArgumentU64 extends TransactionArgument {\n  constructor(public readonly value: Uint64) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(1);\n    serializer.serializeU64(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU64 {\n    const value = deserializer.deserializeU64();\n    return new TransactionArgumentU64(value);\n  }\n}\n\nexport class TransactionArgumentU128 extends TransactionArgument {\n  constructor(public readonly value: Uint128) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(2);\n    serializer.serializeU128(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU128 {\n    const value = deserializer.deserializeU128();\n    return new TransactionArgumentU128(value);\n  }\n}\n\nexport class TransactionArgumentU256 extends TransactionArgument {\n  constructor(public readonly value: Uint256) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(8);\n    serializer.serializeU256(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU256 {\n    const value = deserializer.deserializeU256();\n    return new TransactionArgumentU256(value);\n  }\n}\n\nexport class TransactionArgumentAddress extends TransactionArgument {\n  constructor(public readonly value: AccountAddress) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(3);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentAddress {\n    const value = AccountAddress.deserialize(deserializer);\n    return new TransactionArgumentAddress(value);\n  }\n}\n\nexport class TransactionArgumentU8Vector extends TransactionArgument {\n  constructor(public readonly value: Bytes) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(4);\n    serializer.serializeBytes(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentU8Vector {\n    const value = deserializer.deserializeBytes();\n    return new TransactionArgumentU8Vector(value);\n  }\n}\n\nexport class TransactionArgumentBool extends TransactionArgument {\n  constructor(public readonly value: boolean) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(5);\n    serializer.serializeBool(this.value);\n  }\n\n  static load(deserializer: Deserializer): TransactionArgumentBool {\n    const value = deserializer.deserializeBool();\n    return new TransactionArgumentBool(value);\n  }\n}\n\nexport abstract class Transaction {\n  abstract serialize(serializer: Serializer): void;\n\n  abstract hash(): Bytes;\n\n  getHashSalt(): Bytes {\n    const hash = sha3Hash.create();\n    hash.update(\"SUPRA::Transaction\");\n    return hash.digest();\n  }\n\n  static deserialize(deserializer: Deserializer): Transaction {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return UserTransaction.load(deserializer);\n      default:\n        throw new Error(`Unknown variant index for Transaction: ${index}`);\n    }\n  }\n}\n\nexport class UserTransaction extends Transaction {\n  constructor(public readonly value: SignedTransaction) {\n    super();\n  }\n\n  hash(): Bytes {\n    const hash = sha3Hash.create();\n    hash.update(this.getHashSalt());\n    hash.update(bcsToBytes(this));\n    return hash.digest();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): UserTransaction {\n    return new UserTransaction(SignedTransaction.deserialize(deserializer));\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { HexString, MaybeHexString } from \"../utils\";\nimport { Serializer, Deserializer, Bytes } from \"../bcs\";\n\n/**\n * Exported as TransactionBuilderTypes.AccountAddress\n */\nexport class AccountAddress {\n  static readonly LENGTH: number = 32;\n\n  readonly address: Bytes;\n\n  static CORE_CODE_ADDRESS: AccountAddress = AccountAddress.fromHex(\"0x1\");\n\n  constructor(address: Bytes) {\n    if (address.length !== AccountAddress.LENGTH) {\n      throw new Error(\"Expected address of length 32\");\n    }\n    this.address = address;\n  }\n\n  /**\n   * Creates AccountAddress from a hex string.\n   * @param addr Hex string can be with a prefix or without a prefix,\n   *   e.g. '0x1aa' or '1aa'. Hex string will be left padded with 0s if too short.\n   */\n  static fromHex(addr: MaybeHexString): AccountAddress {\n    let address = HexString.ensure(addr);\n\n    // If an address hex has odd number of digits, padd the hex string with 0\n    // e.g. '1aa' would become '01aa'.\n    if (address.noPrefix().length % 2 !== 0) {\n      address = new HexString(`0${address.noPrefix()}`);\n    }\n\n    const addressBytes = address.toUint8Array();\n\n    if (addressBytes.length > AccountAddress.LENGTH) {\n      // eslint-disable-next-line quotes\n      throw new Error(\"Hex string is too long. Address's length is 32 bytes.\");\n    } else if (addressBytes.length === AccountAddress.LENGTH) {\n      return new AccountAddress(addressBytes);\n    }\n\n    const res: Bytes = new Uint8Array(AccountAddress.LENGTH);\n    res.set(addressBytes, AccountAddress.LENGTH - addressBytes.length);\n\n    return new AccountAddress(res);\n  }\n\n  /**\n   * Checks if the string is a valid AccountAddress\n   * @param addr Hex string can be with a prefix or without a prefix,\n   *   e.g. '0x1aa' or '1aa'. Hex string will be left padded with 0s if too short.\n   */\n  static isValid(addr: MaybeHexString): boolean {\n    // At least one zero is required\n    if (addr === \"\") {\n      return false;\n    }\n\n    let address = HexString.ensure(addr);\n\n    // If an address hex has odd number of digits, padd the hex string with 0\n    // e.g. '1aa' would become '01aa'.\n    if (address.noPrefix().length % 2 !== 0) {\n      address = new HexString(`0${address.noPrefix()}`);\n    }\n\n    const addressBytes = address.toUint8Array();\n\n    return addressBytes.length <= AccountAddress.LENGTH;\n  }\n\n  /**\n   * Return a hex string from account Address.\n   */\n  toHexString(): MaybeHexString {\n    return HexString.fromUint8Array(this.address).hex();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeFixedBytes(this.address);\n  }\n\n  static deserialize(deserializer: Deserializer): AccountAddress {\n    return new AccountAddress(deserializer.deserializeFixedBytes(AccountAddress.LENGTH));\n  }\n\n  /**\n   * Standardizes an address to the format \"0x\" followed by 64 lowercase hexadecimal digits.\n   */\n  static standardizeAddress(address: string): string {\n    // Convert the address to lowercase\n    const lowercaseAddress = address.toLowerCase();\n    // Remove the \"0x\" prefix if present\n    const addressWithoutPrefix = lowercaseAddress.startsWith(\"0x\") ? lowercaseAddress.slice(2) : lowercaseAddress;\n    // Pad the address with leading zeros if necessary\n    // to ensure it has exactly 64 characters (excluding the \"0x\" prefix)\n    const addressWithPadding = addressWithoutPrefix.padStart(64, \"0\");\n    // Return the standardized address with the \"0x\" prefix\n    return `0x${addressWithPadding}`;\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Bytes, Deserializer, Serializer } from \"../bcs\";\n\nexport class Ed25519PublicKey {\n  static readonly LENGTH: number = 32;\n\n  readonly value: Bytes;\n\n  constructor(value: Bytes) {\n    if (value.length !== Ed25519PublicKey.LENGTH) {\n      throw new Error(`Ed25519PublicKey length should be ${Ed25519PublicKey.LENGTH}`);\n    }\n    this.value = value;\n  }\n\n  toBytes(): Bytes {\n    return this.value;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeBytes(this.value);\n  }\n\n  static deserialize(deserializer: Deserializer): Ed25519PublicKey {\n    const value = deserializer.deserializeBytes();\n    return new Ed25519PublicKey(value);\n  }\n}\n\nexport class Ed25519Signature {\n  static readonly LENGTH = 64;\n\n  constructor(public readonly value: Bytes) {\n    if (value.length !== Ed25519Signature.LENGTH) {\n      throw new Error(`Ed25519Signature length should be ${Ed25519Signature.LENGTH}`);\n    }\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeBytes(this.value);\n  }\n\n  static deserialize(deserializer: Deserializer): Ed25519Signature {\n    const value = deserializer.deserializeBytes();\n    return new Ed25519Signature(value);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport { Bytes, Deserializer, Seq, Serializer, Uint8 } from \"../bcs\";\nimport { Ed25519PublicKey, Ed25519Signature } from \"./ed25519\";\n\n/**\n * MultiEd25519 currently supports at most 32 signatures.\n */\nconst MAX_SIGNATURES_SUPPORTED = 32;\n\nexport class MultiEd25519PublicKey {\n  /**\n   * Public key for a K-of-N multisig transaction. A K-of-N multisig transaction means that for such a\n   * transaction to be executed, at least K out of the N authorized signers have signed the transaction\n   * and passed the check conducted by the chain.\n   *\n   *\n   * @param public_keys A list of public keys\n   * @param threshold At least \"threshold\" signatures must be valid\n   */\n  constructor(\n    public readonly public_keys: Seq<Ed25519PublicKey>,\n    public readonly threshold: Uint8,\n  ) {\n    if (threshold > MAX_SIGNATURES_SUPPORTED) {\n      throw new Error(`\"threshold\" cannot be larger than ${MAX_SIGNATURES_SUPPORTED}`);\n    }\n  }\n\n  /**\n   * Converts a MultiEd25519PublicKey into bytes with: bytes = p1_bytes | ... | pn_bytes | threshold\n   */\n  toBytes(): Bytes {\n    const bytes = new Uint8Array(this.public_keys.length * Ed25519PublicKey.LENGTH + 1);\n    this.public_keys.forEach((k: Ed25519PublicKey, i: number) => {\n      bytes.set(k.value, i * Ed25519PublicKey.LENGTH);\n    });\n\n    bytes[this.public_keys.length * Ed25519PublicKey.LENGTH] = this.threshold;\n\n    return bytes;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeBytes(this.toBytes());\n  }\n\n  static deserialize(deserializer: Deserializer): MultiEd25519PublicKey {\n    const bytes = deserializer.deserializeBytes();\n    const threshold = bytes[bytes.length - 1];\n\n    const keys: Seq<Ed25519PublicKey> = [];\n\n    for (let i = 0; i < bytes.length - 1; i += Ed25519PublicKey.LENGTH) {\n      const begin = i;\n      keys.push(new Ed25519PublicKey(bytes.subarray(begin, begin + Ed25519PublicKey.LENGTH)));\n    }\n    return new MultiEd25519PublicKey(keys, threshold);\n  }\n}\n\nexport class MultiEd25519Signature {\n  static BITMAP_LEN: Uint8 = 4;\n\n  /**\n   * Signature for a K-of-N multisig transaction.\n   *\n   *\n   * @param signatures A list of ed25519 signatures\n   * @param bitmap 4 bytes, at most 32 signatures are supported. If Nth bit value is `1`, the Nth\n   * signature should be provided in `signatures`. Bits are read from left to right\n   */\n  constructor(\n    public readonly signatures: Seq<Ed25519Signature>,\n    public readonly bitmap: Uint8Array,\n  ) {\n    if (bitmap.length !== MultiEd25519Signature.BITMAP_LEN) {\n      throw new Error(`\"bitmap\" length should be ${MultiEd25519Signature.BITMAP_LEN}`);\n    }\n  }\n\n  /**\n   * Converts a MultiEd25519Signature into bytes with `bytes = s1_bytes | ... | sn_bytes | bitmap`\n   */\n  toBytes(): Bytes {\n    const bytes = new Uint8Array(this.signatures.length * Ed25519Signature.LENGTH + MultiEd25519Signature.BITMAP_LEN);\n    this.signatures.forEach((k: Ed25519Signature, i: number) => {\n      bytes.set(k.value, i * Ed25519Signature.LENGTH);\n    });\n\n    bytes.set(this.bitmap, this.signatures.length * Ed25519Signature.LENGTH);\n\n    return bytes;\n  }\n\n  /**\n   * Helper method to create a bitmap out of the specified bit positions\n   * @param bits The bitmap positions that should be set. A position starts at index 0.\n   * Valid position should range between 0 and 31.\n   * @example\n   * Here's an example of valid `bits`\n   * ```\n   * [0, 2, 31]\n   * ```\n   * `[0, 2, 31]` means the 1st, 3rd and 32nd bits should be set in the bitmap.\n   * The result bitmap should be 0b1010000000000000000000000000001\n   *\n   * @returns bitmap that is 32bit long\n   */\n  static createBitmap(bits: Seq<Uint8>): Uint8Array {\n    // Bits are read from left to right. e.g. 0b10000000 represents the first bit is set in one byte.\n    // The decimal value of 0b10000000 is 128.\n    const firstBitInByte = 128;\n    const bitmap = new Uint8Array([0, 0, 0, 0]);\n\n    // Check if duplicates exist in bits\n    const dupCheckSet = new Set();\n\n    bits.forEach((bit: number) => {\n      if (bit >= MAX_SIGNATURES_SUPPORTED) {\n        throw new Error(`Invalid bit value ${bit}.`);\n      }\n\n      if (dupCheckSet.has(bit)) {\n        throw new Error(\"Duplicated bits detected.\");\n      }\n\n      dupCheckSet.add(bit);\n\n      const byteOffset = Math.floor(bit / 8);\n\n      let byte = bitmap[byteOffset];\n\n      byte |= firstBitInByte >> bit % 8;\n\n      bitmap[byteOffset] = byte;\n    });\n\n    return bitmap;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeBytes(this.toBytes());\n  }\n\n  static deserialize(deserializer: Deserializer): MultiEd25519Signature {\n    const bytes = deserializer.deserializeBytes();\n    const bitmap = bytes.subarray(bytes.length - 4);\n\n    const sigs: Seq<Ed25519Signature> = [];\n\n    for (let i = 0; i < bytes.length - bitmap.length; i += Ed25519Signature.LENGTH) {\n      const begin = i;\n      sigs.push(new Ed25519Signature(bytes.subarray(begin, begin + Ed25519Signature.LENGTH)));\n    }\n    return new MultiEd25519Signature(sigs, bitmap);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { AccountAddress } from \"./account_address\";\nimport { Serializer, Deserializer, Seq, deserializeVector, serializeVector } from \"../bcs\";\nimport { Ed25519PublicKey, Ed25519Signature } from \"./ed25519\";\nimport { MultiEd25519PublicKey, MultiEd25519Signature } from \"./multi_ed25519\";\n\nexport abstract class TransactionAuthenticator {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): TransactionAuthenticator {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return TransactionAuthenticatorEd25519.load(deserializer);\n      case 1:\n        return TransactionAuthenticatorMultiEd25519.load(deserializer);\n      case 2:\n        return TransactionAuthenticatorMultiAgent.load(deserializer);\n      case 3:\n        return TransactionAuthenticatorFeePayer.load(deserializer);\n      default:\n        throw new Error(`Unknown variant index for TransactionAuthenticator: ${index}`);\n    }\n  }\n}\n\nexport class TransactionAuthenticatorEd25519 extends TransactionAuthenticator {\n  /**\n   * An authenticator for single signature.\n   *\n   * @param public_key Client's public key.\n   * @param signature Signature of a raw transaction.\n   * for details about generating a signature.\n   */\n  constructor(\n    public readonly public_key: Ed25519PublicKey,\n    public readonly signature: Ed25519Signature,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionAuthenticatorEd25519 {\n    const public_key = Ed25519PublicKey.deserialize(deserializer);\n    const signature = Ed25519Signature.deserialize(deserializer);\n    return new TransactionAuthenticatorEd25519(public_key, signature);\n  }\n}\n\nexport class TransactionAuthenticatorMultiEd25519 extends TransactionAuthenticator {\n  /**\n   * An authenticator for multiple signatures.\n   *\n   * @param public_key\n   * @param signature\n   *\n   */\n  constructor(\n    public readonly public_key: MultiEd25519PublicKey,\n    public readonly signature: MultiEd25519Signature,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(1);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionAuthenticatorMultiEd25519 {\n    const public_key = MultiEd25519PublicKey.deserialize(deserializer);\n    const signature = MultiEd25519Signature.deserialize(deserializer);\n    return new TransactionAuthenticatorMultiEd25519(public_key, signature);\n  }\n}\n\nexport class TransactionAuthenticatorMultiAgent extends TransactionAuthenticator {\n  constructor(\n    public readonly sender: AccountAuthenticator,\n    public readonly secondary_signer_addresses: Seq<AccountAddress>,\n    public readonly secondary_signers: Seq<AccountAuthenticator>,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(2);\n    this.sender.serialize(serializer);\n    serializeVector<AccountAddress>(this.secondary_signer_addresses, serializer);\n    serializeVector<AccountAuthenticator>(this.secondary_signers, serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionAuthenticatorMultiAgent {\n    const sender = AccountAuthenticator.deserialize(deserializer);\n    const secondary_signer_addresses = deserializeVector(deserializer, AccountAddress);\n    const secondary_signers = deserializeVector(deserializer, AccountAuthenticator);\n    return new TransactionAuthenticatorMultiAgent(sender, secondary_signer_addresses, secondary_signers);\n  }\n}\n\nexport class TransactionAuthenticatorFeePayer extends TransactionAuthenticator {\n  constructor(\n    public readonly sender: AccountAuthenticator,\n    public readonly secondary_signer_addresses: Seq<AccountAddress>,\n    public readonly secondary_signers: Seq<AccountAuthenticator>,\n    public readonly fee_payer: { address: AccountAddress; authenticator: AccountAuthenticator },\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(3);\n    this.sender.serialize(serializer);\n    serializeVector<AccountAddress>(this.secondary_signer_addresses, serializer);\n    serializeVector<AccountAuthenticator>(this.secondary_signers, serializer);\n    this.fee_payer.address.serialize(serializer);\n    this.fee_payer.authenticator.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionAuthenticatorMultiAgent {\n    const sender = AccountAuthenticator.deserialize(deserializer);\n    const secondary_signer_addresses = deserializeVector(deserializer, AccountAddress);\n    const secondary_signers = deserializeVector(deserializer, AccountAuthenticator);\n    const address = AccountAddress.deserialize(deserializer);\n    const authenticator = AccountAuthenticator.deserialize(deserializer);\n    const fee_payer = { address, authenticator };\n    return new TransactionAuthenticatorFeePayer(sender, secondary_signer_addresses, secondary_signers, fee_payer);\n  }\n}\n\nexport abstract class AccountAuthenticator {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): AccountAuthenticator {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return AccountAuthenticatorEd25519.load(deserializer);\n      case 1:\n        return AccountAuthenticatorMultiEd25519.load(deserializer);\n      default:\n        throw new Error(`Unknown variant index for AccountAuthenticator: ${index}`);\n    }\n  }\n}\n\nexport class AccountAuthenticatorEd25519 extends AccountAuthenticator {\n  constructor(\n    public readonly public_key: Ed25519PublicKey,\n    public readonly signature: Ed25519Signature,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorEd25519 {\n    const public_key = Ed25519PublicKey.deserialize(deserializer);\n    const signature = Ed25519Signature.deserialize(deserializer);\n    return new AccountAuthenticatorEd25519(public_key, signature);\n  }\n}\n\nexport class AccountAuthenticatorMultiEd25519 extends AccountAuthenticator {\n  constructor(\n    public readonly public_key: MultiEd25519PublicKey,\n    public readonly signature: MultiEd25519Signature,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(1);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorMultiEd25519 {\n    const public_key = MultiEd25519PublicKey.deserialize(deserializer);\n    const signature = MultiEd25519Signature.deserialize(deserializer);\n    return new AccountAuthenticatorMultiEd25519(public_key, signature);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Deserializer, Serializer } from \"../bcs\";\n\nexport class Identifier {\n  constructor(public value: string) {}\n\n  public serialize(serializer: Serializer): void {\n    serializer.serializeStr(this.value);\n  }\n\n  static deserialize(deserializer: Deserializer): Identifier {\n    const value = deserializer.deserializeStr();\n    return new Identifier(value);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable max-classes-per-file */\nimport { AccountAddress } from \"./account_address\";\nimport { Deserializer, Seq, Serializer, deserializeVector, serializeVector } from \"../bcs\";\nimport { Identifier } from \"./identifier\";\n\nexport abstract class TypeTag {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): TypeTag {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return TypeTagBool.load(deserializer);\n      case 1:\n        return TypeTagU8.load(deserializer);\n      case 2:\n        return TypeTagU64.load(deserializer);\n      case 3:\n        return TypeTagU128.load(deserializer);\n      case 4:\n        return TypeTagAddress.load(deserializer);\n      case 5:\n        return TypeTagSigner.load(deserializer);\n      case 6:\n        return TypeTagVector.load(deserializer);\n      case 7:\n        return TypeTagStruct.load(deserializer);\n      case 8:\n        return TypeTagU16.load(deserializer);\n      case 9:\n        return TypeTagU32.load(deserializer);\n      case 10:\n        return TypeTagU256.load(deserializer);\n      default:\n        throw new Error(`Unknown variant index for TypeTag: ${index}`);\n    }\n  }\n}\n\nexport class TypeTagBool extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagBool {\n    return new TypeTagBool();\n  }\n}\n\nexport class TypeTagU8 extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(1);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagU8 {\n    return new TypeTagU8();\n  }\n}\n\nexport class TypeTagU16 extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(8);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagU16 {\n    return new TypeTagU16();\n  }\n}\n\nexport class TypeTagU32 extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(9);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagU32 {\n    return new TypeTagU32();\n  }\n}\n\nexport class TypeTagU64 extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(2);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagU64 {\n    return new TypeTagU64();\n  }\n}\n\nexport class TypeTagU128 extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(3);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagU128 {\n    return new TypeTagU128();\n  }\n}\n\nexport class TypeTagU256 extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(10);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagU256 {\n    return new TypeTagU256();\n  }\n}\n\nexport class TypeTagAddress extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(4);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagAddress {\n    return new TypeTagAddress();\n  }\n}\n\nexport class TypeTagSigner extends TypeTag {\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(5);\n  }\n\n  static load(_deserializer: Deserializer): TypeTagSigner {\n    return new TypeTagSigner();\n  }\n}\n\nexport class TypeTagVector extends TypeTag {\n  constructor(public readonly value: TypeTag) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(6);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TypeTagVector {\n    const value = TypeTag.deserialize(deserializer);\n    return new TypeTagVector(value);\n  }\n}\n\nexport class TypeTagStruct extends TypeTag {\n  constructor(public readonly value: StructTag) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(7);\n    this.value.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): TypeTagStruct {\n    const value = StructTag.deserialize(deserializer);\n    return new TypeTagStruct(value);\n  }\n\n  isStringTypeTag(): boolean {\n    if (\n      this.value.module_name.value === \"string\" &&\n      this.value.name.value === \"String\" &&\n      this.value.address.toHexString() === AccountAddress.CORE_CODE_ADDRESS.toHexString()\n    ) {\n      return true;\n    }\n    return false;\n  }\n}\n\nexport class StructTag {\n  constructor(\n    public readonly address: AccountAddress,\n    public readonly module_name: Identifier,\n    public readonly name: Identifier,\n    public readonly type_args: Seq<TypeTag>,\n  ) {}\n\n  /**\n   * Converts a string literal to a StructTag\n   * @param structTag String literal in format \"AccountAddress::module_name::ResourceName\",\n   *   e.g. \"0x1::supra_coin::SupraCoin\"\n   * @returns\n   */\n  static fromString(structTag: string): StructTag {\n    // Use the TypeTagParser to parse the string literal into a TypeTagStruct\n    const typeTagStruct = new TypeTagParser(structTag).parseTypeTag() as TypeTagStruct;\n\n    // Convert and return as a StructTag\n    return new StructTag(\n      typeTagStruct.value.address,\n      typeTagStruct.value.module_name,\n      typeTagStruct.value.name,\n      typeTagStruct.value.type_args,\n    );\n  }\n\n  serialize(serializer: Serializer): void {\n    this.address.serialize(serializer);\n    this.module_name.serialize(serializer);\n    this.name.serialize(serializer);\n    serializeVector<TypeTag>(this.type_args, serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): StructTag {\n    const address = AccountAddress.deserialize(deserializer);\n    const moduleName = Identifier.deserialize(deserializer);\n    const name = Identifier.deserialize(deserializer);\n    const typeArgs = deserializeVector(deserializer, TypeTag);\n    return new StructTag(address, moduleName, name, typeArgs);\n  }\n}\n\nexport const stringStructTag = new StructTag(\n  AccountAddress.fromHex(\"0x1\"),\n  new Identifier(\"string\"),\n  new Identifier(\"String\"),\n  [],\n);\n\nexport function optionStructTag(typeArg: TypeTag): StructTag {\n  return new StructTag(AccountAddress.fromHex(\"0x1\"), new Identifier(\"option\"), new Identifier(\"Option\"), [typeArg]);\n}\n\nexport function objectStructTag(typeArg: TypeTag): StructTag {\n  return new StructTag(AccountAddress.fromHex(\"0x1\"), new Identifier(\"object\"), new Identifier(\"Object\"), [typeArg]);\n}\n\nfunction bail(message: string) {\n  throw new TypeTagParserError(message);\n}\n\nfunction isWhiteSpace(c: string): boolean {\n  if (c.match(/\\s/)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isValidAlphabetic(c: string): boolean {\n  if (c.match(/[_A-Za-z0-9]/g)) {\n    return true;\n  }\n  return false;\n}\n\n// Generic format is T<digits> - for example T1, T2, T10\nfunction isGeneric(c: string): boolean {\n  if (c.match(/T\\d+/g)) {\n    return true;\n  }\n  return false;\n}\n\ntype TokenType = string;\ntype TokenValue = string;\ntype Token = [TokenType, TokenValue];\n\n// Returns Token and Token byte size\nfunction nextToken(tagStr: string, pos: number): [Token, number] {\n  const c = tagStr[pos];\n  if (c === \":\") {\n    if (tagStr.slice(pos, pos + 2) === \"::\") {\n      return [[\"COLON\", \"::\"], 2];\n    }\n    bail(\"Unrecognized token.\");\n  } else if (c === \"<\") {\n    return [[\"LT\", \"<\"], 1];\n  } else if (c === \">\") {\n    return [[\"GT\", \">\"], 1];\n  } else if (c === \",\") {\n    return [[\"COMMA\", \",\"], 1];\n  } else if (isWhiteSpace(c)) {\n    let res = \"\";\n    for (let i = pos; i < tagStr.length; i += 1) {\n      const char = tagStr[i];\n      if (isWhiteSpace(char)) {\n        res = `${res}${char}`;\n      } else {\n        break;\n      }\n    }\n    return [[\"SPACE\", res], res.length];\n  } else if (isValidAlphabetic(c)) {\n    let res = \"\";\n    for (let i = pos; i < tagStr.length; i += 1) {\n      const char = tagStr[i];\n      if (isValidAlphabetic(char)) {\n        res = `${res}${char}`;\n      } else {\n        break;\n      }\n    }\n    if (isGeneric(res)) {\n      return [[\"GENERIC\", res], res.length];\n    }\n    return [[\"IDENT\", res], res.length];\n  }\n  throw new Error(\"Unrecognized token.\");\n}\n\nfunction tokenize(tagStr: string): Token[] {\n  let pos = 0;\n  const tokens = [];\n  while (pos < tagStr.length) {\n    const [token, size] = nextToken(tagStr, pos);\n    if (token[0] !== \"SPACE\") {\n      tokens.push(token);\n    }\n    pos += size;\n  }\n  return tokens;\n}\n\n/**\n * Parser to parse a type tag string\n */\nexport class TypeTagParser {\n  private readonly tokens: Token[];\n\n  private readonly typeTags: string[] = [];\n\n  constructor(tagStr: string, typeTags?: string[]) {\n    this.tokens = tokenize(tagStr);\n    this.typeTags = typeTags || [];\n  }\n\n  private consume(targetToken: string) {\n    const token = this.tokens.shift();\n    if (!token || token[1] !== targetToken) {\n      bail(\"Invalid type tag.\");\n    }\n  }\n\n  /**\n   * Consumes all of an unused generic field, mostly applicable to object\n   *\n   * Note: This is recursive.  it can be problematic if there's bad input\n   * @private\n   */\n  private consumeWholeGeneric() {\n    this.consume(\"<\");\n    while (this.tokens[0][1] !== \">\") {\n      // If it is nested, we have to consume another nested generic\n      if (this.tokens[0][1] === \"<\") {\n        this.consumeWholeGeneric();\n      } else {\n        this.tokens.shift();\n      }\n    }\n    this.consume(\">\");\n  }\n\n  private parseCommaList(endToken: TokenValue, allowTraillingComma: boolean): TypeTag[] {\n    const res: TypeTag[] = [];\n    if (this.tokens.length <= 0) {\n      bail(\"Invalid type tag.\");\n    }\n\n    while (this.tokens[0][1] !== endToken) {\n      res.push(this.parseTypeTag());\n\n      if (this.tokens.length > 0 && this.tokens[0][1] === endToken) {\n        break;\n      }\n\n      this.consume(\",\");\n      if (this.tokens.length > 0 && this.tokens[0][1] === endToken && allowTraillingComma) {\n        break;\n      }\n\n      if (this.tokens.length <= 0) {\n        bail(\"Invalid type tag.\");\n      }\n    }\n    return res;\n  }\n\n  parseTypeTag(): TypeTag {\n    if (this.tokens.length === 0) {\n      bail(\"Invalid type tag.\");\n    }\n\n    // Pop left most element out\n    const [tokenTy, tokenVal] = this.tokens.shift()!;\n\n    if (tokenVal === \"u8\") {\n      return new TypeTagU8();\n    }\n    if (tokenVal === \"u16\") {\n      return new TypeTagU16();\n    }\n    if (tokenVal === \"u32\") {\n      return new TypeTagU32();\n    }\n    if (tokenVal === \"u64\") {\n      return new TypeTagU64();\n    }\n    if (tokenVal === \"u128\") {\n      return new TypeTagU128();\n    }\n    if (tokenVal === \"u256\") {\n      return new TypeTagU256();\n    }\n    if (tokenVal === \"bool\") {\n      return new TypeTagBool();\n    }\n    if (tokenVal === \"address\") {\n      return new TypeTagAddress();\n    }\n    if (tokenVal === \"vector\") {\n      this.consume(\"<\");\n      const res = this.parseTypeTag();\n      this.consume(\">\");\n      return new TypeTagVector(res);\n    }\n    if (tokenVal === \"string\") {\n      return new TypeTagStruct(stringStructTag);\n    }\n    if (tokenTy === \"IDENT\" && (tokenVal.startsWith(\"0x\") || tokenVal.startsWith(\"0X\"))) {\n      const address = AccountAddress.fromHex(tokenVal);\n      this.consume(\"::\");\n      const [moduleTokenTy, module] = this.tokens.shift()!;\n      if (moduleTokenTy !== \"IDENT\") {\n        bail(\"Invalid type tag.\");\n      }\n      this.consume(\"::\");\n      const [nameTokenTy, name] = this.tokens.shift()!;\n      if (nameTokenTy !== \"IDENT\") {\n        bail(\"Invalid type tag.\");\n      }\n\n      // Objects can contain either concrete types e.g. 0x1::object::ObjectCore or generics e.g. T\n      // Neither matter as we can't do type checks, so just the address applies and we consume the entire generic.\n      // TODO: Support parsing structs that don't come from core code address\n      if (\n        AccountAddress.CORE_CODE_ADDRESS.toHexString() === address.toHexString() &&\n        module === \"object\" &&\n        name === \"Object\"\n      ) {\n        this.consumeWholeGeneric();\n        return new TypeTagAddress();\n      }\n\n      let tyTags: TypeTag[] = [];\n      // Check if the struct has ty args\n      if (this.tokens.length > 0 && this.tokens[0][1] === \"<\") {\n        this.consume(\"<\");\n        tyTags = this.parseCommaList(\">\", true);\n        this.consume(\">\");\n      }\n\n      const structTag = new StructTag(address, new Identifier(module), new Identifier(name), tyTags);\n      return new TypeTagStruct(structTag);\n    }\n    if (tokenTy === \"GENERIC\") {\n      if (this.typeTags.length === 0) {\n        bail(\"Can't convert generic type since no typeTags were specified.\");\n      }\n      // a generic tokenVal has the format of `T<digit>`, for example `T1`.\n      // The digit (i.e 1) indicates the index of this type in the typeTags array.\n      // For a tokenVal == T1, should be parsed as the type in typeTags[1]\n      const idx = parseInt(tokenVal.substring(1), 10);\n      return new TypeTagParser(this.typeTags[idx]).parseTypeTag();\n    }\n\n    throw new Error(\"Invalid type tag.\");\n  }\n}\n\nexport class TypeTagParserError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"TypeTagParserError\";\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Deserializer, Serializer, Bytes, Seq, deserializeVector, serializeVector } from \"../bcs\";\n\nimport { ModuleId } from \"./transaction\";\n\nimport { TypeTag } from \"./type_tag\";\n\nexport class TypeArgumentABI {\n  /**\n   * Constructs a TypeArgumentABI instance.\n   * @param name\n   */\n  constructor(public readonly name: string) {}\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeStr(this.name);\n  }\n\n  static deserialize(deserializer: Deserializer): TypeArgumentABI {\n    const name = deserializer.deserializeStr();\n    return new TypeArgumentABI(name);\n  }\n}\n\nexport class ArgumentABI {\n  /**\n   * Constructs an ArgumentABI instance.\n   * @param name\n   * @param type_tag\n   */\n  constructor(\n    public readonly name: string,\n    public readonly type_tag: TypeTag,\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeStr(this.name);\n    this.type_tag.serialize(serializer);\n  }\n\n  static deserialize(deserializer: Deserializer): ArgumentABI {\n    const name = deserializer.deserializeStr();\n    const typeTag = TypeTag.deserialize(deserializer);\n    return new ArgumentABI(name, typeTag);\n  }\n}\n\nexport abstract class ScriptABI {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): ScriptABI {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case 0:\n        return TransactionScriptABI.load(deserializer);\n      case 1:\n        return EntryFunctionABI.load(deserializer);\n      default:\n        throw new Error(`Unknown variant index for TransactionPayload: ${index}`);\n    }\n  }\n}\n\nexport class TransactionScriptABI extends ScriptABI {\n  /**\n   * Constructs a TransactionScriptABI instance.\n   * @param name Entry function name\n   * @param doc\n   * @param code\n   * @param ty_args\n   * @param args\n   */\n  constructor(\n    public readonly name: string,\n    public readonly doc: string,\n    public readonly code: Bytes,\n    public readonly ty_args: Seq<TypeArgumentABI>,\n    public readonly args: Seq<ArgumentABI>,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(0);\n    serializer.serializeStr(this.name);\n    serializer.serializeStr(this.doc);\n    serializer.serializeBytes(this.code);\n    serializeVector<TypeArgumentABI>(this.ty_args, serializer);\n    serializeVector<ArgumentABI>(this.args, serializer);\n  }\n\n  static load(deserializer: Deserializer): TransactionScriptABI {\n    const name = deserializer.deserializeStr();\n    const doc = deserializer.deserializeStr();\n    const code = deserializer.deserializeBytes();\n    const tyArgs = deserializeVector(deserializer, TypeArgumentABI);\n    const args = deserializeVector(deserializer, ArgumentABI);\n    return new TransactionScriptABI(name, doc, code, tyArgs, args);\n  }\n}\n\nexport class EntryFunctionABI extends ScriptABI {\n  /**\n   * Constructs a EntryFunctionABI instance\n   * @param name\n   * @param module_name Fully qualified module id\n   * @param doc\n   * @param ty_args\n   * @param args\n   */\n  constructor(\n    public readonly name: string,\n    public readonly module_name: ModuleId,\n    public readonly doc: string,\n    public readonly ty_args: Seq<TypeArgumentABI>,\n    public readonly args: Seq<ArgumentABI>,\n  ) {\n    super();\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(1);\n    serializer.serializeStr(this.name);\n    this.module_name.serialize(serializer);\n    serializer.serializeStr(this.doc);\n    serializeVector<TypeArgumentABI>(this.ty_args, serializer);\n    serializeVector<ArgumentABI>(this.args, serializer);\n  }\n\n  static load(deserializer: Deserializer): EntryFunctionABI {\n    const name = deserializer.deserializeStr();\n    const moduleName = ModuleId.deserialize(deserializer);\n    const doc = deserializer.deserializeStr();\n    const tyArgs = deserializeVector(deserializer, TypeArgumentABI);\n    const args = deserializeVector(deserializer, ArgumentABI);\n    return new EntryFunctionABI(name, moduleName, doc, tyArgs, args);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { sha3_256 as sha3Hash } from \"@noble/hashes/sha3\";\nimport { HexString } from \"../utils\";\nimport { Bytes } from \"../bcs\";\nimport { MultiEd25519PublicKey } from \"./multi_ed25519\";\nimport { Ed25519PublicKey } from \"./ed25519\";\n\n/**\n * Each account stores an authentication key. Authentication key enables account owners to rotate\n * their private key(s) associated with the account without changing the address that hosts their account.\n *\n * Account addresses can be derived from AuthenticationKey\n */\nexport class AuthenticationKey {\n  static readonly LENGTH: number = 32;\n\n  static readonly MULTI_ED25519_SCHEME: number = 1;\n\n  static readonly ED25519_SCHEME: number = 0;\n\n  static readonly DERIVE_RESOURCE_ACCOUNT_SCHEME: number = 255;\n\n  readonly bytes: Bytes;\n\n  constructor(bytes: Bytes) {\n    if (bytes.length !== AuthenticationKey.LENGTH) {\n      throw new Error(\"Expected a byte array of length 32\");\n    }\n    this.bytes = bytes;\n  }\n\n  /**\n   * Converts a K-of-N MultiEd25519PublicKey to AuthenticationKey with:\n   * `auth_key = sha3-256(p_1 | … | p_n | K | 0x01)`. `K` represents the K-of-N required for\n   * authenticating the transaction. `0x01` is the 1-byte scheme for multisig.\n   */\n  static fromMultiEd25519PublicKey(publicKey: MultiEd25519PublicKey): AuthenticationKey {\n    const pubKeyBytes = publicKey.toBytes();\n\n    const bytes = new Uint8Array(pubKeyBytes.length + 1);\n    bytes.set(pubKeyBytes);\n    bytes.set([AuthenticationKey.MULTI_ED25519_SCHEME], pubKeyBytes.length);\n\n    const hash = sha3Hash.create();\n    hash.update(bytes);\n\n    return new AuthenticationKey(hash.digest());\n  }\n\n  static fromEd25519PublicKey(publicKey: Ed25519PublicKey): AuthenticationKey {\n    const pubKeyBytes = publicKey.value;\n\n    const bytes = new Uint8Array(pubKeyBytes.length + 1);\n    bytes.set(pubKeyBytes);\n    bytes.set([AuthenticationKey.ED25519_SCHEME], pubKeyBytes.length);\n\n    const hash = sha3Hash.create();\n    hash.update(bytes);\n\n    return new AuthenticationKey(hash.digest());\n  }\n\n  /**\n   * Derives an account address from AuthenticationKey. Since current AccountAddress is 32 bytes,\n   * AuthenticationKey bytes are directly translated to AccountAddress.\n   */\n  derivedAddress(): HexString {\n    return HexString.fromUint8Array(this.bytes);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { AccountAddress } from \"./account_address\";\nimport { AnyNumber, Serializer } from \"../bcs\";\n\nexport class RotationProofChallenge {\n  constructor(\n    public readonly accountAddress: AccountAddress,\n    public readonly moduleName: string,\n    public readonly structName: string,\n    public readonly sequenceNumber: AnyNumber,\n    public readonly originator: AccountAddress,\n    public readonly currentAuthKey: AccountAddress,\n    public readonly newPublicKey: Uint8Array,\n  ) {}\n\n  serialize(serializer: Serializer): void {\n    this.accountAddress.serialize(serializer);\n    serializer.serializeStr(this.moduleName);\n    serializer.serializeStr(this.structName);\n    serializer.serializeU64(this.sequenceNumber);\n    this.originator.serialize(serializer);\n    this.currentAuthKey.serialize(serializer);\n    serializer.serializeBytes(this.newPublicKey);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { sha3_256 as sha3Hash } from \"@noble/hashes/sha3\";\nimport {\n  Ed25519PublicKey,\n  Ed25519Signature,\n  MultiEd25519PublicKey,\n  MultiEd25519Signature,\n  RawTransaction,\n  SignedTransaction,\n  TransactionAuthenticatorEd25519,\n  TransactionAuthenticatorMultiEd25519,\n  SigningMessage,\n  MultiAgentRawTransaction,\n  FeePayerRawTransaction,\n  AccountAddress,\n  EntryFunction,\n  Identifier,\n  ChainId,\n  Script,\n  TransactionPayload,\n  TransactionArgument,\n  TransactionPayloadEntryFunction,\n  TransactionPayloadScript,\n  ModuleId,\n  TypeTagParser,\n} from \"../supra_types\";\nimport { bcsToBytes, Bytes, Deserializer, Serializer, Uint64, Uint8 } from \"../bcs\";\nimport { ArgumentABI, EntryFunctionABI, ScriptABI, TransactionScriptABI, TypeArgumentABI } from \"../supra_types/abi\";\nimport { argToTransactionArgument, serializeArg } from \"./builder_utils\";\nimport * as Gen from \"../generated/index\";\nimport {\n  DEFAULT_TXN_EXP_SEC_FROM_NOW,\n  DEFAULT_MAX_GAS_AMOUNT,\n  HexString,\n  MaybeHexString,\n  MemoizeExpiring,\n} from \"../utils\";\n\nexport { TypeTagParser } from \"../supra_types\";\n\nconst RAW_TRANSACTION_SALT = \"SUPRA::RawTransaction\";\nconst RAW_TRANSACTION_WITH_DATA_SALT = \"SUPRA::RawTransactionWithData\";\n\nexport type AnyRawTransaction = RawTransaction | MultiAgentRawTransaction | FeePayerRawTransaction;\n\n/**\n * Function that takes in a Signing Message (serialized raw transaction)\n *  and returns a signature\n */\nexport type SigningFn = (txn: SigningMessage) => Ed25519Signature | MultiEd25519Signature;\n\nexport class TransactionBuilder<F extends SigningFn> {\n  protected readonly signingFunction: F;\n\n  constructor(\n    signingFunction: F,\n    public readonly rawTxnBuilder?: TransactionBuilderABI,\n  ) {\n    this.signingFunction = signingFunction;\n  }\n\n  /**\n   * Builds a RawTransaction. Relays the call to TransactionBuilderABI.build\n   * @param func\n   * @param ty_tags\n   * @param args\n   */\n  build(func: string, ty_tags: string[], args: any[]): RawTransaction {\n    if (!this.rawTxnBuilder) {\n      throw new Error(\"this.rawTxnBuilder doesn't exist.\");\n    }\n\n    return this.rawTxnBuilder.build(func, ty_tags, args);\n  }\n\n  /** Generates a Signing Message out of a raw transaction. */\n  static getSigningMessage(rawTxn: AnyRawTransaction): SigningMessage {\n    const hash = sha3Hash.create();\n    if (rawTxn instanceof RawTransaction) {\n      hash.update(RAW_TRANSACTION_SALT);\n    } else if (rawTxn instanceof MultiAgentRawTransaction) {\n      hash.update(RAW_TRANSACTION_WITH_DATA_SALT);\n    } else if (rawTxn instanceof FeePayerRawTransaction) {\n      hash.update(RAW_TRANSACTION_WITH_DATA_SALT);\n    } else {\n      throw new Error(\"Unknown transaction type.\");\n    }\n\n    const prefix = hash.digest();\n\n    const body = bcsToBytes(rawTxn);\n\n    const mergedArray = new Uint8Array(prefix.length + body.length);\n    mergedArray.set(prefix);\n    mergedArray.set(body, prefix.length);\n\n    return mergedArray;\n  }\n}\n\n/**\n * Provides signing method for signing a raw transaction with single public key.\n */\nexport class TransactionBuilderEd25519 extends TransactionBuilder<SigningFn> {\n  private readonly publicKey: Uint8Array;\n\n  constructor(signingFunction: SigningFn, publicKey: Uint8Array, rawTxnBuilder?: TransactionBuilderABI) {\n    super(signingFunction, rawTxnBuilder);\n    this.publicKey = publicKey;\n  }\n\n  rawToSigned(rawTxn: RawTransaction): SignedTransaction {\n    const signingMessage = TransactionBuilder.getSigningMessage(rawTxn);\n    const signature = this.signingFunction(signingMessage);\n\n    const authenticator = new TransactionAuthenticatorEd25519(\n      new Ed25519PublicKey(this.publicKey),\n      signature as Ed25519Signature,\n    );\n\n    return new SignedTransaction(rawTxn, authenticator);\n  }\n\n  /** Signs a raw transaction and returns a bcs serialized transaction. */\n  sign(rawTxn: RawTransaction): Bytes {\n    return bcsToBytes(this.rawToSigned(rawTxn));\n  }\n}\n\n/**\n * Provides signing method for signing a raw transaction with multisig public key.\n */\nexport class TransactionBuilderMultiEd25519 extends TransactionBuilder<SigningFn> {\n  private readonly publicKey: MultiEd25519PublicKey;\n\n  constructor(signingFunction: SigningFn, publicKey: MultiEd25519PublicKey) {\n    super(signingFunction);\n    this.publicKey = publicKey;\n  }\n\n  rawToSigned(rawTxn: RawTransaction): SignedTransaction {\n    const signingMessage = TransactionBuilder.getSigningMessage(rawTxn);\n    const signature = this.signingFunction(signingMessage);\n\n    const authenticator = new TransactionAuthenticatorMultiEd25519(this.publicKey, signature as MultiEd25519Signature);\n\n    return new SignedTransaction(rawTxn, authenticator);\n  }\n\n  /** Signs a raw transaction and returns a bcs serialized transaction. */\n  sign(rawTxn: RawTransaction): Bytes {\n    return bcsToBytes(this.rawToSigned(rawTxn));\n  }\n}\n\n/**\n * Config for creating raw transactions.\n */\nexport interface ABIBuilderConfig {\n  sender: MaybeHexString | AccountAddress;\n  sequenceNumber: Uint64 | string;\n  gasUnitPrice: Uint64 | string;\n  maxGasAmount?: Uint64 | string;\n  expSecFromNow?: number | string;\n  chainId: Uint8 | string;\n}\n\n/**\n * Builds raw transactions based on ABI\n */\nexport class TransactionBuilderABI {\n  private readonly abiMap: Map<string, ScriptABI>;\n\n  private readonly builderConfig: Partial<ABIBuilderConfig>;\n\n  /**\n   * Constructs a TransactionBuilderABI instance\n   * @param abis List of binary ABIs.\n   * @param builderConfig Configs for creating a raw transaction.\n   */\n  constructor(abis: Bytes[], builderConfig?: ABIBuilderConfig) {\n    this.abiMap = new Map<string, ScriptABI>();\n\n    abis.forEach((abi) => {\n      const deserializer = new Deserializer(abi);\n      const scriptABI = ScriptABI.deserialize(deserializer);\n      let k: string;\n      if (scriptABI instanceof EntryFunctionABI) {\n        const funcABI = scriptABI as EntryFunctionABI;\n        const { address: addr, name: moduleName } = funcABI.module_name;\n        k = `${HexString.fromUint8Array(addr.address).toShortString()}::${moduleName.value}::${funcABI.name}`;\n      } else {\n        const funcABI = scriptABI as TransactionScriptABI;\n        k = funcABI.name;\n      }\n\n      if (this.abiMap.has(k)) {\n        throw new Error(\"Found conflicting ABI interfaces\");\n      }\n\n      this.abiMap.set(k, scriptABI);\n    });\n\n    this.builderConfig = {\n      maxGasAmount: BigInt(DEFAULT_MAX_GAS_AMOUNT),\n      expSecFromNow: DEFAULT_TXN_EXP_SEC_FROM_NOW,\n      ...builderConfig,\n    };\n  }\n\n  private static toBCSArgs(abiArgs: any[], args: any[]): Bytes[] {\n    if (abiArgs.length !== args.length) {\n      throw new Error(\"Wrong number of args provided.\");\n    }\n\n    return args.map((arg, i) => {\n      const serializer = new Serializer();\n      serializeArg(arg, abiArgs[i].type_tag, serializer);\n      return serializer.getBytes();\n    });\n  }\n\n  private static toTransactionArguments(abiArgs: any[], args: any[]): TransactionArgument[] {\n    if (abiArgs.length !== args.length) {\n      throw new Error(\"Wrong number of args provided.\");\n    }\n\n    return args.map((arg, i) => argToTransactionArgument(arg, abiArgs[i].type_tag));\n  }\n\n  setSequenceNumber(seqNumber: Uint64 | string) {\n    this.builderConfig.sequenceNumber = BigInt(seqNumber);\n  }\n\n  /**\n   * Builds a TransactionPayload. For dApps, chain ID and account sequence numbers are only known to the wallet.\n   * Instead of building a RawTransaction (requires chainID and sequenceNumber), dApps can build a TransactionPayload\n   * and pass the payload to the wallet for signing and sending.\n   * @param func Fully qualified func names, e.g. 0x1::aptos_account::transfer\n   * @param ty_tags TypeTag strings\n   * @param args Function arguments\n   * @returns TransactionPayload\n   */\n  buildTransactionPayload(func: string, ty_tags: string[], args: any[]): TransactionPayload {\n    const typeTags = ty_tags.map((ty_arg) => new TypeTagParser(ty_arg).parseTypeTag());\n\n    let payload: TransactionPayload;\n\n    if (!this.abiMap.has(func)) {\n      throw new Error(`Cannot find function: ${func}`);\n    }\n\n    const scriptABI = this.abiMap.get(func);\n\n    if (scriptABI instanceof EntryFunctionABI) {\n      const funcABI = scriptABI as EntryFunctionABI;\n      const bcsArgs = TransactionBuilderABI.toBCSArgs(funcABI.args, args);\n      payload = new TransactionPayloadEntryFunction(\n        new EntryFunction(funcABI.module_name, new Identifier(funcABI.name), typeTags, bcsArgs),\n      );\n    } else if (scriptABI instanceof TransactionScriptABI) {\n      const funcABI = scriptABI as TransactionScriptABI;\n      const scriptArgs = TransactionBuilderABI.toTransactionArguments(funcABI.args, args);\n\n      payload = new TransactionPayloadScript(new Script(funcABI.code, typeTags, scriptArgs));\n    } else {\n      /* istanbul ignore next */\n      throw new Error(\"Unknown ABI format.\");\n    }\n\n    return payload;\n  }\n\n  /**\n   * Builds a RawTransaction\n   * @param func Fully qualified func names, e.g. 0x1::aptos_account::transfer\n   * @param ty_tags TypeTag strings.\n   * @example Below are valid value examples\n   * ```\n   * // Structs are in format `AccountAddress::ModuleName::StructName`\n   * 0x1::aptos_coin::AptosCoin\n   * // Vectors are in format `vector<other_tag_string>`\n   * vector<0x1::aptos_coin::AptosCoin>\n   * bool\n   * u8\n   * u16\n   * u32\n   * u64\n   * u128\n   * u256\n   * address\n   * ```\n   * @param args Function arguments\n   * @returns RawTransaction\n   */\n  build(func: string, ty_tags: string[], args: any[]): RawTransaction {\n    const { sender, sequenceNumber, gasUnitPrice, maxGasAmount, expSecFromNow, chainId } = this.builderConfig;\n\n    if (!gasUnitPrice) {\n      throw new Error(\"No gasUnitPrice provided.\");\n    }\n\n    const senderAccount = sender instanceof AccountAddress ? sender : AccountAddress.fromHex(sender!);\n    const expTimestampSec = BigInt(Math.floor(Date.now() / 1000) + Number(expSecFromNow));\n    const payload = this.buildTransactionPayload(func, ty_tags, args);\n\n    if (payload) {\n      return new RawTransaction(\n        senderAccount,\n        BigInt(sequenceNumber!),\n        payload,\n        BigInt(maxGasAmount!),\n        BigInt(gasUnitPrice!),\n        expTimestampSec,\n        new ChainId(Number(chainId)),\n      );\n    }\n\n    throw new Error(\"Invalid ABI.\");\n  }\n}\n\nexport type RemoteABIBuilderConfig = Partial<Omit<ABIBuilderConfig, \"sender\">> & {\n  sender: MaybeHexString | AccountAddress;\n};\n\nexport interface AptosClientInterface {\n  getAccountModules: (accountAddress: MaybeHexString) => Promise<Gen.MoveModuleBytecode[]>;\n  getAccount: (accountAddress: MaybeHexString) => Promise<Gen.AccountData>;\n  getChainId: () => Promise<number>;\n  estimateGasPrice: () => Promise<Gen.GasEstimation>;\n}\n\n/**\n * This transaction builder downloads JSON ABIs from the fullnodes.\n * It then translates the JSON ABIs to the format that is accepted by TransactionBuilderABI\n */\nexport class TransactionBuilderRemoteABI {\n  // We don't want the builder to depend on the actual AptosClient. There might be circular dependencies.\n  constructor(\n    private readonly aptosClient: AptosClientInterface,\n    private readonly builderConfig: RemoteABIBuilderConfig,\n  ) {}\n\n  // Cache for 10 minutes\n  @MemoizeExpiring(10 * 60 * 1000)\n  async fetchABI(addr: string) {\n    const modules = await this.aptosClient.getAccountModules(addr);\n    const abis = modules\n      .map((module) => module.abi)\n      .flatMap((abi) =>\n        abi!.exposed_functions\n          .filter((ef) => ef.is_entry)\n          .map(\n            (ef) =>\n              ({\n                fullName: `${abi!.address}::${abi!.name}::${ef.name}`,\n                ...ef,\n              }) as Gen.MoveFunction & { fullName: string },\n          ),\n      );\n\n    const abiMap = new Map<string, Gen.MoveFunction & { fullName: string }>();\n    abis.forEach((abi) => {\n      abiMap.set(abi.fullName, abi);\n    });\n\n    return abiMap;\n  }\n\n  /**\n   * Builds a raw transaction. Only support script function a.k.a entry function payloads\n   *\n   * @param func fully qualified function name in format <address>::<module>::<function>, e.g. 0x1::coin::transfer\n   * @param ty_tags\n   * @param args\n   * @returns RawTransaction\n   */\n  async build(func: Gen.EntryFunctionId, ty_tags: Gen.MoveType[], args: any[]): Promise<RawTransaction> {\n    /* eslint no-param-reassign: [\"off\"] */\n    const normlize = (s: string) => s.replace(/^0[xX]0*/g, \"0x\");\n    func = normlize(func);\n    const funcNameParts = func.split(\"::\");\n    if (funcNameParts.length !== 3) {\n      throw new Error(\n        // eslint-disable-next-line max-len\n        \"'func' needs to be a fully qualified function name in format <address>::<module>::<function>, e.g. 0x1::coin::transfer\",\n      );\n    }\n\n    const [addr, module] = func.split(\"::\");\n\n    // Downloads the JSON abi\n    const abiMap = await this.fetchABI(addr);\n    if (!abiMap.has(func)) {\n      throw new Error(`${func} doesn't exist.`);\n    }\n\n    const funcAbi = abiMap.get(func);\n\n    // Remove all `signer` and `&signer` from argument list because the Move VM injects those arguments. Clients do not\n    // need to care about those args. `signer` and `&signer` are required be in the front of the argument list. But we\n    // just loop through all arguments and filter out `signer` and `&signer`.\n    const abiArgs = funcAbi!.params.filter((param) => param !== \"signer\" && param !== \"&signer\");\n\n    // Convert abi string arguments to TypeArgumentABI\n    const typeArgABIs = abiArgs.map(\n      (abiArg, i) => new ArgumentABI(`var${i}`, new TypeTagParser(abiArg, ty_tags).parseTypeTag()),\n    );\n\n    const entryFunctionABI = new EntryFunctionABI(\n      funcAbi!.name,\n      ModuleId.fromStr(`${addr}::${module}`),\n      \"\", // Doc string\n      funcAbi!.generic_type_params.map((_, i) => new TypeArgumentABI(`${i}`)),\n      typeArgABIs,\n    );\n\n    const { sender, ...rest } = this.builderConfig;\n\n    const senderAddress = sender instanceof AccountAddress ? HexString.fromUint8Array(sender.address) : sender;\n\n    const [{ sequence_number: sequenceNumber }, chainId, { gas_estimate: gasUnitPrice }] = await Promise.all([\n      rest?.sequenceNumber\n        ? Promise.resolve({ sequence_number: rest?.sequenceNumber })\n        : this.aptosClient.getAccount(senderAddress),\n      rest?.chainId ? Promise.resolve(rest?.chainId) : this.aptosClient.getChainId(),\n      rest?.gasUnitPrice ? Promise.resolve({ gas_estimate: rest?.gasUnitPrice }) : this.aptosClient.estimateGasPrice(),\n    ]);\n\n    const builderABI = new TransactionBuilderABI([bcsToBytes(entryFunctionABI)], {\n      sender,\n      sequenceNumber,\n      chainId,\n      gasUnitPrice: BigInt(gasUnitPrice),\n      ...rest,\n    });\n\n    return builderABI.build(func, ty_tags, args);\n  }\n}\n","// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\nimport { HexString } from \"../utils\";\nimport {\n  TypeTag,\n  TypeTagBool,\n  TypeTagU8,\n  TypeTagU16,\n  TypeTagU32,\n  TypeTagU64,\n  TypeTagU128,\n  TypeTagU256,\n  TypeTagAddress,\n  AccountAddress,\n  TypeTagVector,\n  TypeTagStruct,\n  TransactionArgument,\n  TransactionArgumentBool,\n  TransactionArgumentU16,\n  TransactionArgumentU32,\n  TransactionArgumentU64,\n  TransactionArgumentU128,\n  TransactionArgumentU256,\n  TransactionArgumentAddress,\n  TransactionArgumentU8,\n  TransactionArgumentU8Vector,\n} from \"../supra_types\";\nimport { Serializer } from \"../bcs\";\n\nfunction assertType(val: any, types: string[] | string, message?: string) {\n  if (!types?.includes(typeof val)) {\n    throw new Error(\n      message || `Invalid arg: ${val} type should be ${types instanceof Array ? types.join(\" or \") : types}`,\n    );\n  }\n}\n\nexport function ensureBoolean(val: boolean | string): boolean {\n  assertType(val, [\"boolean\", \"string\"]);\n  if (typeof val === \"boolean\") {\n    return val;\n  }\n\n  if (val === \"true\") {\n    return true;\n  }\n  if (val === \"false\") {\n    return false;\n  }\n\n  throw new Error(\"Invalid boolean string.\");\n}\n\nexport function ensureNumber(val: number | string): number {\n  assertType(val, [\"number\", \"string\"]);\n  if (typeof val === \"number\") {\n    return val;\n  }\n\n  const res = Number.parseInt(val, 10);\n  if (Number.isNaN(res)) {\n    throw new Error(\"Invalid number string.\");\n  }\n\n  return res;\n}\n\nexport function ensureBigInt(val: number | bigint | string): bigint {\n  assertType(val, [\"number\", \"bigint\", \"string\"]);\n  return BigInt(val);\n}\n\nexport function serializeArg(argVal: any, argType: TypeTag, serializer: Serializer) {\n  serializeArgInner(argVal, argType, serializer, 0);\n}\n\nfunction serializeArgInner(argVal: any, argType: TypeTag, serializer: Serializer, depth: number) {\n  if (argType instanceof TypeTagBool) {\n    serializer.serializeBool(ensureBoolean(argVal));\n  } else if (argType instanceof TypeTagU8) {\n    serializer.serializeU8(ensureNumber(argVal));\n  } else if (argType instanceof TypeTagU16) {\n    serializer.serializeU16(ensureNumber(argVal));\n  } else if (argType instanceof TypeTagU32) {\n    serializer.serializeU32(ensureNumber(argVal));\n  } else if (argType instanceof TypeTagU64) {\n    serializer.serializeU64(ensureBigInt(argVal));\n  } else if (argType instanceof TypeTagU128) {\n    serializer.serializeU128(ensureBigInt(argVal));\n  } else if (argType instanceof TypeTagU256) {\n    serializer.serializeU256(ensureBigInt(argVal));\n  } else if (argType instanceof TypeTagAddress) {\n    serializeAddress(argVal, serializer);\n  } else if (argType instanceof TypeTagVector) {\n    serializeVector(argVal, argType, serializer, depth);\n  } else if (argType instanceof TypeTagStruct) {\n    serializeStruct(argVal, argType, serializer, depth);\n  } else {\n    throw new Error(\"Unsupported arg type.\");\n  }\n}\n\nfunction serializeAddress(argVal: any, serializer: Serializer) {\n  let addr: AccountAddress;\n  if (typeof argVal === \"string\" || argVal instanceof HexString) {\n    addr = AccountAddress.fromHex(argVal);\n  } else if (argVal instanceof AccountAddress) {\n    addr = argVal;\n  } else {\n    throw new Error(\"Invalid account address.\");\n  }\n  addr.serialize(serializer);\n}\n\nfunction serializeVector(argVal: any, argType: TypeTagVector, serializer: Serializer, depth: number) {\n  // We are serializing a vector<u8>\n  if (argType.value instanceof TypeTagU8) {\n    if (argVal instanceof Uint8Array) {\n      serializer.serializeBytes(argVal);\n      return;\n    }\n    if (argVal instanceof HexString) {\n      serializer.serializeBytes(argVal.toUint8Array());\n      return;\n    }\n    if (typeof argVal === \"string\") {\n      serializer.serializeStr(argVal);\n      return;\n    }\n    // If it isn't any of those types, then it must just be an actual array of numbers\n  }\n\n  if (!Array.isArray(argVal)) {\n    throw new Error(\"Invalid vector args.\");\n  }\n\n  serializer.serializeU32AsUleb128(argVal.length);\n\n  argVal.forEach((arg) => serializeArgInner(arg, argType.value, serializer, depth + 1));\n}\n\nfunction serializeStruct(argVal: any, argType: TypeTag, serializer: Serializer, depth: number) {\n  const { address, module_name: moduleName, name, type_args: typeArgs } = (argType as TypeTagStruct).value;\n  const structType = `${HexString.fromUint8Array(address.address).toShortString()}::${moduleName.value}::${name.value}`;\n  if (structType === \"0x1::string::String\") {\n    assertType(argVal, [\"string\"]);\n    serializer.serializeStr(argVal);\n  } else if (structType === \"0x1::object::Object\") {\n    serializeAddress(argVal, serializer);\n  } else if (structType === \"0x1::option::Option\") {\n    if (typeArgs.length !== 1) {\n      throw new Error(`Option has the wrong number of type arguments ${typeArgs.length}`);\n    }\n    serializeOption(argVal, typeArgs[0], serializer, depth);\n  } else {\n    throw new Error(\"Unsupported struct type in function argument\");\n  }\n}\n\nfunction serializeOption(argVal: any, argType: TypeTag, serializer: Serializer, depth: number) {\n  // For option, we determine if it's empty or not empty first\n  // empty option is nothing, we specifically check for undefined to prevent fuzzy matching\n  if (argVal === undefined || argVal === null) {\n    serializer.serializeU32AsUleb128(0);\n  } else {\n    // Something means we need an array of 1\n    serializer.serializeU32AsUleb128(1);\n\n    // Serialize the inner type arg, ensuring that depth is tracked\n    serializeArgInner(argVal, argType, serializer, depth + 1);\n  }\n}\n\nexport function argToTransactionArgument(argVal: any, argType: TypeTag): TransactionArgument {\n  if (argType instanceof TypeTagBool) {\n    return new TransactionArgumentBool(ensureBoolean(argVal));\n  }\n  if (argType instanceof TypeTagU8) {\n    return new TransactionArgumentU8(ensureNumber(argVal));\n  }\n  if (argType instanceof TypeTagU16) {\n    return new TransactionArgumentU16(ensureNumber(argVal));\n  }\n  if (argType instanceof TypeTagU32) {\n    return new TransactionArgumentU32(ensureNumber(argVal));\n  }\n  if (argType instanceof TypeTagU64) {\n    return new TransactionArgumentU64(ensureBigInt(argVal));\n  }\n  if (argType instanceof TypeTagU128) {\n    return new TransactionArgumentU128(ensureBigInt(argVal));\n  }\n  if (argType instanceof TypeTagU256) {\n    return new TransactionArgumentU256(ensureBigInt(argVal));\n  }\n  if (argType instanceof TypeTagAddress) {\n    let addr: AccountAddress;\n    if (typeof argVal === \"string\" || argVal instanceof HexString) {\n      addr = AccountAddress.fromHex(argVal);\n    } else if (argVal instanceof AccountAddress) {\n      addr = argVal;\n    } else {\n      throw new Error(\"Invalid account address.\");\n    }\n    return new TransactionArgumentAddress(addr);\n  }\n  if (argType instanceof TypeTagVector && argType.value instanceof TypeTagU8) {\n    if (!(argVal instanceof Uint8Array)) {\n      throw new Error(`${argVal} should be an instance of Uint8Array`);\n    }\n    return new TransactionArgumentU8Vector(argVal);\n  }\n\n  throw new Error(\"Unknown type for TransactionArgument.\");\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type { AccountData } from './models/AccountData';\nexport type { AccountSignature } from './models/AccountSignature';\nexport type { AccountSignature_Ed25519Signature } from './models/AccountSignature_Ed25519Signature';\nexport type { AccountSignature_MultiEd25519Signature } from './models/AccountSignature_MultiEd25519Signature';\nexport type { AccountSignature_MultiKeySignature } from './models/AccountSignature_MultiKeySignature';\nexport type { AccountSignature_SingleKeySignature } from './models/AccountSignature_SingleKeySignature';\nexport type { Address } from './models/Address';\nexport type { AptosError } from './models/AptosError';\nexport { AptosErrorCode } from './models/AptosErrorCode';\nexport type { Block } from './models/Block';\nexport type { BlockEndInfo } from './models/BlockEndInfo';\nexport type { BlockEpilogueTransaction } from './models/BlockEpilogueTransaction';\nexport type { BlockMetadataTransaction } from './models/BlockMetadataTransaction';\nexport type { DecodedTableData } from './models/DecodedTableData';\nexport type { DeletedTableData } from './models/DeletedTableData';\nexport type { DeleteModule } from './models/DeleteModule';\nexport type { DeleteResource } from './models/DeleteResource';\nexport type { DeleteTableItem } from './models/DeleteTableItem';\nexport type { DeprecatedModuleBundlePayload } from './models/DeprecatedModuleBundlePayload';\nexport type { DirectWriteSet } from './models/DirectWriteSet';\nexport type { Ed25519 } from './models/Ed25519';\nexport type { Ed25519Signature } from './models/Ed25519Signature';\nexport type { EncodeSubmissionRequest } from './models/EncodeSubmissionRequest';\nexport type { EntryFunctionId } from './models/EntryFunctionId';\nexport type { EntryFunctionPayload } from './models/EntryFunctionPayload';\nexport type { Event } from './models/Event';\nexport type { EventGuid } from './models/EventGuid';\nexport type { FeePayerSignature } from './models/FeePayerSignature';\nexport type { GasEstimation } from './models/GasEstimation';\nexport type { GenesisPayload } from './models/GenesisPayload';\nexport type { GenesisPayload_WriteSetPayload } from './models/GenesisPayload_WriteSetPayload';\nexport type { GenesisTransaction } from './models/GenesisTransaction';\nexport type { HashValue } from './models/HashValue';\nexport type { HealthCheckSuccess } from './models/HealthCheckSuccess';\nexport type { HexEncodedBytes } from './models/HexEncodedBytes';\nexport type { IdentifierWrapper } from './models/IdentifierWrapper';\nexport type { IndexedSignature } from './models/IndexedSignature';\nexport type { IndexResponse } from './models/IndexResponse';\nexport type { Keyless } from './models/Keyless';\nexport type { MoveAbility } from './models/MoveAbility';\nexport type { MoveFunction } from './models/MoveFunction';\nexport type { MoveFunctionGenericTypeParam } from './models/MoveFunctionGenericTypeParam';\nexport { MoveFunctionVisibility } from './models/MoveFunctionVisibility';\nexport type { MoveModule } from './models/MoveModule';\nexport type { MoveModuleBytecode } from './models/MoveModuleBytecode';\nexport type { MoveModuleId } from './models/MoveModuleId';\nexport type { MoveResource } from './models/MoveResource';\nexport type { MoveScriptBytecode } from './models/MoveScriptBytecode';\nexport type { MoveStruct } from './models/MoveStruct';\nexport type { MoveStructField } from './models/MoveStructField';\nexport type { MoveStructGenericTypeParam } from './models/MoveStructGenericTypeParam';\nexport type { MoveStructTag } from './models/MoveStructTag';\nexport type { MoveStructValue } from './models/MoveStructValue';\nexport type { MoveType } from './models/MoveType';\nexport type { MoveValue } from './models/MoveValue';\nexport type { MultiAgentSignature } from './models/MultiAgentSignature';\nexport type { MultiEd25519Signature } from './models/MultiEd25519Signature';\nexport type { MultiKeySignature } from './models/MultiKeySignature';\nexport type { MultisigPayload } from './models/MultisigPayload';\nexport type { MultisigTransactionPayload } from './models/MultisigTransactionPayload';\nexport type { MultisigTransactionPayload_EntryFunctionPayload } from './models/MultisigTransactionPayload_EntryFunctionPayload';\nexport type { PendingTransaction } from './models/PendingTransaction';\nexport type { PublicKey } from './models/PublicKey';\nexport type { PublicKey_Ed25519 } from './models/PublicKey_Ed25519';\nexport type { PublicKey_Keyless } from './models/PublicKey_Keyless';\nexport type { PublicKey_Secp256k1Ecdsa } from './models/PublicKey_Secp256k1Ecdsa';\nexport type { PublicKey_Secp256r1Ecdsa } from './models/PublicKey_Secp256r1Ecdsa';\nexport type { RawTableItemRequest } from './models/RawTableItemRequest';\nexport { RoleType } from './models/RoleType';\nexport type { ScriptPayload } from './models/ScriptPayload';\nexport type { ScriptWriteSet } from './models/ScriptWriteSet';\nexport type { Secp256k1Ecdsa } from './models/Secp256k1Ecdsa';\nexport type { Secp256r1Ecdsa } from './models/Secp256r1Ecdsa';\nexport type { Signature } from './models/Signature';\nexport type { Signature_Ed25519 } from './models/Signature_Ed25519';\nexport type { Signature_Keyless } from './models/Signature_Keyless';\nexport type { Signature_Secp256k1Ecdsa } from './models/Signature_Secp256k1Ecdsa';\nexport type { Signature_WebAuthn } from './models/Signature_WebAuthn';\nexport type { SingleKeySignature } from './models/SingleKeySignature';\nexport type { StateCheckpointTransaction } from './models/StateCheckpointTransaction';\nexport type { StateKeyWrapper } from './models/StateKeyWrapper';\nexport type { SubmitTransactionRequest } from './models/SubmitTransactionRequest';\nexport type { TableItemRequest } from './models/TableItemRequest';\nexport type { Transaction } from './models/Transaction';\nexport type { Transaction_BlockEpilogueTransaction } from './models/Transaction_BlockEpilogueTransaction';\nexport type { Transaction_BlockMetadataTransaction } from './models/Transaction_BlockMetadataTransaction';\nexport type { Transaction_GenesisTransaction } from './models/Transaction_GenesisTransaction';\nexport type { Transaction_PendingTransaction } from './models/Transaction_PendingTransaction';\nexport type { Transaction_StateCheckpointTransaction } from './models/Transaction_StateCheckpointTransaction';\nexport type { Transaction_UserTransaction } from './models/Transaction_UserTransaction';\nexport type { Transaction_ValidatorTransaction } from './models/Transaction_ValidatorTransaction';\nexport type { TransactionPayload } from './models/TransactionPayload';\nexport type { TransactionPayload_DeprecatedModuleBundlePayload } from './models/TransactionPayload_DeprecatedModuleBundlePayload';\nexport type { TransactionPayload_EntryFunctionPayload } from './models/TransactionPayload_EntryFunctionPayload';\nexport type { TransactionPayload_MultisigPayload } from './models/TransactionPayload_MultisigPayload';\nexport type { TransactionPayload_ScriptPayload } from './models/TransactionPayload_ScriptPayload';\nexport type { TransactionsBatchSingleSubmissionFailure } from './models/TransactionsBatchSingleSubmissionFailure';\nexport type { TransactionsBatchSubmissionResult } from './models/TransactionsBatchSubmissionResult';\nexport type { TransactionSignature } from './models/TransactionSignature';\nexport type { TransactionSignature_AccountSignature } from './models/TransactionSignature_AccountSignature';\nexport type { TransactionSignature_Ed25519Signature } from './models/TransactionSignature_Ed25519Signature';\nexport type { TransactionSignature_FeePayerSignature } from './models/TransactionSignature_FeePayerSignature';\nexport type { TransactionSignature_MultiAgentSignature } from './models/TransactionSignature_MultiAgentSignature';\nexport type { TransactionSignature_MultiEd25519Signature } from './models/TransactionSignature_MultiEd25519Signature';\nexport type { U128 } from './models/U128';\nexport type { U256 } from './models/U256';\nexport type { U64 } from './models/U64';\nexport type { UserTransaction } from './models/UserTransaction';\nexport type { ValidatorTransaction } from './models/ValidatorTransaction';\nexport type { VersionedEvent } from './models/VersionedEvent';\nexport type { ViewRequest } from './models/ViewRequest';\nexport type { WebAuthn } from './models/WebAuthn';\nexport type { WriteModule } from './models/WriteModule';\nexport type { WriteResource } from './models/WriteResource';\nexport type { WriteSet } from './models/WriteSet';\nexport type { WriteSet_DirectWriteSet } from './models/WriteSet_DirectWriteSet';\nexport type { WriteSet_ScriptWriteSet } from './models/WriteSet_ScriptWriteSet';\nexport type { WriteSetChange } from './models/WriteSetChange';\nexport type { WriteSetChange_DeleteModule } from './models/WriteSetChange_DeleteModule';\nexport type { WriteSetChange_DeleteResource } from './models/WriteSetChange_DeleteResource';\nexport type { WriteSetChange_DeleteTableItem } from './models/WriteSetChange_DeleteTableItem';\nexport type { WriteSetChange_WriteModule } from './models/WriteSetChange_WriteModule';\nexport type { WriteSetChange_WriteResource } from './models/WriteSetChange_WriteResource';\nexport type { WriteSetChange_WriteTableItem } from './models/WriteSetChange_WriteTableItem';\nexport type { WriteSetPayload } from './models/WriteSetPayload';\nexport type { WriteTableItem } from './models/WriteTableItem';\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * These codes provide more granular error information beyond just the HTTP\n * status code of the response.\n */\nexport enum AptosErrorCode {\n    ACCOUNT_NOT_FOUND = 'account_not_found',\n    RESOURCE_NOT_FOUND = 'resource_not_found',\n    MODULE_NOT_FOUND = 'module_not_found',\n    STRUCT_FIELD_NOT_FOUND = 'struct_field_not_found',\n    VERSION_NOT_FOUND = 'version_not_found',\n    TRANSACTION_NOT_FOUND = 'transaction_not_found',\n    TABLE_ITEM_NOT_FOUND = 'table_item_not_found',\n    BLOCK_NOT_FOUND = 'block_not_found',\n    STATE_VALUE_NOT_FOUND = 'state_value_not_found',\n    VERSION_PRUNED = 'version_pruned',\n    BLOCK_PRUNED = 'block_pruned',\n    INVALID_INPUT = 'invalid_input',\n    INVALID_TRANSACTION_UPDATE = 'invalid_transaction_update',\n    SEQUENCE_NUMBER_TOO_OLD = 'sequence_number_too_old',\n    VM_ERROR = 'vm_error',\n    HEALTH_CHECK_FAILED = 'health_check_failed',\n    MEMPOOL_IS_FULL = 'mempool_is_full',\n    INTERNAL_ERROR = 'internal_error',\n    WEB_FRAMEWORK_ERROR = 'web_framework_error',\n    BCS_NOT_SUPPORTED = 'bcs_not_supported',\n    API_DISABLED = 'api_disabled',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Move function visibility\n */\nexport enum MoveFunctionVisibility {\n    PRIVATE = 'private',\n    PUBLIC = 'public',\n    FRIEND = 'friend',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport enum RoleType {\n    VALIDATOR = 'validator',\n    FULL_NODE = 'full_node',\n}\n"],"mappings":"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","names":["nacl","bytesToHex","sha3Hash","hexToBytes","sha3Hash","sha3Hash","bytesToHex","nacl","sha3Hash","sha3Hash","serializeVector","sha3Hash","AptosErrorCode","MoveFunctionVisibility","RoleType"]}