UNPKG

movement-sdk

Version:
118 lines (109 loc) 3.2 kB
// 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) }); }) } }