--- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -2513,10 +2513,10 @@ let owned_contract = >::contains_key(called_contract.clone()) && >::get(called_contract.clone()) == *who; + let white_list_enabled = >::contains_key(called_contract.clone()) && >::get(called_contract.clone()); - if !owned_contract { - let white_list_enabled = >::contains_key(called_contract.clone()) && >::get(called_contract.clone()); - if !white_list_enabled || !>::contains_key(called_contract.clone(), who) { + if !owned_contract && white_list_enabled { + if !>::contains_key(called_contract.clone(), who) { return Err(InvalidTransaction::Call.into()); } } --- a/tests/src/contracts.test.ts +++ b/tests/src/contracts.test.ts @@ -115,9 +115,10 @@ let expectedFlipValue = await getFlipValue(contract, deployer); const flip = contract.exec('flip', value, gasLimit); - await expect(submitTransactionExpectFailAsync(bob, flip)).to.be.rejected; - const firstFailResponse = await getFlipValue(contract, deployer); - expect(firstFailResponse).to.be.eq(expectedFlipValue, `Only account who deployed contract can flip value.`); + await submitTransactionAsync(bob, flip); + expectedFlipValue = !expectedFlipValue; + const afterFlip = await getFlipValue(contract,deployer); + expect(afterFlip).to.be.eq(expectedFlipValue, `Anyone can call new contract.`); const deployerCanFlip = async () => { expectedFlipValue = !expectedFlipValue; @@ -144,34 +145,25 @@ expectedFlipValue = !expectedFlipValue; const flipAfterWhiteListed = await getFlipValue(contract,deployer); expect(flipAfterWhiteListed).to.be.eq(expectedFlipValue, `Bob was whitelisted, now he can flip.`); - - await deployerCanFlip(); - - const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false); - const disableeResult = await submitTransactionAsync(deployer, disableWhiteListTx); - const flipWithDisabledWhitelist = contract.exec('flip', value, gasLimit); - await expect(submitTransactionExpectFailAsync(bob, flipWithDisabledWhitelist)).to.be.rejected; - const flipWithDisabledWhiteList = await getFlipValue(contract, deployer); - expect(flipWithDisabledWhiteList).to.be.eq(expectedFlipValue, `Bob can't flip when whitelist is disabled, even tho he is in whitelist.`); await deployerCanFlip(); - const enableWhiteListOneMoreTimeTx = api.tx.nft.toggleContractWhiteList(contract.address, true); - const enableOneMoreTimeResult = await submitTransactionAsync(deployer, enableWhiteListOneMoreTimeTx); - - await deployerCanFlip(); - const removeBobFromWhiteListTx = api.tx.nft.removeFromContractWhiteList(contract.address, bob.address); const removeBobResult = await submitTransactionAsync(deployer, removeBobFromWhiteListTx); const bobRemoved = contract.exec('flip', value, gasLimit); await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected; const afterBobRemoved = await getFlipValue(contract, deployer); - expect(afterBobRemoved).to.be.eq(expectedFlipValue, `Enabling whitelist doesn't make it possible to call contract for everyone.`); + expect(afterBobRemoved).to.be.eq(expectedFlipValue, `Bob can't call contract, now when he is removeed from white list.`); await deployerCanFlip(); - const cleanupTx = api.tx.nft.toggleContractWhiteList(contract.address, false); - const cleanupResult = await submitTransactionAsync(deployer, cleanupTx); + const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false); + const disableWhiteListResult = await submitTransactionAsync(deployer, disableWhiteListTx); + const whiteListDisabledFlip = contract.exec('flip', value, gasLimit); + await submitTransactionAsync(bob, whiteListDisabledFlip); + expectedFlipValue = !expectedFlipValue; + const afterWhiteListDisabled = await getFlipValue(contract,deployer); + expect(afterWhiteListDisabled).to.be.eq(expectedFlipValue, `Anyone can call contract with disabled whitelist.`); console.error = consoleError; });