difftreelog
fmt
in: master
5 files changed
tests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/eth/collectionSponsoring.test.ts
+++ b/tests/src/eth/collectionSponsoring.test.ts
@@ -161,19 +161,17 @@
{
const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});
const event = helper.eth.normalizeEvents(result.events)
- .find(event => event.event === 'Transfer');;
+ .find(event => event.event === 'Transfer');
- expect(event).to.be.deep.equal(
- {
- address: collectionAddress,
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: user,
- tokenId: '1',
- },
+ expect(event).to.be.deep.equal({
+ address: collectionAddress,
+ event: 'Transfer',
+ args: {
+ from: '0x0000000000000000000000000000000000000000',
+ to: user,
+ tokenId: '1',
},
- );
+ });
const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));
const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));
@@ -276,20 +274,18 @@
const tokenId = mintingResult.events.Transfer.returnValues.tokenId;
const event = helper.eth.normalizeEvents(mintingResult.events)
- .find(event => event.event === 'Transfer');
+ .find(event => event.event === 'Transfer');
const address = helper.ethAddress.fromCollectionId(collectionId);
- expect(event).to.be.deep.equal(
- {
- address,
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: user,
- tokenId: '1',
- },
+ expect(event).to.be.deep.equal({
+ address,
+ event: 'Transfer',
+ args: {
+ from: '0x0000000000000000000000000000000000000000',
+ to: user,
+ tokenId: '1',
},
- );
+ });
expect(await collectionEvm.methods.tokenURI(tokenId).call({from: user})).to.be.equal('Test URI');
const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));
tests/src/eth/events.test.tsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import { expect } from 'chai';18import {IKeyringPair} from '@polkadot/types/types';19import { EthUniqueHelper, itEth, usingEthPlaygrounds } from './util';20import { TCollectionMode } from '../util/playgrounds/types';2122let donor: IKeyringPair;23 24before(async function () {25 await usingEthPlaygrounds(async (_helper, privateKey) => {26 donor = await privateKey({filename: __filename});27 });28});2930async function testCollectionCreatedAndDestroy(helper: EthUniqueHelper, mode: TCollectionMode) {31 const owner = await helper.eth.createAccountWithBalance(donor);32 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionCreated', 'CollectionDestroyed']}]);33 const {collectionAddress, events: ethEvents} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');34 {35 expect(ethEvents).to.be.like([36 {37 event: 'CollectionCreated',38 args: {39 owner: owner,40 collectionId: collectionAddress41 }42 }43 ]);44 expect(subEvents).to.be.like([{method: 'CollectionCreated'}]);45 ethEvents.pop();46 subEvents.pop();47 }48 {49 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);50 let result = await collectionHelper.methods.destroyCollection(collectionAddress).send({from:owner});51 expect(result.events).to.be.like({52 CollectionDestroyed: {53 returnValues: {54 collectionId: collectionAddress55 }56 }57 });58 expect(subEvents).to.be.like([{method: 'CollectionDestroyed'}]);59 }60 unsubscribe();61}6263async function testCollectionPropertySetAndCollectionPropertyDeleted(helper: EthUniqueHelper, mode: TCollectionMode) {64 const owner = await helper.eth.createAccountWithBalance(donor);65 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');66 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);67 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);68 69 let {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionPropertySet', 'CollectionPropertyDeleted']}]);70 {71 const ethEvents: any = [];72 collectionHelper.events.allEvents((_: any, event: any) => {73 ethEvents.push(event);74 });75 await collection.methods.setCollectionProperties([{key: 'A', value: [0,1,2,3]}]).send({from:owner});76 expect(ethEvents).to.be.like([77 {78 event: 'CollectionChanged',79 returnValues: {80 collectionId: collectionAddress81 }82 }83 ]);84 expect(subEvents).to.be.like([{method: 'CollectionPropertySet'}]);85 subEvents.pop();86 }87 {88 const ethEvents: any = [];89 collectionHelper.events.allEvents((_: any, event: any) => {90 ethEvents.push(event);91 });92 await collection.methods.deleteCollectionProperties(['A']).send({from:owner});93 expect(ethEvents).to.be.like([94 {95 event: 'CollectionChanged',96 returnValues: {97 collectionId: collectionAddress98 }99 }100 ]);101 expect(subEvents).to.be.like([{method: 'CollectionPropertyDeleted'}]);102 }103 unsubscribe();104}105106async function testPropertyPermissionSet(helper: EthUniqueHelper, mode: TCollectionMode) {107 const owner = await helper.eth.createAccountWithBalance(donor);108 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');109 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);110 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);111 const eethEvents: any = [];112 collectionHelper.events.allEvents((_: any, event: any) => {113 eethEvents.push(event);114 });115 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['PropertyPermissionSet']}]);116 await collection.methods.setTokenPropertyPermission('testKey', true, true, true).send({from: owner});117 expect(eethEvents).to.be.like([118 {119 event: 'CollectionChanged',120 returnValues: {121 collectionId: collectionAddress122 }123 }124 ]);125 expect(subEvents).to.be.like([{method: 'PropertyPermissionSet'}]);126 unsubscribe();127}128129async function testAllowListAddressAddedAndAllowListAddressRemoved(helper: EthUniqueHelper, mode: TCollectionMode) {130 const owner = await helper.eth.createAccountWithBalance(donor);131 const user = helper.ethCrossAccount.createAccount();132 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');133 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);134 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);135 const ethEvents: any[] = [];136 collectionHelper.events.allEvents((_: any, event: any) => {137 ethEvents.push(event);138 });139140 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['AllowListAddressAdded', 'AllowListAddressRemoved']}]);141 {142 await collection.methods.addToCollectionAllowListCross(user).send({from: owner});143 expect(ethEvents).to.be.like([144 {145 event: 'CollectionChanged',146 returnValues: {147 collectionId: collectionAddress148 }149 }150 ]);151 expect(subEvents).to.be.like([{method: 'AllowListAddressAdded'}]);152 ethEvents.pop();153 subEvents.pop();154 }155 {156 await collection.methods.removeFromCollectionAllowListCross(user).send({from: owner});157 expect(ethEvents.length).to.be.eq(1);158 expect(ethEvents).to.be.like([159 {160 event: 'CollectionChanged',161 returnValues: {162 collectionId: collectionAddress163 }164 }165 ]);166 expect(subEvents).to.be.like([{method: 'AllowListAddressRemoved'}]);167 }168 unsubscribe();169}170171async function testCollectionAdminAddedAndCollectionAdminRemoved(helper: EthUniqueHelper, mode: TCollectionMode) {172 const owner = await helper.eth.createAccountWithBalance(donor);173 const user = helper.ethCrossAccount.createAccount();174 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');175 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);176 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);177 const ethEvents: any = [];178 collectionHelper.events.allEvents((_: any, event: any) => {179 ethEvents.push(event);180 });181 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionAdminAdded', 'CollectionAdminRemoved']}]);182 {183 await collection.methods.addCollectionAdminCross(user).send({from: owner});184 expect(ethEvents).to.be.like([185 {186 event: 'CollectionChanged',187 returnValues: {188 collectionId: collectionAddress189 }190 }191 ]);192 expect(subEvents).to.be.like([{method: 'CollectionAdminAdded'}]);193 ethEvents.pop();194 subEvents.pop();195 }196 {197 await collection.methods.removeCollectionAdminCross(user).send({from: owner});198 expect(ethEvents).to.be.like([199 {200 event: 'CollectionChanged',201 returnValues: {202 collectionId: collectionAddress203 }204 }205 ]);206 expect(subEvents).to.be.like([{method: 'CollectionAdminRemoved'}]);207 }208 unsubscribe();209}210211async function testCollectionLimitSet(helper: EthUniqueHelper, mode: TCollectionMode) {212 const owner = await helper.eth.createAccountWithBalance(donor);213 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');214 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);215 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);216 const ethEvents: any = [];217 collectionHelper.events.allEvents((_: any, event: any) => {218 ethEvents.push(event);219 });220 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionLimitSet']}]);221 {222 await collection.methods.setCollectionLimit('ownerCanTransfer', 0n).send({from: owner});223 expect(ethEvents).to.be.like([224 {225 event: 'CollectionChanged',226 returnValues: {227 collectionId: collectionAddress228 }229 }230 ]);231 expect(subEvents).to.be.like([{method: 'CollectionLimitSet'}]);232 }233 unsubscribe();234}235236async function testCollectionOwnedChanged(helper: EthUniqueHelper, mode: TCollectionMode) {237 const owner = await helper.eth.createAccountWithBalance(donor);238 const new_owner = helper.ethCrossAccount.createAccount();239 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');240 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);241 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);242 const ethEvents: any = [];243 collectionHelper.events.allEvents((_: any, event: any) => {244 ethEvents.push(event);245 });246 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionOwnedChanged']}]);247 {248 await collection.methods.changeCollectionOwnerCross(new_owner).send({from: owner});249 expect(ethEvents).to.be.like([250 {251 event: 'CollectionChanged',252 returnValues: {253 collectionId: collectionAddress254 }255 }256 ]);257 expect(subEvents).to.be.like([{method: 'CollectionOwnedChanged'}]);258 }259 unsubscribe();260}261262async function testCollectionPermissionSet(helper: EthUniqueHelper, mode: TCollectionMode) {263 const owner = await helper.eth.createAccountWithBalance(donor);264 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');265 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);266 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);267 const ethEvents: any = [];268 collectionHelper.events.allEvents((_: any, event: any) => {269 ethEvents.push(event);270 });271 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionPermissionSet']}]);272 {273 await collection.methods.setCollectionMintMode(true).send({from: owner});274 expect(ethEvents).to.be.like([275 {276 event: 'CollectionChanged',277 returnValues: {278 collectionId: collectionAddress279 }280 }281 ]);282 expect(subEvents).to.be.like([{method: 'CollectionPermissionSet'}]);283 ethEvents.pop();284 subEvents.pop();285 }286 {287 await collection.methods.setCollectionAccess(1).send({from: owner});288 expect(ethEvents).to.be.like([289 {290 event: 'CollectionChanged',291 returnValues: {292 collectionId: collectionAddress293 }294 }295 ]);296 expect(subEvents).to.be.like([{method: 'CollectionPermissionSet'}]);297 }298 unsubscribe();299}300301async function testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper: EthUniqueHelper, mode: TCollectionMode) {302 const owner = await helper.eth.createAccountWithBalance(donor);303 const sponsor = await helper.ethCrossAccount.createAccountWithBalance(donor);304 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');305 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);306 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);307 const ethEvents: any = [];308 collectionHelper.events.allEvents((_: any, event: any) => {309 ethEvents.push(event);310 });311 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{312 section: 'common', names: ['CollectionSponsorSet', 'SponsorshipConfirmed', 'CollectionSponsorRemoved'313 ]}]);314 {315 await collection.methods.setCollectionSponsorCross(sponsor).send({from: owner});316 expect(ethEvents).to.be.like([317 {318 event: 'CollectionChanged',319 returnValues: {320 collectionId: collectionAddress321 }322 }323 ]);324 expect(subEvents).to.be.like([{method: 'CollectionSponsorSet'}]);325 ethEvents.pop();326 subEvents.pop();327 }328 {329 await collection.methods.confirmCollectionSponsorship().send({from: sponsor.eth});330 expect(ethEvents).to.be.like([331 {332 event: 'CollectionChanged',333 returnValues: {334 collectionId: collectionAddress335 }336 }337 ]);338 expect(subEvents).to.be.like([{method: 'SponsorshipConfirmed'}]);339 ethEvents.pop();340 subEvents.pop();341 }342 {343 await collection.methods.removeCollectionSponsor().send({from: owner});344 expect(ethEvents).to.be.like([345 {346 event: 'CollectionChanged',347 returnValues: {348 collectionId: collectionAddress349 }350 }351 ]);352 expect(subEvents).to.be.like([{method: 'CollectionSponsorRemoved'}]);353 }354 unsubscribe();355}356357async function testTokenPropertySetAndTokenPropertyDeleted(helper: EthUniqueHelper, mode: TCollectionMode) {358 const owner = await helper.eth.createAccountWithBalance(donor);359 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');360 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);361 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);362 const result = await collection.methods.mint(owner).send({from: owner});363 const tokenId = result.events.Transfer.returnValues.tokenId;364 await collection.methods.setTokenPropertyPermission('A', true, true, true).send({from: owner});365366367 const ethEvents: any = [];368 collectionHelper.events.allEvents((_: any, event: any) => {369 ethEvents.push(event);370 });371 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['TokenPropertySet', 'TokenPropertyDeleted']}]);372 {373 await collection.methods.setProperties(tokenId, [{key: 'A', value: [1,2,3]}]).send({from: owner});374 expect(ethEvents).to.be.like([375 {376 event: 'TokenChanged',377 returnValues: {378 collectionId: collectionAddress379 }380 }381 ]);382 expect(subEvents).to.be.like([{method: 'TokenPropertySet'}]);383 ethEvents.pop();384 subEvents.pop();385 }386 {387 await collection.methods.deleteProperties(tokenId, ['A']).send({from: owner});388 expect(ethEvents).to.be.like([389 {390 event: 'TokenChanged',391 returnValues: {392 collectionId: collectionAddress393 }394 }395 ]);396 expect(subEvents).to.be.like([{method: 'TokenPropertyDeleted'}]);397 }398 unsubscribe();399}400401describe('[FT] Sync sub & eth events', () => {402 const mode: TCollectionMode = 'ft';403404 itEth('CollectionCreated and CollectionDestroyed events', async ({helper}) => {405 await testCollectionCreatedAndDestroy(helper, mode);406 });407408 itEth('CollectionChanged event for CollectionPropertySet and CollectionPropertyDeleted', async ({helper}) => {409 await testCollectionPropertySetAndCollectionPropertyDeleted(helper, mode);410 });411 412 itEth('CollectionChanged event for AllowListAddressAdded, AllowListAddressRemoved', async ({helper}) => {413 await testAllowListAddressAddedAndAllowListAddressRemoved(helper, mode);414 });415 416 itEth('CollectionChanged event for CollectionAdminAdded, CollectionAdminRemoved', async ({helper}) => {417 await testCollectionAdminAddedAndCollectionAdminRemoved(helper, mode);418 });419 420 itEth('CollectionChanged event for CollectionLimitSet', async ({helper}) => {421 await testCollectionLimitSet(helper, mode);422 });423 424 itEth('CollectionChanged event for CollectionOwnedChanged', async ({helper}) => {425 await testCollectionOwnedChanged(helper, mode);426 });427 428 itEth('CollectionChanged event for CollectionPermissionSet', async ({helper}) => {429 await testCollectionPermissionSet(helper, mode);430 });431432 itEth('CollectionChanged event for CollectionSponsorSet, SponsorshipConfirmed, CollectionSponsorRemoved', async ({helper}) => {433 await testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper, mode);434 });435});436437describe('[NFT] Sync sub & eth events', () => {438 const mode: TCollectionMode = 'nft';439440 itEth('CollectionCreated and CollectionDestroyed events', async ({helper}) => {441 await testCollectionCreatedAndDestroy(helper, mode);442 });443444 itEth('CollectionChanged event for CollectionPropertySet and CollectionPropertyDeleted', async ({helper}) => {445 await testCollectionPropertySetAndCollectionPropertyDeleted(helper, mode);446 });447 448 itEth('CollectionChanged event for PropertyPermissionSet', async ({helper}) => {449 await testPropertyPermissionSet(helper, mode);450 });451 452 itEth('CollectionChanged event for AllowListAddressAdded, AllowListAddressRemoved', async ({helper}) => {453 await testAllowListAddressAddedAndAllowListAddressRemoved(helper, mode);454 });455 456 itEth('CollectionChanged event for CollectionAdminAdded, CollectionAdminRemoved', async ({helper}) => {457 await testCollectionAdminAddedAndCollectionAdminRemoved(helper, mode);458 });459 460 itEth('CollectionChanged event for CollectionLimitSet', async ({helper}) => {461 await testCollectionLimitSet(helper, mode);462 });463 464 itEth('CollectionChanged event for CollectionOwnedChanged', async ({helper}) => {465 await testCollectionOwnedChanged(helper, mode);466 });467 468 itEth('CollectionChanged event for CollectionPermissionSet', async ({helper}) => {469 await testCollectionPermissionSet(helper, mode);470 });471472 itEth('CollectionChanged event for CollectionSponsorSet, SponsorshipConfirmed, CollectionSponsorRemoved', async ({helper}) => {473 await testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper, mode);474 });475 476 itEth('CollectionChanged event for TokenPropertySet, TokenPropertyDeleted', async ({helper}) => {477 await testTokenPropertySetAndTokenPropertyDeleted(helper, mode);478 });479});480481describe('[RFT] Sync sub & eth events', () => {482 const mode: TCollectionMode = 'rft';483484 itEth('CollectionCreated and CollectionDestroyed events', async ({helper}) => {485 await testCollectionCreatedAndDestroy(helper, mode);486 });487488 itEth('CollectionChanged event for CollectionPropertySet and CollectionPropertyDeleted', async ({helper}) => {489 await testCollectionPropertySetAndCollectionPropertyDeleted(helper, mode);490 });491 492 itEth('CollectionChanged event for PropertyPermissionSet', async ({helper}) => {493 await testPropertyPermissionSet(helper, mode);494 });495 496 itEth('CollectionChanged event for AllowListAddressAdded, AllowListAddressRemoved', async ({helper}) => {497 await testAllowListAddressAddedAndAllowListAddressRemoved(helper, mode);498 });499 500 itEth('CollectionChanged event for CollectionAdminAdded, CollectionAdminRemoved', async ({helper}) => {501 await testCollectionAdminAddedAndCollectionAdminRemoved(helper, mode);502 });503 504 itEth('CollectionChanged event for CollectionLimitSet', async ({helper}) => {505 await testCollectionLimitSet(helper, mode);506 });507 508 itEth('CollectionChanged event for CollectionOwnedChanged', async ({helper}) => {509 await testCollectionOwnedChanged(helper, mode);510 });511 512 itEth('CollectionChanged event for CollectionPermissionSet', async ({helper}) => {513 await testCollectionPermissionSet(helper, mode);514 });515516 itEth('CollectionChanged event for CollectionSponsorSet, SponsorshipConfirmed, CollectionSponsorRemoved', async ({helper}) => {517 await testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper, mode);518 });519 520 itEth('CollectionChanged event for TokenPropertySet, TokenPropertyDeleted', async ({helper}) => {521 await testTokenPropertySetAndTokenPropertyDeleted(helper, mode);522 });523});1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {expect} from 'chai';18import {IKeyringPair} from '@polkadot/types/types';19import {EthUniqueHelper, itEth, usingEthPlaygrounds} from './util';20import {TCollectionMode} from '../util/playgrounds/types';2122let donor: IKeyringPair;23 24before(async function () {25 await usingEthPlaygrounds(async (_helper, privateKey) => {26 donor = await privateKey({filename: __filename});27 });28});2930async function testCollectionCreatedAndDestroy(helper: EthUniqueHelper, mode: TCollectionMode) {31 const owner = await helper.eth.createAccountWithBalance(donor);32 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionCreated', 'CollectionDestroyed']}]);33 const {collectionAddress, events: ethEvents} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');34 {35 expect(ethEvents).to.be.like([36 {37 event: 'CollectionCreated',38 args: {39 owner: owner,40 collectionId: collectionAddress,41 },42 },43 ]);44 expect(subEvents).to.be.like([{method: 'CollectionCreated'}]);45 ethEvents.pop();46 subEvents.pop();47 }48 {49 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);50 const result = await collectionHelper.methods.destroyCollection(collectionAddress).send({from:owner});51 expect(result.events).to.be.like({52 CollectionDestroyed: {53 returnValues: {54 collectionId: collectionAddress,55 },56 },57 });58 expect(subEvents).to.be.like([{method: 'CollectionDestroyed'}]);59 }60 unsubscribe();61}6263async function testCollectionPropertySetAndCollectionPropertyDeleted(helper: EthUniqueHelper, mode: TCollectionMode) {64 const owner = await helper.eth.createAccountWithBalance(donor);65 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');66 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);67 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);68 69 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionPropertySet', 'CollectionPropertyDeleted']}]);70 {71 const ethEvents: any = [];72 collectionHelper.events.allEvents((_: any, event: any) => {73 ethEvents.push(event);74 });75 await collection.methods.setCollectionProperties([{key: 'A', value: [0,1,2,3]}]).send({from:owner});76 expect(ethEvents).to.be.like([77 {78 event: 'CollectionChanged',79 returnValues: {80 collectionId: collectionAddress,81 },82 },83 ]);84 expect(subEvents).to.be.like([{method: 'CollectionPropertySet'}]);85 subEvents.pop();86 }87 {88 const ethEvents: any = [];89 collectionHelper.events.allEvents((_: any, event: any) => {90 ethEvents.push(event);91 });92 await collection.methods.deleteCollectionProperties(['A']).send({from:owner});93 expect(ethEvents).to.be.like([94 {95 event: 'CollectionChanged',96 returnValues: {97 collectionId: collectionAddress,98 },99 },100 ]);101 expect(subEvents).to.be.like([{method: 'CollectionPropertyDeleted'}]);102 }103 unsubscribe();104}105106async function testPropertyPermissionSet(helper: EthUniqueHelper, mode: TCollectionMode) {107 const owner = await helper.eth.createAccountWithBalance(donor);108 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');109 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);110 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);111 const eethEvents: any = [];112 collectionHelper.events.allEvents((_: any, event: any) => {113 eethEvents.push(event);114 });115 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['PropertyPermissionSet']}]);116 await collection.methods.setTokenPropertyPermission('testKey', true, true, true).send({from: owner});117 expect(eethEvents).to.be.like([118 {119 event: 'CollectionChanged',120 returnValues: {121 collectionId: collectionAddress,122 },123 },124 ]);125 expect(subEvents).to.be.like([{method: 'PropertyPermissionSet'}]);126 unsubscribe();127}128129async function testAllowListAddressAddedAndAllowListAddressRemoved(helper: EthUniqueHelper, mode: TCollectionMode) {130 const owner = await helper.eth.createAccountWithBalance(donor);131 const user = helper.ethCrossAccount.createAccount();132 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');133 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);134 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);135 const ethEvents: any[] = [];136 collectionHelper.events.allEvents((_: any, event: any) => {137 ethEvents.push(event);138 });139140 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['AllowListAddressAdded', 'AllowListAddressRemoved']}]);141 {142 await collection.methods.addToCollectionAllowListCross(user).send({from: owner});143 expect(ethEvents).to.be.like([144 {145 event: 'CollectionChanged',146 returnValues: {147 collectionId: collectionAddress,148 },149 },150 ]);151 expect(subEvents).to.be.like([{method: 'AllowListAddressAdded'}]);152 ethEvents.pop();153 subEvents.pop();154 }155 {156 await collection.methods.removeFromCollectionAllowListCross(user).send({from: owner});157 expect(ethEvents.length).to.be.eq(1);158 expect(ethEvents).to.be.like([159 {160 event: 'CollectionChanged',161 returnValues: {162 collectionId: collectionAddress,163 },164 },165 ]);166 expect(subEvents).to.be.like([{method: 'AllowListAddressRemoved'}]);167 }168 unsubscribe();169}170171async function testCollectionAdminAddedAndCollectionAdminRemoved(helper: EthUniqueHelper, mode: TCollectionMode) {172 const owner = await helper.eth.createAccountWithBalance(donor);173 const user = helper.ethCrossAccount.createAccount();174 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');175 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);176 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);177 const ethEvents: any = [];178 collectionHelper.events.allEvents((_: any, event: any) => {179 ethEvents.push(event);180 });181 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionAdminAdded', 'CollectionAdminRemoved']}]);182 {183 await collection.methods.addCollectionAdminCross(user).send({from: owner});184 expect(ethEvents).to.be.like([185 {186 event: 'CollectionChanged',187 returnValues: {188 collectionId: collectionAddress,189 },190 },191 ]);192 expect(subEvents).to.be.like([{method: 'CollectionAdminAdded'}]);193 ethEvents.pop();194 subEvents.pop();195 }196 {197 await collection.methods.removeCollectionAdminCross(user).send({from: owner});198 expect(ethEvents).to.be.like([199 {200 event: 'CollectionChanged',201 returnValues: {202 collectionId: collectionAddress,203 },204 },205 ]);206 expect(subEvents).to.be.like([{method: 'CollectionAdminRemoved'}]);207 }208 unsubscribe();209}210211async function testCollectionLimitSet(helper: EthUniqueHelper, mode: TCollectionMode) {212 const owner = await helper.eth.createAccountWithBalance(donor);213 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');214 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);215 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);216 const ethEvents: any = [];217 collectionHelper.events.allEvents((_: any, event: any) => {218 ethEvents.push(event);219 });220 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionLimitSet']}]);221 {222 await collection.methods.setCollectionLimit('ownerCanTransfer', 0n).send({from: owner});223 expect(ethEvents).to.be.like([224 {225 event: 'CollectionChanged',226 returnValues: {227 collectionId: collectionAddress,228 },229 },230 ]);231 expect(subEvents).to.be.like([{method: 'CollectionLimitSet'}]);232 }233 unsubscribe();234}235236async function testCollectionOwnedChanged(helper: EthUniqueHelper, mode: TCollectionMode) {237 const owner = await helper.eth.createAccountWithBalance(donor);238 const new_owner = helper.ethCrossAccount.createAccount();239 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');240 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);241 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);242 const ethEvents: any = [];243 collectionHelper.events.allEvents((_: any, event: any) => {244 ethEvents.push(event);245 });246 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionOwnedChanged']}]);247 {248 await collection.methods.changeCollectionOwnerCross(new_owner).send({from: owner});249 expect(ethEvents).to.be.like([250 {251 event: 'CollectionChanged',252 returnValues: {253 collectionId: collectionAddress,254 },255 },256 ]);257 expect(subEvents).to.be.like([{method: 'CollectionOwnedChanged'}]);258 }259 unsubscribe();260}261262async function testCollectionPermissionSet(helper: EthUniqueHelper, mode: TCollectionMode) {263 const owner = await helper.eth.createAccountWithBalance(donor);264 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');265 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);266 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);267 const ethEvents: any = [];268 collectionHelper.events.allEvents((_: any, event: any) => {269 ethEvents.push(event);270 });271 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionPermissionSet']}]);272 {273 await collection.methods.setCollectionMintMode(true).send({from: owner});274 expect(ethEvents).to.be.like([275 {276 event: 'CollectionChanged',277 returnValues: {278 collectionId: collectionAddress,279 },280 },281 ]);282 expect(subEvents).to.be.like([{method: 'CollectionPermissionSet'}]);283 ethEvents.pop();284 subEvents.pop();285 }286 {287 await collection.methods.setCollectionAccess(1).send({from: owner});288 expect(ethEvents).to.be.like([289 {290 event: 'CollectionChanged',291 returnValues: {292 collectionId: collectionAddress,293 },294 },295 ]);296 expect(subEvents).to.be.like([{method: 'CollectionPermissionSet'}]);297 }298 unsubscribe();299}300301async function testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper: EthUniqueHelper, mode: TCollectionMode) {302 const owner = await helper.eth.createAccountWithBalance(donor);303 const sponsor = await helper.ethCrossAccount.createAccountWithBalance(donor);304 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');305 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);306 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);307 const ethEvents: any = [];308 collectionHelper.events.allEvents((_: any, event: any) => {309 ethEvents.push(event);310 });311 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{312 section: 'common', names: ['CollectionSponsorSet', 'SponsorshipConfirmed', 'CollectionSponsorRemoved',313 ]}]);314 {315 await collection.methods.setCollectionSponsorCross(sponsor).send({from: owner});316 expect(ethEvents).to.be.like([317 {318 event: 'CollectionChanged',319 returnValues: {320 collectionId: collectionAddress,321 },322 },323 ]);324 expect(subEvents).to.be.like([{method: 'CollectionSponsorSet'}]);325 ethEvents.pop();326 subEvents.pop();327 }328 {329 await collection.methods.confirmCollectionSponsorship().send({from: sponsor.eth});330 expect(ethEvents).to.be.like([331 {332 event: 'CollectionChanged',333 returnValues: {334 collectionId: collectionAddress,335 },336 },337 ]);338 expect(subEvents).to.be.like([{method: 'SponsorshipConfirmed'}]);339 ethEvents.pop();340 subEvents.pop();341 }342 {343 await collection.methods.removeCollectionSponsor().send({from: owner});344 expect(ethEvents).to.be.like([345 {346 event: 'CollectionChanged',347 returnValues: {348 collectionId: collectionAddress,349 },350 },351 ]);352 expect(subEvents).to.be.like([{method: 'CollectionSponsorRemoved'}]);353 }354 unsubscribe();355}356357async function testTokenPropertySetAndTokenPropertyDeleted(helper: EthUniqueHelper, mode: TCollectionMode) {358 const owner = await helper.eth.createAccountWithBalance(donor);359 const {collectionAddress} = await helper.eth.createCollection(mode, owner, 'A', 'B', 'C');360 const collection = await helper.ethNativeContract.collection(collectionAddress, mode, owner);361 const collectionHelper = helper.ethNativeContract.collectionHelpers(owner);362 const result = await collection.methods.mint(owner).send({from: owner});363 const tokenId = result.events.Transfer.returnValues.tokenId;364 await collection.methods.setTokenPropertyPermission('A', true, true, true).send({from: owner});365366367 const ethEvents: any = [];368 collectionHelper.events.allEvents((_: any, event: any) => {369 ethEvents.push(event);370 });371 const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['TokenPropertySet', 'TokenPropertyDeleted']}]);372 {373 await collection.methods.setProperties(tokenId, [{key: 'A', value: [1,2,3]}]).send({from: owner});374 expect(ethEvents).to.be.like([375 {376 event: 'TokenChanged',377 returnValues: {378 collectionId: collectionAddress,379 },380 },381 ]);382 expect(subEvents).to.be.like([{method: 'TokenPropertySet'}]);383 ethEvents.pop();384 subEvents.pop();385 }386 {387 await collection.methods.deleteProperties(tokenId, ['A']).send({from: owner});388 expect(ethEvents).to.be.like([389 {390 event: 'TokenChanged',391 returnValues: {392 collectionId: collectionAddress,393 },394 },395 ]);396 expect(subEvents).to.be.like([{method: 'TokenPropertyDeleted'}]);397 }398 unsubscribe();399}400401describe('[FT] Sync sub & eth events', () => {402 const mode: TCollectionMode = 'ft';403404 itEth('CollectionCreated and CollectionDestroyed events', async ({helper}) => {405 await testCollectionCreatedAndDestroy(helper, mode);406 });407408 itEth('CollectionChanged event for CollectionPropertySet and CollectionPropertyDeleted', async ({helper}) => {409 await testCollectionPropertySetAndCollectionPropertyDeleted(helper, mode);410 });411 412 itEth('CollectionChanged event for AllowListAddressAdded, AllowListAddressRemoved', async ({helper}) => {413 await testAllowListAddressAddedAndAllowListAddressRemoved(helper, mode);414 });415 416 itEth('CollectionChanged event for CollectionAdminAdded, CollectionAdminRemoved', async ({helper}) => {417 await testCollectionAdminAddedAndCollectionAdminRemoved(helper, mode);418 });419 420 itEth('CollectionChanged event for CollectionLimitSet', async ({helper}) => {421 await testCollectionLimitSet(helper, mode);422 });423 424 itEth('CollectionChanged event for CollectionOwnedChanged', async ({helper}) => {425 await testCollectionOwnedChanged(helper, mode);426 });427 428 itEth('CollectionChanged event for CollectionPermissionSet', async ({helper}) => {429 await testCollectionPermissionSet(helper, mode);430 });431432 itEth('CollectionChanged event for CollectionSponsorSet, SponsorshipConfirmed, CollectionSponsorRemoved', async ({helper}) => {433 await testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper, mode);434 });435});436437describe('[NFT] Sync sub & eth events', () => {438 const mode: TCollectionMode = 'nft';439440 itEth('CollectionCreated and CollectionDestroyed events', async ({helper}) => {441 await testCollectionCreatedAndDestroy(helper, mode);442 });443444 itEth('CollectionChanged event for CollectionPropertySet and CollectionPropertyDeleted', async ({helper}) => {445 await testCollectionPropertySetAndCollectionPropertyDeleted(helper, mode);446 });447 448 itEth('CollectionChanged event for PropertyPermissionSet', async ({helper}) => {449 await testPropertyPermissionSet(helper, mode);450 });451 452 itEth('CollectionChanged event for AllowListAddressAdded, AllowListAddressRemoved', async ({helper}) => {453 await testAllowListAddressAddedAndAllowListAddressRemoved(helper, mode);454 });455 456 itEth('CollectionChanged event for CollectionAdminAdded, CollectionAdminRemoved', async ({helper}) => {457 await testCollectionAdminAddedAndCollectionAdminRemoved(helper, mode);458 });459 460 itEth('CollectionChanged event for CollectionLimitSet', async ({helper}) => {461 await testCollectionLimitSet(helper, mode);462 });463 464 itEth('CollectionChanged event for CollectionOwnedChanged', async ({helper}) => {465 await testCollectionOwnedChanged(helper, mode);466 });467 468 itEth('CollectionChanged event for CollectionPermissionSet', async ({helper}) => {469 await testCollectionPermissionSet(helper, mode);470 });471472 itEth('CollectionChanged event for CollectionSponsorSet, SponsorshipConfirmed, CollectionSponsorRemoved', async ({helper}) => {473 await testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper, mode);474 });475 476 itEth('CollectionChanged event for TokenPropertySet, TokenPropertyDeleted', async ({helper}) => {477 await testTokenPropertySetAndTokenPropertyDeleted(helper, mode);478 });479});480481describe('[RFT] Sync sub & eth events', () => {482 const mode: TCollectionMode = 'rft';483484 itEth('CollectionCreated and CollectionDestroyed events', async ({helper}) => {485 await testCollectionCreatedAndDestroy(helper, mode);486 });487488 itEth('CollectionChanged event for CollectionPropertySet and CollectionPropertyDeleted', async ({helper}) => {489 await testCollectionPropertySetAndCollectionPropertyDeleted(helper, mode);490 });491 492 itEth('CollectionChanged event for PropertyPermissionSet', async ({helper}) => {493 await testPropertyPermissionSet(helper, mode);494 });495 496 itEth('CollectionChanged event for AllowListAddressAdded, AllowListAddressRemoved', async ({helper}) => {497 await testAllowListAddressAddedAndAllowListAddressRemoved(helper, mode);498 });499 500 itEth('CollectionChanged event for CollectionAdminAdded, CollectionAdminRemoved', async ({helper}) => {501 await testCollectionAdminAddedAndCollectionAdminRemoved(helper, mode);502 });503 504 itEth('CollectionChanged event for CollectionLimitSet', async ({helper}) => {505 await testCollectionLimitSet(helper, mode);506 });507 508 itEth('CollectionChanged event for CollectionOwnedChanged', async ({helper}) => {509 await testCollectionOwnedChanged(helper, mode);510 });511 512 itEth('CollectionChanged event for CollectionPermissionSet', async ({helper}) => {513 await testCollectionPermissionSet(helper, mode);514 });515516 itEth('CollectionChanged event for CollectionSponsorSet, SponsorshipConfirmed, CollectionSponsorRemoved', async ({helper}) => {517 await testCollectionSponsorSetAndSponsorshipConfirmedAndCollectionSponsorRemoved(helper, mode);518 });519 520 itEth('CollectionChanged event for TokenPropertySet, TokenPropertyDeleted', async ({helper}) => {521 await testTokenPropertySetAndTokenPropertyDeleted(helper, mode);522 });523});tests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterboth--- a/tests/src/eth/proxy/nonFungibleProxy.test.ts
+++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts
@@ -121,17 +121,15 @@
.find(event => event.event === 'Transfer')!;
event.address = event.address.toLocaleLowerCase();
- expect(event).to.be.deep.equal(
- {
- address: collectionAddress.toLocaleLowerCase(),
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: receiver,
- tokenId,
- },
+ expect(event).to.be.deep.equal({
+ address: collectionAddress.toLocaleLowerCase(),
+ event: 'Transfer',
+ args: {
+ from: '0x0000000000000000000000000000000000000000',
+ to: receiver,
+ tokenId,
},
- );
+ });
expect(await contract.methods.tokenURI(tokenId).call()).to.be.equal('Test URI');
}
@@ -159,17 +157,15 @@
.find(event => event.event === 'Transfer')!;
event.address = event.address.toLocaleLowerCase();
- expect(event).to.be.deep.equal(
- {
- address: collectionAddress.toLocaleLowerCase(),
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: receiver,
- tokenId,
- },
+ expect(event).to.be.deep.equal({
+ address: collectionAddress.toLocaleLowerCase(),
+ event: 'Transfer',
+ args: {
+ from: '0x0000000000000000000000000000000000000000',
+ to: receiver,
+ tokenId,
},
- );
+ });
expect(await contract.methods.tokenURI(tokenId).call()).to.be.equal('Test URI');
}
tests/src/eth/util/playgrounds/unique.dev.tsdiffbeforeafterboth--- a/tests/src/eth/util/playgrounds/unique.dev.ts
+++ b/tests/src/eth/util/playgrounds/unique.dev.ts
@@ -188,16 +188,16 @@
createCollectionMethodName(mode: TCollectionMode) {
switch (mode) {
- case 'ft':
- return 'createFTCollection';
- case 'nft':
- return 'createNFTCollection';
- case 'rft':
- return 'createRFTCollection';
+ case 'ft':
+ return 'createFTCollection';
+ case 'nft':
+ return 'createNFTCollection';
+ case 'rft':
+ return 'createRFTCollection';
}
}
- async createCollection(mode: TCollectionMode, signer: string, name: string, description: string, tokenPrefix: string, decimals: number = 18): Promise<{ collectionId: number, collectionAddress: string, events: NormalizedEvent[] }> {
+ async createCollection(mode: TCollectionMode, signer: string, name: string, description: string, tokenPrefix: string, decimals = 18): Promise<{ collectionId: number, collectionAddress: string, events: NormalizedEvent[] }> {
const collectionCreationPrice = this.helper.balance.getCollectionCreationPrice();
const collectionHelper = this.helper.ethNativeContract.collectionHelpers(signer);
const functionName: string = this.createCollectionMethodName(mode);
tests/src/util/playgrounds/unique.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/unique.ts
+++ b/tests/src/util/playgrounds/unique.ts
@@ -44,7 +44,7 @@
} from './types';
import {RuntimeDispatchInfo} from '@polkadot/types/interfaces';
import type {Vec} from '@polkadot/types-codec';
-import { FrameSystemEventRecord } from '@polkadot/types/lookup';
+import {FrameSystemEventRecord} from '@polkadot/types/lookup';
export class CrossAccountId implements ICrossAccountId {
Substrate?: TSubstrateAccount;
@@ -409,17 +409,17 @@
async subscribeEvents(expectedEvents: {section: string, names: string[]}[]) {
const collectedEvents: IEvent[] = [];
const unsubscribe = await this.getApi().query.system.events((events: Vec<FrameSystemEventRecord>) => {
- const ievents = this.eventHelper.extractEvents(events);
- ievents.forEach((event) => {
- expectedEvents.forEach((e => {
- if (event.section === e.section && e.names.includes(event.method)) {
- collectedEvents.push(event);
- }
- }))
- });
+ const ievents = this.eventHelper.extractEvents(events);
+ ievents.forEach((event) => {
+ expectedEvents.forEach((e => {
+ if (event.section === e.section && e.names.includes(event.method)) {
+ collectedEvents.push(event);
+ }
+ }));
+ });
});
return {unsubscribe: unsubscribe as any, collectedEvents};
-}
+ }
clearChainLog(): void {
this.chainLog = [];