Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: update polkadot-js api to 7.2.1 #809

Merged
merged 13 commits into from
Jan 21, 2022
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
"test:test-release": "yarn start:test-release"
},
"dependencies": {
"@polkadot/api": "^7.0.1",
"@polkadot/api": "^7.2.1",
"@polkadot/apps-config": "0.98.2-164",
"@polkadot/util-crypto": "^8.2.2",
"@polkadot/x-rxjs": "^6.11.1",
Expand All @@ -75,11 +75,11 @@
"tsc-watch": "^4.4.0"
},
"resolutions": {
"@polkadot/api": "7.0.1",
"@polkadot/api": "7.2.1",
"@polkadot/keyring": "8.2.2",
"@polkadot/networks": "8.2.2",
"@polkadot/types": "7.0.1",
"@polkadot/types-known": "7.0.1",
"@polkadot/types": "7.2.1",
"@polkadot/types-known": "7.2.1",
"@polkadot/util": "8.2.2",
"@polkadot/util-crypto": "8.2.2",
"@polkadot/wasm-crypto": "4.5.1",
Expand Down
148 changes: 8 additions & 140 deletions src/services/accounts/AccountsAssetsService.spec.ts
Original file line number Diff line number Diff line change
@@ -1,155 +1,23 @@
import { ApiPromise } from '@polkadot/api';
import { ApiDecoration } from '@polkadot/api/types';
import { AssetId, Hash } from '@polkadot/types/interfaces';
import { PalletAssetsAssetBalance } from '@polkadot/types/lookup';
import { Hash } from '@polkadot/types/interfaces';

import { sanitizeNumbers } from '../../sanitize/sanitizeNumbers';
import { statemintV1 } from '../../test-helpers/metadata/statemintMetadata';
import { rococoRegistry } from '../../test-helpers/registries';
import { createApiWithAugmentations } from '../../test-helpers/typeFactory';
import { TypeFactory } from '../../test-helpers/typeFactory';
import { blockHash789629, defaultMockApi } from '../test-helpers/mock';
import {
assetApprovals,
assetsAccount,
assetsInfoKeysInjected,
assetsMetadata,
} from '../test-helpers/mock/assets/mockAssetData';
import { AccountsAssetsService } from './AccountsAssetsService';

const statemintApiV1 = createApiWithAugmentations(statemintV1);
const statemintTypeFactory = new TypeFactory(statemintApiV1);

const falseBool = rococoRegistry.createType('bool', false);
const trueBool = rococoRegistry.createType('bool', true);
const assetTBalanceOne = rococoRegistry.createType('u64', 10000000);
const assetTBalanceTwo = rococoRegistry.createType('u64', 20000000);

const accountIdOne = rococoRegistry.createType(
'AccountId',
'1TYrFCWxwHA5bhiXf6uLvPfG6eEvrzzL7uiPK3Yc6yHLUqc'
);
const accountIdTwo = rococoRegistry.createType(
'AccountId',
'13NXiLYYzVEjXxU3eaZNcrjEX9vPyVDNNpURCzK8Bj9BiCWH'
);
const balanceOfTwo = rococoRegistry.createType('BalanceOf', 2000000);

const assetsInfo = () =>
Promise.resolve().then(() => {
const responseObj = {
owner: accountIdOne,
issue: accountIdTwo,
admin: accountIdTwo,
freezer: accountIdTwo,
supply: assetTBalanceOne,
deposit: balanceOfTwo,
minBalance: rococoRegistry.createType('u64', 10000),
isSufficient: trueBool,
accounts: rococoRegistry.createType('u32', 10),
sufficients: rococoRegistry.createType('u32', 15),
approvals: rococoRegistry.createType('u32', 20),
isFrozen: falseBool,
};

return rococoRegistry.createType('AssetDetails', responseObj);
});

const assetsMetadata = () =>
Promise.resolve().then(() => {
const responseObj = {
deposit: balanceOfTwo,
name: rococoRegistry.createType('Bytes', 'statemint'),
symbol: rococoRegistry.createType('Bytes', 'DOT'),
decimals: rococoRegistry.createType('u8', 10),
isFrozen: falseBool,
};

return rococoRegistry.createType('AssetMetadata', responseObj);
});

const assetBalanceObjOne = {
balance: assetTBalanceOne,
isFrozen: falseBool,
sufficient: trueBool,
};

const assetBalanceObjTwo = {
balance: assetTBalanceTwo,
isFrozen: trueBool,
sufficient: trueBool,
};

const assetBalanceObjThree = {
balance: assetTBalanceTwo,
isFrozen: falseBool,
sufficient: falseBool,
};

const assetBalanceFactory = {
'10': assetBalanceObjOne as unknown as PalletAssetsAssetBalance,
'20': assetBalanceObjTwo as unknown as PalletAssetsAssetBalance,
'30': assetBalanceObjThree as unknown as PalletAssetsAssetBalance,
};

const assetStorageKeyOne = statemintTypeFactory.storageKey(
10,
'AssetId',
statemintApiV1.query.assets.asset
);

const assetStorageKeyTwo = statemintTypeFactory.storageKey(
20,
'AssetId',
statemintApiV1.query.assets.asset
);

const assetStorageKeyThree = statemintTypeFactory.storageKey(
30,
'AssetId',
statemintApiV1.query.assets.asset
);

const assetsAccountKeysAt = () =>
Promise.resolve().then(() => {
return [assetStorageKeyOne, assetStorageKeyTwo, assetStorageKeyThree];
});

/**
* Attach `keys` to mockApi.query.assets.asset
*/
Object.assign(assetsInfo, {
keys: assetsAccountKeysAt,
});

/**
* @param assetId options are 10, 20, 30
*/
const assetsAccount = (assetId: number | AssetId, _address: string) => {
const id =
typeof assetId === 'number' ? assetId : parseInt(assetId.toString());

switch (id) {
case 10:
return assetBalanceFactory[10];
case 20:
return assetBalanceFactory[20];
case 30:
return assetBalanceFactory[30];
default:
return;
}
};

const assetApprovals = () =>
Promise.resolve().then(() => {
const assetObj = {
amount: assetTBalanceOne,
deposit: balanceOfTwo,
};
return rococoRegistry.createType('Option<AssetApproval>', assetObj);
});

const historicApi = {
query: {
assets: {
account: assetsAccount,
approvals: assetApprovals,
asset: assetsInfo,
asset: assetsInfoKeysInjected(),
metadata: assetsMetadata,
},
},
Expand Down
16 changes: 11 additions & 5 deletions src/services/accounts/AccountsAssetsService.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ApiDecoration } from '@polkadot/api/types';
import { bool, StorageKey } from '@polkadot/types';
import { StorageKey } from '@polkadot/types';
import { AssetId, BlockHash } from '@polkadot/types/interfaces';
import { BadRequest } from 'http-errors';

Expand Down Expand Up @@ -125,12 +125,18 @@ export class AccountsAssetsService extends AbstractService {
address
);

let balance = null,
isFrozen = null,
reason = null;
if (assetBalance.isSome) {
TarikGul marked this conversation as resolved.
Show resolved Hide resolved
({ balance, isFrozen, reason } = assetBalance.unwrap());
}

return {
assetId,
balance: assetBalance.balance,
isFrozen: assetBalance.isFrozen,
isSufficient:
assetBalance.sufficient || (assetBalance['isSufficient'] as bool),
balance,
isFrozen,
reason,
};
})
);
Expand Down
153 changes: 7 additions & 146 deletions src/services/pallets/PalletsAssetsService.spec.ts
Original file line number Diff line number Diff line change
@@ -1,159 +1,20 @@
import { ApiPromise } from '@polkadot/api';
import { AssetId } from '@polkadot/types/interfaces';
import { PalletAssetsAssetBalance } from '@polkadot/types/lookup';

