movement-sdk
Version:
Movement SDK
118 lines (109 loc) • 3.2 kB
text/typescript
// https://github.com/move-language/move/blob/main/language/documentation/spec/vm.md#signaturetokens
import fs from "fs";
import {logger} from "./logger";
import {exec} from "child_process";
import path from "path";
const SignatureTokens = {
"01": "BOOL",
"02": "U8",
"03": "U64",
"04": "U128",
"05": "ADDRESS",
"06": "REFERENCE",
"07": "MUTABLE_REFERENCE",
"08": "STRUCT",
"09": "TYPE_PARAMETER",
"0a": "VECTOR",
"0b": "STRUCT_INST",
"0c": "SIGNER",
"0d": "U16",
"0e": "U32",
"0f": "U256"
}
// https://github.com/move-language/move/blob/main/language/documentation/spec/vm.md#bytecodes
// @typescript-eslint/no-unused-vars
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const ByteCodes = {
"0x01": "POP",
"0x02": "RET",
"0x03": "BR_TRUE(offset)",
"0x04": "BR_FALSE(offset)",
"0x05": "BRANCH(offset)",
"0x06": "LD_U64(value)",
"0x07": "LD_CONST(index)",
"0x08": "LD_TRUE",
"0x09": "LD_FALSE",
"0x0a": "COPY_LOC(index)",
"0x0b": "MOVE_LOC(index)",
"0x0c": "ST_LOC(index)",
"0x0d": "MUT_BORROW_LOC(index)",
"0x0e": "IMM_BORROW_LOC(index)",
"0x0f": "MUT_BORROW_FIELD(index)",
"0x10": "IMM_BORROW_FIELD(index)",
"0x11": "CALL(index)",
"0x12": "PACK(index)",
"0x13": "UNPACK(index)",
"0x14": "READ_REF",
"0x15": "WRITE_REF",
"0x16": "ADD",
"0x17": "SUB",
"0x18": "MUL",
"0x19": "MOD",
"0x1a": "DIV",
"0x1b": "BIT_OR",
"0x1c": "BIT_AND",
"0x1d": "XOR",
"0x1e": "OR",
"0x1f": "AND",
"0x20": "NOT",
"0x21": "EQ",
"0x22": "NEQ",
"0x23": "LT",
"0x24": "GT",
"0x25": "LE",
"0x26": "GE",
"0x27": "ABORT",
"0x28": "NOP",
"0x29": "EXISTS(index)",
"0x2a": "MUT_BORROW_GLOBAL(index)",
"0x2b": "IMM_BORROW_GLOBAL(index)",
"0x2c": "MOVE_FROM(index)",
"0x2d": "MOVE_TO(index)",
"0x2e": "FREEZE_REF",
"0x2f": "SHL",
"0x30": "SHR",
"0x31": "LD_U8(value)",
"0x32": "LD_U128(value)",
"0x33": "CAST_U8",
"0x34": "CAST_U64",
"0x35": "CAST_U128",
"0x36": "MUT_BORROW_FIELD_GENERIC(index)",
"0x37": "IMM_BORROW_FIELD_GENERIC(index)",
"0x38": "CALL_GENERIC(index)",
"0x39": "PACK_GENERIC(index)",
"0x3a": "UNPACK_GENERIC(index)",
"0x3b": "EXISTS_GENERIC(index)",
"0x3c": "MUT_BORROW_GLOBAL_GENERIC(index)",
"0x3d": "IMM_BORROW_GLOBAL_GENERIC(index)",
"0x3e": "MOVE_FROM_GENERIC(index)",
"0x3f": "MOVE_TO_GENERIC(index)"
}
const cmd = path.resolve(__dirname, "../static", "bin", "metabcs");
export class ParseMV {
private code: string;
constructor(code_path: string) {
this.code = fs.readFileSync(code_path).toString("hex");
}
async parse() {
logger.info("movement parse move bytecodes start ");
return new Promise((resolve, reject) => {
exec(`${cmd} disassemble ${this.code}`, (err, res) => {
if (err) {
logger.error("movement parse move bytecodes failed");
reject(new Error("arse move bytecodes failed"))
}
resolve(res)
});
})
}
}