difftreelog
Tests can build
in: master
8 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5996,34 +5996,34 @@
[[package]]
name = "pallet-scheduler"
version = "3.0.0"
+source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
"parity-scale-codec 2.1.3",
- "serde",
- "sp-core",
"sp-io",
"sp-runtime",
"sp-std",
- "substrate-test-utils",
- "up-sponsorship",
]
[[package]]
name = "pallet-scheduler"
version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
"parity-scale-codec 2.1.3",
+ "serde",
+ "sp-core",
"sp-io",
"sp-runtime",
"sp-std",
+ "substrate-test-utils",
+ "up-sponsorship",
]
[[package]]
launch-config.jsondiffbeforeafterboth--- a/launch-config.json
+++ b/launch-config.json
@@ -45,8 +45,15 @@
"nodes": [
{
"port": 31200,
+ "wsPort": "9944",
"name": "alice",
"flags": []
+ },
+ {
+ "port": 31201,
+ "wsPort": "9945",
+ "name": "bob",
+ "flags": []
}
]
}
runtime/src/lib.rsdiffbeforeafterboth--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -216,7 +216,7 @@
/// by Operational extrinsics.
const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);
/// We allow for 2 seconds of compute with a 6 second average block time.
-const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND;
+const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2;
parameter_types! {
pub const BlockHashCount: BlockNumber = 2400;
tests/src/config.tsdiffbeforeafterboth--- a/tests/src/config.ts
+++ b/tests/src/config.ts
@@ -6,7 +6,7 @@
import process from 'process';
const config = {
- substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9844'
+ substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9944'
}
export default config;
\ No newline at end of file
tests/src/contracts.test.tsdiffbeforeafterboth1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import chai from "chai";7import chaiAsPromised from 'chai-as-promised';8import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api";9import fs from "fs";10import { Abi, ContractPromise as Contract } from "@polkadot/api-contract";11import privateKey from "./substrate/privateKey";12import {13 deployFlipper,14 getFlipValue,15 deployTransferContract,16} from "./util/contracthelpers";1718import {19 addToWhiteListExpectSuccess,20 approveExpectSuccess,21 createCollectionExpectSuccess,22 createItemExpectSuccess,23 enablePublicMintingExpectSuccess,24 enableWhiteListExpectSuccess,25 getGenericResult,26 normalizeAccountId,27 isWhitelisted,28 transferFromExpectSuccess29} from "./util/helpers";303132chai.use(chaiAsPromised);33const expect = chai.expect;3435const value = 0;36const gasLimit = 9000n * 1000000n;37const marketContractAddress = '5CYN9j3YvRkqxewoxeSvRbhAym4465C57uMmX5j4yz99L5H6';3839describe('Contracts', () => {40 it(`Can deploy smart contract Flipper, instantiate it and call it's get and flip messages.`, async () => {41 await usingApi(async api => {42 const [contract, deployer] = await deployFlipper(api);43 const initialGetResponse = await getFlipValue(contract, deployer);4445 const bob = privateKey("//Bob");46 const flip = contract.tx.flip(value, gasLimit);47 await submitTransactionAsync(bob, flip);4849 const afterFlipGetResponse = await getFlipValue(contract, deployer);50 expect(afterFlipGetResponse).not.to.be.eq(initialGetResponse, 'Flipping should change value.');51 });52 });5354 it('Can initialize contract instance', async () => {55 await usingApi(async (api) => {56 const metadata = JSON.parse(fs.readFileSync('./src/flipper/metadata.json').toString('utf-8'));57 const abi = new Abi(metadata);58 const newContractInstance = new Contract(api, abi, marketContractAddress);59 expect(newContractInstance).to.have.property('address');60 expect(newContractInstance.address.toString()).to.equal(marketContractAddress);61 });62 });63});6465describe.only('Chain extensions', () => {66 it('Transfer CE', async () => {67 await usingApi(async api => {68 const alice = privateKey("//Alice");69 const bob = privateKey("//Bob");7071 // Prep work72 const collectionId = await createCollectionExpectSuccess();73 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');74 const [contract, deployer] = await deployTransferContract(api);75 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);76 await submitTransactionAsync(alice, changeAdminTx);7778 const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();79 80 // Transfer81 const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1);82 const events = await submitTransactionAsync(alice, transferTx);83 const result = getGenericResult(events);84 const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();8586 // tslint:disable-next-line:no-unused-expression87 expect(result.success).to.be.true;88 expect(tokenBefore.Owner).to.be.deep.equal(normalizeAccountId(alice.address));89 expect(tokenAfter.Owner).to.be.deep.equal(normalizeAccountId(bob.address));90 });91 });9293 it('Mint CE', async () => {94 await usingApi(async api => {95 const alice = privateKey('//Alice');96 const bob = privateKey('//Bob');9798 const collectionId = await createCollectionExpectSuccess();99 const [contract, deployer] = await deployTransferContract(api);100 await enablePublicMintingExpectSuccess(alice, collectionId);101 await enableWhiteListExpectSuccess(alice, collectionId);102 await addToWhiteListExpectSuccess(alice, collectionId, contract.address);103 await addToWhiteListExpectSuccess(alice, collectionId, bob.address);104105 const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, { Nft: {const_data: '0x010203', variable_data: '0x020304' }});106 const events = await submitTransactionAsync(alice, transferTx);107 const result = getGenericResult(events);108 expect(result.success).to.be.true;109110 const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any).map((kv: any) => kv[1].toJSON());111 expect(tokensAfter).to.be.deep.equal([112 {113 Owner: bob.address,114 ConstData: '0x010203',115 VariableData: '0x020304',116 },117 ]);118 });119 });120121 it('Bulk mint CE', async () => {122 await usingApi(async api => {123 const alice = privateKey('//Alice');124 const bob = privateKey('//Bob');125126 const collectionId = await createCollectionExpectSuccess();127 const [contract, deployer] = await deployTransferContract(api);128 await enablePublicMintingExpectSuccess(alice, collectionId);129 await enableWhiteListExpectSuccess(alice, collectionId);130 await addToWhiteListExpectSuccess(alice, collectionId, contract.address);131 await addToWhiteListExpectSuccess(alice, collectionId, bob.address);132133 const transferTx = contract.tx.createMultipleItems(value, gasLimit, bob.address, collectionId, [134 { Nft: { const_data: '0x010203', variable_data: '0x020304' } },135 { Nft: { const_data: '0x010204', variable_data: '0x020305' } },136 { Nft: { const_data: '0x010205', variable_data: '0x020306' } }137 ]);138 const events = await submitTransactionAsync(alice, transferTx);139 const result = getGenericResult(events);140 expect(result.success).to.be.true;141142 const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any)143 .map((kv: any) => kv[1].toJSON())144 .sort((a: any, b: any) => a.ConstData.localeCompare(b.ConstData));145 expect(tokensAfter).to.be.deep.equal([146 {147 Owner: bob.address,148 ConstData: '0x010203',149 VariableData: '0x020304',150 },151 {152 Owner: bob.address,153 ConstData: '0x010204',154 VariableData: '0x020305',155 },156 {157 Owner: bob.address,158 ConstData: '0x010205',159 VariableData: '0x020306',160 },161 ]);162 });163 });164165 it('Approve CE', async () => {166 await usingApi(async api => {167 const alice = privateKey('//Alice');168 const bob = privateKey('//Bob');169 const charlie = privateKey('//Charlie');170171 const collectionId = await createCollectionExpectSuccess();172 const [contract, deployer] = await deployTransferContract(api);173 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString());174175 const transferTx = contract.tx.approve(value, gasLimit, bob.address, collectionId, tokenId, 1);176 const events = await submitTransactionAsync(alice, transferTx);177 const result = getGenericResult(events);178 expect(result.success).to.be.true;179180 await transferFromExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), charlie, 1, 'NFT');181 });182 });183184 it('TransferFrom CE', async () => {185 await usingApi(async api => {186 const alice = privateKey('//Alice');187 const bob = privateKey('//Bob');188 const charlie = privateKey('//Charlie');189190 const collectionId = await createCollectionExpectSuccess();191 const [contract, deployer] = await deployTransferContract(api);192 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);193 await approveExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), 1);194195 const transferTx = contract.tx.transferFrom(value, gasLimit, bob.address, charlie.address, collectionId, tokenId, 1);196 const events = await submitTransactionAsync(alice, transferTx);197 const result = getGenericResult(events);198 expect(result.success).to.be.true;199200 const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap()201 expect(token.Owner.toString()).to.be.equal(charlie.address);202 });203 });204205 it('SetVariableMetaData CE', async () => {206 await usingApi(async api => {207 const alice = privateKey('//Alice');208209 const collectionId = await createCollectionExpectSuccess();210 const [contract, deployer] = await deployTransferContract(api);211 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString());212213 const transferTx = contract.tx.setVariableMetaData(value, gasLimit, collectionId, tokenId, '0x121314');214 const events = await submitTransactionAsync(alice, transferTx);215 const result = getGenericResult(events);216 expect(result.success).to.be.true;217218 const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap()219 expect(token.VariableData.toString()).to.be.equal('0x121314');220 });221 });222223 it('ToggleWhiteList CE', async () => {224 await usingApi(async api => {225 const alice = privateKey('//Alice');226 const bob = privateKey('//Bob');227228 const collectionId = await createCollectionExpectSuccess();229 const [contract, deployer] = await deployTransferContract(api);230 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);231 await submitTransactionAsync(alice, changeAdminTx); 232233 expect(await isWhitelisted(collectionId, bob.address)).to.be.false;234235 {236 const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, true);237 const events = await submitTransactionAsync(alice, transferTx);238 const result = getGenericResult(events);239 expect(result.success).to.be.true;240241 expect(await isWhitelisted(collectionId, bob.address)).to.be.true;242 }243 {244 const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, false);245 const events = await submitTransactionAsync(alice, transferTx);246 const result = getGenericResult(events);247 expect(result.success).to.be.true;248249 expect(await isWhitelisted(collectionId, bob.address)).to.be.false;250 }251 });252 });253});tests/src/removeFromWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/removeFromWhiteList.test.ts
+++ b/tests/src/removeFromWhiteList.test.ts
@@ -16,6 +16,7 @@
findNotExistingCollection,
removeFromWhiteListExpectFailure,
disableWhiteListExpectSuccess,
+ normalizeAccountId
} from './util/helpers';
import { IKeyringPair } from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
@@ -40,7 +41,7 @@
await enableWhiteListExpectSuccess(alice, collectionId);
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
- await removeFromWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(bob.address));
expect(await isWhitelisted(collectionId, bob.address)).to.be.false;
});
});
@@ -52,7 +53,7 @@
await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
await disableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
- await removeFromWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
+ await removeFromWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, normalizeAccountId(bob.address));
});
});
});
@@ -72,7 +73,7 @@
await usingApi(async (api) => {
const collectionId = await findNotExistingCollection(api);
- await removeFromWhiteListExpectFailure(alice, collectionId, bob.address);
+ await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
});
});
@@ -83,7 +84,7 @@
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
await destroyCollectionExpectSuccess(collectionId);
- await removeFromWhiteListExpectFailure(alice, collectionId, bob.address);
+ await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
});
});
});
tests/src/toggleContractWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/toggleContractWhiteList.test.ts
+++ b/tests/src/toggleContractWhiteList.test.ts
@@ -45,14 +45,14 @@
const [contract, deployer] = await deployFlipper(api);
let flipValueBefore = await getFlipValue(contract, deployer);
- const flip = contract.exec('flip', value, gasLimit);
+ const flip = contract.tx.flip(value, gasLimit);
await submitTransactionAsync(bob, flip);
const flipValueAfter = await getFlipValue(contract,deployer);
expect(flipValueAfter).to.be.eq(!flipValueBefore, `Anyone can call new contract.`);
const deployerCanFlip = async () => {
let flipValueBefore = await getFlipValue(contract, deployer);
- const deployerFlip = contract.exec('flip', value, gasLimit);
+ const deployerFlip = contract.tx.flip(value, gasLimit);
await submitTransactionAsync(deployer, deployerFlip);
const aliceFlip1Response = await getFlipValue(contract, deployer);
expect(aliceFlip1Response).to.be.eq(!flipValueBefore, `Deployer always can flip.`);
@@ -62,7 +62,7 @@
flipValueBefore = await getFlipValue(contract, deployer);
const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);
const enableResult = await submitTransactionAsync(deployer, enableWhiteListTx);
- const flipWithEnabledWhiteList = contract.exec('flip', value, gasLimit);
+ const flipWithEnabledWhiteList = contract.tx.flip(value, gasLimit);
await expect(submitTransactionExpectFailAsync(bob, flipWithEnabledWhiteList)).to.be.rejected;
const flipValueAfterEnableWhiteList = await getFlipValue(contract, deployer);
expect(flipValueAfterEnableWhiteList).to.be.eq(flipValueBefore, `Enabling whitelist doesn't make it possible to call contract for everyone.`);
@@ -72,7 +72,7 @@
flipValueBefore = await getFlipValue(contract, deployer);
const addBobToWhiteListTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);
const addBobResult = await submitTransactionAsync(deployer, addBobToWhiteListTx);
- const flipWithWhitelistedBob = contract.exec('flip', value, gasLimit);
+ const flipWithWhitelistedBob = contract.tx.flip(value, gasLimit);
await submitTransactionAsync(bob, flipWithWhitelistedBob);
const flipAfterWhiteListed = await getFlipValue(contract,deployer);
expect(flipAfterWhiteListed).to.be.eq(!flipValueBefore, `Bob was whitelisted, now he can flip.`);
@@ -82,7 +82,7 @@
flipValueBefore = await getFlipValue(contract, deployer);
const removeBobFromWhiteListTx = api.tx.nft.removeFromContractWhiteList(contract.address, bob.address);
const removeBobResult = await submitTransactionAsync(deployer, removeBobFromWhiteListTx);
- const bobRemoved = contract.exec('flip', value, gasLimit);
+ const bobRemoved = contract.tx.flip(value, gasLimit);
await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected;
const afterBobRemoved = await getFlipValue(contract, deployer);
expect(afterBobRemoved).to.be.eq(flipValueBefore, `Bob can't call contract, now when he is removeed from white list.`);
@@ -92,7 +92,7 @@
flipValueBefore = await getFlipValue(contract, deployer);
const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false);
const disableWhiteListResult = await submitTransactionAsync(deployer, disableWhiteListTx);
- const whiteListDisabledFlip = contract.exec('flip', value, gasLimit);
+ const whiteListDisabledFlip = contract.tx.flip(value, gasLimit);
await submitTransactionAsync(bob, whiteListDisabledFlip);
const afterWhiteListDisabled = await getFlipValue(contract,deployer);
expect(afterWhiteListDisabled).to.be.eq(!flipValueBefore, `Anyone can call contract with disabled whitelist.`);
tests/src/util/helpers.tsdiffbeforeafterboth--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -29,7 +29,7 @@
} | {
ethereum: string,
};
-export function normalizeAccountId(input: string | CrossAccountId | IKeyringPair): CrossAccountId {
+export function normalizeAccountId(input: string | AccountId | CrossAccountId | IKeyringPair): CrossAccountId {
if (typeof input === 'string')
return { substrate: input };
if ('address' in input) {
@@ -37,8 +37,11 @@
}
if ('ethereum' in input) {
input.ethereum = input.ethereum.toLowerCase();
+ return input;
}
- return input;
+
+ // AccountId
+ return {substrate: input.toString()}
}
export function toSubstrateAddress(input: string | CrossAccountId | IKeyringPair): string {
input = normalizeAccountId(input);