Skip to content
This repository has been archived by the owner on Jun 11, 2024. It is now read-only.

verifyTerminatedStateAccountsCommon is called inside loop #8998

Closed
sitetester opened this issue Sep 15, 2023 · 0 comments
Closed

verifyTerminatedStateAccountsCommon is called inside loop #8998

sitetester opened this issue Sep 15, 2023 · 0 comments
Assignees
Milestone

Comments

@sitetester
Copy link
Contributor

sitetester commented Sep 15, 2023

Expected behavior

  • This seems to be a bug & we can take it outside of loop, i.e.,
for (const chainInfo of chainInfos) {
	// For each entry chainInfo in chainInfos, chainInfo.chainData.status == CHAIN_STATUS_TERMINATED
	// if and only if a corresponding entry (i.e., with chainID == chainInfo.chainID) exists in terminatedStateAccounts.
	if (chainInfo.chainData.status === ChainStatus.TERMINATED) {
		const correspondingTerminatedAccount = terminatedStateAccounts.find(
			terminatedStateAccount => terminatedStateAccount.chainID.equals(chainInfo.chainID),
		);
		if (!correspondingTerminatedAccount) {
			throw new Error(
				'For each chainInfo with status terminated there should be a corresponding entry in terminatedStateAccounts.',
			);
		}
	}
}
this._verifyTerminatedStateAccountsCommon(terminatedStateAccounts, mainchainID); // *** 

Actual behavior

In current code, _verifyTerminatedStateAccountsCommon is called inside loop

for (const chainInfo of chainInfos) {
	// For each entry chainInfo in chainInfos, chainInfo.chainData.status == CHAIN_STATUS_TERMINATED
	// if and only if a corresponding entry (i.e., with chainID == chainInfo.chainID) exists in terminatedStateAccounts.
	if (chainInfo.chainData.status === ChainStatus.TERMINATED) {
		const terminatedAccount = terminatedStateAccounts.find(tAccount =>
			tAccount.chainID.equals(chainInfo.chainID),
		);
		if (!terminatedAccount) {
			throw new Error(
				'For each chainInfo with status terminated there should be a corresponding entry in terminatedStateAccounts.',
			);
		}

		this._verifyTerminatedStateAccountsCommon(terminatedStateAccounts, mainchainID); // ***
  • Another small point
    const mainchainID = getMainchainID(mainchainInfo.chainID);
    =>
    const mainchainID = getMainchainID(ctx.chainID);

Steps to reproduce

https://github.com/LiskHQ/lips/blob/main/proposals/lip-0045.md#mainchain

Each entry stateAccount in terminatedStateAccounts has a unique stateAccount.chainID and terminatedStateAccounts is ordered lexicographically by stateAccount.chainID. Furthermore for each entry it holds stateAccount.chainID != getMainchainID() and stateAccount.chainId[0] == getMainchainID()[0].

Which version(s) does this affect? (Environment, OS, etc...)

git branch release/6.0.0

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants