Skip to content

Commit

Permalink
perf(multisig): do not reinitialize contract instances
Browse files Browse the repository at this point in the history
  • Loading branch information
CedrikNikita committed Jun 27, 2024
1 parent af537dc commit deaa5d0
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
19 changes: 14 additions & 5 deletions src/composables/multisigAccounts.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { computed, ref } from 'vue';
import { chunk, uniqBy } from 'lodash-es';
import camelCaseKeysDeep from 'camelcase-keys-deep';
import { DryRunError, Encoded } from '@aeternity/aepp-sdk';
import { Contract, DryRunError, Encoded } from '@aeternity/aepp-sdk';
import BigNumber from 'bignumber.js';

import type {
IMultisigAccount,
IMultisigConsensus,
IMultisigAccountResponse,
AccountAddress,
Dictionary,
} from '@/types';
import {
fetchJson,
Expand All @@ -24,6 +25,7 @@ import {
AE_COIN_PRECISION,
MULTISIG_SUPPORTED_CONTRACT_VERSION,
} from '@/protocols/aeternity/config';
import { SimpleGAMultiSigContractApi } from '@/protocols/aeternity/types';
import { AeScan } from '@/protocols/aeternity/libs/AeScan';
import { useAeNetworkSettings } from '@/protocols/aeternity/composables';

Expand All @@ -37,6 +39,7 @@ export interface MultisigAccountsOptions {
pollingDisabled?: boolean;
}

let multisigContractInstances: Dictionary<Contract<SimpleGAMultiSigContractApi>> = {};
let composableInitialized = false;

const POLLING_INTERVAL = 12000;
Expand Down Expand Up @@ -186,10 +189,15 @@ export function useMultisigAccounts({
}: IMultisigAccountResponse): Promise<IMultisigAccount> {
const dryAeSdk = await getDryAeSdk();
try {
const contractInstance = await dryAeSdk.initializeContract({
aci: SimpleGAMultiSigAci,
address: contractId,
});
if (!multisigContractInstances[contractId]) {
multisigContractInstances[contractId] = await dryAeSdk
.initializeContract<SimpleGAMultiSigContractApi>({
aci: SimpleGAMultiSigAci,
address: contractId,
});
}

const contractInstance = multisigContractInstances[contractId];

const currentAccount = multisigAccounts.value
.find((account) => account.contractId === contractId);
Expand Down Expand Up @@ -362,6 +370,7 @@ export function useMultisigAccounts({

onNetworkChange(() => {
updateMultisigAccounts();
multisigContractInstances = {};
});
}

Expand Down
15 changes: 14 additions & 1 deletion src/protocols/aeternity/types.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable camelcase */

import { Contract, ContractMethodsBase, Encoded } from '@aeternity/aepp-sdk';
import type { INetworkProtocolSettings } from '@/types';
import type { AccountAddress, INetworkProtocolSettings } from '@/types';

/**
* Settings specific to this protocol.
Expand Down Expand Up @@ -57,3 +57,16 @@ export interface AeDecodedCallData {
}

export type ContractInitializeOptions = Omit<Parameters<typeof Contract.initialize>[0], 'onNode'>;

export interface SimpleGAMultiSigContractApi extends ContractMethodsBase {
get_nonce: () => number;
get_signers: () => string[];
get_consensus_info: () => {
confirmations_required: number;
confirmed_by: AccountAddress[];
expiration_height: number;
expired: boolean;
proposed_by: AccountAddress;
tx_hash?: string;
};
}

0 comments on commit deaa5d0

Please sign in to comment.