difftreelog
CORE-386 Fix PR
in: master
5 files changed
pallets/common/src/erc.rsdiffbeforeafterboth--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -22,7 +22,10 @@
pub use pallet_evm::{PrecompileOutput, PrecompileResult, PrecompileHandle, account::CrossAccountId};
use pallet_evm_coder_substrate::dispatch_to_evm;
use sp_std::vec::Vec;
-use up_data_structs::{Property, SponsoringRateLimit, NestingRule, OwnerRestrictedSet, AccessMode};
+use up_data_structs::{
+ Property, SponsoringRateLimit, NestingRule, OwnerRestrictedSet, AccessMode,
+ CollectionPermissions,
+};
use alloc::format;
use crate::{Pallet, CollectionHandle, Config, CollectionProperties};
@@ -211,10 +214,20 @@
#[solidity(rename_selector = "setNesting")]
fn set_nesting_bool(&mut self, caller: caller, enable: bool) -> Result<void> {
check_is_owner_or_admin(caller, self)?;
- self.collection.permissions.nesting = Some(match enable {
- false => NestingRule::Disabled,
- true => NestingRule::Owner,
- });
+ let permissions = CollectionPermissions {
+ nesting: Some(match enable {
+ false => NestingRule::Disabled,
+ true => NestingRule::Owner,
+ }),
+ ..Default::default()
+ };
+ self.collection.permissions = <Pallet<T>>::clamp_permissions(
+ self.collection.mode.clone(),
+ &self.collection.permissions,
+ permissions,
+ )
+ .map_err(dispatch_to_evm::<T>)?;
+
save(self)?;
Ok(())
}
@@ -237,19 +250,29 @@
)));
}
check_is_owner_or_admin(caller, self)?;
- self.collection.permissions.nesting = Some(match enable {
- false => NestingRule::Disabled,
- true => {
- let mut bv = OwnerRestrictedSet::new();
- for i in collections {
- bv.try_insert(crate::eth::map_eth_to_id(&i).ok_or_else(|| {
- Error::Revert("Can't convert address into collection id".into())
- })?)
- .map_err(|e| Error::Revert(format!("{:?}", e)))?;
+ let permissions = CollectionPermissions {
+ nesting: Some(match enable {
+ false => NestingRule::Disabled,
+ true => {
+ let mut bv = OwnerRestrictedSet::new();
+ for i in collections {
+ bv.try_insert(crate::eth::map_eth_to_id(&i).ok_or_else(|| {
+ Error::Revert("Can't convert address into collection id".into())
+ })?)
+ .map_err(|e| Error::Revert(format!("{:?}", e)))?;
+ }
+ NestingRule::OwnerRestricted(bv)
}
- NestingRule::OwnerRestricted(bv)
- }
- });
+ }),
+ ..Default::default()
+ };
+ self.collection.permissions = <Pallet<T>>::clamp_permissions(
+ self.collection.mode.clone(),
+ &self.collection.permissions,
+ permissions,
+ )
+ .map_err(dispatch_to_evm::<T>)?;
+
save(self)?;
Ok(())
}
tests/src/setCollectionLimits.test.tsdiffbeforeafterboth46 before(async () => {46 before(async () => {47 await usingApi(async (api, privateKeyWrapper) => {47 await usingApi(async (api, privateKeyWrapper) => {48 alice = privateKeyWrapper('//Alice');48 alice = privateKeyWrapper('//Alice');49 bob = privateKeyWrapper('//Bob');49 collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});50 collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});50 });51 });51 });52 });115 });116 });116 });117 });117118119 it('execute setCollectionLimits from admin collection', async () => {120 await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);121 await usingApi(async (api: ApiPromise) => {122 tx = api.tx.unique.setCollectionLimits(123 collectionIdForTesting,124 {125 accountTokenOwnershipLimit,126 sponsoredDataSize,127 // sponsoredMintSize,128 tokenLimit,129 },130 );131 await expect(submitTransactionAsync(bob, tx)).to.be.not.rejected;132 });133 });118});134});119135120describe('setCollectionLimits negative', () => {136describe('setCollectionLimits negative', () => {156 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;172 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;157 });173 });158 });174 });159 it('execute setCollectionLimits from admin collection', async () => {160 await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);161 await usingApi(async (api: ApiPromise) => {162 tx = api.tx.unique.setCollectionLimits(163 collectionIdForTesting,164 {165 accountTokenOwnershipLimit,166 sponsoredDataSize,167 // sponsoredMintSize,168 tokenLimit,169 },170 );171 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;172 });173 });174175175 it('fails when trying to enable OwnerCanTransfer after it was disabled', async () => {176 it('fails when trying to enable OwnerCanTransfer after it was disabled', async () => {176 const collectionId = await createCollectionExpectSuccess();177 const collectionId = await createCollectionExpectSuccess();tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -65,6 +65,11 @@
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await setCollectionSponsorExpectSuccess(collectionId, charlie.address);
});
+ it('Collection admin add sponsor', async () => {
+ const collectionId = await createCollectionExpectSuccess();
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await setCollectionSponsorExpectSuccess(collectionId, charlie.address, '//Bob');
+ });
});
describe('(!negative test!) integration test: ext. setCollectionSponsor():', () => {
@@ -93,10 +98,5 @@
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
await setCollectionSponsorExpectFailure(collectionId, bob.address);
- });
- it('(!negative test!) Collection admin add sponsor', async () => {
- const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
- await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Bob');
});
});
tests/src/setMintPermission.test.tsdiffbeforeafterboth--- a/tests/src/setMintPermission.test.ts
+++ b/tests/src/setMintPermission.test.ts
@@ -67,6 +67,14 @@
await setMintPermissionExpectSuccess(alice, collectionId, false);
});
});
+
+ it('Collection admin success on set', async () => {
+ await usingApi(async () => {
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await setMintPermissionExpectSuccess(bob, collectionId, true);
+ });
+ });
});
describe('Negative Integration Test setMintPermission', () => {
@@ -100,14 +108,6 @@
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableAllowListExpectSuccess(alice, collectionId);
await setMintPermissionExpectFailure(bob, collectionId, true);
- });
-
- it('Collection admin fails on set', async () => {
- await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
- await setMintPermissionExpectFailure(bob, collectionId, true);
- });
});
it('ensure non-allow-listed non-privileged address can\'t mint tokens', async () => {
tests/src/setPublicAccessMode.test.tsdiffbeforeafterboth--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -103,22 +103,23 @@
await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
});
});
-});
-describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
- before(async () => {
- await usingApi(async (api, privateKeyWrapper) => {
- alice = privateKeyWrapper('//Alice');
- bob = privateKeyWrapper('//Bob');
- });
- });
it('setPublicAccessMode by collection admin', async () => {
await usingApi(async (api: ApiPromise) => {
// tslint:disable-next-line: no-bitwise
const collectionId = await createCollectionExpectSuccess();
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
const tx = api.tx.unique.setCollectionPermissions(collectionId, {access: 'AllowList'});
- await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.not.rejected;
+ });
+ });
+});
+
+describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
+ before(async () => {
+ await usingApi(async (api, privateKeyWrapper) => {
+ alice = privateKeyWrapper('//Alice');
+ bob = privateKeyWrapper('//Bob');
});
});
});