difftreelog
tests: introduce feed alices + refactor tests to use the filename as donor key
in: master
64 files changed
tests/package.jsondiffbeforeafterboth--- a/tests/package.json
+++ b/tests/package.json
@@ -26,24 +26,25 @@
"scripts": {
"lint": "eslint --ext .ts,.js src/",
"fix": "eslint --ext .ts,.js src/ --fix",
- "test": "mocha --timeout 9999999 -r ts-node/register './src/**/*.test.ts'",
- "testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",
- "testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",
- "testEthNesting": "mocha --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.test.ts'",
- "testEthFractionalizer": "mocha --timeout 9999999 -r ts-node/register './**/eth/fractionalizer/**/*.test.ts'",
+ "feedAlices": "ts-node ./src/util/playgrounds/feedAlices.ts",
+
+ "test": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './src/**/*.test.ts'",
+ "testStructure": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register ./**/nesting/**.test.ts",
+ "testEth": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",
+ "testEthNesting": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.test.ts'",
+ "testEthFractionalizer": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/fractionalizer/**/*.test.ts'",
+ "testEthMarketplace": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",
+ "testCollision": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",
+ "testEvent": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register ./src/check-event/*.test.ts",
+ "testRmrk": "mocha --timeout 9999999 -r ts-node/register ./**/rmrk/**.test.ts",
+
"testEthPayable": "mocha --timeout 9999999 -r ts-node/register './**/eth/payable.test.ts'",
- "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",
- "loadTransfer": "ts-node src/transfer.nload.ts",
- "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",
- "testEvent": "mocha --timeout 9999999 -r ts-node/register ./src/check-event/*.test.ts",
+ "testEthTokenProperties": "mocha --timeout 9999999 -r ts-node/register ./**/eth/tokenProperties.test.ts",
"testNesting": "mocha --timeout 9999999 -r ts-node/register ./**/nest.test.ts",
"testUnnesting": "mocha --timeout 9999999 -r ts-node/register ./**/unnest.test.ts",
- "testStructure": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/**.test.ts",
"testProperties": "mocha --timeout 9999999 -r ts-node/register ./**/properties.test.ts ./**/getPropertiesRpc.test.ts",
"testMigration": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/migration-check.test.ts",
- "testRmrk": "mocha --timeout 9999999 -r ts-node/register ./**/rmrk/**.test.ts",
"testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts",
- "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts",
"testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts",
"testChangeCollectionOwner": "mocha --timeout 9999999 -r ts-node/register ./**/change-collection-owner.test.ts",
"testSetCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionSponsor.test.ts",
@@ -96,6 +97,10 @@
"testEthFT": "mocha --timeout 9999999 -r ts-node/register ./**/eth/fungible.test.ts",
"testRPC": "mocha --timeout 9999999 -r ts-node/register ./**/rpc.test.ts",
"testPromotion": "mocha --timeout 9999999 -r ts-node/register ./**/app-promotion.test.ts",
+
+ "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",
+ "loadTransfer": "ts-node src/transfer.nload.ts",
+
"polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json",
"polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .",
"polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .",
tests/src/addCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/addCollectionAdmin.test.ts
+++ b/tests/src/addCollectionAdmin.test.ts
@@ -21,8 +21,8 @@
let donor: IKeyringPair;
before(async () => {
- await usingPlaygrounds(async (_, privateKeyWrapper) => {
- donor = privateKeyWrapper('//Alice');
+ await usingPlaygrounds(async (_, privateKey) => {
+ donor = await privateKey({filename: __filename});
});
});
@@ -44,8 +44,8 @@
let donor: IKeyringPair;
before(async () => {
- await usingPlaygrounds(async (_, privateKeyWrapper) => {
- donor = privateKeyWrapper('//Alice');
+ await usingPlaygrounds(async (_, privateKey) => {
+ donor = await privateKey({filename: __filename});
});
});
tests/src/adminTransferAndBurn.test.tsdiffbeforeafterboth--- a/tests/src/adminTransferAndBurn.test.ts
+++ b/tests/src/adminTransferAndBurn.test.ts
@@ -24,7 +24,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);
});
});
tests/src/allowLists.test.tsdiffbeforeafterboth--- a/tests/src/allowLists.test.ts
+++ b/tests/src/allowLists.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor);
});
});
@@ -87,7 +87,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor);
});
});
@@ -163,7 +163,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor);
});
});
@@ -291,7 +291,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/app-promotion.test.tsdiffbeforeafterboth--- a/tests/src/app-promotion.test.ts
+++ b/tests/src/app-promotion.test.ts
@@ -43,8 +43,8 @@
before(async function () {
await usingPlaygrounds(async (helper, privateKey) => {
if (!getModuleNames(helper.api!).includes(Pallets.AppPromotion)) this.skip();
- alice = privateKey('//Alice');
- palletAdmin = privateKey('//Charlie'); // TODO use custom address
+ alice = await privateKey({filename: __filename});
+ [palletAdmin] = await helper.arrange.createAccounts([100n], alice);
await helper.signTransaction(alice, helper.api!.tx.sudo.sudo(helper.api!.tx.appPromotion.setAdminAddress({Substrate: palletAdmin.address})));
nominal = helper.balance.getOneTokenNominal();
await helper.balance.transferToSubstrate(alice, palletAdmin.address, 1000n * nominal);
tests/src/approve.test.tsdiffbeforeafterboth--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -104,7 +104,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -141,7 +141,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -184,7 +184,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -235,7 +235,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
});
});
@@ -265,7 +265,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -320,7 +320,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -357,7 +357,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
});
});
@@ -423,7 +423,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
});
});
@@ -474,7 +474,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -495,7 +495,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
tests/src/burnItem.test.tsdiffbeforeafterboth--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
@@ -80,7 +80,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
@@ -123,7 +123,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/change-collection-owner.test.tsdiffbeforeafterboth--- a/tests/src/change-collection-owner.test.ts
+++ b/tests/src/change-collection-owner.test.ts
@@ -23,7 +23,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
@@ -46,7 +46,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -108,7 +108,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
tests/src/check-event/burnItemEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/burnItemEvent.test.ts
+++ b/tests/src/check-event/burnItemEvent.test.ts
@@ -24,7 +24,7 @@
let alice: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/check-event/createCollectionEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/createCollectionEvent.test.ts
+++ b/tests/src/check-event/createCollectionEvent.test.ts
@@ -23,7 +23,7 @@
let alice: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/check-event/createItemEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/createItemEvent.test.ts
+++ b/tests/src/check-event/createItemEvent.test.ts
@@ -23,7 +23,7 @@
let alice: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/check-event/createMultipleItemsEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/createMultipleItemsEvent.test.ts
+++ b/tests/src/check-event/createMultipleItemsEvent.test.ts
@@ -23,7 +23,7 @@
let alice: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/check-event/destroyCollectionEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/destroyCollectionEvent.test.ts
+++ b/tests/src/check-event/destroyCollectionEvent.test.ts
@@ -23,7 +23,7 @@
let alice: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/check-event/transferEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/transferEvent.test.ts
+++ b/tests/src/check-event/transferEvent.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
});
});
tests/src/check-event/transferFromEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/transferFromEvent.test.ts
+++ b/tests/src/check-event/transferFromEvent.test.ts
@@ -24,7 +24,7 @@
let bob: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
});
});
tests/src/confirmSponsorship.test.tsdiffbeforeafterboth--- a/tests/src/confirmSponsorship.test.ts
+++ b/tests/src/confirmSponsorship.test.ts
@@ -37,7 +37,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie, zeroBalance] = await helper.arrange.createAccounts([100n, 100n, 100n, 0n], donor);
});
});
@@ -183,7 +183,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie, ownerZeroBalance, senderZeroBalance] = await helper.arrange.createAccounts([100n, 100n, 100n, 0n, 0n], donor);
});
});
tests/src/createCollection.test.tsdiffbeforeafterboth--- a/tests/src/createCollection.test.ts
+++ b/tests/src/createCollection.test.ts
@@ -49,7 +49,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([100n], donor);
});
});
@@ -110,7 +110,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([100n], donor);
});
});
tests/src/createItem.test.tsdiffbeforeafterboth--- a/tests/src/createItem.test.ts
+++ b/tests/src/createItem.test.ts
@@ -50,7 +50,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
@@ -179,7 +179,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/createMultipleItems.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -22,7 +22,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([100n], donor);
});
});
@@ -168,7 +168,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItemsEx.test.ts
+++ b/tests/src/createMultipleItemsEx.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -268,7 +268,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
tests/src/creditFeesToTreasury.test.tsdiffbeforeafterboth--- a/tests/src/creditFeesToTreasury.test.ts
+++ b/tests/src/creditFeesToTreasury.test.ts
@@ -50,7 +50,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/destroyCollection.test.tsdiffbeforeafterboth--- a/tests/src/destroyCollection.test.ts
+++ b/tests/src/destroyCollection.test.ts
@@ -22,7 +22,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([100n], donor);
});
});
@@ -62,7 +62,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/enableDisableTransfer.test.tsdiffbeforeafterboth--- a/tests/src/enableDisableTransfer.test.ts
+++ b/tests/src/enableDisableTransfer.test.ts
@@ -23,7 +23,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
@@ -62,7 +62,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
tests/src/eth/allowlist.test.tsdiffbeforeafterboth--- a/tests/src/eth/allowlist.test.ts
+++ b/tests/src/eth/allowlist.test.ts
@@ -22,7 +22,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -70,7 +70,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/base.test.tsdiffbeforeafterboth--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -29,7 +29,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -82,7 +82,7 @@
before(async () => {
await usingEthPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
const [alice] = await helper.arrange.createAccounts([10n], donor);
({collectionId: collection} = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}));
minter = helper.eth.createAccount();
tests/src/eth/collectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/eth/collectionAdmin.test.ts
+++ b/tests/src/eth/collectionAdmin.test.ts
@@ -32,7 +32,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -144,7 +144,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -272,7 +272,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -314,7 +314,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/collectionProperties.test.tsdiffbeforeafterboth--- a/tests/src/eth/collectionProperties.test.ts
+++ b/tests/src/eth/collectionProperties.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
import {itEth, usingEthPlaygrounds, expect} from './util/playgrounds';
import {IKeyringPair} from '@polkadot/types/types';
@@ -7,7 +23,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await _helper.arrange.createAccounts([10n], donor);
});
});
tests/src/eth/createNFTCollection.test.tsdiffbeforeafterboth--- a/tests/src/eth/createNFTCollection.test.ts
+++ b/tests/src/eth/createNFTCollection.test.ts
@@ -24,7 +24,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -150,7 +150,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/createRFTCollection.test.tsdiffbeforeafterboth--- a/tests/src/eth/createRFTCollection.test.ts
+++ b/tests/src/eth/createRFTCollection.test.ts
@@ -26,7 +26,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -152,7 +152,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/crossTransfer.test.tsdiffbeforeafterboth--- a/tests/src/eth/crossTransfer.test.ts
+++ b/tests/src/eth/crossTransfer.test.ts
@@ -26,7 +26,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);
});
});
@@ -69,7 +69,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);
});
});
tests/src/eth/fractionalizer/fractionalizer.test.tsdiffbeforeafterboth--- a/tests/src/eth/fractionalizer/fractionalizer.test.ts
+++ b/tests/src/eth/fractionalizer/fractionalizer.test.ts
@@ -85,7 +85,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper: EthUniqueHelper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -225,7 +225,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper: EthUniqueHelper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/fungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/fungible.test.ts
+++ b/tests/src/eth/fungible.test.ts
@@ -23,7 +23,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
@@ -55,7 +55,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
@@ -224,7 +224,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
@@ -277,7 +277,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
tests/src/eth/helpersSmoke.test.tsdiffbeforeafterboth--- a/tests/src/eth/helpersSmoke.test.ts
+++ b/tests/src/eth/helpersSmoke.test.ts
@@ -22,7 +22,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/migration.test.tsdiffbeforeafterboth--- a/tests/src/eth/migration.test.ts
+++ b/tests/src/eth/migration.test.ts
@@ -22,7 +22,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- superuser = privateKey('//Alice');
+ superuser = await privateKey('//Alice');
});
});
tests/src/eth/nesting/nest.test.tsdiffbeforeafterboth--- a/tests/src/eth/nesting/nest.test.ts
+++ b/tests/src/eth/nesting/nest.test.ts
@@ -21,7 +21,7 @@
before(async function() {
await usingEthPlaygrounds(async (_, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/nonFungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/nonFungible.test.ts
+++ b/tests/src/eth/nonFungible.test.ts
@@ -25,7 +25,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
@@ -75,7 +75,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -137,7 +137,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
@@ -318,7 +318,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
@@ -371,7 +371,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
@@ -496,7 +496,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
tests/src/eth/payable.test.tsdiffbeforeafterboth--- a/tests/src/eth/payable.test.ts
+++ b/tests/src/eth/payable.test.ts
@@ -23,7 +23,7 @@
before(async function() {
await usingEthPlaygrounds(async (_, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -68,7 +68,7 @@
expect(await contract.methods.getUnaccounted().call()).to.be.equal(weiCount.toString());
});
- itEth('Balance can be retrieved from evm contract', async({helper, privateKey}) => {
+ itEth('Balance can be retrieved from evm contract', async({helper}) => {
const FEE_BALANCE = 10n * helper.balance.getOneTokenNominal();
const CONTRACT_BALANCE = 1n * helper.balance.getOneTokenNominal();
@@ -80,7 +80,7 @@
await web3.eth.sendTransaction({from: deployer, to: contract.options.address, value: CONTRACT_BALANCE.toString(), gas: helper.eth.DEFAULT_GAS});
- const receiver = privateKey(`//Receiver${Date.now()}`);
+ const [receiver] = await helper.arrange.createAccounts([0n], donor);
// First receive balance on eth balance of bob
{
@@ -110,7 +110,7 @@
before(async function() {
await usingEthPlaygrounds(async (_, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/proxy/fungibleProxy.test.tsdiffbeforeafterboth--- a/tests/src/eth/proxy/fungibleProxy.test.ts
+++ b/tests/src/eth/proxy/fungibleProxy.test.ts
@@ -38,7 +38,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
@@ -77,7 +77,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterboth--- a/tests/src/eth/proxy/nonFungibleProxy.test.ts
+++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts
@@ -38,7 +38,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
@@ -95,7 +95,7 @@
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
@@ -139,7 +139,7 @@
});
//TODO: CORE-302 add eth methods
- itWeb3.skip('Can perform mintBulk()', async ({web3, api, privateKeyWrapper}) => {
+ itWeb3.skip('Can perform mintBulk()', async () => {
/*
const collection = await createCollectionExpectSuccess({
mode: {type: 'NFT'},
tests/src/eth/reFungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/reFungible.test.ts
+++ b/tests/src/eth/reFungible.test.ts
@@ -25,7 +25,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -117,7 +117,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -329,7 +329,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -370,7 +370,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
tests/src/eth/reFungibleToken.test.tsdiffbeforeafterboth--- a/tests/src/eth/reFungibleToken.test.ts
+++ b/tests/src/eth/reFungibleToken.test.ts
@@ -28,7 +28,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([20n], donor);
});
});
@@ -72,7 +72,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
@@ -136,7 +136,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([50n], donor);
});
});
@@ -327,7 +327,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([50n], donor);
});
});
@@ -382,7 +382,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([50n], donor);
});
});
@@ -472,7 +472,7 @@
await usingEthPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/eth/tokenProperties.test.tsdiffbeforeafterboth--- a/tests/src/eth/tokenProperties.test.ts
+++ b/tests/src/eth/tokenProperties.test.ts
@@ -1,94 +1,116 @@
-import {addCollectionAdminExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess} from '../util/helpers';
-import {cartesian, collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3} from './util/helpers';
-import nonFungibleAbi from './nonFungibleAbi.json';
-import {expect} from 'chai';
-import {executeTransaction} from '../substrate/substrate-api';
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+import {itEth, usingEthPlaygrounds, expect, cartesian} from './util/playgrounds';
+import {IKeyringPair} from '@polkadot/types/types';
describe('EVM token properties', () => {
- itWeb3('Can be reconfigured', async({web3, api, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
- const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ let donor: IKeyringPair;
+ let alice: IKeyringPair;
+
+ before(async function() {
+ await usingEthPlaygrounds(async (helper, privateKey) => {
+ donor = await privateKey({filename: __filename});
+ [alice] = await helper.arrange.createAccounts([100n], donor);
+ });
+ });
+
+ itEth('Can be reconfigured', async({helper}) => {
+ const caller = await helper.eth.createAccountWithBalance(donor);
for(const [mutable,collectionAdmin, tokenOwner] of cartesian([], [false, true], [false, true], [false, true])) {
- const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- await addCollectionAdminExpectSuccess(alice, collection, {Ethereum: caller});
+ const collection = await helper.nft.mintCollection(alice);
+ await collection.addAdmin(alice, {Ethereum: caller});
- const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
+ const address = helper.ethAddress.fromCollectionId(collection.collectionId);
+ const contract = helper.ethNativeContract.collection(address, 'nft', caller);
await contract.methods.setTokenPropertyPermission('testKey', mutable, collectionAdmin, tokenOwner).send({from: caller});
- const state = (await api.query.common.collectionPropertyPermissions(collection)).toJSON();
- expect(state).to.be.deep.equal({
- [web3.utils.toHex('testKey')]: {mutable, collectionAdmin, tokenOwner},
- });
+ expect(await collection.getPropertyPermissions()).to.be.deep.equal([{
+ key: 'testKey',
+ permission: {mutable, collectionAdmin, tokenOwner},
+ }]);
}
});
- itWeb3('Can be set', async({web3, api, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
- const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- const token = await createItemExpectSuccess(alice, collection, 'NFT');
- await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
+ itEth('Can be set', async({helper}) => {
+ const caller = await helper.eth.createAccountWithBalance(donor);
+ const collection = await helper.nft.mintCollection(alice);
+ const token = await collection.mintToken(alice);
+
+ await collection.setTokenPropertyPermissions(alice, [{
key: 'testKey',
permission: {
collectionAdmin: true,
},
- }]));
+ }]);
- await addCollectionAdminExpectSuccess(alice, collection, {Ethereum: caller});
+ await collection.addAdmin(alice, {Ethereum: caller});
- const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
+ const address = helper.ethAddress.fromCollectionId(collection.collectionId);
+ const contract = helper.ethNativeContract.collection(address, 'nft', caller);
- await contract.methods.setProperty(token, 'testKey', Buffer.from('testValue')).send({from: caller});
+ await contract.methods.setProperty(token.tokenId, 'testKey', Buffer.from('testValue')).send({from: caller});
- const [{value}] = (await api.rpc.unique.tokenProperties(collection, token, ['testKey'])).toHuman()! as any;
+ const [{value}] = await token.getProperties(['testKey']);
expect(value).to.equal('testValue');
});
- itWeb3('Can be deleted', async({web3, api, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
- const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- const token = await createItemExpectSuccess(alice, collection, 'NFT');
- await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
+ itEth('Can be deleted', async({helper}) => {
+ const caller = await helper.eth.createAccountWithBalance(donor);
+ const collection = await helper.nft.mintCollection(alice);
+ const token = await collection.mintToken(alice);
+
+ await collection.setTokenPropertyPermissions(alice, [{
key: 'testKey',
permission: {
mutable: true,
collectionAdmin: true,
},
- }]));
- await executeTransaction(api, alice, api.tx.unique.setTokenProperties(collection, token, [{key: 'testKey', value: 'testValue'}]));
+ }]);
+ await token.setProperties(alice, [{key: 'testKey', value: 'testValue'}]);
- await addCollectionAdminExpectSuccess(alice, collection, {Ethereum: caller});
+ await collection.addAdmin(alice, {Ethereum: caller});
- const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
+ const address = helper.ethAddress.fromCollectionId(collection.collectionId);
+ const contract = helper.ethNativeContract.collection(address, 'nft', caller);
- await contract.methods.deleteProperty(token, 'testKey').send({from: caller});
+ await contract.methods.deleteProperty(token.tokenId, 'testKey').send({from: caller});
- const result = (await api.rpc.unique.tokenProperties(collection, token, ['testKey'])).toJSON()! as any;
+ const result = await token.getProperties(['testKey']);
expect(result.length).to.equal(0);
});
- itWeb3('Can be read', async({web3, api, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
- const caller = createEthAccount(web3);
- const collection = await createCollectionExpectSuccess({mode: {type:'NFT'}});
- const token = await createItemExpectSuccess(alice, collection, 'NFT');
- await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
+ itEth('Can be read', async({helper}) => {
+ const caller = helper.eth.createAccount();
+ const collection = await helper.nft.mintCollection(alice);
+ const token = await collection.mintToken(alice);
+
+ await collection.setTokenPropertyPermissions(alice, [{
key: 'testKey',
permission: {
collectionAdmin: true,
},
- }]));
- await executeTransaction(api, alice, api.tx.unique.setTokenProperties(collection, token, [{key: 'testKey', value: 'testValue'}]));
+ }]);
+ await token.setProperties(alice, [{key: 'testKey', value: 'testValue'}]);
- const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
+ const address = helper.ethAddress.fromCollectionId(collection.collectionId);
+ const contract = helper.ethNativeContract.collection(address, 'nft', caller);
- const value = await contract.methods.property(token, 'testKey').call();
- expect(value).to.equal(web3.utils.toHex('testValue'));
+ const value = await contract.methods.property(token.tokenId, 'testKey').call();
+ expect(value).to.equal(helper.getWeb3().utils.toHex('testValue'));
});
});
tests/src/eth/util/playgrounds/index.tsdiffbeforeafterboth--- a/tests/src/eth/util/playgrounds/index.ts
+++ b/tests/src/eth/util/playgrounds/index.ts
@@ -1,6 +1,7 @@
// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
// SPDX-License-Identifier: Apache-2.0
+import * as path from 'path';
import {IKeyringPair} from '@polkadot/types/types';
import config from '../../../config';
@@ -13,12 +14,13 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import chaiLike from 'chai-like';
-import {requirePalletsOrSkip} from '../../../util/playgrounds';
+import {getTestSeed, requirePalletsOrSkip} from '../../../util/playgrounds';
+
chai.use(chaiAsPromised);
chai.use(chaiLike);
export const expect = chai.expect;
-export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair) => Promise<void>) => {
+export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair>) => Promise<void>) => {
const silentConsole = new SilentConsole();
silentConsole.enable();
@@ -28,7 +30,20 @@
await helper.connect(config.substrateUrl);
await helper.connectWeb3(config.substrateUrl);
const ss58Format = helper.chain.getChainProperties().ss58Format;
- const privateKey = (seed: string) => helper.util.fromSeed(seed, ss58Format);
+ const privateKey = async (seed: string | {filename: string}) => {
+ if (typeof seed === 'string') {
+ return helper.util.fromSeed(seed, ss58Format);
+ }
+ else {
+ const actualSeed = getTestSeed(seed.filename);
+ let account = helper.util.fromSeed(actualSeed, ss58Format);
+ if (await helper.balance.getSubstrate(account.address) == 0n) {
+ console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`);
+ account = helper.util.fromSeed('//Alice', ss58Format);
+ }
+ return account;
+ }
+ };
await code(helper, privateKey);
}
finally {
@@ -38,7 +53,7 @@
}
};
-export async function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
+export async function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair> }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
(opts.only ? it.only :
opts.skip ? it.skip : it)(name, async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
@@ -51,13 +66,25 @@
});
}
-export async function itEthIfWithPallet(name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
+export async function itEthIfWithPallet(name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair> }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
return itEth(name, cb, {requiredPallets: required, ...opts});
}
-itEth.only = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEth(name, cb, {only: true});
-itEth.skip = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEth(name, cb, {skip: true});
+itEth.only = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair> }) => any) => itEth(name, cb, {only: true});
+itEth.skip = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair> }) => any) => itEth(name, cb, {skip: true});
-itEthIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEthIfWithPallet(name, required, cb, {only: true});
-itEthIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEthIfWithPallet(name, required, cb, {skip: true});
+itEthIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair> }) => any) => itEthIfWithPallet(name, required, cb, {only: true});
+itEthIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair> }) => any) => itEthIfWithPallet(name, required, cb, {skip: true});
itEth.ifWithPallets = itEthIfWithPallet;
+
+type ElementOf<A> = A extends readonly (infer T)[] ? T : never;
+// I want a fancier api, not a memory efficiency
+export function* cartesian<T extends Array<Array<any>>, R extends Array<any>>(internalRest: [...R], ...args: [...T]): Generator<[...R, ...{[K in keyof T]: ElementOf<T[K]>}]> {
+ if(args.length === 0) {
+ yield internalRest as any;
+ return;
+ }
+ for(const value of args[0]) {
+ yield* cartesian([...internalRest, value], ...args.slice(1)) as any;
+ }
+}
tests/src/evmCoder.test.tsdiffbeforeafterboth--- a/tests/src/evmCoder.test.ts
+++ b/tests/src/evmCoder.test.ts
@@ -92,7 +92,7 @@
before(async function() {
await usingEthPlaygrounds(async (_helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/fungible.test.tsdiffbeforeafterboth--- a/tests/src/fungible.test.ts
+++ b/tests/src/fungible.test.ts
@@ -20,12 +20,13 @@
const U128_MAX = (1n << 128n) - 1n;
describe('integration test: Fungible functionality:', () => {
+ let donor: IKeyringPair;
let alice: IKeyringPair;
let bob: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor);
});
});
@@ -43,9 +44,9 @@
expect(aliceBalance).to.be.equal(U128_MAX);
});
- itSub('RPC method tokenOnewrs for fungible collection and token', async ({helper, privateKey}) => {
+ itSub('RPC method tokenOnewrs for fungible collection and token', async ({helper}) => {
const ethAcc = {Ethereum: '0x67fb3503a61b284dc83fa96dceec4192db47dc7c'};
- const facelessCrowd = Array(7).fill(0).map((_, i) => ({Substrate: privateKey(`//Alice+${i}`).address}));
+ const facelessCrowd = (await helper.arrange.createAccounts(Array(7).fill(0n), donor)).map(keyring => {return {Substrate: keyring.address};});
const collection = await helper.ft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
@@ -64,7 +65,7 @@
expect(owners).to.deep.include.members([{Substrate: alice.address}, ethAcc, {Substrate: bob.address}, ...facelessCrowd]);
expect(owners.length).to.be.equal(10);
- const eleven = privateKey('//ALice+11');
+ const [eleven] = await helper.arrange.createAccounts([0n], donor);
expect(await collection.transfer(alice, {Substrate: eleven.address}, 10n)).to.be.true;
expect((await collection.getTop10Owners()).length).to.be.equal(10);
});
tests/src/getPropertiesRpc.test.tsdiffbeforeafterboth--- a/tests/src/getPropertiesRpc.test.ts
+++ b/tests/src/getPropertiesRpc.test.ts
@@ -63,7 +63,7 @@
before(async () => {
await usingPlaygrounds(async (_, privateKey) => {
- alice = privateKey('//Alice');
+ alice = await privateKey({filename: __filename});
});
});
tests/src/inflation.test.tsdiffbeforeafterboth--- a/tests/src/inflation.test.ts
+++ b/tests/src/inflation.test.ts
@@ -23,7 +23,7 @@
before(async () => {
await usingPlaygrounds(async (_, privateKey) => {
- superuser = privateKey('//Alice');
+ superuser = await privateKey('//Alice');
});
});
tests/src/limits.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 {IKeyringPair} from '@polkadot/types/types';18import {expect, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util/playgrounds';1920describe('Number of tokens per address (NFT)', () => {21 let alice: IKeyringPair;2223 before(async () => {24 await usingPlaygrounds(async (helper, privateKey) => {25 const donor = privateKey('//Alice');26 [alice] = await helper.arrange.createAccounts([10n], donor);27 });28 });2930 itSub.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async ({helper}) => {31 const collection = await helper.nft.mintCollection(alice, {});32 await collection.setLimits(alice, {accountTokenOwnershipLimit: 20});33 34 for(let i = 0; i < 10; i++){35 await expect(collection.mintToken(alice)).to.be.not.rejected;36 }37 await expect(collection.mintToken(alice)).to.be.rejectedWith(/common\.AccountTokenLimitExceeded/);38 for(let i = 1; i < 11; i++) {39 await expect(collection.burnToken(alice, i)).to.be.not.rejected;40 }41 await collection.burn(alice);42 });43 44 itSub('Collection limits allow lower number than chain limits, collection limits are enforced', async ({helper}) => {45 const collection = await helper.nft.mintCollection(alice, {});46 await collection.setLimits(alice, {accountTokenOwnershipLimit: 1});4748 await collection.mintToken(alice);49 await expect(collection.mintToken(alice)).to.be.rejectedWith(/common\.AccountTokenLimitExceeded/);50 51 await collection.burnToken(alice, 1);52 await expect(collection.burn(alice)).to.be.not.rejected;53 });54});5556describe('Number of tokens per address (ReFungible)', () => {57 let alice: IKeyringPair;5859 before(async function() {60 await usingPlaygrounds(async (helper, privateKey) => {61 requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);6263 const donor = privateKey('//Alice');64 [alice] = await helper.arrange.createAccounts([10n], donor);65 });66 });6768 itSub.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async ({helper}) => {69 const collection = await helper.rft.mintCollection(alice, {});70 await collection.setLimits(alice, {accountTokenOwnershipLimit: 20});71 72 for(let i = 0; i < 10; i++){73 await expect(collection.mintToken(alice, 10n)).to.be.not.rejected;74 }75 await expect(collection.mintToken(alice, 10n)).to.be.rejectedWith(/common\.AccountTokenLimitExceeded/);76 for(let i = 1; i < 11; i++) {77 await expect(collection.burnToken(alice, i, 10n)).to.be.not.rejected;78 }79 await collection.burn(alice);80 });8182 itSub('Collection limits allow lower number than chain limits, collection limits are enforced', async ({helper}) => {83 const collection = await helper.rft.mintCollection(alice, {});84 await collection.setLimits(alice, {accountTokenOwnershipLimit: 1});8586 await collection.mintToken(alice);87 await expect(collection.mintToken(alice)).to.be.rejectedWith(/common\.AccountTokenLimitExceeded/);88 89 await collection.burnToken(alice, 1);90 await expect(collection.burn(alice)).to.be.not.rejected;91 });92});9394// todo:playgrounds skipped ~ postponed95describe.skip('Sponsor timeout (NFT) (only for special chain limits test)', () => {96 /*let alice: IKeyringPair;97 let bob: IKeyringPair;98 let charlie: IKeyringPair;99100 before(async () => {101 await usingApi(async (api, privateKeyWrapper) => {102 alice = privateKeyWrapper('//Alice');103 bob = privateKeyWrapper('//Bob');104 charlie = privateKeyWrapper('//Charlie');105 });106 });107108 itSub.skip('Collection limits have greater timeout value than chain limits, collection limits are enforced', async ({helper}) => {109 const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});110 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 7});111 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');112 await setCollectionSponsorExpectSuccess(collectionId, alice.address);113 await confirmSponsorshipExpectSuccess(collectionId, '//Alice');114 await transferExpectSuccess(collectionId, tokenId, alice, bob);115 const aliceBalanceBefore = await getFreeBalance(alice);116117 // check setting SponsorTimeout = 5, fail118 await waitNewBlocks(5);119 await transferExpectSuccess(collectionId, tokenId, bob, charlie);120 const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);121 expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);122123 // check setting SponsorTimeout = 7, success124 await waitNewBlocks(2); // 5 + 2125 await transferExpectSuccess(collectionId, tokenId, charlie, bob);126 const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);127 expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;128 //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);129 await destroyCollectionExpectSuccess(collectionId);130 });131132 itSub('Collection limits have lower timeout value than chain limits, chain limits are enforced', async ({helper}) => {133134 const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});135 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 1});136 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');137 await setCollectionSponsorExpectSuccess(collectionId, alice.address);138 await confirmSponsorshipExpectSuccess(collectionId, '//Alice');139 await transferExpectSuccess(collectionId, tokenId, alice, bob);140 const aliceBalanceBefore = await getFreeBalance(alice);141142 // check setting SponsorTimeout = 1, fail143 await waitNewBlocks(1);144 await transferExpectSuccess(collectionId, tokenId, bob, charlie);145 const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);146 expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);147148 // check setting SponsorTimeout = 5, success149 await waitNewBlocks(4);150 await transferExpectSuccess(collectionId, tokenId, charlie, bob);151 const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);152 expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;153 //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);154 await destroyCollectionExpectSuccess(collectionId);155 });156});157158describe.skip('Sponsor timeout (Fungible) (only for special chain limits test)', () => {159 let alice: IKeyringPair;160 let bob: IKeyringPair;161 let charlie: IKeyringPair;162163 before(async () => {164 await usingApi(async (api, privateKeyWrapper) => {165 alice = privateKeyWrapper('//Alice');166 bob = privateKeyWrapper('//Bob');167 charlie = privateKeyWrapper('//Charlie');168 });169 });170171 itSub('Collection limits have greater timeout value than chain limits, collection limits are enforced', async ({helper}) => {172 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});173 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 7});174 const tokenId = await createItemExpectSuccess(alice, collectionId, 'Fungible');175 await setCollectionSponsorExpectSuccess(collectionId, alice.address);176 await confirmSponsorshipExpectSuccess(collectionId, '//Alice');177 await transferExpectSuccess(collectionId, tokenId, alice, bob, 10, 'Fungible');178 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');179 const aliceBalanceBefore = await getFreeBalance(alice);180181 // check setting SponsorTimeout = 5, fail182 await waitNewBlocks(5);183 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');184 const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);185 expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);186187 // check setting SponsorTimeout = 7, success188 await waitNewBlocks(2); // 5 + 2189 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');190 const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);191 expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;192 //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);193194 await destroyCollectionExpectSuccess(collectionId);195 });196197 itSub('Collection limits have lower timeout value than chain limits, chain limits are enforced', async ({helper}) => {198199 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});200 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 1});201 const tokenId = await createItemExpectSuccess(alice, collectionId, 'Fungible');202 await setCollectionSponsorExpectSuccess(collectionId, alice.address);203 await confirmSponsorshipExpectSuccess(collectionId, '//Alice');204 await transferExpectSuccess(collectionId, tokenId, alice, bob, 10, 'Fungible');205 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');206 const aliceBalanceBefore = await getFreeBalance(alice);207208 // check setting SponsorTimeout = 1, fail209 await waitNewBlocks(1);210 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');211 const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);212 expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);213214 // check setting SponsorTimeout = 5, success215 await waitNewBlocks(4);216 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');217 const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);218 expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;219 //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);220221 await destroyCollectionExpectSuccess(collectionId);222 });223});224225describe.skip('Sponsor timeout (ReFungible) (only for special chain limits test)', () => {226 let alice: IKeyringPair;227 let bob: IKeyringPair;228 let charlie: IKeyringPair;229230 before(async () => {231 await usingApi(async (api, privateKeyWrapper) => {232 alice = privateKeyWrapper('//Alice');233 bob = privateKeyWrapper('//Bob');234 charlie = privateKeyWrapper('//Charlie');235 });236 });237238 itSub('Collection limits have greater timeout value than chain limits, collection limits are enforced', async ({helper}) => {239 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});240 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 7});241 const tokenId = await createItemExpectSuccess(alice, collectionId, 'ReFungible');242 await setCollectionSponsorExpectSuccess(collectionId, alice.address);243 await confirmSponsorshipExpectSuccess(collectionId, '//Alice');244 await transferExpectSuccess(collectionId, tokenId, alice, bob, 100, 'ReFungible');245 const aliceBalanceBefore = await getFreeBalance(alice);246247 // check setting SponsorTimeout = 5, fail248 await waitNewBlocks(5);249 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 20, 'ReFungible');250 const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);251 expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);252253 // check setting SponsorTimeout = 7, success254 await waitNewBlocks(2); // 5 + 2255 await transferExpectSuccess(collectionId, tokenId, bob, charlie, 20, 'ReFungible');256 const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);257 expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;258 //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);259 await destroyCollectionExpectSuccess(collectionId);260 });261262 itSub('Collection limits have lower timeout value than chain limits, chain limits are enforced', async ({helper}) => {263264 const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});265 await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 1});266 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');267 await setCollectionSponsorExpectSuccess(collectionId, alice.address);268 await confirmSponsorshipExpectSuccess(collectionId, '//Alice');269 await transferExpectSuccess(collectionId, tokenId, alice, bob);270 const aliceBalanceBefore = await getFreeBalance(alice);271272 // check setting SponsorTimeout = 1, fail273 await waitNewBlocks(1);274 await transferExpectSuccess(collectionId, tokenId, bob, charlie);275 const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);276 expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);277278 // check setting SponsorTimeout = 5, success279 await waitNewBlocks(4);280 await transferExpectSuccess(collectionId, tokenId, charlie, bob);281 const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);282 expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;283 //expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);284 await destroyCollectionExpectSuccess(collectionId);285 });*/286});287288describe('Collection zero limits (NFT)', () => {289 let alice: IKeyringPair;290 let bob: IKeyringPair;291 let charlie: IKeyringPair;292293 before(async () => {294 await usingPlaygrounds(async (helper, privateKey) => {295 const donor = privateKey('//Alice');296 [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);297 });298 });299300 itSub.skip('Limits have 0 in tokens per address field, the chain limits are applied', async ({helper}) => {301 const collection = await helper.nft.mintCollection(alice, {});302 await collection.setLimits(alice, {accountTokenOwnershipLimit: 0});303304 for(let i = 0; i < 10; i++){305 await collection.mintToken(alice);306 }307 await expect(collection.mintToken(alice)).to.be.rejectedWith(/common\.AccountTokenLimitExceeded/);308 });309310 itSub('Limits have 0 in sponsor timeout, no limits are applied', async ({helper}) => {311 const collection = await helper.nft.mintCollection(alice, {});312 await collection.setLimits(alice, {sponsorTransferTimeout: 0});313 const token = await collection.mintToken(alice);314315 await collection.setSponsor(alice, alice.address);316 await collection.confirmSponsorship(alice);317 318 await token.transfer(alice, {Substrate: bob.address});319 const aliceBalanceBefore = await helper.balance.getSubstrate(alice.address);320321 // check setting SponsorTimeout = 0, success with next block322 await helper.wait.newBlocks(1);323 await token.transfer(bob, {Substrate: charlie.address});324 const aliceBalanceAfterSponsoredTransaction1 = await helper.balance.getSubstrate(alice.address);325 expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;326 });327});328329describe('Collection zero limits (Fungible)', () => {330 let alice: IKeyringPair;331 let bob: IKeyringPair;332 let charlie: IKeyringPair;333334 before(async () => {335 await usingPlaygrounds(async (helper, privateKey) => {336 const donor = privateKey('//Alice');337 [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);338 });339 });340341 itSub('Limits have 0 in sponsor timeout, no limits are applied', async ({helper}) => {342 const collection = await helper.ft.mintCollection(alice, {});343 await collection.setLimits(alice, {sponsorTransferTimeout: 0});344 await collection.mint(alice, 3n);345346 await collection.setSponsor(alice, alice.address);347 await collection.confirmSponsorship(alice);348 349 await collection.transfer(alice, {Substrate: bob.address}, 2n);350 const aliceBalanceBefore = await helper.balance.getSubstrate(alice.address);351352 // check setting SponsorTimeout = 0, success with next block353 await helper.wait.newBlocks(1);354 await collection.transfer(bob, {Substrate: charlie.address});355 const aliceBalanceAfterSponsoredTransaction1 = await helper.balance.getSubstrate(alice.address);356 expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;357 });358});359360describe('Collection zero limits (ReFungible)', () => {361 let alice: IKeyringPair;362 let bob: IKeyringPair;363 let charlie: IKeyringPair;364365 before(async function() {366 await usingPlaygrounds(async (helper, privateKey) => {367 requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);368369 const donor = privateKey('//Alice');370 [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);371 });372 });373374 itSub.skip('Limits have 0 in tokens per address field, the chain limits are applied', async ({helper}) => {375 const collection = await helper.rft.mintCollection(alice, {});376 await collection.setLimits(alice, {accountTokenOwnershipLimit: 0});377 for(let i = 0; i < 10; i++){378 await collection.mintToken(alice);379 }380 await expect(collection.mintToken(alice)).to.be.rejectedWith(/common\.AccountTokenLimitExceeded/);381 });382383 itSub('Limits have 0 in sponsor timeout, no limits are applied', async ({helper}) => {384 const collection = await helper.rft.mintCollection(alice, {});385 await collection.setLimits(alice, {sponsorTransferTimeout: 0});386 const token = await collection.mintToken(alice, 3n);387388 await collection.setSponsor(alice, alice.address);389 await collection.confirmSponsorship(alice);390 391 await token.transfer(alice, {Substrate: bob.address}, 2n);392 const aliceBalanceBefore = await helper.balance.getSubstrate(alice.address);393394 // check setting SponsorTimeout = 0, success with next block395 await helper.wait.newBlocks(1);396 await token.transfer(bob, {Substrate: charlie.address});397 const aliceBalanceAfterSponsoredTransaction1 = await helper.balance.getSubstrate(alice.address);398 expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;399 });400});401402describe('Effective collection limits (NFT)', () => {403 let alice: IKeyringPair;404405 before(async () => {406 await usingPlaygrounds(async (helper, privateKey) => {407 const donor = privateKey('//Alice');408 [alice] = await helper.arrange.createAccounts([10n], donor);409 });410 });411 412 itSub('Effective collection limits', async ({helper}) => {413 const collection = await helper.nft.mintCollection(alice, {});414 await collection.setLimits(alice, {ownerCanTransfer: true}); 415 416 { 417 // Check that limits are undefined418 const collectionInfo = await collection.getData();419 const limits = collectionInfo?.raw.limits;420 expect(limits).to.be.any;421 422 expect(limits.accountTokenOwnershipLimit).to.be.null;423 expect(limits.sponsoredDataSize).to.be.null;424 expect(limits.sponsoredDataRateLimit).to.be.null;425 expect(limits.tokenLimit).to.be.null;426 expect(limits.sponsorTransferTimeout).to.be.null;427 expect(limits.sponsorApproveTimeout).to.be.null;428 expect(limits.ownerCanTransfer).to.be.true;429 expect(limits.ownerCanDestroy).to.be.null;430 expect(limits.transfersEnabled).to.be.null;431 }432433 { // Check that limits is undefined for non-existent collection434 const limits = await helper.collection.getEffectiveLimits(999999);435 expect(limits).to.be.null;436 }437438 { // Check that default values defined for collection limits439 const limits = await collection.getEffectiveLimits();440441 expect(limits.accountTokenOwnershipLimit).to.be.eq(100000);442 expect(limits.sponsoredDataSize).to.be.eq(2048);443 expect(limits.sponsoredDataRateLimit).to.be.deep.eq({sponsoringDisabled: null});444 expect(limits.tokenLimit).to.be.eq(4294967295);445 expect(limits.sponsorTransferTimeout).to.be.eq(5);446 expect(limits.sponsorApproveTimeout).to.be.eq(5);447 expect(limits.ownerCanTransfer).to.be.true;448 expect(limits.ownerCanDestroy).to.be.true;449 expect(limits.transfersEnabled).to.be.true;450 }451452 { 453 // Check the values for collection limits454 await collection.setLimits(alice, {455 accountTokenOwnershipLimit: 99_999,456 sponsoredDataSize: 1024,457 tokenLimit: 123,458 transfersEnabled: false,459 });460461 const limits = await collection.getEffectiveLimits();462463 expect(limits.accountTokenOwnershipLimit).to.be.eq(99999);464 expect(limits.sponsoredDataSize).to.be.eq(1024);465 expect(limits.sponsoredDataRateLimit).to.be.deep.eq({sponsoringDisabled: null});466 expect(limits.tokenLimit).to.be.eq(123);467 expect(limits.sponsorTransferTimeout).to.be.eq(5);468 expect(limits.sponsorApproveTimeout).to.be.eq(5);469 expect(limits.ownerCanTransfer).to.be.true;470 expect(limits.ownerCanDestroy).to.be.true;471 expect(limits.transfersEnabled).to.be.false;472 }473 });474});tests/src/nesting/graphs.test.tsdiffbeforeafterboth--- a/tests/src/nesting/graphs.test.ts
+++ b/tests/src/nesting/graphs.test.ts
@@ -45,7 +45,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([10n], donor);
});
});
tests/src/nesting/nest.test.tsdiffbeforeafterboth--- a/tests/src/nesting/nest.test.ts
+++ b/tests/src/nesting/nest.test.ts
@@ -23,7 +23,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
});
});
@@ -137,7 +137,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([50n, 10n, 10n], donor);
});
});
@@ -343,7 +343,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 50n], donor);
});
});
tests/src/nesting/properties.test.tsdiffbeforeafterboth--- a/tests/src/nesting/properties.test.ts
+++ b/tests/src/nesting/properties.test.ts
@@ -26,7 +26,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
});
});
@@ -141,7 +141,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor);
});
});
@@ -269,7 +269,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor);
});
});
@@ -332,7 +332,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
});
});
@@ -453,7 +453,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
@@ -777,7 +777,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
let dave: IKeyringPair;
[alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
@@ -977,7 +977,7 @@
await usingPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
});
});
@@ -1002,7 +1002,7 @@
])).to.be.rejectedWith(/common\.NoPermission/);
});
- itSub('Forbids mutating token property with tokenOwher==true when signer doesn\'t have all pieces', async ({helper}) => {
+ itSub('Forbids mutating token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) => {
const token = await prepare(helper);
await expect(token.collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable:true, tokenOwner: true}}]))
tests/src/nesting/unnest.test.tsdiffbeforeafterboth--- a/tests/src/nesting/unnest.test.ts
+++ b/tests/src/nesting/unnest.test.ts
@@ -22,7 +22,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice] = await helper.arrange.createAccounts([50n], donor);
});
});
@@ -91,7 +91,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
});
});
tests/src/nextSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/nextSponsoring.test.ts
+++ b/tests/src/nextSponsoring.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor);
});
});
tests/src/refungible.test.tsdiffbeforeafterboth--- a/tests/src/refungible.test.ts
+++ b/tests/src/refungible.test.ts
@@ -20,6 +20,7 @@
const MAX_REFUNGIBLE_PIECES = 1_000_000_000_000_000_000_000n;
describe('integration test: Refungible functionality:', async () => {
+ let donor: IKeyringPair;
let alice: IKeyringPair;
let bob: IKeyringPair;
@@ -27,7 +28,7 @@
await usingPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- const donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor);
});
});
@@ -61,9 +62,9 @@
.to.eventually.be.rejectedWith(/refungible\.WrongRefungiblePieces/);
});
- itSub('RPC method tokenOnewrs for refungible collection and token', async ({helper, privateKey}) => {
+ itSub('RPC method tokenOnewrs for refungible collection and token', async ({helper}) => {
const ethAcc = {Ethereum: '0x67fb3503a61b284dc83fa96dceec4192db47dc7c'};
- const facelessCrowd = Array(7).fill(0).map((_, i) => ({Substrate: privateKey(`//Alice+${i}`).address}));
+ const facelessCrowd = (await helper.arrange.createAccounts(Array(7).fill(0n), donor)).map(keyring => {return {Substrate: keyring.address};});
const collection = await helper.rft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
@@ -82,7 +83,7 @@
expect(owners).to.deep.include.members([{Substrate: alice.address}, ethAcc, {Substrate: bob.address}, ...facelessCrowd]);
expect(owners.length).to.be.equal(10);
- const eleven = privateKey('//ALice+11');
+ const [eleven] = await helper.arrange.createAccounts([0n], donor);
expect(await token.transfer(alice, {Substrate: eleven.address}, 10n)).to.be.true;
expect((await token.getTop10Owners()).length).to.be.equal(10);
});
tests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -23,7 +23,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor);
});
});
@@ -62,7 +62,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor);
});
});
tests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionSponsor.test.ts
+++ b/tests/src/removeCollectionSponsor.test.ts
@@ -24,7 +24,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
});
});
@@ -78,7 +78,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor);
});
});
tests/src/rpc.test.tsdiffbeforeafterboth--- a/tests/src/rpc.test.ts
+++ b/tests/src/rpc.test.ts
@@ -25,7 +25,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor);
});
});
tests/src/setCollectionLimits.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionLimits.test.ts
+++ b/tests/src/setCollectionLimits.test.ts
@@ -29,7 +29,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor);
});
});
@@ -104,7 +104,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor);
});
});
tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -24,7 +24,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor);
});
});
@@ -93,7 +93,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([10n, 5n], donor);
});
});
tests/src/setPermissions.test.tsdiffbeforeafterboth--- a/tests/src/setPermissions.test.ts
+++ b/tests/src/setPermissions.test.ts
@@ -23,7 +23,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
});
});
@@ -79,7 +79,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
});
});
tests/src/transfer.test.tsdiffbeforeafterboth--- a/tests/src/transfer.test.ts
+++ b/tests/src/transfer.test.ts
@@ -19,12 +19,13 @@
import {itSub, Pallets, usingPlaygrounds, expect} from './util/playgrounds';
describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {
+ let donor: IKeyringPair;
let alice: IKeyringPair;
let bob: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
});
});
@@ -42,8 +43,7 @@
expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;
});
- itSub('Inability to pay fees error message is correct', async ({helper, privateKey}) => {
- const donor = privateKey('//Alice');
+ itSub('Inability to pay fees error message is correct', async ({helper}) => {
const [zero] = await helper.arrange.createAccounts([0n], donor);
// console.error = () => {};
@@ -117,7 +117,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
});
});
@@ -256,7 +256,7 @@
before(async function() {
await usingEthPlaygrounds(async (_, privateKey) => {
- donor = privateKey('//Alice');
+ donor = await privateKey({filename: __filename});
});
});
tests/src/transferFrom.test.tsdiffbeforeafterboth--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -24,7 +24,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor);
});
});
@@ -91,7 +91,7 @@
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
- const donor = privateKey('//Alice');
+ const donor = await privateKey({filename: __filename});
[alice, bob, charlie] = await helper.arrange.createAccounts([50n, 10n, 10n], donor);
});
});
tests/src/util/playgrounds/feedAlices.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/util/playgrounds/feedAlices.ts
@@ -0,0 +1,77 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+import * as path from 'path';
+import {promises as fs} from 'fs';
+import {usingPlaygrounds} from '.';
+
+async function getFiles(rootPath: string): Promise<string[]> {
+ const files = await fs.readdir(rootPath, {withFileTypes: true});
+ const filenames: string[] = [];
+ for (const entry of files) {
+ const res = path.resolve(rootPath, entry.name);
+ if (entry.isDirectory()) {
+ filenames.push(...await getFiles(res));
+ } else {
+ filenames.push(res);
+ }
+ }
+ return filenames;
+}
+
+const fundFilenames = async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const oneToken = helper.balance.getOneTokenNominal();
+ const alice = await privateKey('//Alice');
+ const nonce = await helper.chain.getNonce(alice.address);
+ const filenames = await getFiles(path.resolve(__dirname, '../..'));
+
+ console.log(`Main Alice address: ${alice.address}, with balance:`, await helper.balance.getSubstrate(alice.address));
+
+ const batchSize = 20;
+ let balanceGrantedCounter = 0;
+ for (let b = 0; b < filenames.length; b += batchSize) {
+ const tx = [];
+ let batchBalanceGrantedCounter = 0;
+ for (const f of filenames.slice(b, b + batchSize)) {
+ if (!f.endsWith('.test.ts')) continue;
+ const account = await privateKey({filename: f});
+ const aliceBalance = await helper.balance.getSubstrate(account.address);
+
+ if (aliceBalance < 5000n * oneToken) {
+ tx.push(helper.executeExtrinsic(
+ alice,
+ 'api.tx.balances.transfer',
+ [account.address, 10000n * oneToken],
+ true,
+ {nonce: nonce + balanceGrantedCounter++},
+ ).then(() => true).catch(() => {console.error(`Transaction to ${path.basename(f)} registered as failed. Strange.`); return false;}));
+ batchBalanceGrantedCounter++;
+ }
+ }
+
+ if(tx.length > 0) {
+ console.log(`Granting funds to ${batchBalanceGrantedCounter} filename accounts.`);
+ const result = await Promise.all(tx);
+ if (result && result.lastIndexOf(false) > -1) throw new Error('The transactions actually probably succeeded, should check the balances.');
+ }
+ }
+
+ if (balanceGrantedCounter == 0) console.log('No account needs additional funding.');
+ });
+};
+
+const fundFilenamesWithRetries = async (retriesLeft: number): Promise<boolean> => {
+ if (retriesLeft <= 0) return Promise.resolve(false);
+ return fundFilenames()
+ .then(() => Promise.resolve(true))
+ .catch(() => {
+ console.error(`Some transactions have failed. ${retriesLeft >= 1 ? 'Retrying...' : 'Something is wrong.'}`);
+ return fundFilenamesWithRetries(--retriesLeft);
+ });
+};
+
+fundFilenamesWithRetries(2).then((result) => process.exit(result ? 0 : 1)).catch(e => {
+ console.error(e);
+ process.exit(1);
+});
tests/src/util/playgrounds/index.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/index.ts
+++ b/tests/src/util/playgrounds/index.ts
@@ -1,6 +1,8 @@
// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
// SPDX-License-Identifier: Apache-2.0
+import * as path from 'path';
+import * as crypto from 'crypto';
import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -12,7 +14,16 @@
chai.use(chaiAsPromised);
export const expect = chai.expect;
-export const usingPlaygrounds = async (code: (helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair) => Promise<void>, url: string = config.substrateUrl) => {
+const getTestHash = (filename: string) => {
+ return crypto.createHash('md5').update(path.basename(filename)).digest('hex');
+};
+
+export const getTestSeed = (filename: string) => {
+ return `//Alice+${getTestHash(filename)}`;
+};
+
+// todo:playgrounds normalize to seed and filename
+export const usingPlaygrounds = async (code: (helper: DevUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise<IKeyringPair>) => Promise<void>, url: string = config.substrateUrl) => {
const silentConsole = new SilentConsole();
silentConsole.enable();
@@ -21,7 +32,20 @@
try {
await helper.connect(url);
const ss58Format = helper.chain.getChainProperties().ss58Format;
- const privateKey = (seed: string) => helper.util.fromSeed(seed, ss58Format);
+ const privateKey = async (seed: string | {filename: string}) => {
+ if (typeof seed === 'string') {
+ return helper.util.fromSeed(seed, ss58Format);
+ }
+ else {
+ const actualSeed = getTestSeed(seed.filename);
+ let account = helper.util.fromSeed(actualSeed, ss58Format);
+ if (await helper.balance.getSubstrate(account.address) == 0n) {
+ console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`);
+ account = helper.util.fromSeed('//Alice', ss58Format);
+ }
+ return account;
+ }
+ };
await code(helper, privateKey);
}
finally {
@@ -50,7 +74,7 @@
}
}
-export async function itSub(name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
+export async function itSub(name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise<IKeyringPair> }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
(opts.only ? it.only :
opts.skip ? it.skip : it)(name, async function () {
await usingPlaygrounds(async (helper, privateKey) => {
@@ -62,12 +86,12 @@
});
});
}
-export async function itSubIfWithPallet(name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
+export async function itSubIfWithPallet(name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise<IKeyringPair> }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) {
return itSub(name, cb, {requiredPallets: required, ...opts});
}
-itSub.only = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSub(name, cb, {only: true});
-itSub.skip = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSub(name, cb, {skip: true});
+itSub.only = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise<IKeyringPair> }) => any) => itSub(name, cb, {only: true});
+itSub.skip = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise<IKeyringPair> }) => any) => itSub(name, cb, {skip: true});
-itSubIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSubIfWithPallet(name, required, cb, {only: true});
-itSubIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSubIfWithPallet(name, required, cb, {skip: true});
+itSubIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise<IKeyringPair> }) => any) => itSubIfWithPallet(name, required, cb, {only: true});
+itSubIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise<IKeyringPair> }) => any) => itSubIfWithPallet(name, required, cb, {skip: true});
itSub.ifWithPallets = itSubIfWithPallet;