UNPKG

@yubing744/rooch-sdk

Version:
93 lines (92 loc) 2.98 kB
import { hexlify } from "@ethersproject/bytes"; import { sha3_256 } from "@noble/hashes/sha3"; import { ROOCH_ADDRESS_LENGTH } from "../constants"; function functionIdToStirng(functionId) { if (typeof functionId !== "string") { if (functionId instanceof Object) { return `${functionId.address}::${functionId.module}::${functionId.functionName}`; } } return functionId; } function parseFunctionId(functionId) { if (typeof functionId !== "string") { return functionId; } const parts = functionId.split("::", 3); if (parts.length !== 3) { throw new Error(`cannot parse ${functionId} into FunctionId`); } return { address: normalizeRoochAddress(parts[0]), module: parts[1], functionName: parts[2] }; } function normalizeRoochAddress(value, forceAdd0x = false) { let address = value.toLowerCase(); if (!forceAdd0x && address.startsWith("0x")) { address = address.slice(2); } return `0x${address.padStart(ROOCH_ADDRESS_LENGTH, "0")}`; } function canonicalRoochAddress(value, forceAdd0x = false) { let address = value.toLowerCase(); if (!forceAdd0x && address.startsWith("0x")) { address = address.slice(2); } return `${address.padStart(ROOCH_ADDRESS_LENGTH, "0")}`; } function typeTagToString(type_tag) { if (typeof type_tag === "string") { return type_tag; } if ("Vector" in type_tag) { return `Vector<${typeTagToString(type_tag.Vector)}>`; } if ("Struct" in type_tag) { const struct = type_tag.Struct; let result = `${struct.address}::${struct.module}::${struct.name}`; if (struct.type_params) { const params = struct.type_params.map(typeTagToString).join(", "); result += `<${params}>`; } return result; } throw new Error(`Unknown type tag: ${JSON.stringify(type_tag)}`); } function structTagToCanonicalString(structTag) { let result = `${canonicalRoochAddress(structTag.address)}::${structTag.module}::${structTag.name}`; if (structTag.type_params && structTag.type_params.length > 0) { const typeParams = structTag.type_params.map(typeTagToCanonicalString).join(","); result += `<${typeParams}>`; } return result; } function typeTagToCanonicalString(typeTag) { if (typeof typeTag === "string") { return typeTag.toLocaleLowerCase(); } else if ("Vector" in typeTag) { return `vector<${typeTagToCanonicalString(typeTag.Vector)}>`; } else if ("Struct" in typeTag) { return structTagToCanonicalString(typeTag.Struct); } else { throw new Error(`Unknown TypeTag: ${JSON.stringify(typeTag)}`); } } function structTagToObjectID(structTag) { const canonicalString = structTagToCanonicalString(structTag); const hash = sha3_256(canonicalString); return hexlify(hash); } export { canonicalRoochAddress, functionIdToStirng, normalizeRoochAddress, parseFunctionId, structTagToCanonicalString, structTagToObjectID, typeTagToCanonicalString, typeTagToString }; //# sourceMappingURL=encode.js.map