import { sanitizeNumbers } from '../../sanitize/sanitizeNumbers';
import { statemintV1 } from '../../test-helpers/metadata/statemintMetadata';
import { rococoRegistry } from '../../test-helpers/registries';
import { createApiWithAugmentations } from '../../test-helpers/typeFactory';
import { TypeFactory } from '../../test-helpers/typeFactory';
import { blockHash789629, defaultMockApi } from '../test-helpers/mock';
import {
assetApprovals,
assetsAccount,
assetsInfoKeysInjected,
assetsMetadata,
} from '../test-helpers/mock/assets/mockAssetData';
import { PalletsAssetsService } from './PalletsAssetsService';

/**
* Asset specific constants.
* Note: It borrows some variables used in the parachains constant section
*
* Used in `/assets` and `/accounts` endpoints
*/
const statemintApiV1 = createApiWithAugmentations(statemintV1);
const statemintTypeFactory = new TypeFactory(statemintApiV1);

const falseBool = rococoRegistry.createType('bool', false);
const trueBool = rococoRegistry.createType('bool', true);
const assetTBalanceOne = rococoRegistry.createType('u64', 10000000);
const assetTBalanceTwo = rococoRegistry.createType('u64', 20000000);

const accountIdOne = rococoRegistry.createType(
'AccountId',
'1TYrFCWxwHA5bhiXf6uLvPfG6eEvrzzL7uiPK3Yc6yHLUqc'
);
const accountIdTwo = rococoRegistry.createType(
'AccountId',
'13NXiLYYzVEjXxU3eaZNcrjEX9vPyVDNNpURCzK8Bj9BiCWH'
);
const balanceOfTwo = rococoRegistry.createType('BalanceOf', 2000000);

