@yubing744/rooch-sdk
Version:
93 lines (92 loc) • 2.98 kB
JavaScript
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