{"version":3,"sources":["../../src/utils/bytes32.ts"],"sourcesContent":["import { bytesToString, Hex, toBytes, toHex } from 'viem';\nimport {\n  Bytes,\n  Subaccount,\n  SubaccountBytes32,\n  SubaccountNameBytes12,\n} from '../common';\n\n/**\n * Converts a subaccount object (owner + name) to its bytes32 representation.\n * @param subaccount subaccount object (owner + name)\n * @returns bytes32 representation of a subaccount\n */\nexport function subaccountToBytes32(subaccount: Subaccount): SubaccountBytes32 {\n  const address = toBytes(subaccount.subaccountOwner);\n\n  if (address.length != 20) {\n    throw new Error(`owner must be 20 bytes, but found ${address.length}`);\n  }\n\n  const nameBytes = subaccountNameToBytes12(subaccount.subaccountName);\n\n  const bytes32 = new Uint8Array(32);\n  for (let i = 0; i < address.length; i++) {\n    bytes32[i] = address[i];\n  }\n  for (let i = 0; i < nameBytes.length; i++) {\n    bytes32[i + 20] = nameBytes[i];\n  }\n\n  return bytes32;\n}\n\n/**\n * Given a bytes32 representation of a subaccount, returns a subaccount object (owner + name)\n * @param bytes bytes32 representaion of a subaccount where bytes[0:20]=owner & bytes[20:32]=subaccountName\n * @returns subaccount object (owner + name)\n */\nexport function subaccountFromBytes32(bytes: SubaccountBytes32): Subaccount {\n  if (bytes.length != 32) {\n    throw new Error('input must be 32 bytes');\n  }\n\n  const address = new Uint8Array(20);\n  const name = new Uint8Array(12);\n\n  for (let i = 0; i < bytes.length; i++) {\n    if (i < 20) {\n      address[i] = bytes[i];\n    } else {\n      name[i - 20] = bytes[i];\n    }\n  }\n\n  return {\n    subaccountOwner: toHex(address),\n    subaccountName: subaccountNameBytesToStr(name),\n  };\n}\n\n/**\n * When interacting with the contracts (e.g: deposit collateral);\n * subaccount name is represented as bytes12.\n * This util converts a subaccount name to it's bytes12 representation.\n * @param name subaccount name\n * @returns bytes12 representation of a subaccount name.\n */\nexport function subaccountNameToBytes12(name: string): SubaccountNameBytes12 {\n  return toBytes(name, {\n    size: 12,\n  });\n}\n\n/**\n * When interacting with the engine, we need to send a hex string representation\n * of the bytes32 of a subaccount for serialization reasons. This util\n * converts a subaccount object (owner + name) to such hex representation.\n * @param subaccount subaccount object (owner + name)\n * @returns hex string representation of a subaccount\n */\nexport function subaccountToHex(subaccount: Subaccount): Hex {\n  return toHex(subaccountToBytes32(subaccount));\n}\n\n/**\n * Converts a hex string representation of a bytes32 subaccount to a subaccount object (owner + name)\n * @param subaccount hex string representation of a bytes32 subaccount.\n * @returns subaccount object (owner + name)\n */\nexport function subaccountFromHex(subaccount: string): Subaccount {\n  return subaccountFromBytes32(toBytes(subaccount));\n}\n\n/**\n * Converts Bytes to a string. If the bytes represent a valid UTF-8 string, then a string is returned, if not,\n * then the hex representation is returned.\n *\n * @param input\n */\nexport function subaccountNameBytesToStr(input: Bytes): string {\n  // bytesToString will replace zero bytes with \\0\n  // strip out any trailing bytes for a readable name\n  // however, we need to leave any leading bytes otherwise reverse conversion to bytes will not work\n  const toStringResult = bytesToString(input).replace(/\\0*$/, '');\n  // bytesToString will replace invalid byte sequences with �, so default to converting to hex string if � is present\n  if (toStringResult.includes('�')) {\n    return toHex(input);\n  }\n  return toStringResult;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmD;AAa5C,SAAS,oBAAoB,YAA2C;AAC7E,QAAM,cAAU,qBAAQ,WAAW,eAAe;AAElD,MAAI,QAAQ,UAAU,IAAI;AACxB,UAAM,IAAI,MAAM,qCAAqC,QAAQ,MAAM,EAAE;AAAA,EACvE;AAEA,QAAM,YAAY,wBAAwB,WAAW,cAAc;AAEnE,QAAM,UAAU,IAAI,WAAW,EAAE;AACjC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAQ,CAAC,IAAI,QAAQ,CAAC;AAAA,EACxB;AACA,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,YAAQ,IAAI,EAAE,IAAI,UAAU,CAAC;AAAA,EAC/B;AAEA,SAAO;AACT;AAOO,SAAS,sBAAsB,OAAsC;AAC1E,MAAI,MAAM,UAAU,IAAI;AACtB,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,UAAU,IAAI,WAAW,EAAE;AACjC,QAAM,OAAO,IAAI,WAAW,EAAE;AAE9B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,IAAI,IAAI;AACV,cAAQ,CAAC,IAAI,MAAM,CAAC;AAAA,IACtB,OAAO;AACL,WAAK,IAAI,EAAE,IAAI,MAAM,CAAC;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,qBAAiB,mBAAM,OAAO;AAAA,IAC9B,gBAAgB,yBAAyB,IAAI;AAAA,EAC/C;AACF;AASO,SAAS,wBAAwB,MAAqC;AAC3E,aAAO,qBAAQ,MAAM;AAAA,IACnB,MAAM;AAAA,EACR,CAAC;AACH;AASO,SAAS,gBAAgB,YAA6B;AAC3D,aAAO,mBAAM,oBAAoB,UAAU,CAAC;AAC9C;AAOO,SAAS,kBAAkB,YAAgC;AAChE,SAAO,0BAAsB,qBAAQ,UAAU,CAAC;AAClD;AAQO,SAAS,yBAAyB,OAAsB;AAI7D,QAAM,qBAAiB,2BAAc,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAE9D,MAAI,eAAe,SAAS,QAAG,GAAG;AAChC,eAAO,mBAAM,KAAK;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}