UNPKG

aptos

Version:
68 lines (56 loc) 3.76 kB
// Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 import { HexString } from "../../utils"; import { Deserializer, Serializer } from "../../bcs"; import { ScriptABI, EntryFunctionABI, TransactionScriptABI, ArgumentABI } from "../../aptos_types/abi"; import { TypeTagAddress, TypeTagU64 } from "../../aptos_types"; import { ModuleId } from "../../aptos_types"; // eslint-disable-next-line operator-linebreak const SCRIPT_FUNCTION_ABI = // eslint-disable-next-line max-len "010E6372656174655F6163636F756E740000000000000000000000000000000000000000000000000000000000000001074163636F756E7420204261736963206163636F756E74206372656174696F6E206D6574686F64732E000108617574685F6B657904"; // eslint-disable-next-line operator-linebreak const TRANSACTION_SCRIPT_ABI = // eslint-disable-next-line max-len "00046D61696E0F20412074657374207363726970742E8B01A11CEB0B050000000501000403040A050E0B071924083D200000000101020301000003010400020C0301050001060C0101074163636F756E74065369676E65720A616464726573735F6F66096578697374735F617400000000000000000000000000000000000000000000000000000000000000010000010A0E0011000C020B021101030705090B0127020001016902"; describe("ABI", () => { it("parses create_account successfully", async () => { const name = "create_account"; const doc = " Basic account creation methods."; const typeArgABIs = [new ArgumentABI("auth_key", new TypeTagAddress())]; const abi = new EntryFunctionABI(name, ModuleId.fromStr("0x1::Account"), doc, [], typeArgABIs); const serializer = new Serializer(); abi.serialize(serializer); expect(HexString.fromUint8Array(serializer.getBytes()).noPrefix()).toBe(SCRIPT_FUNCTION_ABI.toLowerCase()); const deserializer = new Deserializer(new HexString(SCRIPT_FUNCTION_ABI).toUint8Array()); const entryFunctionABI = ScriptABI.deserialize(deserializer) as EntryFunctionABI; const { address: moduleAddress, name: moduleName } = entryFunctionABI.module_name; expect(entryFunctionABI.name).toBe("create_account"); expect(HexString.fromUint8Array(moduleAddress.address).toShortString()).toBe("0x1"); expect(moduleName.value).toBe("Account"); expect(entryFunctionABI.doc.trim()).toBe("Basic account creation methods."); const arg = entryFunctionABI.args[0]; expect(arg.name).toBe("auth_key"); expect(arg.type_tag instanceof TypeTagAddress).toBeTruthy(); }); it("parses script abi successfully", async () => { const name = "main"; // eslint-disable-next-line max-len const code = "0xa11ceb0b050000000501000403040a050e0b071924083d200000000101020301000003010400020c0301050001060c0101074163636f756e74065369676e65720a616464726573735f6f66096578697374735f617400000000000000000000000000000000000000000000000000000000000000010000010a0e0011000c020b021101030705090b012702"; const doc = " A test script."; const typeArgABIs = [new ArgumentABI("i", new TypeTagU64())]; const abi = new TransactionScriptABI(name, doc, HexString.ensure(code).toUint8Array(), [], typeArgABIs); const serializer = new Serializer(); abi.serialize(serializer); expect(HexString.fromUint8Array(serializer.getBytes()).noPrefix()).toBe(TRANSACTION_SCRIPT_ABI.toLowerCase()); const deserializer = new Deserializer(new HexString(TRANSACTION_SCRIPT_ABI).toUint8Array()); const transactionScriptABI = ScriptABI.deserialize(deserializer) as TransactionScriptABI; expect(transactionScriptABI.name).toBe("main"); expect(transactionScriptABI.doc.trim()).toBe("A test script."); expect(HexString.fromUint8Array(transactionScriptABI.code).hex()).toBe(code); const arg = transactionScriptABI.args[0]; expect(arg.name).toBe("i"); expect(arg.type_tag instanceof TypeTagU64).toBeTruthy(); }); });