{
  "version": 3,
  "sources": ["../src/abi/types.ts", "../src/abi/validations.ts", "../src/abi.ts", "../src/support/base.ts", "../src/support/blake3.ts", "../src/support/util.ts", "../src/address.ts", "../src/keypair.ts", "../src/support/ed25519.ts", "../src/support/x25519.ts", "../src/hd-privkey.ts", "../src/hd-pubkey.ts", "../src/lock.ts", "../src/abi/query.ts", "../src/output.ts", "../src/pointer.ts", "../src/privkey.ts", "../src/pubkey.ts", "../src/shared-keypair.ts", "../src/tx.ts", "../src/instruction.ts", "../src/instructions/index.ts", "../src/instructions/import.ts", "../src/instructions/load.ts", "../src/instructions/loadbyorigin.ts", "../src/instructions/new.ts", "../src/instructions/call.ts", "../src/instructions/exec.ts", "../src/instructions/fund.ts", "../src/instructions/lock.ts", "../src/instructions/deploy.ts", "../src/instructions/sign.ts", "../src/instructions/signto.ts", "../src/instructions/unknown.ts", "../src/bcs/uleb.ts", "../src/bcs/buf-reader.ts", "../src/bcs/buf-writer.ts", "../src/bcs/schemas.ts", "../src/bcs.ts", "../src/abi/index.ts"],
  "sourcesContent": ["/**\n * Code kind\n */\nexport enum CodeKind {\n  CLASS,\n  FUNCTION,\n  INTERFACE,\n  OBJECT,\n  //ENUM,\n  PROXY_CLASS = 100,\n  PROXY_FUNCTION,\n  PROXY_INTERFACE,\n}\n\n/**\n * Method kind\n */\nexport enum MethodKind {\n  PUBLIC,\n  PROTECTED,\n}\n\n/**\n * ABI interface\n */\nexport interface Abi {\n  version: number;\n  exports: number[];\n  imports: number[];\n  defs: CodeDef[];\n  typeIds: TypeIdNode[];\n}\n\n/**\n * Code Definition interface\n */\nexport type CodeDef<T = ClassNode | FunctionNode | InterfaceNode | ObjectNode | ProxyNode> = T\nexport type ProxyNode = ProxyClassNode | ProxyFunctionNode | ProxyInterfaceNode\nexport type ExportCode = ClassNode | FunctionNode | InterfaceNode | ObjectNode\nexport type ImportCode = ProxyNode | ObjectNode\n\nexport interface ProxyNodeSchema {\n  name: string;\n  pkg: string;\n}\n\nexport interface ClassNodeSchema {\n  name: string;\n  extends: string;\n  implements: string[];\n  fields: FieldNode[];\n  methods: MethodNode[];\n}\n\nexport interface FunctionNodeSchema {\n  name: string;\n  args: ArgNode[];\n  rtype: TypeNode;\n}\n\nexport interface InterfaceNodeSchema {\n  name: string;\n  extends: string[];\n  fields: FieldNode[];\n  methods: MethodNode[];\n}\n\nexport interface ObjectNodeSchema {\n  name: string;\n  fields: FieldNode[];\n}\n\n/**\n * TODO\n */\nexport interface ProxyClassNode extends ProxyNodeSchema {\n  kind: CodeKind.PROXY_CLASS;\n}\n\n/**\n * TODO\n */\nexport interface ProxyFunctionNode extends ProxyNodeSchema {\n  kind: CodeKind.PROXY_FUNCTION;\n}\n\n/**\n * TODO\n */\nexport interface ProxyInterfaceNode extends ProxyNodeSchema {\n  kind: CodeKind.PROXY_INTERFACE;\n}\n\n/**\n * Class interface\n */\nexport interface ClassNode extends ClassNodeSchema {\n  kind: CodeKind.CLASS;\n}\n\n\n\n/**\n * Function interface\n */\nexport interface FunctionNode extends FunctionNodeSchema {\n  kind: CodeKind.FUNCTION;\n}\n\n/**\n * Interface interafce (lol)\n * \n * As the Class interface, but methods are Function interfaces\n */\nexport interface InterfaceNode extends InterfaceNodeSchema {\n  kind: CodeKind.INTERFACE;\n}\n\n/**\n * Object interface\n * \n * As the Class interface, minus any methods.\n */\nexport interface ObjectNode extends ObjectNodeSchema {\n  kind: CodeKind.OBJECT;\n}\n\n/**\n * Field interface\n */\nexport interface FieldNode {\n  name: string;\n  type: TypeNode;\n}\n\n/**\n * Method interface\n * \n * As the Function interface, with additional kind prop and rtype can be null\n */\nexport interface MethodNode {\n  kind?: MethodKind;\n  name: string;\n  args: ArgNode[];\n  rtype: TypeNode | null;\n}\n\n/**\n * Arg interface\n * \n * As the Field interface, minus the kind property.\n */\nexport interface ArgNode {\n  name: string;\n  type: TypeNode;\n}\n\n/**\n * Type interface\n */\nexport interface TypeNode {\n  name: string;\n  nullable: boolean;\n  args: TypeNode[];\n}\n\n/**\n * Runtime type IDs\n */\nexport interface TypeIdNode {\n  id: number;\n  name: string;\n}\n", "import {\n  Abi,\n  ArgNode,\n  ClassNode,\n  CodeDef,\n  CodeKind,\n  FieldNode,\n  FunctionNode,\n  InterfaceNode,\n  MethodNode,\n  ObjectNode,\n  ProxyNode,\n  TypeIdNode,\n  TypeNode,\n} from './types.js'\n\n/**\n * Validates the given object implements the ABI interface\n */\nexport function validateAbi(obj: any): obj is Abi {\n  return typeof obj?.version === 'number' &&\n    Array.isArray(obj.exports) && obj.exports.every((v: any) => typeof v === 'number') &&\n    Array.isArray(obj.imports) && obj.imports.every((v: any) => typeof v === 'number') &&\n    Array.isArray(obj.defs) && obj.defs.every(validateCodeDef) &&\n    Array.isArray(obj.typeIds) && obj.typeIds.every(validateTypeIdNode)\n}\n\n// Validates the given object implements the ExportNode interface\nfunction validateCodeDef(obj: any): obj is CodeDef {\n  switch (obj?.kind) {\n    case CodeKind.CLASS:      return validateClassNode(obj)\n    case CodeKind.FUNCTION:   return validateFunctionNode(obj)\n    case CodeKind.INTERFACE:  return validateInterfaceNode(obj)\n    case CodeKind.OBJECT:     return validateObjectNode(obj)\n    case CodeKind.PROXY_CLASS:\n    case CodeKind.PROXY_FUNCTION:\n    case CodeKind.PROXY_INTERFACE:\n      return validateProxyNode(obj)\n    default:\n      return false\n  }\n}\n\n// TODO\nfunction validateProxyNode(obj: any): obj is ProxyNode {\n  return typeof obj?.name === 'string' &&\n    typeof obj?.pkg === 'string'\n}\n\n// Validates the given object implements the ClassNode interface\nfunction validateClassNode(obj: any): obj is ClassNode {\n  return typeof obj?.name === 'string' &&\n    typeof obj?.extends === 'string' &&\n    Array.isArray(obj.implements) && obj.implements.every((v: any) => typeof v === 'string') &&\n    Array.isArray(obj.fields) && obj.fields.every(validateFieldNode) &&\n    Array.isArray(obj.methods) && obj.methods.every(validateMethodNode)\n}\n\n// Validates the given object implements the FunctionNode interface\nfunction validateFunctionNode(obj: any): obj is FunctionNode {\n  return typeof obj?.name === 'string' &&\n    Array.isArray(obj.args) && obj.args.every(validateArgNode) &&\n    'rtype' in obj && validateTypeNode(obj.rtype)\n}\n\n// Validates the given object implements the InterfaceNode interface\nfunction validateInterfaceNode(obj: any): obj is InterfaceNode {\n  return typeof obj?.name === 'string' &&\n    Array.isArray(obj.extends) && obj.extends.every((v: any) => typeof v === 'string') &&\n    Array.isArray(obj.fields) && obj.fields.every(validateFieldNode) &&\n    Array.isArray(obj.methods) && obj.methods.every(validateFunctionNode)\n}\n\n// Validates the given object implements the ObjectNode interface\nfunction validateObjectNode(obj: any): obj is ObjectNode {\n  return typeof obj?.name === 'string' &&\n    Array.isArray(obj.fields) && obj.fields.every(validateFieldNode)\n}\n\n// Validates the given object implements the FieldNode interface\nfunction validateFieldNode(obj: any): obj is FieldNode {\n  return typeof obj?.name === 'string' &&\n    'type' in obj && validateTypeNode(obj.type)\n}\n\n// Validates the given object implements the MethodNode interface\nfunction validateMethodNode(obj: any): obj is MethodNode {\n  return typeof obj?.kind === 'number' &&\n    typeof obj?.name === 'string' &&\n    Array.isArray(obj.args) && obj.args.every(validateArgNode) &&\n    'rtype' in obj && (obj.rtype === null || validateTypeNode(obj.rtype))\n}\n\n// Validates the given object implements the FieldNode interface\nfunction validateArgNode(obj: any): obj is ArgNode {\n  return typeof obj?.name === 'string' &&\n    'type' in obj && validateTypeNode(obj.type)\n}\n\n// Validates the given object implements the TypeNode interface\nfunction validateTypeNode(obj: any): obj is TypeNode {\n  return typeof obj?.name === 'string' &&\n    Array.isArray(obj.args) && obj.args.every(validateTypeNode)\n}\n\n// Validates the given entry is a valid TypeId\nfunction validateTypeIdNode(obj: any): obj is TypeIdNode {\n  return typeof obj?.id === 'number' && typeof obj?.name === 'string'\n}\n", "import { BCS } from './internal.js'\nimport { Abi } from './abi/types.js'\nimport { validateAbi } from './abi/validations.js'\n\n/**\n * Parses the given binary data to an ABI interface.\n */\nexport function abiFromBin(data: Uint8Array): Abi {\n  const bcs = new BCS({ addAbiTypes: true })\n  const abi = bcs.decode('abi', data)\n\n  if (validateAbi(abi)) {\n    return abi\n  } else {\n    throw new Error('invalid abi binary data')\n  }\n}\n\n/**\n * Parses the given JSON data to an ABI interface.\n */\nexport function abiFromJson(json: string): Abi {\n  const abi = JSON.parse(json)\n  if (validateAbi(abi)) {\n    return abi\n  } else {\n    throw new Error('invalid abi json string')\n  }\n}\n\n/**\n * Serializes the given ABI interface to binary data.\n */\nexport function abiToBin(abi: Abi): Uint8Array {\n  const bcs = new BCS({ addAbiTypes: true })\n  return bcs.encode('abi', abi)\n}\n\n/**\n * Serializes the given ABI interface to JSON data.\n */\nexport function abiToJson(abi: Abi, space: number = 0): string {\n  const isImport = (val: any): boolean => {\n    return typeof val.kind === 'number' && typeof val.pkg === 'string'\n  }\n\n  return JSON.stringify(abi, function(key, val) {\n    if (key === 'node' || key === 'source' || (key === 'code' && isImport(this))) {\n      return undefined\n    } else {\n      return val\n    }\n  }, space)\n}\n", "import { hex as b16, base64 as b64, bech32m as b32m } from '@scure/base'\n\n/**\n * Interface for encoding two and from base16 / hex.\n */\nexport namespace base16 {\n  /**\n   * Encodes the given bytes as a hex string.\n   */\n  export function encode(data: Uint8Array): string {\n    return b16.encode(data)\n  }\n\n  /**\n   * Decodes the given hex string to bytes.\n   */\n  export function decode(str: string): Uint8Array {\n    return b16.decode(str)\n  }\n}\n\n/**\n * Interface for encoding two and from base64.\n */\n export namespace base64 {\n  /**\n   * Encodes the given bytes as a base64 string.\n   */\n  export function encode(data: Uint8Array): string {\n    return b64.encode(data)\n  }\n\n  /**\n   * Decodes the given base64 string to bytes.\n   */\n  export function decode(str: string): Uint8Array {\n    return b64.decode(str)\n  }\n}\n\n/**\n * Interface for encoding two and from bech32m.\n */\nexport namespace bech32m {\n  /**\n   * Encodes the given bytes as a bech32 string with the specified prefix.\n   */\n  export function encode(data: Uint8Array, prefix: string = ''): string {\n    const words = b32m.toWords(data)\n    return b32m.encode(prefix, words, 192)\n  }\n\n  /**\n   * Decodes the given bech32 string to bytes, ensuring a matching prefix.\n   */\n  export function decode(str: string, prefix: string = ''): Uint8Array {\n    const result = b32m.decode(str, 192)\n    if (result.prefix === prefix) {\n      return b32m.fromWords(result.words)\n    } else {\n      throw Error(`invalid prefix: ${prefix}`)\n    }\n  }\n}\n", "import { blake3 } from '@noble/hashes/blake3'\n\n/**\n * Returns a digest of the given data using the Blake3 algorithm.\n */\nexport function hash(data: Uint8Array | string, bytes: number = 32): Uint8Array {\n  return blake3(data, { dkLen: bytes })\n}\n\n/**\n * Returns a keyed hash of the given data using the Blake3 algorithm. The key\n * must be 32 bytes.\n */\nexport function keyedHash(data: Uint8Array | string, key: Uint8Array | string, bytes: number = 64): Uint8Array {\n  // todo - workaround for this bug: https://github.com/paulmillr/noble-hashes/issues/50\n  const keyCopy = typeof key === 'string' ? key : new Uint8Array(key)\n  return blake3(data, { dkLen: bytes, key: keyCopy })\n}\n\n/**\n * Derives a 32 byte key from the given key material and context string.\n */\nexport function deriveKey(data: Uint8Array | string, ctx: Uint8Array | string): Uint8Array {\n  return blake3(data, { dkLen: 32, context: ctx })\n}\n", "import { etc } from '@noble/ed25519'\nimport { randomBytes } from '@noble/hashes/utils'\nimport { base16 } from './base.js'\n\n/**\n * Check if 2 Uint8Arrays are equal\n * // TODO - review function name\n */\nexport function buffEquals(a: Uint8Array, b: Uint8Array): boolean {\n  return a.length === b.length && a.every((byte, i) => byte === b[i])\n}\n\n/**\n * Encodes the given bigint as a little-endian Uint8Array. \n */\nexport function bnToBytes(num: bigint, len: number = 32): Uint8Array {\n  let hex = num.toString(16)\n  if (hex.length % 2) hex = '0'+hex\n  const buf = base16.decode(hex.padStart(len * 2, '0'))\n  buf.reverse()\n  return buf\n}\n\nexport function bnToShortestBytes(num: bigint): Uint8Array {\n  const nums: number[] = []\n  let next = num > 0n ? num : -num\n  while (next > 0) {\n    nums.push(Number(next % 256n))\n    next = next >> 8n\n  }\n  return new Uint8Array(nums)\n}\n\n/**\n * Decodes the given Uint8Array as a little-endian bigint. \n */\nexport function bytesToBn(data: Uint8Array): bigint {\n  const buf = new Uint8Array(data)\n  buf.reverse()\n  return BigInt(`0x${base16.encode(buf)}`)\n}\n\n/**\n * Encodes the given string as utf8 Uint8Array.\n */\nexport function bytesToStr(data: Uint8Array): string {\n  return new TextDecoder().decode(data)\n}\n\n/**\n * Decodes the given utf8 Uint8Array as a string.\n */\nexport function strToBytes(str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\n/**\n * Computes `x ^ (2 ^ power) mod p`\n */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x\n  while (power-- > 0n) {\n    res *= res\n    res %= modulo\n  }\n  return res\n}\n\nconst {\n  bytesToHex,\n  hexToBytes,\n  concatBytes,\n  mod,\n  invert,\n} = etc\n\nexport {\n  bytesToHex,\n  hexToBytes,\n  concatBytes,\n  randomBytes,\n  mod,\n  invert,\n}\n", "import { PubKey } from './internal.js';\nimport { bech32m } from './support/base.js'\nimport { hash } from './support/blake3.js'\nimport {buffEquals} from \"./support/util.js\";\n\nconst PREFIX = 'addr'\n\n/**\n * Aldea address\n * \n * An address is a 20 byte blake3 hash of a public key. It is encoded as a\n * string using Bech32m with the prefix `addr`.\n * \n * Example:\n * \n *     addr1w9er02jhjq5yxzuc9n6fjqqq8nhqpuhsxe2kfp\n */\nexport class Address {\n  readonly hash: Uint8Array;\n\n  constructor(hash: Uint8Array) {\n    if (hash.length !== 20) throw new Error('invalid hash length')\n    this.hash = hash\n  }\n\n  /**\n   * Returns an Address from the given PubKey.\n   */\n  static fromPubKey(pubKey: PubKey): Address {\n    if (!(pubKey instanceof PubKey)) {\n      throw Error('The first argument to `Address.fromPubKey()` must be a `PubKey`')\n    }\n    const pkh = hash(pubKey.toBytes(), 20)\n    return new Address(pkh)\n  }\n\n  /**\n   * Returns an Address from the encoded string.\n   */\n  static fromString(str: string): Address {\n    const hash = bech32m.decode(str, PREFIX)\n    return new Address(hash)\n  }\n\n  /**\n   * Encodes the Address into a string.\n   */\n  toString(): string {\n    return bech32m.encode(this.hash, PREFIX)\n  }\n\n  equals (other: Address): boolean {\n    return buffEquals(this.hash, other.hash)\n  }\n}\n", "import {\n  PrivKey,\n  PubKey,\n} from './internal.js'\n\n/**\n * Aldea Key Pair\n * \n * Convinience wrapper around a PrivKey and PubKey pair.\n */\nexport class KeyPair {\n  privKey: PrivKey;\n  pubKey: PubKey;\n\n  constructor(privKey: PrivKey, pubKey: PubKey) {\n    this.privKey = privKey\n    this.pubKey = pubKey\n  }\n\n  /**\n   * Generates and returns a new random KeyPair.\n   */\n  static fromRandom(): KeyPair {\n    const privKey = PrivKey.fromRandom()\n    return KeyPair.fromPrivKey(privKey)\n  }\n\n  /**\n   * Returns a KeyPair from the given PrivKey.\n   */\n  static fromPrivKey(privKey: PrivKey): KeyPair {\n    if (!(privKey instanceof PrivKey)) {\n      throw Error('The first argument to `KeyPair.fromPrivKey()` must be a `PrivKey`')\n    }\n    const pubKey = privKey.toPubKey()\n    return new KeyPair(privKey, pubKey)\n  }\n}\n", "import {\n  ExtendedPoint as Point,\n  sign as _sign,\n  verify as _verify,\n  CURVE,\n  etc,\n  utils,\n} from '@noble/ed25519'\nimport { hash } from './blake3.js'\nimport { bnToBytes, bytesToBn, concatBytes } from './util.js'\nimport { scalarMult, toMontgomeryPriv, toMongomeryPub } from './x25519.js'\nimport { PrivKey, PubKey, HDPrivKey, HDPubKey } from '../internal.js'\n\n// Internally we replace nobles sha512Sync function with our own blake3\n// function. As long as we use the sync methods, we are now using\n// blake3-flavoured ed25519 - just like magic!\netc.sha512Sync = (...m: Uint8Array[]): Uint8Array => {\n  return hash(concatBytes(...m), 64)\n}\n\n/**\n * Calculates the EdDSA Point (public key) from the given bytes (private key).\n */\nexport function calcPoint(bytes: Uint8Array): Point {\n  return utils.getExtendedPublicKey(bytes).point\n}\n\n/**\n * Calculates a shared secret between an Ed25519 privkey and pubkey. It first\n * converts the keys to the Montgomery X25519 curve.\n */\nexport function getSharedSecret(privKey: PrivKey, pubKey: PubKey): Uint8Array {\n  return scalarMult(toMongomeryPub(pubKey), toMontgomeryPriv(privKey))\n}\n\n/**\n * Returns a point from the given bytes (compressed public key).\n */\nexport function pointFromBytes(bytes: string | Uint8Array): Point {\n  return Point.fromHex(bytes)\n}\n\n/**\n * Converts a point to bytes (compressed public key).\n */\nexport function pointToBytes(point: Point): Uint8Array {\n  if (!(point instanceof Point)) {\n    throw Error('The first argument to `pointToBytes()` must be a `Point`')\n  }\n  return point.toRawBytes()\n}\n\n/**\n * Signs the given message with the PrivKey and returns a 64 byte signature.\n */\nexport function sign(msg: Uint8Array, privKey: PrivKey | HDPrivKey | Uint8Array): Uint8Array {\n  if (!(privKey instanceof Uint8Array)) { privKey = privKey.toBytes()}\n  return privKey.length >= 64 ? _signExt(msg, privKey) : _sign(msg, privKey)\n}\n\n/**\n * Verifies the given signature using the specified message and Public Key.\n */\nexport function verify(sig: Uint8Array, msg: Uint8Array, pubKey: PubKey | HDPubKey | Uint8Array): boolean {\n  if (!(pubKey instanceof Uint8Array)) {\n    if ('toPubKey' in pubKey) pubKey = pubKey.toPubKey()\n    pubKey = pubKey.toBytes()\n  }\n  return _verify(sig, msg, pubKey)\n}\n\n// Special signing function for handling extended public keys\nfunction _signExt(msg: Uint8Array, k: Uint8Array): Uint8Array {\n  const kl = k.slice(0, 32)\n  const kr = k.slice(32, 64)\n  const aBuf = Point.BASE._scalarMult(bytesToBn(kl)).toRawBytes()\n  const r = etc.mod(bytesToBn(hash(concatBytes(kr, msg), 64)), CURVE.n)\n  const rBuf = Point.BASE.mul(r).toRawBytes()\n  const x = bytesToBn(hash(concatBytes(rBuf, aBuf, msg), 64))\n  const sBuf = bnToBytes(etc.mod(r + (x * bytesToBn(kl)), CURVE.n))\n  return concatBytes(rBuf, sBuf)\n}\n\n// Monkey patch in typescript friendly way\ndeclare module '@noble/ed25519' {\n  interface ExtendedPoint {\n    _scalarMult(n: bigint): ExtendedPoint;\n  } \n}\n\n/**\n * PATCH Same as `mul()` method but without validation on `n` size.\n */\nPoint.prototype._scalarMult = function(n: bigint): Point {\n  if (n === 0n) return this.mul(n)\n  let p = Point.ZERO\n  for (let d: Point = this; n > 0n; d = d.double(), n >>= 1n) {\n    if (n & 1n) p = p.add(d)\n  }\n  return p;\n}\n\nexport { Point }\n", "import { CURVE } from '@noble/ed25519'\nimport { PrivKey, PubKey } from '../internal.js'\nimport { hash } from './blake3.js'\nimport { bnToBytes, bytesToBn, invert, mod, pow2 } from './util.js'\n\n// The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\nconst A_24 = 121665n\nconst P = CURVE.p\n\n/**\n * Flips the bits of 32 random bytes in order to ensure a x25519 interger scalar.\n */\nexport function adjustScalarBytes(bytes: Uint8Array): Uint8Array {\n  // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n  // set the three least significant bits of the first byte\n  // and the most significant bit of the last to zero,\n  // set the second most significant bit of the last byte to 1\n  bytes[0]  &= 248  // 0b1111_1000\n  bytes[31] &= 127  // 0b0111_1111\n  bytes[31] |= 64   // 0b0100_0000\n  return bytes;\n}\n\n/**\n * Calculates a shared secret between an X25519 privkey and pubkey.\n */\nexport function getSharedSecret(privKey: Uint8Array, pubKey: Uint8Array): Uint8Array {\n  return scalarMult(pubKey, privKey)\n}\n\n/**\n * Mutiplies an X25519 point with the given scalar.\n */\nexport function scalarMult(pubKey: Uint8Array, privKey: Uint8Array): Uint8Array {\n  const u = decodeU(pubKey)\n  const scalar = decodeScalar(privKey)\n  const pu = mongomeryLadder(u, scalar)\n  if (pu === 0n) throw new Error('Invalid private or public key received')\n  return encodeU(pu)\n}\n\n/**\n * Converts an Ed25519 privkey to X25519.\n */\nexport function toMontgomeryPriv(privKey: PrivKey): Uint8Array {\n  return adjustScalarBytes(hash(privKey.toBytes(), 32))\n}\n\n/**\n  Converts an Ed25519 pubkey to X25519.\n */\nexport function toMongomeryPub(pubKey: PubKey): Uint8Array {\n  const u = mod((1n + pubKey.y) * invert(1n - pubKey.y))\n  return bnToBytes(u)\n}\n\n// Asserts the given scalar is valid for X25519.\nfunction assertValidScalar(n: bigint): void {\n  if (typeof n !== 'bigint' || n < 0n || n >= P) {\n    throw new Error('invalid scalar. must be 0 < scalar < CURVE.P');\n  }\n}\n\nfunction cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n  const dummy = mod(swap * (x_2 - x_3));\n  x_2 = mod(x_2 - dummy);\n  x_3 = mod(x_3 + dummy);\n  return [x_2, x_3];\n}\n\nfunction decodeScalar(scalar: Uint8Array): bigint {\n  if (scalar.length !== 32) {\n    throw new Error('invalid u scalar length. must be 32 bytes')\n  }\n  return bytesToBn(adjustScalarBytes(scalar))\n}\n\nfunction decodeU(u: Uint8Array): bigint {\n  if (u.length !== 32) {\n    throw new Error('invalid u coordinate length. must be 32 bytes')\n  }\n  u[31] &= 127  // 0b0111_1111\n  return bytesToBn(u)\n}\n\nfunction encodeU(u: bigint): Uint8Array {\n  return bnToBytes(mod(u))\n}\n\nfunction mongomeryLadder(u: bigint, k: bigint): bigint {\n  assertValidScalar(u)\n  assertValidScalar(k)\n  \n  const x_1 = u\n  let x_2 = 1n\n  let z_2 = 0n\n  let x_3 = u\n  let z_3 = 1n\n  let swap = 0n\n  let sw: [bigint, bigint];\n  for (let t = 254n; t >= 0n; t--) {\n    const k_t = (k >> t) & 1n\n    swap ^= k_t\n    sw = cswap(swap, x_2, x_3)\n    x_2 = sw[0]\n    x_3 = sw[1]\n    sw = cswap(swap, z_2, z_3)\n    z_2 = sw[0]\n    z_3 = sw[1]\n    swap = k_t\n\n    const A = x_2 + z_2\n    const AA = mod(A * A)\n    const B = x_2 - z_2\n    const BB = mod(B * B)\n    const E = AA - BB\n    const C = x_3 + z_3\n    const D = x_3 - z_3\n    const DA = mod(D * A)\n    const CB = mod(C * B)\n    const dacb = DA + CB\n    const da_cb = DA - CB\n    x_3 = mod(dacb * dacb)\n    z_3 = mod(x_1 * mod(da_cb * da_cb))\n    x_2 = mod(AA * BB)\n    z_2 = mod(E * (AA + mod(A_24 * E)))\n  }\n  sw = cswap(swap, x_2, x_3)\n  x_2 = sw[0]\n  sw = cswap(swap, z_2, z_3)\n  z_2 = sw[0]\n\n  const [pow_p58, b2] = pow_2_252_3(z_2)\n  const z2 = mod(pow2(pow_p58, 3n, P) * b2)\n  return mod(x_2 * z2)\n}\n\nfunction pow_2_252_3(x: bigint): [bigint, bigint] {\n  const x2 = (x * x) % P\n  const b2 = (x2 * x) % P\n  const b4 = (pow2(b2, 2n, P) * b2) % P\n  const b5 = (pow2(b4, 1n, P) * x) % P\n  const b10 = (pow2(b5, 5n, P) * b5) % P\n  const b20 = (pow2(b10, 10n, P) * b10) % P\n  const b40 = (pow2(b20, 20n, P) * b20) % P\n  const b80 = (pow2(b40, 40n, P) * b40) % P\n  const b160 = (pow2(b80, 80n, P) * b80) % P\n  const b240 = (pow2(b160, 80n, P) * b80) % P\n  const b250 = (pow2(b240, 10n, P) * b10) % P\n  return [(pow2(b250, 2n, P) * x) % P, b2]\n}\n", "import { HDPubKey, PubKey } from './internal.js'\nimport { base16, bech32m } from './support/base.js'\nimport { hash, keyedHash, deriveKey } from './support/blake3.js'\nimport { Point } from './support/ed25519.js'\nimport { bnToBytes, bytesToBn, concatBytes, randomBytes } from './support/util.js'\n\nconst MASTER_SECRET = 'ed25519 seed'\nconst HARDENED_OFFSET = 0x80000000\nconst PREFIX = 'xsec'\n\n/**\n * Hierarchical deterministic private key\n * \n * Implements [BIP32-ed25519](https://github.com/LedgerHQ/orakolo/blob/master/papers/Ed25519_BIP%20Final.pdf)\n * with hashing primitives swapped out for BLAKE3.\n * \n * To use with BIP39, we recommend using [@scure/bip39](https://github.com/paulmillr/scure-bip39).\n * \n * ```ts\n * import { generateMnemonic, mnemonicToSeedSync } from '@scure/bip39'\n * import { wordlist } from '@scure/bip39/wordlists/english'\n * import { HDPrivKey } from '@aldea/core'\n * \n * const mnemonic = generateMnemonic(wordlist)\n * const seed = mnemonicToSeedSync(mnemonic)\n * const rootKey = HDPrivKey.fromSeed(seed)\n * const childKey = rootKey.derive('m/1/2/3')\n * ```\n */\nexport class HDPrivKey {\n  private k: Uint8Array;\n  readonly chainCode: Uint8Array;\n\n  constructor(k: Uint8Array, chainCode: Uint8Array) {\n    if (k.length !== 64) throw new Error('invalid extended key length')\n    if (chainCode.length !== 32) throw new Error('invalid chainCode length')\n    this.k = k\n    this.chainCode = chainCode\n  }\n\n  /**\n   * Returns a HDPrivKey from the given bytes.\n   * \n   * HD Private Keys are 96 bytes.\n   */\n  static fromBytes(bytes: Uint8Array): HDPrivKey {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `HDPrivKey.fromBytes()` must be a `Uint8Array`')\n    }\n    return new HDPrivKey(bytes.slice(0, 64), bytes.slice(64))\n  }\n\n  /**\n   * Returns a HDPrivKey from the given hex-encoded string.\n   */\n  static fromHex(str: string): HDPrivKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `HDPrivKey.fromHex()` must be a `string`')\n    }\n    const bytes = base16.decode(str)\n    return HDPrivKey.fromBytes(bytes)\n  }\n\n  /**\n   * Returns a HDPrivKey from the given bech32m-encoded string.\n   */\n  static fromString(str: string): HDPrivKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `HDPrivKey.fromString()` must be a `string`')\n    }\n    const bytes = bech32m.decode(str, PREFIX)\n    return HDPrivKey.fromBytes(bytes)\n  }\n\n  /**\n   * Generates and returns a new random HDPrivKey.\n   */\n  static fromRandom(): HDPrivKey {\n    return HDPrivKey.fromSeed(randomBytes(32))\n  }\n\n  /**\n   * Generates and returns an HDPrivKey from the given seed bytes.\n   */\n  static fromSeed(seed: Uint8Array): HDPrivKey {\n    if (!ArrayBuffer.isView(seed)) {\n      throw Error('The first argument to `HDPrivKey.fromSeed()` must be a `Uint8Array`')\n    }\n    if (![16, 32, 64].includes(seed.length)) {\n      throw new Error(`invalid seed length: ${seed.length}`)\n    }\n\n    const key = deriveKey(seed, MASTER_SECRET)\n    let block = seed\n    while (true) {\n      block = keyedHash(block, key)\n      const extended = hash(block.slice(0, 32), 64)\n      if ((extended[31] & 0b00100000) === 0) {\n        extended[0] &= ~0b00000111\n        extended[31] &= ~0b10000000\n        extended[31] |= 0b01000000\n        return new HDPrivKey(extended, block.slice(32, 64))\n      }\n    }\n  }\n\n  /**\n   * Derives a new HD key from the given derivation path. Returns either a\n   * HDPrivKey or HDPubKey.\n   * \n   * The derivation path must of the format described in [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki).\n   * All of the following examples are valid derivation paths:\n   * \n   * ```text\n   * m/1/2/3 - derives HDPrivkey\n   * M/1/2/3 - derives HDPubkey\n   * m/1'/200 - derives hardened HDPrivkey\n   * m/1h/200 - equivalent\n   * m/1H/200 - equivalent\n   * ```\n   */\n  derive(path: string): HDPrivKey | HDPubKey {\n    if (!(typeof path === 'string' && /^[mM]['hH]?(\\/\\d+['hH]?)+/.test(path))) {\n      throw new Error('invalid derivation path')\n    }\n\n    const parts = path.replace(/^[mM]['hH]?\\//, '')\n      .split('/')\n      .filter(p => !!p)\n      .map(toIndex)\n\n    let child: HDPrivKey | HDPubKey = this\n    if (path[0] === 'M') child = child.toHDPubKey()\n    for (const idx of parts) {\n      child = child.deriveChild(idx)\n    }\n    return child\n  }\n\n  /**\n   * Derives new HDPrivKey from the given index integer.\n   */\n  deriveChild(idx: number): HDPrivKey {\n    if (!(typeof idx === 'number' && idx >= 0)) {\n      throw new Error(`invalid child index: ${idx}`)\n    }\n\n    const kl = this.k.slice(0, 32)\n    const kr = this.k.slice(32, 64)\n    const ch = hash(this.chainCode, 32)\n    const pk = this.pubkeyBytes()\n\n    const iBuf = new Uint8Array(4)\n    const iBufView = new DataView(iBuf.buffer)\n    iBufView.setUint32(0, idx, true)\n\n    let z: Uint8Array, c: Uint8Array;\n    if (idx < HARDENED_OFFSET) {\n      z = keyedHash(concatBytes(new Uint8Array([2]), pk, iBuf), ch)\n      c = keyedHash(concatBytes(new Uint8Array([3]), pk, iBuf), ch).slice(32, 64)\n    } else {\n      z = keyedHash(concatBytes(new Uint8Array([0]), this.k, iBuf), ch)\n      c = keyedHash(concatBytes(new Uint8Array([1]), this.k, iBuf), ch).slice(32, 64)\n    }\n\n    const zl = z.slice(0, 28)\n    const zr = z.slice(32, 64)\n\n    const left = bnToBytes((bytesToBn(zl) * BigInt(8)) + bytesToBn(kl))\n    const right = bnToBytes((bytesToBn(zr) + bytesToBn(kr)) % (BigInt(2) ** BigInt(256)))\n\n    return new HDPrivKey(concatBytes(left, right), c)\n  }\n\n  /**\n   * Returns the HDPrivKey as bytes.\n   * \n   * HD Private Keys are 96 bytes.\n   */\n  toBytes(): Uint8Array {\n    return concatBytes(this.k, this.chainCode)\n  }\n\n  /**\n   * Returns the HDPrivKey as hex-encoded string.\n   */\n  toHex(): string {\n    return base16.encode(this.toBytes())\n  }\n\n  /**\n   * Returns the HDPrivKey as bech32m-encoded string.\n   */\n  toString(): string {\n    return bech32m.encode(this.toBytes(), PREFIX)\n  }\n\n  /**\n   * Returns the HDPrivKey's corresponding HDPubKey.\n   */\n  toHDPubKey(): HDPubKey {\n    return new HDPubKey(this.pubkeyBytes(), this.chainCode)\n  }\n\n  /**\n   * Returns the HDPrivKey's corresponding normal PubKey.\n   */\n  toPubKey(): PubKey {\n    return PubKey.fromBytes(this.pubkeyBytes())\n  }\n\n  // Calculates and returns the HDPrivKey's corresponding 32 byte public key\n  private pubkeyBytes() {\n    return Point.BASE._scalarMult(bytesToBn(this.k.slice(0, 32))).toRawBytes()\n  }\n}\n\n// Maps the derivation path part to an index number\nfunction toIndex(part: string): number {\n  const m = /^(\\d+)(['hH])?$/.exec(part)\n  if (!m || m.length !== 3) {\n    throw new Error(`invalid child index: ${part}`)\n  }\n  let idx = +m[1]\n  if (idx < 0 || idx >= HARDENED_OFFSET) {\n    throw new Error(`invalid child index: ${part}`)\n  }\n  if (typeof m[2] !== 'undefined') idx += HARDENED_OFFSET\n  return idx\n}\n", "import { PubKey } from './internal.js'\nimport { base16, bech32m } from './support/base.js'\nimport { hash, keyedHash } from './support/blake3.js'\nimport { Point } from './support/ed25519.js'\nimport { bytesToBn, concatBytes } from './support/util.js'\n\nconst HARDENED_OFFSET = 0x80000000\nconst PREFIX = 'xpub'\n\n/**\n * Hierarchical deterministic public key\n * \n * Implements [BIP32-ed25519](https://github.com/LedgerHQ/orakolo/blob/master/papers/Ed25519_BIP%20Final.pdf)\n * with hashing primitives swapped out for BLAKE3.\n */\nexport class HDPubKey {\n  private k: Uint8Array;\n  readonly chainCode: Uint8Array;\n\n  constructor(k: Uint8Array, chainCode: Uint8Array) {\n    if (k.length !== 32) throw new Error('invalid extended key length')\n    if (chainCode.length !== 32) throw new Error('invalid chainCode length')\n    this.k = k\n    this.chainCode = chainCode\n  }\n\n  /**\n   * Returns a HDPubKey from the given bytes.\n   * \n   * HD Public Keys are 64 bytes.\n   */\n  static fromBytes(bytes: Uint8Array): HDPubKey {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `HDPubKey.fromBytes()` must be a `Uint8Array`')\n    }\n    return new HDPubKey(bytes.slice(0, 32), bytes.slice(32))\n  }\n\n  /**\n   * Returns a HDPubKey from the given hex-encoded string.\n   */\n  static fromHex(str: string): HDPubKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `HDPubKey.fromHex()` must be a `string`')\n    }\n    const bytes = base16.decode(str)\n    return HDPubKey.fromBytes(bytes)\n  }\n\n  /**\n   * Returns a HDPubKey from the given bech32m-encoded string.\n   */\n  static fromString(str: string): HDPubKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `HDPubKey.fromString()` must be a `string`')\n    }\n    const bytes = bech32m.decode(str, PREFIX)\n    return HDPubKey.fromBytes(bytes)\n  }\n\n  /**\n   * Derives a new HDPubKey from the given derivation path.\n   * \n   * The derivation path must of the format described in [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki).\n   */\n  derive(path: string): HDPubKey {\n    if (!(typeof path === 'string' && /^[mM]['hH]?(\\/\\d+['hH]?)+/.test(path))) {\n      throw new Error('invalid derivation path')\n    }\n\n    const parts = path.replace(/^[mM]['hH]?/, '')\n      .split('/')\n      .filter(p => !!p)\n      .map(toIndex)\n\n    let child: HDPubKey = this\n    if (path[0] === 'm') throw new Error('cannot derive private child key')\n    for (const idx of parts) {\n      child = child.deriveChild(idx)\n    }\n    return child\n  }\n\n  /**\n   * Derives new HDPubKey from the given index integer.\n   */\n  deriveChild(idx: number): HDPubKey {\n    if (!(typeof idx === 'number' && idx >= 0)) {\n      throw new Error(`invalid child index: ${idx}`)\n    }\n    if (idx >= HARDENED_OFFSET) {\n      throw new Error('can not derive hardened child key')\n    }\n\n    const ch = hash(this.chainCode, 32)\n    const iBuf = new Uint8Array(4)\n    const iBufView = new DataView(iBuf.buffer)\n    iBufView.setUint32(0, idx, true)\n\n    const z = keyedHash(concatBytes(new Uint8Array([2]), this.k, iBuf), ch)\n    const c = keyedHash(concatBytes(new Uint8Array([3]), this.k, iBuf), ch).slice(32, 64)\n\n    const zl = z.slice(0, 28)\n    const left = bytesToBn(zl) * BigInt(8)\n    const point = this.toPubKey().point.add(Point.BASE.mul(left))\n\n    return new HDPubKey(point.toRawBytes(), c)\n  }\n\n  /**\n   * Returns the HDPubKey as bytes.\n   * \n   * HD Public Keys are 64 bytes.\n   */\n  toBytes(): Uint8Array {\n    return concatBytes(this.k, this.chainCode)\n  }\n\n  /**\n   * Returns the HDPubKey as hex-encoded string.\n   */\n  toHex(): string {\n    return base16.encode(this.toBytes())\n  }\n\n  /**\n   * Returns the HDPubKey as bech32m-encoded string.\n   */\n  toString(): string {\n    return bech32m.encode(this.toBytes(), PREFIX)\n  }\n\n  /**\n   * Returns the HDPubKey's normal PubKey.\n   */\n  toPubKey(): PubKey {\n    return PubKey.fromBytes(this.k.slice(0, 32))\n  }\n}\n\n// Maps the derivation path part to an index number\nfunction toIndex(part: string): number {\n  const m = /^(\\d+)(['hH])?$/.exec(part)\n  if (!m || m.length !== 3) {\n    throw new Error(`invalid child index: ${part}`)\n  }\n  let idx = +m[1]\n  if (idx < 0 || idx >= HARDENED_OFFSET) {\n    throw new Error(`invalid child index: ${part}`)\n  }\n  if (typeof m[2] !== 'undefined') idx += HARDENED_OFFSET\n  return idx\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Serializable,\n} from './internal.js'\nimport { base16 } from './support/base.js'\n\n/**\n * Lock Types\n * \n * - Frozen     - can't be called; can't be locked; (can be loaded?)\n * - None       - anyone can call; anyone can lock; (default type)\n * - Address    - requires sig to call; requires sig to lock;\n * - Caller     - caller must be parent; new lock must be set by parent;\n * - Anyone     - anyone can call; can't be locked; (must be set in own constructor)\n */\nexport enum LockType {\n  FROZEN = -1,\n  NONE,\n  ADDRESS,\n  JIG,\n  PUBLIC,\n}\n\n/**\n * Raw Lock interface\n */\nexport interface LockInterface {\n  type: number;\n  data: string;\n}\n\n/**\n * Output Lock\n * \n * Every output has a Lock which determines who can call methods and update the\n * instance.\n */\nexport class Lock {\n  type: LockType;\n  data: Uint8Array;\n\n  constructor(type: LockType, data: Uint8Array) {\n    this.type = type\n    this.data = data\n  }\n\n  static fromBytes(bytes: Uint8Array): Lock {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `Lock.fromBytes()` must be a `Uint8Array`')\n    }\n    const buf = new BufReader(bytes)\n    return buf.read<Lock>(LockSerializer)\n  }\n\n  static fromJson(json: LockInterface): Lock {\n    return new Lock(json.type, base16.decode(json.data))\n  }\n\n  toBytes(): Uint8Array {\n    const buf = new BufWriter()\n    buf.write<Lock>(LockSerializer, this)\n    return buf.data\n  }\n\n  toJson(): LockInterface {\n    return { type: this.type, data: base16.encode(this.data) }\n  }\n}\n\n/**\n * Lock Serializer object - implements the Serializable interface.\n */\nexport const LockSerializer: Serializable<Lock> = {\n  read(buf: BufReader): Lock {\n    const type = buf.readU8()\n    let data\n    if (type === LockType.ADDRESS) {\n      data = buf.readFixedBytes(20)\n    } else\n    if (type == LockType.JIG) {\n      data = buf.readFixedBytes(34)\n    } else {\n      data = buf.readFixedBytes(0)\n    }\n    return new Lock(type, data)\n  },\n\n  write(buf: BufWriter, lock: Lock): BufWriter {\n    buf.writeU8(lock.type)\n    buf.writeFixedBytes(lock.data)\n    return buf\n  }\n}\n", "import {\n  Abi,\n  ClassNode,\n  CodeKind,\n  CodeDef,\n  FieldNode,\n  FunctionNode,\n  InterfaceNode,\n  MethodNode,\n  ObjectNode,\n  ProxyInterfaceNode,\n  ProxyNode,\n  MethodKind,\n} from \"./types.js\"\n\nexport class AbiQuery {\n  abi: Abi;\n  #scope: Array<CodeDef>;\n  #target?: CodeDef;\n\n  constructor(abi: Abi) {\n    this.abi = abi\n    this.#scope = abi.defs\n  }\n\n  get hasResult(): boolean {\n    return !!this.#target\n  }\n\n  allCode(): CodeDef[] {\n    return this.#scope\n  }\n\n  getCode(): CodeDef {\n    assertExists(this.#target)\n    return this.#target\n  }\n\n  getClass(): ClassNode {\n    assertClass(this.#target)\n    return this.#target\n  }\n\n  getClassFull(): ClassNode {\n    const node = this.getClass()\n    const parents = this.getClassParents()\n    const fields = parents.flatMap(p => p.fields).concat(node.fields)\n    const methods = parents.flatMap(p => p.methods).concat(node.methods)\n    return { ...node, extends: 'Jig', fields, methods }\n  }\n\n  getFunction(): FunctionNode {\n    assertFunction(this.#target)\n    return this.#target\n  }\n\n  getInterface(): InterfaceNode {\n    assertInterface(this.#target)\n    return this.#target\n  }\n\n  getInterfaceFull(): InterfaceNode {\n    const node = this.getInterface()\n    const parents = this.getInterfaceParents()\n    const fields = parents.flatMap(p => p.fields).concat(node.fields)\n    const methods = parents.flatMap(p => p.methods).concat(node.methods)\n    return { ...node, fields, methods }\n  }\n\n  getObject(): ObjectNode {\n    assertObject(this.#target)\n    return this.#target\n  }\n\n  getField(name: string): FieldNode\n  getField(idx: number): FieldNode\n  getField(q: string | number): FieldNode {\n    const fields = this.getFieldsFull()\n    const field = typeof q === 'string' ? fields.find(n => n.name === q) : fields[q];\n    assertExists(field, 'field')\n    return field\n  }\n\n  getFieldIdx(name: string): number {\n    const fields = this.getFieldsFull()\n    const idx = fields.findIndex(f => f.name === name)\n    assertExists(idx >= 0, 'field')\n    return idx\n  }\n\n  getFieldsFull(): FieldNode[] {\n    assertNodeKind<ClassNode | InterfaceNode | ObjectNode>(this.#target, ['fields'])\n    let fields: FieldNode[]\n    switch (this.#target.kind) {\n      case CodeKind.CLASS:\n        fields = this.getClassFull().fields\n        break\n      case CodeKind.INTERFACE:\n        fields = this.getInterfaceFull().fields\n      default:\n        fields = this.#target.fields\n    }\n    // Filter out dupes\n    return [...new Set(fields)]\n  }\n\n  getMethod(name: string): MethodNode\n  getMethod(idx: number): MethodNode\n  getMethod(q: string | number): MethodNode {\n    const methods = this.getMethodsFull()\n    const method = typeof q === 'string' ?\n      methods.findLast(n => n.name === q) :\n      methods.filter(publicMethodsOnly)[q];\n    assertExists(method, 'method')\n    return method\n  }\n\n  getMethodIdx(name: string): number {\n    const methods = this.getMethodsFull()\n    const idx = methods.filter(publicMethodsOnly).findLastIndex(m => m.name === name)\n    assertExists(idx >= 0, 'method')\n    return idx\n  }\n\n  getMethodsFull(): Array<MethodNode> {\n    assertNodeKind<ClassNode | InterfaceNode>(this.#target, ['methods'])\n    return isClass(this.#target) ?\n      this.getClassFull().methods :\n      this.getInterfaceFull().methods ;\n  }\n\n  getClassInterfaces(): Array<InterfaceNode | ProxyInterfaceNode> {\n    assertClass(this.#target)\n    const query = new AbiQuery(this.abi).byKind([CodeKind.INTERFACE, CodeKind.PROXY_INTERFACE])\n    return this.#target.implements.map(name => {\n      return query.byName(name).getCode() as InterfaceNode | ProxyInterfaceNode\n    })\n  }\n\n  getClassParents(): ClassNode[] {\n    assertClass(this.#target)\n    const parents: ClassNode[] = []\n    while (isClass(this.#target)) {\n      this.toClassParent()\n      if (isClass(this.#target)) parents.push(this.getClass())\n    }\n    return parents.reverse()\n  }\n\n  getInterfaceParents(): InterfaceNode[] {\n    assertInterface(this.#target)\n    const query = new AbiQuery(this.abi).byKind([CodeKind.INTERFACE, CodeKind.PROXY_INTERFACE])\n    return this.#target.extends.map(name => {\n      return query.byName(name).getInterface()\n    })\n  }\n\n  getIndex(): number {\n    assertExists(this.#target)\n    const idx = this.#scope.indexOf(this.#target)\n    assertExists(idx >= 0)\n    return idx\n  }\n\n  byKind(kind: CodeKind): this\n  byKind(kinds: CodeKind[]): this\n  byKind(kind: CodeKind | CodeKind[]): this {\n    this.#scope = this.#scope.filter(c => {\n      return Array.isArray(kind) ? kind.includes(c.kind) : kind === c.kind\n    })\n    this.#target = undefined\n    return this\n  }\n\n  byIndex(idx: number): this {\n    this.#target = this.#scope[idx]\n    return this\n  }\n\n  byName(name: string): this {\n    this.#target = this.#scope.find(n => n.name === name)\n    return this\n  }\n\n  fromExports(): this {\n    this.reset()\n    this.#scope = this.abi.exports.map(i => this.abi.defs[i])\n    return this\n  }\n\n  fromImports(): this {\n    this.reset()\n    this.#scope = this.abi.imports.map(i => this.abi.defs[i])\n    return this\n  }\n\n  toClassParent(): this {\n    assertClass(this.#target)\n    const parentName = this.#target.extends\n    return this.fromExports().byName(parentName)\n  }\n\n  search(name: string): CodeDef | FieldNode | MethodNode {\n    this.reset()\n    const match = name.match(/^(\\w+)(_|\\.)(\\w+)$/)\n\n    if (match?.length === 4) {\n      const [_str, codeName, sep, propName] = match \n      this.byName(codeName)\n      return sep === '_' ?\n        this.getMethod(propName) :\n        this.getField(propName)\n    } else {\n      return this.byName(name).getCode()\n    }\n  }\n\n  reset(): this {\n    this.#scope = this.abi.defs\n    this.#target = undefined\n    return this\n  }\n}\n\nexport function assertExists<T>(bool: T | null | undefined, msg: string = 'subject'): asserts bool is T {\n  if (!bool) throw new Error(`not found: the ${msg} does not exist`)\n}\n\nexport function assertNodeKind<T extends {}>(node: any, keys: Array<keyof T>, kind?: CodeKind): asserts node is T {\n  assertExists<T>(node)\n  if (!keys.every(k => k in node)) {\n    throw new Error(`invalid type, keys not found: ${keys.join(', ')}`)\n  }\n  if (typeof kind !== 'undefined' && !('kind' in node && node.kind === kind)) {\n    throw new Error(`invalid type, kind not matching: ${kind}`)\n  }\n}\n\nexport function assertClass(node: any): asserts node is ClassNode {\n  assertNodeKind<ClassNode>(node, ['fields', 'methods'], CodeKind.CLASS)\n}\n\nexport function assertFunction(node: any): asserts node is FunctionNode {\n  assertNodeKind<FunctionNode>(node, ['args', 'rtype'], CodeKind.FUNCTION)\n}\n\nexport function assertInterface(node: any): asserts node is InterfaceNode {\n  assertNodeKind<InterfaceNode>(node, ['fields', 'methods'], CodeKind.INTERFACE)\n}\n\nexport function assertObject(node: any): asserts node is ObjectNode {\n  assertNodeKind<ObjectNode>(node, ['fields'], CodeKind.OBJECT)\n}\n\nexport function assertProxy(node: any): asserts node is ProxyNode {\n  assertNodeKind<ProxyNode>(node, ['kind', 'pkg'])\n}\n\nexport function assertClassLike(node: any): asserts node is ClassNode | InterfaceNode {\n  assertNodeKind<ClassNode | InterfaceNode>(node, ['methods', 'fields'])\n}\n\nexport function assertFunctionLike(node: any): asserts node is FunctionNode | MethodNode {\n  assertNodeKind<FunctionNode | MethodNode>(node, ['args', 'rtype'])\n}\n\nexport function assertField(node: any): asserts node is FieldNode {\n  assertNodeKind<FieldNode>(node, ['name', 'type'])\n}\n\nexport function assertMethod(node: any): asserts node is MethodNode {\n  assertNodeKind<MethodNode>(node, ['kind', 'args', 'rtype'])\n}\n\nexport function isNodeKind<T extends {}>(node: any, keys: Array<keyof T>, kind?: CodeKind): node is T {\n  return !!node &&\n    keys.every(k => k in node) && (\n      typeof kind !== 'undefined' ? 'kind' in node && node.kind === kind : true\n    )\n}\n\nexport function isClass(node: any): node is ClassNode {\n  return isNodeKind<ClassNode>(node, ['fields', 'methods'], CodeKind.CLASS)\n}\n\nexport function isFunction(node: any): node is FunctionNode {\n  return isNodeKind<FunctionNode>(node, ['args', 'rtype'], CodeKind.FUNCTION)\n}\n\nexport function isInterface(node: any): node is InterfaceNode {\n  return isNodeKind<InterfaceNode>(node, ['fields', 'methods'], CodeKind.INTERFACE)\n}\n\nexport function isObject(node: any): node is ObjectNode {\n  return isNodeKind<ObjectNode>(node, ['fields'], CodeKind.OBJECT)\n}\n\nexport function isProxy(node: any): node is ProxyNode {\n  return isNodeKind<ProxyNode>(node, ['kind', 'pkg'])\n}\n\nexport function isClassLike(node: any): node is ClassNode | InterfaceNode | ObjectNode {\n  return isNodeKind<ClassNode | InterfaceNode | ObjectNode>(node, ['fields'])\n}\n\nexport function isFunctionLike(node: any): node is FunctionNode | MethodNode {\n  return isNodeKind<FunctionNode | MethodNode>(node, ['args', 'rtype'])\n}\n\nexport function isField(node: any): node is FieldNode {\n  return isNodeKind<FieldNode>(node, ['name', 'type'])\n}\n\nexport function isMethod(node: any): node is MethodNode {\n  return isNodeKind<MethodNode>(node, ['kind', 'args', 'rtype'])\n}\n\nfunction publicMethodsOnly(m: MethodNode): boolean {\n  return (typeof m.kind === 'undefined' || m.kind === MethodKind.PUBLIC) && m.name !== 'constructor'\n}", "import { Abi, ClassNode } from './abi/types.js'\nimport { AbiQuery } from './abi/query.js'\nimport { validateAbi } from './abi/validations.js'\nimport { base16 } from './support/base.js'\nimport { hash } from './support/blake3.js'\n\nimport {\n  BCS,\n  BufReader,\n  BufWriter,\n  Lock,\n  LockInterface,\n  LockSerializer,\n  Pointer,\n  PointerSerializer,\n  Serializable\n} from './internal.js'\n\n/**\n * Raw Output interface\n */\nexport interface OutputInterface {\n  id: string;\n  origin: string;\n  location: string;\n  class: string;\n  lock: LockInterface;\n  state: string;\n}\n\n/**\n * Transaction Execution Output\n * \n * When a transaction is executed it creates one or more outputs. An output\n * has the following fields:\n * \n * - `origin`: a 36-byte pointer to the transaction the instance was first instantiated\n * - `location`: a 36-byte pointer to the transaction of the current state of the instance\n * - `class`: a 36-byte pointer to the package the class is found in\n * - `lock`: the Lock type and data\n * - `state`: BCS encoded output state\n * \n * The Output class is a generic wrapper for any output, and provides a way to\n * access the parsed state as a JavaScript object.\n */\nexport class Output {\n  origin: Pointer;\n  location: Pointer;\n  classPtr: Pointer;\n  lock: Lock;\n  stateBuf: Uint8Array;\n\n  #abi?: Abi;\n  #bcs?: BCS;\n  #classNode?: ClassNode;\n  #props: any;\n\n  constructor(\n    origin: Pointer,\n    location: Pointer,\n    classPtr: Pointer,\n    lock: Lock,\n    stateBuf: Uint8Array,\n    abi?: Abi,\n  ) {\n    this.origin = origin\n    this.location = location\n    this.classPtr = classPtr\n    this.lock = lock\n    this.stateBuf = stateBuf\n    if (typeof abi !== 'undefined') { this.abi = abi }\n  }\n\n  static fromBytes(bytes: Uint8Array, abi?: Abi): Output {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `Output.fromBytes()` must be a `Uint8Array`')\n    }\n    const buf = new BufReader(bytes)\n    const output = buf.read<Output>(OutputSerializer)\n    if (typeof abi !== 'undefined') { output.abi = abi }\n    return output\n  }\n\n  static fromHex(hex: string, abi?: Abi): Output {\n    let buff = base16.decode(hex)\n    return this.fromBytes(buff, abi)\n  }\n\n  static fromJson(data: OutputInterface, abi?: Abi): Output {\n    const output = new Output(\n      Pointer.fromString(data.origin),\n      Pointer.fromString(data.location),\n      Pointer.fromString(data.class),\n      Lock.fromJson(data.lock),\n      base16.decode(data.state),\n    )\n    if (data.id !== output.id) {\n      throw Error('invalid id. the given id does not match the computed id.')\n    }\n    if (typeof abi !== 'undefined') { output.abi = abi }\n    return output\n  }\n\n  set abi(abi: Abi | void) {\n    if (typeof abi === 'undefined') {\n      this.#abi = undefined\n      this.#bcs = undefined\n      this.#classNode = undefined\n    } else if (validateAbi(abi)) {\n      this.#abi = abi\n      this.#bcs = new BCS(abi)\n      this.#classNode = new AbiQuery(abi).fromExports().byIndex(this.classPtr.idx).getClass()\n    }\n  }\n\n  get abi(): Abi | void {\n    return this.#abi\n  }\n\n  get id(): string {\n    return base16.encode(this.hash)\n  }\n\n  get hash(): Uint8Array {\n    return hash(this.toBytes())\n  }\n\n  get className(): string | void {\n    if (this.#classNode) {\n      return this.#classNode.name\n    }\n  }\n\n  get classNode(): ClassNode | void {\n    return this.#classNode\n  }\n\n  get props(): { [key: string]: any } | void {\n    if (this.#bcs && this.#classNode && typeof this.#props === 'undefined') {\n      const state = this.#bcs.decode(this.#classNode.name, this.stateBuf)\n      const props = this.#classNode.fields.reduce((props: any, f, i) => {\n        props[f.name] = state[i]\n        return props\n      }, {})\n      this.#props = Object.freeze(props)\n    }\n\n    return this.#props\n  }\n\n  toBytes(): Uint8Array {\n    const buf = new BufWriter()\n    buf.write<Output>(OutputSerializer, this)\n    return buf.data\n  }\n\n  toHex(): string {\n    return base16.encode(this.toBytes())\n  }\n\n  toJson(): OutputInterface {\n    return {\n      id: this.id,\n      origin: this.origin.toString(),\n      location: this.location.toString(),\n      class: this.classPtr.toString(),\n      lock: this.lock.toJson(),\n      state: base16.encode(this.stateBuf)\n    }\n  }\n}\n\n/**\n * Output Serializer object - implements the Serializable interface.\n */\nexport const OutputSerializer: Serializable<Output> = {\n  read(buf: BufReader): Output {\n    const origin = buf.read<Pointer>(PointerSerializer)\n    const location = buf.read<Pointer>(PointerSerializer)\n    const classPtr = buf.read<Pointer>(PointerSerializer)\n    const lock = buf.read<Lock>(LockSerializer)\n    const stateBuf = buf.readBytes()\n    return new Output(origin, location, classPtr, lock, stateBuf)\n  },\n\n  write(buf: BufWriter, output: Output): BufWriter {\n    buf.write<Pointer>(PointerSerializer, output.origin)\n    buf.write<Pointer>(PointerSerializer, output.location)\n    buf.write<Pointer>(PointerSerializer, output.classPtr)\n    buf.write<Lock>(LockSerializer, output.lock)\n    buf.writeBytes(output.stateBuf)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Serializable,\n} from './internal.js'\n\nimport { base16 } from './support/base.js'\nimport {buffEquals} from \"./support/util.js\";\n\nconst POINTER_STR_REGX = /^[a-f0-9]{64}_\\d+$/i\n\n/**\n * Aldea Pointer\n * \n * A consists of a 32 byte ID and an index integer which points to the location\n * of an object within a larger data structure.\n * \n * A Pointer is encoded as a string by concatentating the hex encoded ID with\n * the index.\n * \n * Example:\n * \n *     3b2af88dad7f1847f5b333852b71ac6fd2ae519ba2d359e8ce07b071aad30e80_1\n */\nexport class Pointer {\n  idBuf: Uint8Array;\n  idx: number;\n\n  constructor(id: Uint8Array | string, idx: number) {\n    this.idBuf = typeof id === 'string' ? base16.decode(id) : id\n    this.idx = idx\n  }\n\n  static fromBytes(bytes: Uint8Array): Pointer {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `Pointer.fromBytes()` must be a `Uint8Array`')\n    }\n    const buf = new BufReader(bytes)\n    return buf.read<Pointer>(PointerSerializer)\n  }\n\n  static fromString(str: string): Pointer {\n    if (typeof str !== 'string' || !POINTER_STR_REGX.test(str)) {\n      throw Error('invalid pointer. must be a pointer string.')\n    }\n\n    const [idStr, idxStr] = str.split('_')\n    return new Pointer(base16.decode(idStr), Number(idxStr))\n  }\n\n  get id(): string {\n    return base16.encode(this.idBuf)\n  }\n\n  equals(ptr: Pointer): boolean {\n    return this.idx === ptr.idx && buffEquals(this.idBuf, ptr.idBuf)\n  }\n\n  toBytes(): Uint8Array {\n    const buf = new BufWriter()\n    buf.write<Pointer>(PointerSerializer, this)\n    return buf.data\n  }\n\n  toString(): string {\n    return `${ this.id }_${ this.idx }`\n  }\n}\n\n/**\n * Pointer Serializer object - implements the Serializable interface.\n */\nexport const PointerSerializer: Serializable<Pointer> = {\n  read(buf: BufReader): Pointer {\n    const id = buf.readFixedBytes(32)\n    const idx = buf.readU16()\n    return new Pointer(id, idx)\n  },\n\n  write(buf: BufWriter, ptr: Pointer): BufWriter {\n    buf.writeFixedBytes(ptr.idBuf)\n    buf.writeU16(ptr.idx)\n    return buf\n  }\n}\n", "import { KeyPair, PubKey } from './internal.js';\nimport { base16, bech32m } from './support/base.js';\nimport { randomBytes } from './support/util.js'\n\nconst PREFIX = 'asec'\n\n/**\n * Aldea private key\n * \n * A private key is a 32 byte random key.\n */\nexport class PrivKey {\n  private d: Uint8Array;\n\n  constructor(d: Uint8Array) {\n    if (d.length !== 32) throw new Error('PrivKey must be 32 bytes')\n    this.d = d\n  }\n\n  /**\n   * Returns a PrivKey from the given bytes.\n   */\n  static fromBytes(bytes: Uint8Array): PrivKey {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `PrivKey.fromBytes()` must be a `Uint8Array`')\n    }\n    return new PrivKey(bytes)\n  }\n\n  /**\n   * Returns a PrivKey from the given hex-encoded string.\n   */\n  static fromHex(str: string): PrivKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `PrivKey.fromHex()` must be a `string`')\n    }\n    const d = base16.decode(str)\n    return new PrivKey(d)\n  }\n\n  /**\n   * Returns a PrivKey from the given bech32m-encoded string.\n   */\n  static fromString(str: string): PrivKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `PrivKey.fromString()` must be a `string`')\n    }\n    const d = bech32m.decode(str, PREFIX)\n    return new PrivKey(d)\n  }\n\n  /**\n   * Generates and returns a new random PrivKey.\n   */\n  static fromRandom(): PrivKey {\n    const d = randomBytes(32)\n    return new PrivKey(d)\n  }\n\n  /**\n   * Returns the PrivKey as bytes.\n   */\n  toBytes(): Uint8Array {\n    return this.d\n  }\n\n  /**\n   * Returns the PrivKey as hex-encoded string.\n   */\n  toHex(): string {\n    return base16.encode(this.d)\n  }\n\n  /**\n   * Returns the PrivKey as bech32m-encoded string.\n   */\n  toString(): string {\n    return bech32m.encode(this.d, PREFIX)\n  }\n\n  /**\n   * Returns a KeyPair from the PrivKey.\n   */\n  toKeyPair(): KeyPair {\n    return KeyPair.fromPrivKey(this)\n  }\n\n  /**\n   * Returns the PrivKey's corresponding PubKey.\n   */\n  toPubKey(): PubKey {\n    return PubKey.fromPrivKey(this)\n  }\n}\n", "import { Address, PrivKey } from './internal.js'\nimport { base16, bech32m } from './support/base.js'\nimport { Point, calcPoint, pointFromBytes, pointToBytes } from './support/ed25519.js'\n\nconst PREFIX = 'apub'\n\n/**\n * Aldea public key\n * \n * A public key is the X and Y coordinates of a point on  Ed25519 curve. It is\n * serialized as the 32 byte Y coordinate, with the last byte encoding the sign\n * of X. \n */\nexport class PubKey {\n  readonly point: Point;\n\n  constructor(point: Point) {\n    this.point = point\n  }\n\n  /**\n   * Returns a PubKey from the given bytes.\n   */\n  static fromBytes(bytes: Uint8Array): PubKey {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `PubKey.fromBytes()` must be a `Uint8Array`')\n    }\n    const point = pointFromBytes(bytes)\n    return new PubKey(point)\n  }\n\n  /**\n   * Returns a PubKey from the given hex-encoded string.\n   */\n  static fromHex(str: string): PubKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `PubKey.fromHex()` must be a `string`')\n    }\n    const bytes = base16.decode(str)\n    return PubKey.fromBytes(bytes)\n  }\n\n  /**\n   * Returns a PubKey from the given bech32m-encoded string.\n   */\n  static fromString(str: string): PubKey {\n    if (typeof str !== 'string') {\n      throw Error('The first argument to `PubKey.fromString()` must be a `string`')\n    }\n    const bytes = bech32m.decode(str, PREFIX)\n    return PubKey.fromBytes(bytes)\n  }\n\n\n  /**\n   * Returns a the giveb PrivKey's corresponding PubKey.\n   */\n  static fromPrivKey(privKey: PrivKey): PubKey {\n    if (!(privKey instanceof PrivKey)) {\n      throw Error('The first argument to `PubKey.fromPrivKey()` must be a `PrivKey`')\n    }\n    const point = calcPoint(privKey.toBytes())\n    return new PubKey(point)\n  }\n\n  /**\n   * Point X coordiante\n   */\n  get x(): bigint { return this.point.x }\n\n  /**\n   * Point Y coordiante\n   */\n  get y(): bigint { return this.point.y }\n\n  /**\n   * checks if 2 pubkey objects represent the same point\n   */\n  equals (another: PubKey) {\n    return this.x === another.x && this.y === another.y\n  }\n\n  /**\n   * Returns the PubKey's Address.\n   */\n  toAddress(): Address {\n    return Address.fromPubKey(this)\n  }\n\n  /**\n   * Returns the PubKey as bytes.\n   */\n  toBytes(): Uint8Array {\n    return pointToBytes(this.point)\n  }\n\n  /**\n   * Returns the PubKey as hex-encoded string.\n   */\n  toHex(): string {\n    return base16.encode(this.toBytes())\n  }\n\n  /**\n   * Returns the PubKey as bech32m-encoded string.\n   */\n  toString(): string {\n    return bech32m.encode(this.toBytes(), PREFIX)\n  }\n}\n", "import { CURVE } from '@noble/ed25519'\nimport { PrivKey, PubKey } from './internal.js'\nimport { hash, keyedHash } from './support/blake3.js'\nimport { Point, getSharedSecret } from './support/ed25519.js'\nimport { mod, bnToBytes, bytesToBn, concatBytes } from './support/util.js'\nimport { adjustScalarBytes } from './support/x25519.js'\n\nexport class SharedKeyPair {\n  ownPrivKey: PrivKey;\n  theirPubKey: PubKey;\n  s: Uint8Array;\n\n  constructor(ownPrivKey: PrivKey, theirPubKey: PubKey) {\n    this.ownPrivKey = ownPrivKey\n    this.theirPubKey = theirPubKey\n    this.s = getSharedSecret(ownPrivKey, theirPubKey)\n  }\n\n  getSharedSecret(data: string | Uint8Array, bytes: number = 32): Uint8Array {\n    return keyedHash(data, this.s, bytes)\n  }\n\n  deriveOwnPrivKeyBytes(data: string | Uint8Array): Uint8Array {\n    const k = adjustScalarBytes(hash(this.ownPrivKey.toBytes(), 64))\n    const ss = this.getSharedSecret(data)\n    return concatBytes(\n      bnToBytes(mod(bytesToBn(k.slice(0, 32)) + bytesToBn(ss), CURVE.n)),\n      k.slice(32, 64)\n    )\n  }\n\n  deriveOwnPubKey(data: string | Uint8Array): PubKey {\n    const privKey = this.deriveOwnPrivKeyBytes(data).slice(0, 32)\n    const point = Point.BASE._scalarMult(bytesToBn(privKey))\n    return new PubKey(point)\n  }\n\n  deriveTheirPubKey(data: string | Uint8Array): PubKey {\n    const ss = this.getSharedSecret(data)\n    const point = this.theirPubKey.point.add(Point.BASE._scalarMult(bytesToBn(ss)))\n    return new PubKey(point)\n  }\n}\n", "import {\n  Address,\n  BufReader,\n  BufWriter,\n  Instruction,\n  InstructionSerializer,\n  OpCode,\n  PrivKey,\n  PubKey,\n  Serializable,\n  SignInstruction,\n  SignToInstruction,\n} from './internal.js'\n\nimport {base16} from './support/base.js'\nimport {sign, verify} from './support/ed25519.js'\nimport {hash} from './support/blake3.js'\n\nconst TX_VERSION = 1\n\n/**\n * Aldea Transaction\n * \n * A transaction is simply a list of instructions. When a transaction is\n * processed, the instructions are executed in the order they appear in the\n * transaction.\n * \n * This class is primarily for working with the underlying data structure of\n * a transaction. To build a transaction, use the TxBuilder class instaed.\n */\nexport class Tx {\n  version: number;\n  instructions: Instruction[];\n\n  constructor(version: number = TX_VERSION, instructions: Instruction[] = []) {\n    this.version = version\n    this.instructions = instructions\n  }\n\n  /**\n   * Transaction ID\n   */\n  get id(): string {\n    return base16.encode(this.hash)\n  }\n\n  /**\n   * Transaction hash\n   */\n  get hash(): Uint8Array {\n    return hash(this.toBytes(), 32)\n  }\n\n  /**\n   * Returns a Transaction from the given bytes.\n   */\n  static fromBytes(bytes: Uint8Array): Tx {\n    if (!ArrayBuffer.isView(bytes)) {\n      throw Error('The first argument to `Tx.fromBytes()` must be a `Uint8Array`')\n    }\n    const buf = new BufReader(bytes)\n    return buf.read<Tx>(TxSerializer)\n  }\n\n  /**\n   * Returns a Transaction from the given hex-encoded string.\n   */\n  static fromHex(str: string): Tx {\n    const bytes = base16.decode(str)\n    return Tx.fromBytes(bytes)\n  }\n\n  /**\n   * Pushes an Instruction onto the transaction.\n   */\n  push(instruction: Instruction): Tx {\n    this.instructions.push(instruction)\n    return this\n  }\n\n  /**\n   * Returns the sighash of the current transaction. Can optionally be passed\n   * an index to return the sighash upto a given instruction.\n   */\n  sighash(to: number = this.instructions.length): Uint8Array {\n    const buf = new BufWriter()\n    const instructions = this.instructions.slice(0, to)\n    \n    for (let i = 0; i < instructions.length; i++) {\n      const { opcode } = instructions[i]\n      if (opcode === OpCode.SIGN || opcode === OpCode.SIGNTO) {\n        buf.writeU8(opcode)\n        buf.writeFixedBytes((<SignInstruction | SignToInstruction>instructions[i]).pubkey)\n      } else {\n        buf.write<Instruction>(InstructionSerializer, instructions[i])\n      }\n    }\n\n    return hash(buf.data, 32)\n  }\n\n  /**\n   * Returns a valid signature for the current tx using the given key.\n   */\n  createSignature (privKey: PrivKey, to: number = this.instructions.length): Uint8Array {\n    const msg = this.sighash(to)\n    return sign(msg, privKey)\n  }\n\n  isSignedBy (addr: Address, index: number): boolean {\n    let i = 0\n    for (const inst of this.instructions) {\n      if (inst instanceof SignInstruction && PubKey.fromBytes(inst.pubkey).toAddress().equals(addr)) {\n        return true\n      }\n      if (inst instanceof SignToInstruction && PubKey.fromBytes(inst.pubkey).toAddress().equals(addr) && index <= i) {\n        return true\n      }\n      i++\n    }\n    return false\n  }\n\n  /**\n   * Returns the Transaction as bytes.\n   */\n  toBytes(): Uint8Array {\n    const buf = new BufWriter()\n    buf.write<Tx>(TxSerializer, this)\n    return buf.data\n  }\n\n  /**\n   * Returns the Transaction as hex-encoded string.\n   */\n  toHex(): string {\n    return base16.encode(this.toBytes())\n  }\n\n  signers (): PubKey[] {\n    const signToSigners = this.instructions.filter(i => [OpCode.SIGNTO].includes(i.opcode))\n      .map((i): PubKey => {\n        let sign = i as SignToInstruction\n        return PubKey.fromBytes(sign.pubkey)\n      })\n    const signSigners = this.instructions.filter(i => [OpCode.SIGN].includes(i.opcode))\n      .map((i): PubKey => {\n        let sign = i as SignInstruction\n        return PubKey.fromBytes(sign.pubkey)\n      })\n\n    return [...signToSigners, ...signSigners]\n  }\n\n  /**\n   * Verifies any signatures in the transaction and returns a boolean.\n   * \n   * Not that this only verifies the signatures. It does not otherwise verify\n   * the transaction is valid. That is done at execution time.\n   */\n  verify(): boolean {\n    return this.instructions\n      .every((i, idx) => {\n        if (i.opcode === OpCode.SIGN || i.opcode === OpCode.SIGNTO) {\n          const inst = i as SignInstruction | SignToInstruction\n          const msg = i.opcode === OpCode.SIGNTO\n            ? this.sighash(idx)\n            : this.sighash()\n          return verify(inst.sig, msg, inst.pubkey)\n        } else {\n          return true\n        }\n      })\n  }\n}\n\n/**\n * Tx Serializer object - implements the Serializable interface.\n */\nexport const TxSerializer: Serializable<Tx> = {\n  read(buf: BufReader): Tx {\n    const version = buf.readU16()\n    const instructions = buf.readSeq((reader) => {\n      return reader.read<Instruction>(InstructionSerializer)\n    })\n    return new Tx(version, instructions)\n  },\n\n  write(buf: BufWriter, tx: Tx): BufWriter {\n    buf.writeU16(tx.version)\n    buf.writeSeq(tx.instructions, (writer, inst) => {\n      writer.write<Instruction>(InstructionSerializer, inst)\n    })\n    return buf\n  }\n}\n", "import {\n  BufReader, BufWriter, Serializable,\n  ImportInstruction, ImportArgsSerializer,\n  LoadInstruction, LoadArgsSerializer,\n  LoadByOriginInstruction, LoadByOriginArgsSerializer,\n  NewInstruction, NewArgsSerializer,\n  CallInstruction, CallArgsSerializer,\n  ExecInstruction, ExecArgsSerializer,\n  FundInstruction, FundArgsSerializer,\n  LockInstruction, LockArgsSerializer,\n  DeployInstruction, DeployArgsSerializer,\n  SignInstruction, SignArgsSerializer,\n  SignToInstruction, SignToArgsSerializer,\n  UnknownInstruction\n} from './internal.js'\n\n/**\n * All OpCode bytes.\n */\nexport enum OpCode {\n  // Loading\n  IMPORT = 0xA1,\n  LOAD = 0xA2,\n  LOADBYORIGIN = 0xA3,\n  // Calling\n  NEW = 0xB1,\n  CALL = 0xB2,\n  EXEC = 0xB3,\n  // Output\n  FUND = 0xC1,\n  LOCK = 0xC2,\n  // Code\n  DEPLOY = 0xD1,\n  // Cryptography\n  SIGN = 0xE1,\n  SIGNTO = 0xE2,\n}\n\n/**\n * Instruction base class.\n * \n * An Instruction is Aldea's smallest contiguous unit of execution. A\n * transaction consists of a `OpCode` byte and a number of arguments, depending\n * on the `OpCode`.\n */\nexport class Instruction {\n  opcode: OpCode;\n\n  constructor(opcode: OpCode) {\n    this.opcode = opcode\n  }\n\n  static fromBytes(bytes: Uint8Array): Instruction {\n    const buf = new BufReader(bytes)\n    return buf.read<Instruction>(InstructionSerializer)\n  }\n\n  toBytes(): Uint8Array {\n    const buf = new BufWriter()\n    buf.write<Instruction>(InstructionSerializer, this)\n    return buf.data\n  }\n}\n\n/**\n * InstructionRef class - just a wrapper around number\n */\nexport class InstructionRef {\n  idx: number;\n\n  constructor(idx: number) {\n    if (!Number.isInteger(idx)) throw new Error('invalid ref. must be an integer.')\n    this.idx = idx\n  }\n\n  get [Symbol.toStringTag](): string { return `InstructionRef` }\n  toString(): string { return `${this[Symbol.toStringTag]}<${this.idx}>` }\n}\n\n/**\n * Wrap a number with InstructionRef\n */\nexport function ref(idx: number): InstructionRef {\n  return new InstructionRef(idx)\n}\n\n/**\n * Instruction Serializer object - implements the Serializable interface.\n */\nexport const InstructionSerializer: Serializable<Instruction> = {\n  read(buf: BufReader): Instruction {\n    const opcode = buf.readU8()\n    const argsBuf = buf.readBytes()\n\n    const args = new BufReader(argsBuf)\n\n    switch(opcode) {\n      case OpCode.IMPORT:\n        return args.read<ImportInstruction>(ImportArgsSerializer)\n      case OpCode.LOAD:\n        return args.read<LoadInstruction>(LoadArgsSerializer)\n      case OpCode.LOADBYORIGIN:\n        return args.read<LoadByOriginInstruction>(LoadByOriginArgsSerializer)\n      case OpCode.NEW:\n        return args.read<NewInstruction>(NewArgsSerializer)\n      case OpCode.CALL:\n        return args.read<CallInstruction>(CallArgsSerializer)\n      case OpCode.EXEC:\n        return args.read<ExecInstruction>(ExecArgsSerializer)\n      case OpCode.FUND:\n        return args.read<FundInstruction>(FundArgsSerializer)\n      case OpCode.LOCK:\n        return args.read<LockInstruction>(LockArgsSerializer)\n      case OpCode.DEPLOY:\n        return args.read<DeployInstruction>(DeployArgsSerializer)\n      case OpCode.SIGN:\n        return args.read<SignInstruction>(SignArgsSerializer)\n      case OpCode.SIGNTO:\n        return args.read<SignToInstruction>(SignToArgsSerializer)\n      default: return new UnknownInstruction(opcode, argsBuf)\n    }\n  },\n\n  write(buf: BufWriter, inst: Instruction): BufWriter {\n    const args = new BufWriter()\n\n    switch (inst.opcode) {\n      case OpCode.IMPORT:\n        args.write<ImportInstruction>(ImportArgsSerializer, inst as ImportInstruction)\n        break\n      case OpCode.LOAD:\n        args.write<LoadInstruction>(LoadArgsSerializer, inst as LoadInstruction)\n        break\n      case OpCode.LOADBYORIGIN:\n        args.write<LoadByOriginInstruction>(LoadByOriginArgsSerializer, inst as LoadByOriginInstruction)\n        break\n      case OpCode.NEW:\n        args.write<NewInstruction>(NewArgsSerializer, inst as NewInstruction)\n        break\n      case OpCode.CALL:\n        args.write<CallInstruction>(CallArgsSerializer, inst as CallInstruction)\n        break\n      case OpCode.EXEC:\n        args.write<ExecInstruction>(ExecArgsSerializer, inst as ExecInstruction)\n        break\n      case OpCode.FUND:\n        args.write<FundInstruction>(FundArgsSerializer, inst as FundInstruction)\n        break\n      case OpCode.LOCK:\n        args.write<LockInstruction>(LockArgsSerializer, inst as LockInstruction)\n        break\n      case OpCode.DEPLOY:\n        args.write<DeployInstruction>(DeployArgsSerializer, inst as DeployInstruction)\n        break\n      case OpCode.SIGN:\n        args.write<SignInstruction>(SignArgsSerializer, inst as SignInstruction)\n        break\n      case OpCode.SIGNTO:\n        args.write<SignToInstruction>(SignToArgsSerializer, inst as SignToInstruction)\n        break\n      default:\n        args.writeFixedBytes((<UnknownInstruction>inst).argsBuf)\n    }\n\n    const argsBuf = args.data\n    buf.writeU8(inst.opcode)\n    buf.writeBytes(argsBuf)\n    return buf\n  }\n}\n", "export * from './import.js'\nexport * from './load.js'\nexport * from './loadbyorigin.js'\nexport * from './new.js'\nexport * from './call.js'\nexport * from './exec.js'\nexport * from './fund.js'\nexport * from './lock.js'\nexport * from './deploy.js'\nexport * from './sign.js'\nexport * from './signto.js'\nexport * from './unknown.js'\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Import Instruction.\n * \n * Imports code by the given pakcage ID.\n */\nexport class ImportInstruction extends Instruction {\n  pkgId: Uint8Array;\n\n  constructor(pkgId: Uint8Array) {\n    super(OpCode.IMPORT)\n    this.pkgId = pkgId\n  }\n}\n\n/**\n * Import Args Serializer object - implements the Serializable interface.\n */\nexport const ImportArgsSerializer: Serializable<ImportInstruction> = {\n  read(buf: BufReader): ImportInstruction {\n    const pkgId = buf.readFixedBytes(32)\n    return new ImportInstruction(pkgId)\n  },\n\n  write(buf: BufWriter, inst: ImportInstruction): BufWriter {\n    buf.writeFixedBytes(inst.pkgId)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Load By Ref Instruction.\n * \n * Loads an instance by the given Jig Ref.\n */\nexport class LoadInstruction extends Instruction {\n  outputId: Uint8Array;\n\n  constructor(outputId: Uint8Array) {\n    super(OpCode.LOAD)\n    this.outputId = outputId\n  }\n}\n\n/**\n * Load Args Serializer object - implements the Serializable interface.\n */\nexport const LoadArgsSerializer: Serializable<LoadInstruction> = {\n  read(buf: BufReader): LoadInstruction {\n    const outputId = buf.readFixedBytes(32)\n    return new LoadInstruction(outputId)\n  },\n\n  write(buf: BufWriter, instruction: LoadInstruction): BufWriter {\n    buf.writeFixedBytes(instruction.outputId)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Load By Id Instruction.\n * \n * Loads an instance by the given Jig Id.\n */\nexport class LoadByOriginInstruction extends Instruction {\n  origin: Uint8Array;\n\n  constructor(origin: Uint8Array) {\n    super(OpCode.LOADBYORIGIN)\n    this.origin = origin\n  }\n}\n\n/**\n * Load By Origin Args Serializer object - implements the Serializable interface.\n */\nexport const LoadByOriginArgsSerializer: Serializable<LoadByOriginInstruction> = {\n  read(buf: BufReader): LoadByOriginInstruction {\n    const origin = buf.readFixedBytes(34)\n    return new LoadByOriginInstruction(origin)\n  },\n\n  write(buf: BufWriter, instruction: LoadByOriginInstruction): BufWriter {\n    buf.writeFixedBytes(instruction.origin)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable,\n} from '../internal.js'\n\n/**\n * New Instruction.\n * \n * Instantiates a new instance of a class. Args are passwed to the constructor.\n */\n export class NewInstruction extends Instruction {\n  idx: number;\n  exportIdx: number;\n  argsBuf: Uint8Array;\n\n  constructor(idx: number, exportIdx: number, argsBuf: Uint8Array) {\n    super(OpCode.NEW)\n    this.idx = idx\n    this.exportIdx = exportIdx\n    this.argsBuf = argsBuf\n  }\n}\n\n/**\n * New Args Serializer object - implements the Serializable interface.\n */\nexport const NewArgsSerializer: Serializable<NewInstruction> = {\n  read(buf: BufReader): NewInstruction {\n    const idx = buf.readU16()\n    const exportIdx = buf.readU16()\n    const argsBuf = buf.readFixedBytes(buf.remaining)\n    return new NewInstruction(idx, exportIdx, argsBuf)\n  },\n\n  write(buf: BufWriter, instruction: NewInstruction): BufWriter {\n    buf.writeU16(instruction.idx)\n    buf.writeU16(instruction.exportIdx)\n    buf.writeFixedBytes(instruction.argsBuf)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable,\n} from '../internal.js'\n\n/**\n * Call Instruction.\n * \n * Calls an instance method on a Jig. Args are passwed to the constructor.\n */\nexport class CallInstruction extends Instruction {\n  idx: number;\n  methodIdx: number;\n  argsBuf: Uint8Array;\n\n  constructor(idx: number, methodIdx: number, argsBuf: Uint8Array) {\n    super(OpCode.CALL)\n    this.idx = idx\n    this.methodIdx = methodIdx\n    this.argsBuf = argsBuf\n  }\n}\n\n/**\n * Call Args Serializer object - implements the Serializable interface.\n */\nexport const CallArgsSerializer: Serializable<CallInstruction> = {\n  read(buf: BufReader): CallInstruction {\n    const idx = buf.readU16()\n    const methodIdx = buf.readU16()\n    const argsBuf = buf.readFixedBytes(buf.remaining)\n    return new CallInstruction(idx, methodIdx, argsBuf)\n  },\n\n  write(buf: BufWriter, instruction: CallInstruction): BufWriter {\n    buf.writeU16(instruction.idx)\n    buf.writeU16(instruction.methodIdx)\n    buf.writeFixedBytes(instruction.argsBuf)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable,\n} from '../internal.js'\n\n/**\n * Exec Instruction.\n * \n * Calls a static function. Args are passed to the constructor.\n */\nexport class ExecInstruction extends Instruction {\n  idx: number;\n  exportIdx: number;\n  argsBuf: Uint8Array;\n\n  constructor(idx: number, exportIdx: number, argsBuf: Uint8Array) {\n    super(OpCode.EXEC)\n    this.idx = idx\n    this.exportIdx = exportIdx\n    this.argsBuf = argsBuf\n  }\n}\n\n/**\n * Exec Args Serializer object - implements the Serializable interface.\n */\nexport const ExecArgsSerializer: Serializable<ExecInstruction> = {\n  read(buf: BufReader): ExecInstruction {\n    const idx = buf.readU16()\n    const exportIdx = buf.readU16()\n    const argsBuf = buf.readFixedBytes(buf.remaining)\n    return new ExecInstruction(idx, exportIdx, argsBuf)\n  },\n\n  write(buf: BufWriter, instruction: ExecInstruction): BufWriter {\n    buf.writeU16(instruction.idx)\n    buf.writeU16(instruction.exportIdx)\n    buf.writeFixedBytes(instruction.argsBuf)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Fund Instruction.\n * \n * Marks a Coin UTXO to be used for the transaction fee. All of the coin's\n * motos will be consumed and the coin will be destroyed.\n */\nexport class FundInstruction extends Instruction {\n  idx: number;\n\n  constructor(idx: number) {\n    super(OpCode.FUND)\n    this.idx = idx\n  }\n}\n\n/**\n * Fund Args Serializer object - implements the Serializable interface.\n */\nexport const FundArgsSerializer: Serializable<FundInstruction> = {\n  read(buf: BufReader): FundInstruction {\n    const idx = buf.readU16()\n    return new FundInstruction(idx)\n  },\n\n  write(buf: BufWriter, instruction: FundInstruction): BufWriter {\n    buf.writeU16(instruction.idx)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Lock Instruction.\n * \n * Locks a instance to the given pubkeyHash.\n */\nexport class LockInstruction extends Instruction {\n  idx: number;\n  pubkeyHash: Uint8Array;\n\n  constructor(idx: number, pubkeyHash: Uint8Array) {\n    super(OpCode.LOCK)\n    this.idx = idx\n    this.pubkeyHash = pubkeyHash\n  }\n}\n\n/**\n * Lock Args Serializer object - implements the Serializable interface.\n */\nexport const LockArgsSerializer: Serializable<LockInstruction> = {\n  read(buf: BufReader): LockInstruction {\n    const idx = buf.readU16()\n    const pubkeyHash = buf.readFixedBytes(20)\n    return new LockInstruction(idx, pubkeyHash)\n  },\n\n  write(buf: BufWriter, instruction: LockInstruction): BufWriter {\n    buf.writeU16(instruction.idx)\n    buf.writeFixedBytes(instruction.pubkeyHash)\n    return buf\n  }\n}\n", "import {\n  BCS,\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Deploy Instruction.\n * \n * Deploys a code bundle. The code bundle must be a map of filename => content.\n */\nexport class DeployInstruction extends Instruction {\n  pkgBuf: Uint8Array;\n\n  constructor(pkgBuf: Uint8Array) {\n    super(OpCode.DEPLOY)\n    this.pkgBuf = pkgBuf\n  }\n}\n\n/**\n * Deploy Args Serializer object - implements the Serializable interface.\n */\nexport const DeployArgsSerializer: Serializable<DeployInstruction> = {\n  read(buf: BufReader): DeployInstruction {\n    const pkgBuf = buf.readFixedBytes(buf.remaining)\n    return new DeployInstruction(pkgBuf)\n  },\n\n  write(buf: BufWriter, inst: DeployInstruction): BufWriter {\n    buf.writeFixedBytes(inst.pkgBuf)\n    return buf\n  }\n}\n\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Sign Instruction.\n * \n * The given signature and pubkey signs ALL the transaction instructions.\n */\nexport class SignInstruction extends Instruction {\n  sig: Uint8Array;\n  pubkey: Uint8Array;\n\n  constructor(sig: Uint8Array, pubkey: Uint8Array) {\n    super(OpCode.SIGN)\n    this.sig = sig\n    this.pubkey = pubkey\n  }\n}\n\n/**\n * Sign Args Serializer object - implements the Serializable interface.\n */\nexport const SignArgsSerializer: Serializable<SignInstruction> = {\n  read(buf: BufReader): SignInstruction {\n    const sig = buf.readFixedBytes(64)\n    const pubkey = buf.readFixedBytes(32)\n    return new SignInstruction(sig, pubkey)\n  },\n\n  write(buf: BufWriter, instruction: SignInstruction): BufWriter {\n    buf.writeFixedBytes(instruction.sig)\n    buf.writeFixedBytes(instruction.pubkey)\n    return buf\n  }\n}\n", "import {\n  BufReader,\n  BufWriter,\n  Instruction,\n  OpCode,\n  Serializable\n} from '../internal.js'\n\n/**\n * Sign To Instruction.\n * \n * The given signature and pubkey signs the transaction instructions before this\n * instruction.\n */\nexport class SignToInstruction extends Instruction {\n  sig: Uint8Array;\n  pubkey: Uint8Array;\n\n  constructor(sig: Uint8Array, pubkey: Uint8Array) {\n    super(OpCode.SIGNTO)\n    this.sig = sig\n    this.pubkey = pubkey\n  }\n}\n\n/**\n * Sign To Args Serializer object - implements the Serializable interface.\n */\nexport const SignToArgsSerializer: Serializable<SignToInstruction> = {\n  read(buf: BufReader): SignToInstruction {\n    const sig = buf.readFixedBytes(64)\n    const pubkey = buf.readFixedBytes(32)\n    return new SignToInstruction(sig, pubkey)\n  },\n\n  write(buf: BufWriter, instruction: SignToInstruction): BufWriter {\n    buf.writeFixedBytes(instruction.sig)\n    buf.writeFixedBytes(instruction.pubkey)\n    return buf\n  }\n}\n", "import { Instruction, OpCode } from '../internal.js'\n\n/**\n * Unknown Instruction.\n */\nexport class UnknownInstruction extends Instruction {\n  argsBuf: Uint8Array;\n\n  constructor(opcode: OpCode, argsBuf: Uint8Array) {\n    super(opcode)\n    this.argsBuf = argsBuf\n  }\n}\n", "/**\n * Original code (public domain) is taken from: https://www.npmjs.com/package/uleb128\n */\n\n/**\n * Encodes the given number into a ULEB encoded byte array.\n */\nexport function ulebEncode(num: number): number[] {\n  let arr = []\n\n  if (num === 0) {\n    return [0]\n  }\n\n  while (num > 0) {\n    let temp = num & 0x7f\n    num = num >>> 7\n    if (num) {\n      temp = temp | 0x80\n    }\n    arr.push(temp)\n  }\n\n  return arr;\n}\n\n/**\n * Decode the given ULEB encoded byte array into a number.\n */\nexport function ulebDecode(arr: number[] | Uint8Array): {\n  value: number;\n  length: number;\n} {\n  let total = 0\n  let shift = 0\n  let len = 0\n\n  while (true) {\n    let byte = arr[len];\n    let data = byte & 0b01111111; // keep everything but most significant bit\n    data = data * (2 ** shift) // Avoid shifting. Causes issues in big numbers\n    total = total + data\n    len++;\n    shift += 7;\n\n    if ((byte & 0x80) === 0) { // check if the most significat bit is 0. If its 0 the number finished.\n      break;\n    }\n\n  }\n\n  return {\n    value: total,\n    length: len,\n  };\n}\n", "import { Serializable } from '../internal.js'\nimport { ulebDecode } from './uleb.js'\n\n/**\n * BufReader sequence callback.\n */\nexport type BufReaderSeqCallback<T> = (reader: BufReader, i: number, len: number) => T;\n\n/**\n * BufReader.\n * \n * Class used for reading encoded data chunk by chunk. Normally used with the\n * BCS wrapper, but can also be used as a gerneal purpose Buffer reader.\n */\nexport class BufReader {\n   cursor: number = 0;\n   view: DataView;\n\n  constructor(data: Uint8Array) {\n    this.view = new DataView(data.buffer, data.byteOffset, data.byteLength)\n  }\n\n  get remaining(): number {\n    return this.view.byteLength - this.cursor\n  }\n\n  readBool(): boolean {\n    return !!this.readU8()\n  }\n\n  readF32(): number {\n    return this.pull(4, (view, cursor) => view.getFloat32(cursor, true))\n  }\n\n  readF64(): number {\n    return this.pull(8, (view, cursor) => view.getFloat64(cursor, true))\n  }\n\n  readI8(): number {\n    return this.pull(1, (view, cursor) => view.getInt8(cursor))\n  }\n\n  readI16(): number {\n    return this.pull(2, (view, cursor) => view.getInt16(cursor, true))\n  }\n\n  readI32(): number {\n    return this.pull(4, (view, cursor) => view.getInt32(cursor, true))\n  }\n\n  readI64(): bigint {\n    return this.pull(8, (view, cursor) => view.getBigInt64(cursor, true))\n  }\n\n  readU8(): number {\n    return this.pull(1, (view, cursor) => view.getUint8(cursor))\n  }\n\n  readU16(): number {\n    return this.pull(2, (view, cursor) => view.getUint16(cursor, true))\n  }\n\n  readU32(): number {\n    return this.pull(4, (view, cursor) => view.getUint32(cursor, true))\n  }\n\n  readU64(): bigint {\n    return this.pull(8, (view, cursor) => view.getBigUint64(cursor, true))\n  }\n\n  readULEB(): number {\n    const ulebBuf = new Uint8Array(this.view.buffer, this.view.byteOffset + this.cursor)\n    const { value, length } = ulebDecode(ulebBuf)\n    this.cursor += length\n    return value\n  }\n\n  readFixedBytes(length: number): Uint8Array {\n    return this.pull(length, (view, cursor) => {\n      return new Uint8Array(view.buffer, view.byteOffset + cursor, length)\n    })\n  }\n\n  readBytes(): Uint8Array {\n    const length = this.readULEB()\n    return this.readFixedBytes(length)\n  }\n\n  readFixedSeq<T>(length: number, cb: BufReaderSeqCallback<T>): T[] {\n    const result = []\n    for (let i = 0; i < length; i++) {\n      result.push(cb(this, i, length))\n    }\n    return result\n  }\n\n  readSeq<T>(cb: BufReaderSeqCallback<T>): T[] {\n    const length = this.readULEB()\n    return this.readFixedSeq(length, cb)\n  }\n\n  read<T>(serializer: Serializable<T>): T {\n    return serializer.read(this)\n  }\n\n  // Retained in case we prefer to use varints over uleb in future\n  _readVarInt(): number | bigint {\n    const prefix = this.readU8()\n    switch (prefix) {\n      case 255: return this.readU64()\n      case 254: return this.readU32()\n      case 253: return this.readU16()\n      default: return prefix\n    }\n  }\n\n  private pull<T>(bytes: number, cb: (view: DataView, cursor: number) => T): T {\n    const val = cb(this.view, this.cursor)\n    this.cursor += bytes\n    return val\n  }\n}\n", "import { Serializable } from '../internal.js'\nimport { ulebEncode } from './uleb.js'\n\n/**\n * BufWriter init options.\n */\nexport interface BufWriterOpts {\n  size?: number;\n  maxSize?: number;\n}\n\n/**\n * BufWriter sequence callback.\n */\nexport type BufWriterSeqCallback<T> = (writer: BufWriter, el: T, i: number, len: number) => void\n\n/**\n * BufWriter.\n * \n * Class used for writing BCS data chunk by chunk. Normally this is used via\n * the BCS wrapper, but can also be used as a general purpose Buffer writer.\n */\nexport class BufWriter {\n  private cursor: number = 0;\n  private size: number;\n  private chunkSize: number;\n  private maxSize: number;\n  private view: DataView;\n\n  constructor({ size = 1024, maxSize }: BufWriterOpts = {}) {\n    this.size = size\n    this.chunkSize = size\n    this.maxSize = maxSize || size * 64\n    this.view = new DataView(new ArrayBuffer(this.size))\n  }\n\n  get data(): Uint8Array {\n    return this.toBytes()\n  }\n\n  writeBool(val: boolean): BufWriter {\n    return this.writeU8(val ? 1 : 0)\n  }\n\n  writeF32(val: number): BufWriter {\n    return this.push(4, (view, cursor) => view.setFloat32(cursor, val, true))\n  }\n\n  writeF64(val: number): BufWriter {\n    return this.push(8, (view, cursor) => view.setFloat64(cursor, val, true))\n  }\n\n  writeI8(val: number | bigint): BufWriter {\n    return this.push(1, (view, cursor) => view.setInt8(cursor, Number(val)))\n  }\n\n  writeI16(val: number | bigint): BufWriter {\n    return this.push(2, (view, cursor) => view.setInt16(cursor, Number(val), true))\n  }\n\n  writeI32(val: number | bigint): BufWriter {\n    return this.push(4, (view, cursor) => view.setInt32(cursor, Number(val), true))\n  }\n\n  writeI64(val: number | bigint): BufWriter {\n    return this.push(8, (view, cursor) => view.setBigInt64(cursor, BigInt(val), true))\n  }\n\n  writeU8(val: number | bigint): BufWriter {\n    return this.push(1, (view, cursor) => view.setUint8(cursor, Number(val)))\n  }\n\n  writeU16(val: number | bigint): BufWriter {\n    return this.push(2, (view, cursor) => view.setUint16(cursor, Number(val), true))\n  }\n\n  writeU32(val: number | bigint): BufWriter {\n    return this.push(4, (view, cursor) => view.setUint32(cursor, Number(val), true))\n  }\n\n  writeU64(val: number | bigint): BufWriter {\n    return this.push(8, (view, cursor) => view.setBigUint64(cursor, BigInt(val), true))\n  }\n\n  writeULEB(val: number): BufWriter {\n    ulebEncode(val).forEach((el) => this.writeU8(el))\n    return this\n  }\n\n  writeFixedBytes(val: Uint8Array): BufWriter {\n    return this.push(val.length, (view, cursor) => new Uint8Array(view.buffer).set(val, cursor))\n  }\n\n  writeBytes(val: Uint8Array): BufWriter {\n    this.writeULEB(val.length)\n    return this.writeFixedBytes(val)\n  }\n\n  writeFixedSeq<T>(seq: T[], cb: BufWriterSeqCallback<T>): BufWriter {\n    for (let i = 0; i < seq.length; i++) {\n      cb(this, seq[i], i, seq.length)\n    }\n    return this\n  }\n\n  writeSeq<T>(seq: T[], cb: BufWriterSeqCallback<T>): BufWriter {\n    this.writeULEB(seq.length)\n    return this.writeFixedSeq(seq, cb)\n  }\n\n  write<T>(serializer: Serializable<T>, item: T): BufWriter {\n    return serializer.write(this, item)\n  }\n\n  // Retained in case we prefer to use varints over uleb in future\n  _writeVarInt(int: number | bigint): BufWriter {\n    switch (true) {\n      case int >= 0x100000000:\n        this.writeU8(255)\n        this.writeU64(int)\n        break\n      case int >= 0x10000:\n        this.writeU8(254)\n        this.writeU32(int)\n        break\n      case int >= 253:\n        this.writeU8(253)\n        this.writeU16(int)\n        break\n      default:\n        this.writeU8(int)\n    }\n    return this\n  }\n\n  toBytes(): Uint8Array {\n    return new Uint8Array(this.view.buffer.slice(0, this.cursor))\n  }\n\n  private push(bytes: number, cb: (view: DataView, cursor: number) => any): BufWriter {\n    const requiredSize = this.cursor + bytes\n    if (requiredSize > this.size) {\n      this.expand(requiredSize)\n    }\n    cb(this.view, this.cursor)\n    this.cursor += bytes\n    return this\n  }\n\n  private expand(requiredSize: number): void {\n    const chunks = Math.ceil(requiredSize / this.chunkSize)\n    const nextSize = this.size + (chunks * this.chunkSize)\n    if (nextSize > this.maxSize) {\n      throw new Error('BCSWiter: max buffer size overflow')\n    }\n    this.size = nextSize\n    const nextBuffer = new ArrayBuffer(this.size);\n    new Uint8Array(nextBuffer).set(new Uint8Array(this.view.buffer));\n    this.view = new DataView(nextBuffer);\n  }\n}\n", "import { FieldNode, TypeNode } from '../abi/types.js'\n\ninterface AbiSchemeInterface {\n  abi: FieldNode[],\n  abi_class_node: FieldNode[],\n  abi_function_node: FieldNode[],\n  abi_interface_node: FieldNode[],\n  abi_object_node: FieldNode[],\n  abi_proxy_node: FieldNode[],\n  abi_field_node: FieldNode[],\n  abi_method_node: FieldNode[],\n  abi_arg_node: FieldNode[],\n  abi_type_node: FieldNode[],\n  abi_type_id: FieldNode[],\n}\n\n/**\n * It's basically, an ABI of the ABI.\n */\nexport const AbiSchema: AbiSchemeInterface = {\n  abi: [\n    { name: 'version', type: type('u16') },\n    { name: 'exports', type: type('Array', [type('u16')]) },\n    { name: 'imports', type: type('Array', [type('u16')]) },\n    { name: 'defs',    type: type('Array', [type('abi_code_def')]) },\n    { name: 'typeIds', type: type('Array', [type('abi_type_id')]) },\n  ],\n  abi_class_node: [\n    { name: 'name', type: type('string') },\n    { name: 'extends', type: type('string') },\n    { name: 'implements', type: type('Array', [type('string')]) },\n    { name: 'fields', type: type('Array', [type('abi_field_node')]) },\n    { name: 'methods', type: type('Array', [type('abi_method_node')]) },\n  ],\n  abi_function_node: [\n    { name: 'name', type: type('string') },\n    { name: 'args', type: type('Array', [type('abi_arg_node')]) },\n    { name: 'rtype', type: type('abi_type_node') },\n  ],\n  abi_interface_node: [\n    { name: 'name', type: type('string') },\n    { name: 'extends', type: type('Array', [type('string')]) },\n    { name: 'fields', type: type('Array', [type('abi_field_node')]) },\n    { name: 'methods', type: type('Array', [type('abi_function_node')]) },\n  ],\n  abi_object_node: [\n    { name: 'name', type: type('string') },\n    { name: 'fields', type: type('Array', [type('abi_field_node')]) },\n  ],\n  abi_proxy_node: [\n    { name: 'name', type: type('string') },\n    { name: 'pkg', type: type('string') }, \n  ],\n  abi_field_node: [\n    { name: 'name', type: type('string') },\n    { name: 'type', type: type('abi_type_node') },\n  ],\n  abi_method_node: [\n    { name: 'kind', type: type('u8') },\n    { name: 'name', type: type('string') },\n    { name: 'args', type: type('Array', [type('abi_arg_node')]) },\n    { name: 'rtype', type: type('abi_type_node', [], true) },\n  ],\n  abi_arg_node: [\n    { name: 'name', type: type('string') },\n    { name: 'type', type: type('abi_type_node') },\n  ],\n  abi_type_node: [\n    { name: 'name', type: type('string') },\n    { name: 'nullable', type: type('bool') },\n    { name: 'args', type: type('Array', [type('abi_type_node')]) },\n  ],\n  abi_type_id: [\n    { name: 'id', type: type('u32') },\n    { name: 'name', type: type('string') },\n  ],\n}\n\nexport const PkgSchema: TypeNode[] = [\n  type('Array', [type('string')]),\n  type('Map', [type('string'), type('string')]),\n]\n\nfunction type(name: string, args: TypeNode[] = [], nullable: boolean = false): TypeNode {\n  return { name, nullable, args }\n}\n", "import {\n  Abi,\n  CodeDef,\n  CodeKind,\n  FieldNode,\n  FunctionNode,\n  MethodNode,\n  TypeNode,\n} from './abi/types.js'\n\nimport { AbiQuery, isClassLike, isFunctionLike } from './abi/query.js'\nimport { AbiSchema, PkgSchema } from './bcs/schemas.js'\n\nimport {  \n  BufReader,\n  BufWriter,\n  InstructionRef,\n  Pointer,\n  ref,\n} from './internal.js'\n\nimport {strToBytes, bytesToStr, bytesToBn, bnToShortestBytes} from './support/util.js'\n\n/**\n * BCS Encoder interface.\n */\nexport interface BCSEncoder<T> {\n  assert(val: T): void;\n  decode(reader: BufReader, type: TypeNode | TypeNode[]): T;\n  encode(writer: BufWriter, val: T, type: TypeNode | TypeNode[]): void;\n  type: TypeNode | TypeNode[];\n}\n\n/**\n * BCS Encoder initialisation params.\n */\nexport type BCSEncoderInitParams<T> = Partial<BCSEncoder<T>> & Omit<BCSEncoder<T>, 'assert' | 'type'>\n\n/**\n * Options for instantiating an instance of BCS.\n */\nexport interface BCSOpts {\n  addAbiTypes: boolean;\n  addPkgTypes: boolean;\n  addPrimitives: boolean;\n}\n\nexport interface BCSMini<T> {\n  decode(data: Uint8Array): T;\n  encode(val: T): Uint8Array;\n}\n\n/**\n * BCS implementation for Aldea builtins and types as defined in an ABI.\n * \n * ## Usage\n * \n * Instantitate BCS with an ABI document. From then, any Jig or function/method\n * args can be encoded/decoded. Methods can be matched using the `<JIG_NAME>($|_)<METHOD_NAME>`\n * convention, where `$` matches an instance method and `_` matches a static method.\n * ```\n * const bcs = new BCS(abi)\n * \n * // Encoding Jig state\n * const encoded = bcs.encode('MyJig', values)\n * const decoded = bcs.decode('MyJig', encoded)\n * \n * // Encoding method args\n * const encoded = bcs.encode('MyJig$update', args)\n * const decoded = bcs.decode('MyJig$update', encoded)\n * ```\n * \n * Optionally a BCS instance can be instantiated with support for serializing\n * and deserializing ABI documents and Package bundles.\n * \n * ```\n * const bcs = new BCS({ addAbiTypes: true, addPkgTypes: true })\n * const encodedAbi = bcs.encode('abi', abi)\n * const encodedPkg = bcs.encode('pkg', pkg)\n * ```\n */\nexport class BCS {\n  static pkg: BCSMini<[string[], Map<string, string>]> = (() => {\n    const bcs = new BCS({ addPkgTypes: true })\n    return {\n      decode: (data) => bcs.decode('pkg', data),\n      encode: (pkg) => bcs.encode('pkg', pkg),\n    }\n  })()\n\n  private abi?: Abi;\n  private jigNames: string[] = ['Coin', 'Jig'];\n  private typeEncoders = new Map<string, BCSEncoder<any>>();\n\n  constructor(abiOrOpts: Abi | Partial<BCSOpts>, options?: Partial<BCSOpts>) {\n    // Handle overloading\n    if (isAbi(abiOrOpts)) {\n      this.abi = typeof structuredClone === 'function' ?\n        structuredClone(abiOrOpts) :\n        JSON.parse(JSON.stringify(abiOrOpts))\n    } else {\n      options = abiOrOpts\n    }\n\n    // Merge options with defaults\n    const opts: BCSOpts = {\n      addAbiTypes: false,\n      addPkgTypes: false,\n      addPrimitives: true,\n      ...options,\n    }\n\n    if (opts.addPrimitives) { this.registerPrimitiveTypes() }\n    if (opts.addAbiTypes)   { this.registerAbiTypes() }\n    if (opts.addPkgTypes)   { this.registerPkgTypes() }\n\n    this.registerMagicTypes()\n\n    if (this.abi) {\n      for (let code of this.abi.defs) {\n        if (code.kind === CodeKind.OBJECT) {\n          this.registerObjectType(code.name, code.fields)\n        }\n        if (code.kind === CodeKind.CLASS || code.kind === CodeKind.INTERFACE) {\n          this.jigNames.push(code.name)\n        }\n        if (code.kind === CodeKind.PROXY_CLASS) {\n          this.jigNames.push(code.name)\n        }\n      }\n    }\n  }\n\n  /**\n   * Decodes the given data using the specified type encoder.\n   */\n  decode(name: string, data: Uint8Array): any {\n    const reader = new BufReader(data)\n    const encoder = this.typeEncoders.get(name)\n\n    if (encoder) {\n      const res = encoder.decode.call(this, reader, encoder.type!)\n      encoder.assert(res)\n      return res\n    } else {\n      const query = new AbiQuery(this.abi!)\n      const res = query.search(name)\n\n      if (isClassLike(res)) {\n        const types = this.collectJigFieldTypes(query.getFieldsFull())\n        return this.decodeTypes(types, reader)\n      } else if (isFunctionLike(res)) {\n        const idxEnc = this.typeEncoders.get('_RefIndexes') as BCSEncoder<number[]>\n        const idxs: number[] = this.decodeType(idxEnc.type as TypeNode, reader)\n        const types = this.collectMethodArgTypes(res, idxs)\n        return this.decodeTypes(types, reader)\n      } else {\n        throw new Error(`unable to decode for ${name}`)\n      }\n    }\n  }\n\n  /**\n   * Encoders the given value(s) using the specified type encoder.\n   */\n  encode(name: string, val: any, writer = new BufWriter()): Uint8Array {\n    const encoder = this.typeEncoders.get(name)\n\n    if (encoder) {\n      encoder.assert(val)\n      encoder.encode.call(this, writer, val, encoder.type)\n    } else {\n      const query = new AbiQuery(this.abi!)\n      const res = query.search(name)\n\n      if (isClassLike(res)) {\n        const types = this.collectJigFieldTypes(query.getFieldsFull())\n        this.encodeTypes(types, val, writer)\n      } else if (isFunctionLike(res)) {\n        const idxs = refIndexes(val)\n        const types = this.collectMethodArgTypes(res, idxs)\n        const idxEnc = this.typeEncoders.get('_RefIndexes') as BCSEncoder<number[]>\n        this.encodeType(idxEnc.type as TypeNode, idxs, writer)\n        this.encodeTypes(types, val, writer)\n      } else {\n        throw new Error(`unable to encode for ${name}`)\n      }\n    }\n    \n    return writer.toBytes()\n  }\n\n  /**\n   * Returns the registered `BCSEncoder` for the given type name.\n   */\n  getTypeEncoder<T>(name: string): BCSEncoder<T> {\n    const encoder = this.typeEncoders.get(name)\n    if (!encoder) { throw new Error(`no encoder found for: ${name}`) }\n    return encoder\n  }\n\n  /**\n   * Registers the given type encoder.\n   */\n  registerType<T>(name: string, encoder: BCSEncoderInitParams<T>): void {\n    encoder.assert = encoder.assert || (() => {})\n    encoder.type = encoder.type || { name, nullable: false, args: [] }\n    this.typeEncoders.set(name, encoder as BCSEncoder<T>)\n  }\n\n  /**\n   * Registers the given array of FieldNode's as an object type encoder.\n   */\n  registerObjectType(name: string, fields: FieldNode[]): void {\n    const types = fields.map(f => nullableType(f.type))\n    this.registerType<{[name: string]: any}>(name, {\n      assert: (val) => assert(typeof val === 'object', `object expected. recieved: ${val}`),\n      decode: (reader) => {\n        let obj: {[name: string]: any} = {}\n        for (let i = 0; i < fields.length; i++) {\n          const key = fields[i].name\n          obj[key] = this.decodeType(types[i], reader)\n        }\n        return obj\n      },\n      encode: (writer, val) => {\n        for (let i = 0; i < fields.length; i++) {\n          const key = fields[i].name\n          this.encodeType(types[i], val[key], writer)\n        }\n      },\n      type: types\n    })\n  }\n\n  /**\n   * Registers the given array of TypeNode's as a tuple type encoder.\n   * \n   * The work tuple is used here to describe a fixed length list of variable\n   * types. In terms of Aldea, this would apple to function/method arguments.\n   */\n  registerTupleType(name: string, types: TypeNode[]): void {\n    types = types.map(nullableType)\n    this.registerType<any[]>(name, {\n      assert: (val) => assert(Array.isArray(val), `Array expected. recieved: ${val}`),\n      decode: (reader) => {\n        return this.decodeTypes(types, reader)\n      },\n      encode: (writer, val) => {\n        this.encodeTypes(types, val, writer)\n      }\n    })\n  }\n\n  // Decodes the array of types.\n  private decodeTypes(types: TypeNode[], reader: BufReader): any[] {\n    const result = []\n    for (let i = 0; i < types.length; i++) {\n      const val = this.decodeType(types[i], reader)\n      result.push(val)\n    }\n    return result \n  }\n\n  // Decodes the given type.\n  private decodeType(type: TypeNode, reader: BufReader): any {\n    const encoder = this.getTypeEncoder(type.name)\n    const res = encoder.decode.call(this, reader, type)\n    encoder.assert(res)\n    return res\n  }\n\n  // Encodes the array of types and values.\n  private encodeTypes(types: TypeNode[], vals: any[], writer: BufWriter): void {\n    if (types.length !== vals.length) {\n      throw new Error(`expected ${ types.length } values, recieved: ${ vals.length }`)\n    }\n    for (let i = 0; i < types.length; i++) {\n      this.encodeType(types[i], vals[i], writer)\n    }\n  }\n\n  // Encodes the given type and value.\n  private encodeType(type: TypeNode, val: any, writer: BufWriter): void {\n    const encoder = this.getTypeEncoder(type.name)\n    encoder.assert(val)\n    encoder.encode.call(this, writer, val, type)\n  }\n\n  // Collects a list of field types for the given Jig ClassNode.\n  // Iterates over parents to include inherited fields too.\n  private collectJigFieldTypes(fields: FieldNode[]): TypeNode[] {\n    // Recursively replace jig types with pointer types\n    const types = fields.map(f => jigToPointerType(f.type, this.jigNames))\n    return types.map(nullableType)\n  }\n\n\n  // Collects list of type fields for the given MethodNode or FunctionNode.\n  // Wraps each type as a refType which prefixes each value with a boolean to\n  // determine if it is an InstructionRef\n  private collectMethodArgTypes(method: MethodNode | FunctionNode, idxs: number[]): TypeNode[] {\n    const types = method.args.map(a => jigToRefType(a.type, this.jigNames))\n\n    for (let i of idxs) {\n      if (types[i].name === '_Ref') {\n        // If type is already a _Ref, remove index\n        idxs.splice(i, 1)\n      } else {\n        // Otherwise replace the type with a _Ref\n        types[i] = { name: '_Ref', nullable: types[i].nullable, args: [] }\n      }\n    }\n\n    return types.map(nullableType)\n  }\n\n  // Registers the Aldea primitive types.\n  private registerPrimitiveTypes(): void {\n    this.registerType<boolean>('bool', {\n      assert: (val) => assert(typeof val === 'boolean', `boolean expected. recieved: ${val}`),\n      decode: (reader) => reader.readBool(),\n      encode: (writer, val) => writer.writeBool(val),\n    })\n\n    this.registerType<number>('f32', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readF32(),\n      encode: (writer, val) => writer.writeF32(val),\n    })\n\n    this.registerType<number>('f64', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readF64(),\n      encode: (writer, val) => writer.writeF64(val),\n    })\n\n    this.registerType<number | bigint>('i8', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readI8(),\n      encode: (writer, val) => writer.writeI8(val),\n    })\n\n    this.registerType<number | bigint>('i16', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readI16(),\n      encode: (writer, val) => writer.writeI16(val),\n    })\n\n    this.registerType<number | bigint>('i32', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readI32(),\n      encode: (writer, val) => writer.writeI32(val),\n    })\n\n    this.registerType<number | bigint>('i64', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readI64(),\n      encode: (writer, val) => writer.writeI64(val),\n    })\n\n    this.registerType<number | bigint>('u8', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readU8(),\n      encode: (writer, val) => writer.writeU8(val),\n    })\n\n    this.registerType<number | bigint>('u16', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readU16(),\n      encode: (writer, val) => writer.writeU16(val),\n    })\n\n    this.registerType<number | bigint>('u32', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readU32(),\n      encode: (writer, val) => writer.writeU32(val),\n    })\n\n    this.registerType<number | bigint>('u64', {\n      assert: (val) => assert(isNumber(val), `number expected. recieved: ${val}`),\n      decode: (reader) => reader.readU64(),\n      encode: (writer, val) => writer.writeU64(val),\n    })\n\n    this.registerType<bigint>('BigInt', {\n      assert: (val) => assert(typeof val === 'bigint', `bigint expected. recieved: ${val}`),\n      decode: (reader) => {\n        const isNeg = reader.readBool()\n        const bytes = reader.readBytes()\n        const bigInt = bytesToBn(bytes)\n        return isNeg ? bigInt * -1n : bigInt\n      },\n      encode: (writer, val) => {\n        const isNeg = val < 0n;\n        const buf = bnToShortestBytes(val)\n        writer.writeBool(isNeg)\n        writer.writeBytes(buf)\n      },\n    })\n\n    this.registerType<string>('string', {\n      assert: (val) => assert(typeof val === 'string', `string expected. recieved: ${val}`),\n      decode: (reader) => bytesToStr(reader.readBytes()),\n      encode: (writer, val) => writer.writeBytes(strToBytes(val)),\n    })\n\n    this.registerType<ArrayBuffer>('ArrayBuffer', {\n      assert: (val) => assert(val.constructor.name === 'ArrayBuffer', `ArrayBuffer expected. recieved: ${val}`),\n      decode(reader) {\n        const bytes = reader.readSeq(reader => reader.readU8())\n        return Uint8Array.from(bytes).buffer\n      },\n      encode(writer, val) {\n        const bytes = new Uint8Array(val)\n        writer.writeSeq([...bytes], (writer, byte) => { writer.writeU8(byte) })\n      }\n    })\n\n    this.registerType<Array<any>>('Array', {\n      assert: (val) => assert(Array.isArray(val), `Array expected. recieved: ${val}`),\n      decode: (reader, type) => {\n        assertTypeNode(type, 1)\n        return reader.readSeq(reader => this.decodeType(type.args[0], reader))\n      },\n      encode: (writer, val, type) => {\n        assertTypeNode(type, 1)\n        writer.writeSeq(val, (writer, el) => {\n          this.encodeType(type.args[0], el, writer)\n        })\n      }\n    })\n\n    this.registerType<Array<any>>('StaticArray', {\n      assert: (val) => assert(Array.isArray(val), `Array expected. recieved: ${val}`),\n      decode: (reader, type) => {\n        assertTypeNode(type, 1)\n        return reader.readSeq(reader => this.decodeType(type.args[0], reader))\n      },\n      encode: (writer, val, type) => {\n        assertTypeNode(type, 1)\n        writer.writeSeq(val, (writer, el) => {\n          this.encodeType(type.args[0], el, writer)\n        })\n      }\n    })\n\n    this.registerType<Set<any>>('Set', {\n      assert: (val) => assert(val.constructor.name === 'Set', `Set expected. recieved: ${val}`),\n      decode: (reader, type) => {\n        assertTypeNode(type, 1)\n        const set = new Set()\n        reader.readSeq(reader => {\n          set.add(this.decodeType(type.args[0], reader))\n        })\n        return set\n      },\n      encode: (writer, val, type) => {\n        assertTypeNode(type, 1)\n        writer.writeSeq([...val], (writer, el) => {\n          this.encodeType(type.args[0], el, writer)\n        })\n      }\n    })\n\n    this.registerType<Map<any, any>>('Map', {\n      assert: (val) => assert(val.constructor.name === 'Map', `Map expected. recieved: ${val}`),\n      decode: (reader, type) => {\n        assertTypeNode(type, 2)\n        const map = new Map()\n        reader.readSeq(reader => {\n          map.set(\n            this.decodeType(type.args[0], reader),\n            this.decodeType(type.args[1], reader),\n          )\n        })\n        return map\n      },\n      encode: (writer, val, type) => {\n        assertTypeNode(type, 2)\n        const canonicalKeys = [...val.keys()].sort()\n        writer.writeSeq(canonicalKeys, (writer, key) => {\n          this.encodeType(type.args[0], key, writer)\n          this.encodeType(type.args[1], val.get(key), writer)\n        })\n      }\n    })\n\n    this.registerType<Pointer>('Pointer', {\n      assert: (val) => {\n        const bool = typeof val === 'object' && val.idBuf?.length === 32\n        return assert(bool, `Pointer expected. recieved: ${val}`)\n      },\n      decode: (reader) => {\n        const bytes = reader.readFixedSeq(34, reader => reader.readU8())\n        return Pointer.fromBytes(Uint8Array.from(bytes))\n      },\n      encode: (writer, val) => {\n        writer.writeFixedSeq([...val.toBytes()], (writer, byte) => writer.writeU8(byte))\n      }\n    })\n\n    this.registerType<BigInt64Array>('Int64Array', createTypedArrayEncoder(BigInt64Array))\n    this.registerType<BigUint64Array>('Uint64Array', createTypedArrayEncoder(BigUint64Array))\n    this.registerType<Float32Array>('Float32Array', createTypedArrayEncoder(Float32Array))\n    this.registerType<Float64Array>('Float64Array', createTypedArrayEncoder(Float64Array))\n    this.registerType<Int8Array>('Int8Array', createTypedArrayEncoder(Int8Array))\n    this.registerType<Int16Array>('Int16Array', createTypedArrayEncoder(Int16Array))\n    this.registerType<Int32Array>('Int32Array', createTypedArrayEncoder(Int32Array))\n    this.registerType<Uint8Array>('Uint8Array', createTypedArrayEncoder(Uint8Array))\n    this.registerType<Uint16Array>('Uint16Array', createTypedArrayEncoder(Uint16Array))\n    this.registerType<Uint32Array>('Uint32Array', createTypedArrayEncoder(Uint32Array))\n  }\n\n  // Registers Aldea types\n  private registerMagicTypes(): void {\n    this.registerType<any>('_Option', {\n      decode: (reader, type) => {\n        assertTypeNode(type, 1)\n        return reader.readBool() ? this.decodeType(type.args[0], reader) : null\n      },\n      encode: (writer, val, type) => {\n        assertTypeNode(type, 1)\n        writer.writeBool(!!val)\n        if (!!val) this.encodeType(type.args[0], val, writer)\n      }\n    })\n\n    this.registerType<InstructionRef>('_Ref', {\n      assert: (val) => assert(isRef(val), `InstructionRef expected. recieved: ${val}`),\n      decode: (reader) => ref(reader.readU16()),\n      encode: (writer, val) => writer.writeU16(val.idx),\n    })\n\n    this.registerType<number[]>('_RefIndexes', {\n      decode: (reader) => {\n        return reader.readSeq(reader => reader.readU8())\n      },\n      encode: (writer, val) => {\n        writer.writeSeq(val, (writer, v) => writer.writeU8(v))\n      }\n    })\n  }\n\n  // Registers types for an ABI (an ABI of the ABI)\n  private registerAbiTypes(): void {\n    for (let [name, fields] of Object.entries(AbiSchema)) {\n      this.registerObjectType(name, fields)\n    }\n    this.registerType<CodeDef>('abi_code_def', {\n      assert: (val) => typeof val === 'object',\n      decode: (reader) => {\n        const kind = reader.readU8()\n        const name = getCodeKindNodeName(kind)\n        const encoder = this.getTypeEncoder(name)\n        const code: any = encoder.decode.call(this, reader, encoder.type)\n        encoder.assert(code)\n        return { kind, ...code } as CodeDef\n      },\n      encode: (writer, val) => {\n        writer.writeU8(val.kind)\n        const name = getCodeKindNodeName(val.kind)\n        const encoder = this.getTypeEncoder(name)\n        encoder.assert(val)\n        encoder.encode.call(this, writer, val, encoder.type)\n      },\n    })\n  }\n\n  // Registers types for a code package.\n  private registerPkgTypes(): void {\n    this.registerTupleType('pkg', PkgSchema)\n  }\n}\n\n// Asserts the given bool is true.\nfunction assert(bool: boolean, msg: string = 'invalid type for encoder'): asserts bool is true {\n  if (!bool) throw new Error(msg)\n}\n\n// Asserts the given TypeNode is not an array of TypeNodes.\n// Optionally can be given a number to assert the length of type arguments.\nfunction assertTypeNode(type: TypeNode | TypeNode[], n?: number): asserts type is TypeNode {\n if (Array.isArray(type)) {\n   throw new Error('expected TypeNode')\n }\n const args = type?.args || []\n if (typeof n === 'number' && args.length !== n) {\n   throw new Error(`expected ${n} type arguments, recieved: ${args.length}`)\n }\n}\n\n// Helper function to create an encoder for the given TypedArray class.\nfunction createTypedArrayEncoder<T>(TypedArray: { new(buf: ArrayBuffer): T }): BCSEncoderInitParams<T> {\n return {\n  assert: (val) => assert(val instanceof TypedArray, `TypedArray expected. recieved: ${val}`),\n   decode: (reader) => {\n     const bytes = Uint8Array.from(reader.readSeq(reader => reader.readU8()))\n     return new TypedArray(bytes.buffer)\n   },\n   encode(writer, val) {\n     const abv = val as ArrayBufferView\n     const bytes = new Uint8Array(abv.buffer, abv.byteOffset, abv.byteLength)\n     writer.writeSeq([...bytes], (writer, byte) => writer.writeU8(byte))\n   }\n }\n}\n\n// Returns type name for the given code kind.\nfunction getCodeKindNodeName(kind: CodeKind): string {\n  switch (kind) {\n    case CodeKind.CLASS:      return 'abi_class_node'\n    case CodeKind.FUNCTION:   return 'abi_function_node'\n    case CodeKind.INTERFACE:  return 'abi_interface_node'\n    case CodeKind.OBJECT:     return 'abi_object_node'\n    case CodeKind.PROXY_CLASS:\n    case CodeKind.PROXY_FUNCTION:\n    case CodeKind.PROXY_INTERFACE:\n      return 'abi_proxy_node'\n    default: throw new Error(`invalid ABI code kind: ${kind}`)\n  }\n}\n\n// Returns true if the given value is an ABI object.\nfunction isAbi(obj: any): obj is Abi {\n  return typeof obj === 'object' &&\n    ['version', 'exports', 'imports', 'defs', 'typeIds'].every(k => k in obj) \n}\n\n// Returns true if the given val is a number or bigint.\nfunction isNumber(val: number | bigint): val is number | bigint {\n  return typeof val === 'number' || typeof val === 'bigint'\n}\n \n// Returns true if the given val is an InstructionRef instance.\nfunction isRef(val: any): val is InstructionRef {\n  return val && typeof val === 'object' && isNumber(val.idx) && val[Symbol.toStringTag] === 'InstructionRef'\n}\n\n// If the type is a jig, replace with `Pointer` type node.\nfunction jigToPointerType(type: TypeNode, jigNames: string[]): TypeNode {\n  if (jigNames.includes(type.name)) {\n    return { name: 'Pointer', nullable: type.nullable, args: [] }\n  } else {\n    const copy = { ...type }\n    copy.args = type.args.map(t => jigToPointerType(t, jigNames))\n    return copy\n  }\n}\n\n// If the type is a jig, replace with `_Ref` type node\nfunction jigToRefType(type: TypeNode, jigNames: string[]): TypeNode {\n  if (jigNames.includes(type.name)) {\n    return { name: '_Ref', nullable: type.nullable, args: [] }\n  } else {\n    const copy = { ...type }\n    copy.args = type.args.map(t => jigToRefType(t, jigNames))\n    return copy\n  }\n}\n\n// Wraps the given type in an `_Option` if it is nullable.\nfunction nullableType(type: TypeNode): TypeNode {\n if (type.nullable) {\n   const copy = { ...type, nullable: false }\n   return { name: '_Option', nullable: false, args: [copy]}\n } else {\n   return type\n } \n}\n\n// Returns a list of indexes of InstructionRef instances in the give list of args.\nfunction refIndexes(args: any[]): number[] {\n  return args.reduce((idxs, arg, i) => {\n    if (isRef(arg)) { idxs.push(i) }\n    return idxs\n  }, [])\n}\n", "import {\n  ClassNode,\n  FieldNode,\n  FunctionNode,\n  InterfaceNode,\n  MethodKind,\n  MethodNode,\n  ObjectNode,\n  TypeNode,\n} from './types.js'\n\nexport * from './query.js'\nexport * from './types.js'\nexport * from './validations.js'\n\n/**\n * Normalizes an ABI node name. Can optionally be passed it's parent ClassNode.\n */\nexport function normalizeNodeName(\n  node: ClassNode | FunctionNode | InterfaceNode | FieldNode | MethodNode,\n  parent?: ClassNode | InterfaceNode | ObjectNode,\n): string {\n  if (parent && parent.fields.includes(node as FieldNode)) {\n    return `${parent.name}.${node.name}`\n  } else if (parent && (<ClassNode | InterfaceNode>parent).methods.includes(node as MethodNode & FunctionNode)) {\n    return `${parent.name}_${node.name}`\n  } else {\n    return node.name\n  }\n}\n\n/**\n * Normalizes a types name by concatenating type args (generics)\n * \n * Example: `Map<u32,string>`\n */\nexport function normalizeTypeName(type: TypeNode | null): string {\n  if (!type) return ''\n  const args = type.args.length ? `<${ type.args.map(normalizeTypeName).join(',') }>` : ''\n  const nullable = type.nullable ? ' | null' : ''\n  return type.name + args + nullable\n}\n"],
  "mappings": "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",
  "names": ["CodeKind", "MethodKind", "base16", "base64", "bech32m", "hash", "CURVE", "etc", "etc", "CURVE", "PREFIX", "HARDENED_OFFSET", "PREFIX", "toIndex", "LockType", "type", "props", "PREFIX", "PREFIX", "CURVE", "CURVE", "sign", "OpCode", "Instruction", "CallInstruction", "DeployInstruction", "ExecInstruction", "FundInstruction", "ImportInstruction", "LoadByOriginInstruction", "LoadInstruction", "LockInstruction", "NewInstruction", "ImportInstruction", "Instruction", "LoadInstruction", "Instruction", "LoadByOriginInstruction", "Instruction", "NewInstruction", "Instruction", "CallInstruction", "Instruction", "ExecInstruction", "Instruction", "FundInstruction", "Instruction", "LockInstruction", "Instruction", "DeployInstruction", "Instruction", "Instruction", "Instruction", "Instruction", "type", "reader", "writer", "type"]
}