const assetsInfo = () =>
Promise.resolve().then(() => {
const responseObj = {
owner: accountIdOne,
issue: accountIdTwo,
admin: accountIdTwo,
freezer: accountIdTwo,
supply: assetTBalanceOne,
deposit: balanceOfTwo,
minBalance: rococoRegistry.createType('u64', 10000),
isSufficient: trueBool,
accounts: rococoRegistry.createType('u32', 10),
sufficients: rococoRegistry.createType('u32', 15),
approvals: rococoRegistry.createType('u32', 20),
isFrozen: falseBool,
};

return rococoRegistry.createType('AssetDetails', responseObj);
});

const assetsMetadata = () =>
Promise.resolve().then(() => {
const responseObj = {
deposit: balanceOfTwo,
name: rococoRegistry.createType('Bytes', 'statemint'),
symbol: rococoRegistry.createType('Bytes', 'DOT'),
decimals: rococoRegistry.createType('u8', 10),
isFrozen: falseBool,
};

return rococoRegistry.createType('AssetMetadata', responseObj);
});

const assetBalanceObjOne = {
balance: assetTBalanceOne,
isFrozen: falseBool,
sufficient: trueBool,
};

const assetBalanceObjTwo = {
balance: assetTBalanceTwo,
isFrozen: trueBool,
sufficient: trueBool,
};

const assetBalanceObjThree = {
balance: assetTBalanceTwo,
isFrozen: falseBool,
sufficient: falseBool,
};

const assetBalanceFactory = {
'10': assetBalanceObjOne as unknown as PalletAssetsAssetBalance,
'20': assetBalanceObjTwo as unknown as PalletAssetsAssetBalance,
'30': assetBalanceObjThree as unknown as PalletAssetsAssetBalance,
};

const assetStorageKeyOne = statemintTypeFactory.storageKey(
10,
'AssetId',
statemintApiV1.query.assets.asset
);

const assetStorageKeyTwo = statemintTypeFactory.storageKey(
20,
'AssetId',
statemintApiV1.query.assets.asset
);

const assetStorageKeyThree = statemintTypeFactory.storageKey(
30,
'AssetId',
statemintApiV1.query.assets.asset
);

const assetsAccountKeysAt = () =>
Promise.resolve().then(() => {
return [assetStorageKeyOne, assetStorageKeyTwo, assetStorageKeyThree];
});

/**
* Attach `keysAt` to mockApi.query.assets.asset
*/
Object.assign(assetsInfo, {
keysAt: assetsAccountKeysAt,
});

/**
* @param assetId options are 10, 20, 30
*/
const assetsAccount = (assetId: number | AssetId, _address: string) => {
const id =
typeof assetId === 'number' ? assetId : parseInt(assetId.toString());

switch (id) {
case 10:
return assetBalanceFactory[10];
case 20:
return assetBalanceFactory[20];
case 30:
return assetBalanceFactory[30];
default:
return;
}
};

const assetApprovals = () =>
Promise.resolve().then(() => {
const assetObj = {
amount: assetTBalanceOne,
deposit: balanceOfTwo,
};
return rococoRegistry.createType('Option<AssetApproval>', assetObj);
});

const mockApi = {
...defaultMockApi,
query: {
assets: {
asset: assetsInfo,
asset: assetsInfoKeysInjected,
approvals: assetApprovals,
account: assetsAccount,
metadata: assetsMetadata,
Expand Down
Loading