diff --git a/src/abi/interaction.local.net.spec.ts b/src/abi/interaction.local.net.spec.ts index bd805c004..f5c8f8066 100644 --- a/src/abi/interaction.local.net.spec.ts +++ b/src/abi/interaction.local.net.spec.ts @@ -27,14 +27,14 @@ describe("test smart contract interactor", function () { it("should interact with 'answer' (local testnet) using the SmartContractTransactionsFactory", async function () { this.timeout(80000); - let abiRegistry = await loadAbiRegistry("src/testdata/answer.abi.json"); + let abi = await loadAbiRegistry("src/testdata/answer.abi.json"); let network = await provider.getNetworkConfig(); const config = new TransactionsFactoryConfig({ chainID: network.chainID }); const factory = new SmartContractTransactionsFactory({ config: config, - abi: abiRegistry, + abi: abi, }); const bytecode = await promises.readFile("src/testdata/answer.wasm"); @@ -62,7 +62,7 @@ describe("test smart contract interactor", function () { const queryController = new SmartContractController({ chainID: "localnet", networkProvider: provider, - abi: abiRegistry, + abi: abi, }); let transactionOnNetwork = await transactionCompletionAwaiter.awaitCompleted(deployTxHash); let response = queryController.parseDeploy(transactionOnNetwork); @@ -112,12 +112,12 @@ describe("test smart contract interactor", function () { it("should interact with 'basic-features' (local testnet)", async function () { this.timeout(140000); - let abiRegistry = await loadAbiRegistry("src/testdata/basic-features.abi.json"); - let contract = new SmartContract({ abi: abiRegistry }); + let abi = await loadAbiRegistry("src/testdata/basic-features.abi.json"); + let contract = new SmartContract({ abi: abi }); let controller = new SmartContractController({ chainID: "localnet", networkProvider: provider, - abi: abiRegistry, + abi: abi, }); let network = await provider.getNetworkConfig(); @@ -251,16 +251,16 @@ describe("test smart contract interactor", function () { it("should interact with 'counter' (local testnet) using the SmartContractTransactionsFactory", async function () { this.timeout(120000); - let abiRegistry = await loadAbiRegistry("src/testdata/counter.abi.json"); + let abi = await loadAbiRegistry("src/testdata/counter.abi.json"); let network = await provider.getNetworkConfig(); const config = new TransactionsFactoryConfig({ chainID: network.chainID }); const factory = new SmartContractTransactionsFactory({ config: config, - abi: abiRegistry, + abi: abi, }); - const parser = new SmartContractTransactionsOutcomeParser({ abi: abiRegistry }); + const parser = new SmartContractTransactionsOutcomeParser({ abi: abi }); const bytecode = await promises.readFile("src/testdata/counter.wasm"); alice.nonce = (await provider.getAccount(alice.address)).nonce; @@ -290,7 +290,7 @@ describe("test smart contract interactor", function () { const queryController = new SmartContractController({ chainID: "localnet", networkProvider: provider, - abi: abiRegistry, + abi: abi, }); let incrementTransaction = factory.createTransactionForExecute(alice.address, { @@ -339,8 +339,8 @@ describe("test smart contract interactor", function () { it("should interact with 'lottery-esdt' (local testnet) using the SmartContractTransactionsFactory", async function () { this.timeout(140000); - let abiRegistry = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); - let parser = new SmartContractTransactionsOutcomeParser({ abi: abiRegistry }); + let abi = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); + let parser = new SmartContractTransactionsOutcomeParser({ abi: abi }); alice.nonce = (await provider.getAccount(alice.address)).nonce; let network = await provider.getNetworkConfig(); @@ -348,7 +348,7 @@ describe("test smart contract interactor", function () { const config = new TransactionsFactoryConfig({ chainID: network.chainID }); const factory = new SmartContractTransactionsFactory({ config: config, - abi: abiRegistry, + abi: abi, }); const bytecode = await promises.readFile("src/testdata/lottery-esdt.wasm"); diff --git a/src/abi/interaction.spec.ts b/src/abi/interaction.spec.ts index 40a3c361b..b7ed0a261 100644 --- a/src/abi/interaction.spec.ts +++ b/src/abi/interaction.spec.ts @@ -205,9 +205,9 @@ describe("test smart contract interactor", function () { it("should interact with 'answer'", async function () { this.timeout(30000); - let abiRegistry = await loadAbiRegistry("src/testdata/answer.abi.json"); - let contract = new SmartContract({ address: dummyAddress, abi: abiRegistry }); - let controller = new SmartContractController({ chainID: "D", networkProvider: provider, abi: abiRegistry }); + let abi = await loadAbiRegistry("src/testdata/answer.abi.json"); + let contract = new SmartContract({ address: dummyAddress, abi: abi }); + let controller = new SmartContractController({ chainID: "D", networkProvider: provider, abi: abi }); let interaction = contract.methods.getUltimateAnswer().withGasLimit(543210n).withChainID("T"); @@ -338,9 +338,9 @@ describe("test smart contract interactor", function () { it("should interact with 'lottery-esdt'", async function () { this.timeout(30000); - let abiRegistry = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); - let contract = new SmartContract({ address: dummyAddress, abi: abiRegistry }); - let controller = new SmartContractController({ chainID: "D", networkProvider: provider, abi: abiRegistry }); + let abi = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); + let contract = new SmartContract({ address: dummyAddress, abi: abi }); + let controller = new SmartContractController({ chainID: "D", networkProvider: provider, abi: abi }); let startInteraction = ( contract.methodsExplicit diff --git a/src/abi/nativeSerializer.spec.ts b/src/abi/nativeSerializer.spec.ts index 535c95cc0..548aa877f 100644 --- a/src/abi/nativeSerializer.spec.ts +++ b/src/abi/nativeSerializer.spec.ts @@ -3,7 +3,7 @@ import { assert } from "chai"; import { Address, ErrInvalidArgument } from "../core"; import { NativeSerializer } from "./nativeSerializer"; import { - AbiRegistry, + Abi, AddressType, AddressValue, BigUIntType, @@ -172,7 +172,7 @@ describe("test native serializer", () => { }); it("should handle optionals in a strict manner (but it does not)", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -222,7 +222,7 @@ describe("test native serializer", () => { }); it("should accept a mix between typed values and regular JavaScript objects (variadic, optionals)", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -271,7 +271,7 @@ describe("test native serializer", () => { }); it("should accept a mix between typed values and regular JavaScript objects (composite, optionals)", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -331,7 +331,7 @@ describe("test native serializer", () => { }); it("should accept a mix between typed values and regular JavaScript objects (tuples)", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -404,7 +404,7 @@ describe("test native serializer", () => { }); it("should accept managed decimals with constants and variable decimals", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -445,7 +445,7 @@ describe("test native serializer", () => { }); it("should accept no value for variadic types", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -474,7 +474,7 @@ describe("test native serializer", () => { }); it("should accept null or undefined for option types and optionals", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", @@ -502,7 +502,7 @@ describe("test native serializer", () => { }); it("should perform type inference (enums)", async () => { - const abiRegistry = AbiRegistry.create({ + const abi = Abi.create({ endpoints: [ { name: "foo", @@ -573,8 +573,8 @@ describe("test native serializer", () => { }, }); - const endpoint = abiRegistry.getEndpoint("foo"); - const enumType = abiRegistry.getEnum("MyEnum"); + const endpoint = abi.getEndpoint("foo"); + const enumType = abi.getEnum("MyEnum"); // Simple enum by discriminant const p0 = 0; @@ -604,7 +604,7 @@ describe("test native serializer", () => { }); it("should perform type inference (explicit-enums)", async () => { - const abiRegistry = AbiRegistry.create({ + const abi = Abi.create({ endpoints: [ { name: "foo", @@ -633,8 +633,8 @@ describe("test native serializer", () => { }, }); - const endpoint = abiRegistry.getEndpoint("foo"); - const enumType = abiRegistry.getExplicitEnum("OperationCompletionStatus"); + const endpoint = abi.getEndpoint("foo"); + const enumType = abi.getExplicitEnum("OperationCompletionStatus"); const enumString = "completed"; const typedValues = NativeSerializer.nativeToTypedValues([enumString], endpoint); @@ -644,7 +644,7 @@ describe("test native serializer", () => { }); it("should getArgumentsCardinality", async () => { - const abi = AbiRegistry.create({ + const abi = Abi.create({ endpoints: [ { name: "a", @@ -708,7 +708,7 @@ describe("test native serializer", () => { }); it("should accept a mixed of values for boolen type", async () => { - const endpoint = AbiRegistry.create({ + const endpoint = Abi.create({ endpoints: [ { name: "foo", diff --git a/src/abi/smartContract.spec.ts b/src/abi/smartContract.spec.ts index e2a10d45e..273783100 100644 --- a/src/abi/smartContract.spec.ts +++ b/src/abi/smartContract.spec.ts @@ -8,7 +8,7 @@ import { getTestWalletsPath, MarkCompleted, MockNetworkProvider, Wait } from ".. import { Code } from "./code"; import { ContractFunction } from "./function"; import { SmartContract } from "./smartContract"; -import { AbiRegistry, OptionalValue, U32Value, U8Value, VariadicValue } from "./typesystem"; +import { Abi, OptionalValue, U32Value, U8Value, VariadicValue } from "./typesystem"; import { BytesValue } from "./typesystem/bytes"; describe("test contract", () => { @@ -202,7 +202,7 @@ describe("test contract", () => { // These parameters are exotic and, generally speaking, can be avoided in contracts: // https://docs.multiversx.com/developers/data/multi-values/ - const abi = AbiRegistry.create({ + const abi = Abi.create({ endpoints: [ { name: "foo", @@ -271,7 +271,7 @@ describe("test contract", () => { }); it("v13 should be stricter than v12 on variadic parameters (since NativeSerializer is used under the hood)", async () => { - const abi = AbiRegistry.create({ + const abi = Abi.create({ endpoints: [ { name: "foo", diff --git a/src/abi/typesystem/abiRegistry.spec.ts b/src/abi/typesystem/abi.spec.ts similarity index 59% rename from src/abi/typesystem/abiRegistry.spec.ts rename to src/abi/typesystem/abi.spec.ts index 216cddba2..b68a34219 100644 --- a/src/abi/typesystem/abiRegistry.spec.ts +++ b/src/abi/typesystem/abi.spec.ts @@ -12,29 +12,29 @@ import { StructType } from "./struct"; import { TokenIdentifierType } from "./tokenIdentifier"; import { VariadicType } from "./variadic"; -describe("test abi registry", () => { +describe("test abi", () => { it("load should also remap known to types", async () => { // Ultimate answer - let registry = await loadAbiRegistry("src/testdata/answer.abi.json"); - let getUltimateAnswer = registry.getEndpoint("getUltimateAnswer"); + let abi = await loadAbiRegistry("src/testdata/answer.abi.json"); + let getUltimateAnswer = abi.getEndpoint("getUltimateAnswer"); assert.instanceOf(getUltimateAnswer.output[0].type, I64Type); // Counter - registry = await loadAbiRegistry("src/testdata/counter.abi.json"); - let getCounter = registry.getEndpoint("get"); + abi = await loadAbiRegistry("src/testdata/counter.abi.json"); + let getCounter = abi.getEndpoint("get"); assert.instanceOf(getCounter.output[0].type, I64Type); // Lottery - registry = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); - let start = registry.getEndpoint("start"); - let getStatus = registry.getEndpoint("status"); - let getLotteryInfo = registry.getEndpoint("getLotteryInfo"); + abi = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); + let start = abi.getEndpoint("start"); + let getStatus = abi.getEndpoint("status"); + let getLotteryInfo = abi.getEndpoint("getLotteryInfo"); // basic-features - registry = await loadAbiRegistry("src/testdata/basic-features.abi.json"); - let returnManagedDecimal = registry.getEndpoint("returns_egld_decimal"); - let returnsManagedDecimalSigned = registry.getEndpoint("managed_decimal_ln"); - let returnsManagedDecimalVariable = registry.getEndpoint("managed_decimal_addition_var"); + abi = await loadAbiRegistry("src/testdata/basic-features.abi.json"); + let returnManagedDecimal = abi.getEndpoint("returns_egld_decimal"); + let returnsManagedDecimalSigned = abi.getEndpoint("managed_decimal_ln"); + let returnsManagedDecimalVariable = abi.getEndpoint("managed_decimal_addition_var"); assert.isFalse(start.modifiers.isReadonly()); assert.isTrue(getStatus.modifiers.isReadonly()); @@ -78,8 +78,8 @@ describe("test abi registry", () => { "hex", ); - let registry = await loadAbiRegistry("src/testdata/multisig-full.abi.json"); - let performAction = registry.getEndpoint("getActionData"); + let abi = await loadAbiRegistry("src/testdata/multisig-full.abi.json"); + let performAction = abi.getEndpoint("getActionData"); assert.equal(performAction.output[0].type.getName(), "Action"); let result = bc.decodeTopLevel(buff, performAction.output[0].type); @@ -91,10 +91,10 @@ describe("test abi registry", () => { }); it("should load ABI containing arrayN and nested structs", async () => { - let registry = await loadAbiRegistry("src/testdata/array-in-nested-structs.abi.json"); - let dummyType = registry.getStruct("Dummy"); - let fooType = registry.getStruct("Foo"); - let barType = registry.getStruct("Bar"); + let abi = await loadAbiRegistry("src/testdata/array-in-nested-structs.abi.json"); + let dummyType = abi.getStruct("Dummy"); + let fooType = abi.getStruct("Foo"); + let barType = abi.getStruct("Bar"); let fooTypeFromBarType = barType.getFieldDefinition("foo")!.type; let dummyTypeFromFooTypeFromBarType = fooTypeFromBarType.getFieldDefinition("dummy")!.type; @@ -107,40 +107,40 @@ describe("test abi registry", () => { }); it("should load ABI when custom types are out of order (a)", async () => { - const registry = await loadAbiRegistry("src/testdata/custom-types-out-of-order-a.abi.json"); + const abi = await loadAbiRegistry("src/testdata/custom-types-out-of-order-a.abi.json"); - assert.deepEqual(registry.getStruct("EsdtTokenTransfer").getNamesOfDependencies(), [ + assert.deepEqual(abi.getStruct("EsdtTokenTransfer").getNamesOfDependencies(), [ "EsdtTokenType", "TokenIdentifier", "u64", "BigUint", ]); - assert.deepEqual(registry.getEnum("EsdtTokenType").getNamesOfDependencies(), []); - assert.deepEqual(registry.getStruct("TypeA").getNamesOfDependencies(), ["TypeB", "TypeC", "u64"]); - assert.deepEqual(registry.getStruct("TypeB").getNamesOfDependencies(), ["TypeC", "u64"]); - assert.deepEqual(registry.getStruct("TypeC").getNamesOfDependencies(), ["u64"]); + assert.deepEqual(abi.getEnum("EsdtTokenType").getNamesOfDependencies(), []); + assert.deepEqual(abi.getStruct("TypeA").getNamesOfDependencies(), ["TypeB", "TypeC", "u64"]); + assert.deepEqual(abi.getStruct("TypeB").getNamesOfDependencies(), ["TypeC", "u64"]); + assert.deepEqual(abi.getStruct("TypeC").getNamesOfDependencies(), ["u64"]); }); it("should load ABI when custom types are out of order (b)", async () => { - const registry = await loadAbiRegistry("src/testdata/custom-types-out-of-order-b.abi.json"); + const abi = await loadAbiRegistry("src/testdata/custom-types-out-of-order-b.abi.json"); - assert.deepEqual(registry.getStruct("EsdtTokenTransfer").getNamesOfDependencies(), [ + assert.deepEqual(abi.getStruct("EsdtTokenTransfer").getNamesOfDependencies(), [ "EsdtTokenType", "TokenIdentifier", "u64", "BigUint", ]); - assert.deepEqual(registry.getEnum("EsdtTokenType").getNamesOfDependencies(), []); - assert.deepEqual(registry.getStruct("TypeA").getNamesOfDependencies(), ["TypeB", "TypeC", "u64"]); - assert.deepEqual(registry.getStruct("TypeB").getNamesOfDependencies(), ["TypeC", "u64"]); - assert.deepEqual(registry.getStruct("TypeC").getNamesOfDependencies(), ["u64"]); + assert.deepEqual(abi.getEnum("EsdtTokenType").getNamesOfDependencies(), []); + assert.deepEqual(abi.getStruct("TypeA").getNamesOfDependencies(), ["TypeB", "TypeC", "u64"]); + assert.deepEqual(abi.getStruct("TypeB").getNamesOfDependencies(), ["TypeC", "u64"]); + assert.deepEqual(abi.getStruct("TypeC").getNamesOfDependencies(), ["u64"]); }); it("should load ABI when custom types are out of order (community example: c)", async () => { - const registry = await loadAbiRegistry("src/testdata/custom-types-out-of-order-c.abi.json"); + const abi = await loadAbiRegistry("src/testdata/custom-types-out-of-order-c.abi.json"); - assert.lengthOf(registry.customTypes, 5); - assert.deepEqual(registry.getStruct("LoanCreateOptions").getNamesOfDependencies(), [ + assert.lengthOf(abi.customTypes, 5); + assert.deepEqual(abi.getStruct("LoanCreateOptions").getNamesOfDependencies(), [ "BigUint", "Address", "TokenIdentifier", @@ -150,10 +150,10 @@ describe("test abi registry", () => { }); it("should load ABI when custom types are out of order (community example: d)", async () => { - const registry = await loadAbiRegistry("src/testdata/custom-types-out-of-order-d.abi.json"); + const abi = await loadAbiRegistry("src/testdata/custom-types-out-of-order-d.abi.json"); - assert.lengthOf(registry.customTypes, 12); - assert.deepEqual(registry.getStruct("AuctionItem").getNamesOfDependencies(), [ + assert.lengthOf(abi.customTypes, 12); + assert.deepEqual(abi.getStruct("AuctionItem").getNamesOfDependencies(), [ "u64", "Address", "BigUint", @@ -166,36 +166,36 @@ describe("test abi registry", () => { }); it("should load ABI with counted-variadic", async () => { - const registry = await loadAbiRegistry("src/testdata/counted-variadic.abi.json"); - const dummyType = registry.getStruct("Dummy"); - - assert.deepEqual(registry.getEndpoint("foo").input[0].type, new VariadicType(dummyType, true)); - assert.deepEqual(registry.getEndpoint("bar").input[0].type, new VariadicType(new U32Type(), true)); - assert.deepEqual(registry.getEndpoint("bar").input[1].type, new VariadicType(new BytesType(), true)); - assert.deepEqual(registry.getEndpoint("bar").output[0].type, new VariadicType(new U32Type(), true)); - assert.deepEqual(registry.getEndpoint("bar").output[1].type, new VariadicType(new BytesType(), true)); + const abi = await loadAbiRegistry("src/testdata/counted-variadic.abi.json"); + const dummyType = abi.getStruct("Dummy"); + + assert.deepEqual(abi.getEndpoint("foo").input[0].type, new VariadicType(dummyType, true)); + assert.deepEqual(abi.getEndpoint("bar").input[0].type, new VariadicType(new U32Type(), true)); + assert.deepEqual(abi.getEndpoint("bar").input[1].type, new VariadicType(new BytesType(), true)); + assert.deepEqual(abi.getEndpoint("bar").output[0].type, new VariadicType(new U32Type(), true)); + assert.deepEqual(abi.getEndpoint("bar").output[1].type, new VariadicType(new BytesType(), true)); }); it("should load ABI wih events", async () => { - const registry = await loadAbiRegistry("src/testdata/esdt-safe.abi.json"); + const abi = await loadAbiRegistry("src/testdata/esdt-safe.abi.json"); - assert.lengthOf(registry.events, 8); + assert.lengthOf(abi.events, 8); - const depositEvent = registry.getEvent("deposit"); + const depositEvent = abi.getEvent("deposit"); assert.deepEqual(depositEvent.inputs[0].type, new AddressType()); - assert.deepEqual(depositEvent.inputs[1].type, new ListType(registry.getCustomType("EsdtTokenPayment"))); - assert.deepEqual(depositEvent.inputs[2].type, registry.getCustomType("DepositEvent")); + assert.deepEqual(depositEvent.inputs[1].type, new ListType(abi.getCustomType("EsdtTokenPayment"))); + assert.deepEqual(depositEvent.inputs[2].type, abi.getCustomType("DepositEvent")); - const setStatusEvent = registry.getEvent("setStatusEvent"); + const setStatusEvent = abi.getEvent("setStatusEvent"); assert.deepEqual(setStatusEvent.inputs[0].type, new U64Type()); assert.deepEqual(setStatusEvent.inputs[1].type, new U64Type()); - assert.deepEqual(setStatusEvent.inputs[2].type, registry.getCustomType("TransactionStatus")); + assert.deepEqual(setStatusEvent.inputs[2].type, abi.getCustomType("TransactionStatus")); }); it("should load ABI explicit-enum", async () => { - const registry = await loadAbiRegistry("src/testdata/basic-features.abi.json"); + const abi = await loadAbiRegistry("src/testdata/basic-features.abi.json"); - const enumType = registry.getExplicitEnum("OperationCompletionStatus"); + const enumType = abi.getExplicitEnum("OperationCompletionStatus"); assert.deepEqual(enumType.variants[0].name, "completed"); @@ -203,9 +203,9 @@ describe("test abi registry", () => { }); it("should load abi with title for endpoint", async () => { - const registry = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); + const abi = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); - const endpoint = registry.getEndpoint("createLotteryPool"); + const endpoint = abi.getEndpoint("createLotteryPool"); assert.equal(endpoint.title, "Create lottery pool"); }); diff --git a/src/abi/typesystem/abiRegistry.ts b/src/abi/typesystem/abi.ts similarity index 95% rename from src/abi/typesystem/abiRegistry.ts rename to src/abi/typesystem/abi.ts index 984f45659..1c462ede8 100644 --- a/src/abi/typesystem/abiRegistry.ts +++ b/src/abi/typesystem/abi.ts @@ -18,7 +18,7 @@ export class AbiRegistry { readonly customTypes: CustomType[] = []; readonly events: EventDefinition[] = []; - private constructor(options: { + protected constructor(options: { name: string; constructorDefinition: EndpointDefinition; upgradeConstructorDefinition?: EndpointDefinition; @@ -240,3 +240,19 @@ function mapEvent(event: EventDefinition, mapper: TypeMapper): EventDefinition { return new EventDefinition(event.identifier, newInputs); } + +export class Abi extends AbiRegistry { + /** + * + */ + constructor(options: { + name: string; + constructorDefinition: EndpointDefinition; + upgradeConstructorDefinition?: EndpointDefinition; + endpoints: EndpointDefinition[]; + customTypes: CustomType[]; + events?: EventDefinition[]; + }) { + super(options); + } +} diff --git a/src/abi/typesystem/index.ts b/src/abi/typesystem/index.ts index f05527ba3..e98aff96f 100644 --- a/src/abi/typesystem/index.ts +++ b/src/abi/typesystem/index.ts @@ -3,7 +3,7 @@ * @module typesystem */ -export * from "./abiRegistry"; +export * from "./abi"; export * from "./address"; export * from "./algebraic"; export * from "./boolean"; diff --git a/src/entrypoints/entrypoints.ts b/src/entrypoints/entrypoints.ts index 73f1b95d6..5a75498da 100644 --- a/src/entrypoints/entrypoints.ts +++ b/src/entrypoints/entrypoints.ts @@ -1,4 +1,4 @@ -import { AbiRegistry } from "../abi"; +import { Abi } from "../abi"; import { AccountController, AccountTransactionsFactory } from "../accountManagement"; import { Account } from "../accounts"; import { IAccount } from "../accounts/interfaces"; @@ -106,7 +106,7 @@ class NetworkEntrypoint { return new AccountTransactionsFactory({ config: new TransactionsFactoryConfig({ chainID: this.chainId }) }); } - createSmartContractController(abi?: AbiRegistry): SmartContractController { + createSmartContractController(abi?: Abi): SmartContractController { return new SmartContractController({ chainID: this.chainId, networkProvider: this.networkProvider, abi }); } diff --git a/src/smartContracts/smartContractController.spec.ts b/src/smartContracts/smartContractController.spec.ts index eadf1fb16..a6b36a0e7 100644 --- a/src/smartContracts/smartContractController.spec.ts +++ b/src/smartContracts/smartContractController.spec.ts @@ -1,6 +1,6 @@ import BigNumber from "bignumber.js"; import { assert } from "chai"; -import { AbiRegistry, BigUIntValue, BooleanValue, BytesValue, Tuple, U16Value, U64Value } from "../abi"; +import { Abi, BigUIntValue, BooleanValue, BytesValue, Tuple, U16Value, U64Value } from "../abi"; import { Address, SmartContractQueryResponse } from "../core"; import { MockNetworkProvider, loadAbiRegistry } from "../testutils"; import { bigIntToBuffer } from "../tokenOperations/codec"; @@ -94,7 +94,7 @@ describe("test smart contract queries controller", () => { }); it("works with ABI, with mixed arguments", async function () { - const abi = AbiRegistry.create({ + const abi = Abi.create({ endpoints: [ { name: "bar", diff --git a/src/smartContracts/smartContractController.ts b/src/smartContracts/smartContractController.ts index 5a7be445d..fd370f410 100644 --- a/src/smartContracts/smartContractController.ts +++ b/src/smartContracts/smartContractController.ts @@ -1,4 +1,4 @@ -import { AbiRegistry, ArgSerializer, isTyped, NativeSerializer } from "../abi"; +import { Abi, ArgSerializer, isTyped, NativeSerializer } from "../abi"; import { IAccount } from "../accounts/interfaces"; import { Address } from "../core"; import { Err, ErrSmartContractQuery } from "../core/errors"; @@ -19,9 +19,9 @@ export class SmartContractController { private transactionWatcher: TransactionWatcher; private txComputer: TransactionComputer; private networkProvider: INetworkProvider; - private abi?: AbiRegistry; + private abi?: Abi; - constructor(options: { chainID: string; networkProvider: INetworkProvider; abi?: AbiRegistry }) { + constructor(options: { chainID: string; networkProvider: INetworkProvider; abi?: Abi }) { this.factory = new SmartContractTransactionsFactory({ config: new TransactionsFactoryConfig({ chainID: options.chainID }), abi: options.abi, diff --git a/src/smartContracts/smartContractTransactionsFactory.spec.ts b/src/smartContracts/smartContractTransactionsFactory.spec.ts index 546f76465..217d2b511 100644 --- a/src/smartContracts/smartContractTransactionsFactory.spec.ts +++ b/src/smartContracts/smartContractTransactionsFactory.spec.ts @@ -1,5 +1,5 @@ import { assert } from "chai"; -import { AbiRegistry, Code, U32Value } from "../abi"; +import { Abi, Code, U32Value } from "../abi"; import { Address, Err, Token, TokenTransfer, TransactionsFactoryConfig } from "../core"; import { loadAbiRegistry, loadContractCode } from "../testutils/utils"; import { SmartContractTransactionsFactory } from "./smartContractTransactionsFactory"; @@ -9,7 +9,7 @@ describe("test smart contract transactions factory", function () { let factory: SmartContractTransactionsFactory; let abiAwareFactory: SmartContractTransactionsFactory; let bytecode: Code; - let abi: AbiRegistry; + let abi: Abi; before(async function () { factory = new SmartContractTransactionsFactory({ @@ -427,7 +427,7 @@ describe("test smart contract transactions factory", function () { }); it("should create 'Transaction' for upgrade, when ABI is available (with fallbacks)", async function () { - const abi = AbiRegistry.create({ + const abi = Abi.create({ upgradeConstructor: { inputs: [ { diff --git a/src/smartContracts/smartContractTransactionsOutcomeParser.ts b/src/smartContracts/smartContractTransactionsOutcomeParser.ts index aadfc484e..5ff7db7be 100644 --- a/src/smartContracts/smartContractTransactionsOutcomeParser.ts +++ b/src/smartContracts/smartContractTransactionsOutcomeParser.ts @@ -1,4 +1,4 @@ -import { AbiRegistry, ArgSerializer } from "../abi"; +import { Abi, ArgSerializer } from "../abi"; import { Address } from "../core/address"; import { ARGUMENTS_SEPARATOR } from "../core/constants"; import { Err } from "../core/errors"; @@ -14,9 +14,9 @@ enum Events { } export class SmartContractTransactionsOutcomeParser { - private readonly abi?: AbiRegistry; + private readonly abi?: Abi; - constructor(options?: { abi?: AbiRegistry }) { + constructor(options?: { abi?: Abi }) { this.abi = options?.abi; } diff --git a/src/testutils/utils.ts b/src/testutils/utils.ts index ce2f96c1a..6c185c6bb 100644 --- a/src/testutils/utils.ts +++ b/src/testutils/utils.ts @@ -1,7 +1,7 @@ import * as fs from "fs"; import { PathLike } from "fs"; import { resolve } from "path"; -import { AbiRegistry, Code, SmartContract, TypedValue } from "../abi"; +import { Abi, Code, SmartContract, TypedValue } from "../abi"; import { Account } from "../accounts"; import { Transaction } from "../core/transaction"; import { getAxios } from "../core/utils"; @@ -55,17 +55,17 @@ export async function loadContractCode(path: PathLike): Promise { return Code.fromBuffer(buffer); } -export async function loadAbiRegistry(path: PathLike): Promise { +export async function loadAbiRegistry(path: PathLike): Promise { if (isOnBrowserTests()) { const axios = await getAxios(); let response: any = await axios.default.get(path.toString()); - return AbiRegistry.create(response.data); + return Abi.create(response.data); } // Load from files let jsonContent: string = await fs.promises.readFile(path, { encoding: "utf8" }); let json = JSON.parse(jsonContent); - return AbiRegistry.create(json); + return Abi.create(json); } export function isOnBrowserTests() { diff --git a/src/transactionsOutcomeParsers/transactionEventsParser.spec.ts b/src/transactionsOutcomeParsers/transactionEventsParser.spec.ts index 52a48853d..ed3676274 100644 --- a/src/transactionsOutcomeParsers/transactionEventsParser.spec.ts +++ b/src/transactionsOutcomeParsers/transactionEventsParser.spec.ts @@ -1,6 +1,6 @@ import BigNumber from "bignumber.js"; import { assert } from "chai"; -import { AbiRegistry } from "../abi"; +import { Abi } from "../abi"; import { Address, TransactionEvent, TransactionLogs, TransactionOnNetwork } from "../core"; import { b64TopicsToBytes, loadAbiRegistry } from "../testutils"; import { findEventsByFirstTopic, SmartContractResult } from "./resources"; @@ -153,7 +153,7 @@ describe("test transaction events parser", () => { }); it("parses event (with multi-values)", async function () { - const abi = AbiRegistry.create({ + const abi = Abi.create({ events: [ { identifier: "doFoobar", diff --git a/src/transactionsOutcomeParsers/transactionEventsParser.ts b/src/transactionsOutcomeParsers/transactionEventsParser.ts index c73f3e26a..4cd5ed945 100644 --- a/src/transactionsOutcomeParsers/transactionEventsParser.ts +++ b/src/transactionsOutcomeParsers/transactionEventsParser.ts @@ -1,11 +1,11 @@ -import { AbiRegistry, ArgSerializer } from "../abi"; +import { Abi, ArgSerializer } from "../abi"; import { TransactionEvent } from "../core/transactionEvents"; export class TransactionEventsParser { - private readonly abi: AbiRegistry; + private readonly abi: Abi; private readonly firstTopicIsIdentifier: boolean; - constructor(options: { abi: AbiRegistry; firstTopicIsIdentifier?: boolean }) { + constructor(options: { abi: Abi; firstTopicIsIdentifier?: boolean }) { this.abi = options.abi; // By default, we consider that the first topic is the event identifier. @@ -41,14 +41,14 @@ export class TransactionEventsParser { const argsSerializer = new ArgSerializer(); // "Indexed" ABI "event.inputs" correspond to "event.topics[1:]": - const indexedInputs = eventDefinition.inputs.filter((input) => input.indexed); + const indexedInputs = eventDefinition.inputs.filter((input: { indexed: any }) => input.indexed); const decodedTopics = argsSerializer.buffersToValues(topics, indexedInputs); for (let i = 0; i < indexedInputs.length; i++) { result[indexedInputs[i].name] = decodedTopics[i].valueOf(); } // "Non-indexed" ABI "event.inputs" correspond to "event.data": - const nonIndexedInputs = eventDefinition.inputs.filter((input) => !input.indexed); + const nonIndexedInputs = eventDefinition.inputs.filter((input: { indexed: any }) => !input.indexed); const decodedDataParts = argsSerializer.buffersToValues(dataItems, nonIndexedInputs); for (let i = 0; i < nonIndexedInputs.length; i++) { result[nonIndexedInputs[i].name] = decodedDataParts[i]?.valueOf();