Bump API (contracts cleanups) (#3855)

* Bump API (contracts cleanups)

* Remove unneeded JSON.parse
This commit is contained in:
Jaco Greeff 2020-10-12 15:57:35 +02:00 committed by GitHub
parent 1ed570b221
commit 3152c8e026
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 117 additions and 151 deletions

View File

@ -33,10 +33,10 @@
"afterSign": "electron-builder-notarize"
},
"resolutions": {
"@polkadot/api": "^2.1.2-20",
"@polkadot/api-contract": "^2.1.2-20",
"@polkadot/api": "^2.1.2-23",
"@polkadot/api-contract": "^2.1.2-23",
"@polkadot/keyring": "^3.5.1",
"@polkadot/types": "^2.1.2-20",
"@polkadot/types": "^2.1.2-23",
"@polkadot/util": "^3.5.1",
"@polkadot/util-crypto": "^3.5.1",
"@polkadot/wasm-crypto": "^1.4.1",

View File

@ -12,6 +12,6 @@
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.11.2",
"@polkadot/api-contract": "^2.1.2-20"
"@polkadot/api-contract": "^2.1.2-23"
}
}

View File

@ -1,13 +1,13 @@
// Copyright 2017-2020 @polkadot/app-contracts authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Hash } from '@polkadot/types/interfaces';
import { SubmittableExtrinsic } from '@polkadot/api/types';
import React, { useCallback, useState } from 'react';
import { SubmittableResult } from '@polkadot/api';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { CodePromise, CodeSubmittableResult } from '@polkadot/api-contract';
import { InputAddress, InputFile, Modal, TxButton } from '@polkadot/react-components';
import { useAccountId, useNonEmptyString } from '@polkadot/react-hooks';
import { compactAddLength, isNull, isWasm } from '@polkadot/util';
import { useAccountId, useApi, useNonEmptyString } from '@polkadot/react-hooks';
import { isNull, isWasm } from '@polkadot/util';
import { ABI, InputName } from '../shared';
import store from '../store';
@ -20,42 +20,46 @@ interface Props {
function Upload ({ onClose }: Props): React.ReactElement {
const { t } = useTranslation();
const { api } = useApi();
const [accountId, setAccountId] = useAccountId();
const [uploadTx, setUploadTx] = useState<SubmittableExtrinsic<'promise'> | null>(null);
const [[wasm, isWasmValid], setWasm] = useState<[Uint8Array | null, boolean]>([null, false]);
const [name, isNameValid, setName] = useNonEmptyString();
const { abi, contractAbi, errorText, isAbiError, isAbiSupplied, isAbiValid, onChangeAbi, onRemoveAbi } = useAbi();
const { contractAbi, errorText, isAbiError, isAbiSupplied, isAbiValid, onChangeAbi, onRemoveAbi } = useAbi();
const code = useMemo(
() => isAbiValid && isWasmValid && wasm && contractAbi
? new CodePromise(api, contractAbi, wasm)
: null,
[api, contractAbi, isAbiValid, isWasmValid, wasm]
);
useEffect((): void => {
setUploadTx(() => code ? code.createBlueprint() : null);
}, [code]);
const _onAddWasm = useCallback(
(wasm: Uint8Array, name: string): void => {
setWasm([compactAddLength(wasm), isWasm(wasm)]);
setName(name.replace('.wasm', ''));
setWasm([wasm, isWasm(wasm)]);
setName(name.replace('.wasm', '').replace('_', ' '));
},
[setName]
);
const _onSuccess = useCallback(
(result: SubmittableResult): void => {
const record = result.findRecord('contracts', 'CodeStored');
if (record) {
const codeHash = record.event.data[0];
if (!codeHash || !name) {
return;
}
store
.saveCode(codeHash as Hash, { abi, name, tags: [] })
.then()
.catch((error: any): void => {
console.error('Unable to save code', error);
});
}
(result: CodeSubmittableResult<'promise'>): void => {
result.blueprint && store
.saveCode(result.blueprint.codeHash, {
abi: JSON.stringify(result.blueprint.abi.json),
name: name || '<unknown>',
tags: []
})
.catch(console.error);
},
[abi, name]
[name]
);
const isSubmittable = !!accountId && (!isNull(name) && isNameValid) && isWasmValid && isAbiSupplied && isAbiValid;
const isSubmittable = !!accountId && (!isNull(name) && isNameValid) && isWasmValid && isAbiSupplied && isAbiValid && !!uploadTx;
return (
<Modal header={t('Upload WASM')}>
@ -98,13 +102,12 @@ function Upload ({ onClose }: Props): React.ReactElement {
<Modal.Actions onCancel={onClose}>
<TxButton
accountId={accountId}
extrinsic={uploadTx}
icon='upload'
isDisabled={!isSubmittable}
label={t('Upload')}
onClick={onClose}
onSuccess={_onSuccess}
params={[wasm]}
tx='contracts.putCode'
/>
</Modal.Actions>
</Modal>

View File

@ -8,7 +8,7 @@ import BN from 'bn.js';
import React, { useCallback, useState, useEffect } from 'react';
import styled from 'styled-components';
import { Button, Dropdown, Expander, InputAddress, InputBalance, Modal, TxButton } from '@polkadot/react-components';
import { PromiseContract as ApiContract } from '@polkadot/api-contract';
import { ContractPromise as ApiContract } from '@polkadot/api-contract';
import { useAccountId, useFormField } from '@polkadot/react-hooks';
import { BN_ZERO } from '@polkadot/util';

View File

@ -6,7 +6,7 @@ import { ContractInfo } from '@polkadot/types/interfaces';
import React, { useCallback } from 'react';
import keyring from '@polkadot/ui-keyring';
import { PromiseContract } from '@polkadot/api-contract';
import { ContractPromise } from '@polkadot/api-contract';
import { AddressInfo, AddressMini, Button, Forget } from '@polkadot/react-components';
import { useApi, useCall, useToggle } from '@polkadot/react-hooks';
import { Option } from '@polkadot/types';
@ -17,7 +17,7 @@ import { useTranslation } from '../translate';
interface Props {
className?: string;
contract: PromiseContract;
contract: ContractPromise;
onCall: (index?: number) => void;
}

View File

@ -5,7 +5,7 @@ import { StringOrNull } from '@polkadot/react-components/types';
import React, { useCallback, useMemo, useRef, useState } from 'react';
import { ApiPromise } from '@polkadot/api';
import { PromiseContract as ApiContract } from '@polkadot/api-contract';
import { ContractPromise as ApiContract } from '@polkadot/api-contract';
import { Table } from '@polkadot/react-components';
import { useApi } from '@polkadot/react-hooks';

View File

@ -6,7 +6,7 @@ import { StringOrNull } from '@polkadot/react-components/types';
import React from 'react';
import { ApiPromise } from '@polkadot/api';
import { PromiseContract as Contract } from '@polkadot/api-contract';
import { ContractPromise as Contract } from '@polkadot/api-contract';
import { getContractAbi } from '@polkadot/react-components/util';
import MessageSignature from '../shared/MessageSignature';

View File

@ -3,14 +3,11 @@
import { SubmittableExtrinsic } from '@polkadot/api/types';
import { StringOrNull } from '@polkadot/react-components/types';
import { AccountId } from '@polkadot/types/interfaces';
import { CodeStored } from './types';
import BN from 'bn.js';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useHistory } from 'react-router-dom';
import { SubmittableResult } from '@polkadot/api';
import { PromiseBlueprint } from '@polkadot/api-contract';
import { BlueprintPromise, BlueprintSubmittableResult } from '@polkadot/api-contract';
import { Dropdown, InputAddress, InputBalance, Modal, TxButton } from '@polkadot/react-components';
import { useFormField, useNonEmptyString, useNonZeroBn, useApi } from '@polkadot/react-hooks';
import keyring from '@polkadot/ui-keyring';
@ -23,17 +20,15 @@ import useWeight from './useWeight';
import { ENDOWMENT } from './constants';
interface Props {
basePath: string;
codeHash: string;
constructorIndex: number;
onClose: () => void;
setConstructorIndex: React.Dispatch<number>;
}
function Deploy ({ basePath, codeHash, constructorIndex = 0, onClose, setConstructorIndex }: Props): React.ReactElement<Props> {
function Deploy ({ codeHash, constructorIndex = 0, onClose, setConstructorIndex }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const { api } = useApi();
const history = useHistory();
const weight = useWeight();
const [initTx, setInitTx] = useState<SubmittableExtrinsic<'promise'> | null>(null);
const [params, setParams] = useState<any[]>([]);
@ -50,13 +45,13 @@ function Deploy ({ basePath, codeHash, constructorIndex = 0, onClose, setConstru
);
const [name, isNameValid, setName] = useNonEmptyString(code.json.name);
const { abi, contractAbi, errorText, isAbiError, isAbiSupplied, isAbiValid, onChangeAbi, onRemoveAbi } = useAbi([code.json.abi, code.contractAbi], codeHash, true);
const { contractAbi, errorText, isAbiError, isAbiSupplied, isAbiValid, onChangeAbi, onRemoveAbi } = useAbi([code.json.abi, code.contractAbi], codeHash, true);
const blueprint = useMemo(
() => codeHash && contractAbi
? new PromiseBlueprint(api, contractAbi, codeHash)
() => isAbiValid && codeHash && contractAbi
? new BlueprintPromise(api, contractAbi, codeHash)
: null,
[api, codeHash, contractAbi]
[api, codeHash, contractAbi, isAbiValid]
);
const constructOptions = useMemo(
@ -79,7 +74,7 @@ function Deploy ({ basePath, codeHash, constructorIndex = 0, onClose, setConstru
endowment && setInitTx((): SubmittableExtrinsic<'promise'> | null => {
if (blueprint) {
try {
return blueprint.instantiate(constructorIndex, endowment, weight.weight, ...params);
return blueprint.createContract(constructorIndex, endowment, weight.weight, ...params);
} catch (error) {
console.error(error);
@ -92,30 +87,21 @@ function Deploy ({ basePath, codeHash, constructorIndex = 0, onClose, setConstru
}, [blueprint, constructorIndex, endowment, params, weight]);
const _onSuccess = useCallback(
(result: SubmittableResult): void => {
const section = api.tx.contracts ? 'contracts' : 'contract';
const records = result.filterRecords(section, 'Instantiated');
if (records.length) {
// find the last EventRecord (in the case of multiple contracts deployed - we should really be
// more clever here to find the exact contract deployed, this works for eg. Delegator)
const address = records[records.length - 1].event.data[1] as unknown as AccountId;
keyring.saveContract(address.toString(), {
(result: BlueprintSubmittableResult<'promise'>): void => {
if (result.contract) {
keyring.saveContract(result.contract.address.toString(), {
contract: {
abi,
abi: JSON.stringify(result.contract.abi.json),
genesisHash: api.genesisHash.toHex()
},
name,
tags: []
});
history.push(basePath);
onClose && onClose();
}
},
[abi, api, basePath, history, name, onClose]
[api, name, onClose]
);
const isValid = isNameValid && isEndowmentValid && weight.isValid && isAccountIdValid;

View File

@ -111,7 +111,6 @@ function ContractsApp ({ basePath, className = '' }: Props): React.ReactElement<
/>
{codeHash && isDeployOpen && (
<Deploy
basePath={basePath}
codeHash={codeHash}
constructorIndex={constructorIndex}
onClose={_onCloseDeploy}

View File

@ -80,17 +80,7 @@ function ABI (props: Props): React.ReactElement<Props> {
onChange={onChange}
placeholder={
isSupplied && !isValid
? (
<>
{t<string>('invalid ABI file selected')}
{!!errorText && (
<>
{' — '}
{t<string>(errorText)}
</>
)}
</>
)
? <>{t<string>('invalid ABI file selected')}{!!errorText && ` — ${errorText}`}</>
: t<string>('click to select or drag and drop a JSON ABI file')
}
/>

View File

@ -6,7 +6,7 @@ import { ContractInfo } from '@polkadot/types/interfaces';
import React, { useCallback, useEffect, useState } from 'react';
import styled from 'styled-components';
import { Abi, PromiseContract } from '@polkadot/api-contract';
import { Abi, ContractPromise } from '@polkadot/api-contract';
import { Expander, IconLink } from '@polkadot/react-components';
import { useApi, useCall } from '@polkadot/react-hooks';
import { Option } from '@polkadot/types';
@ -16,7 +16,7 @@ import { useTranslation } from '../translate';
export interface Props {
className?: string;
contract?: PromiseContract;
contract?: ContractPromise;
contractAbi: Abi;
isLabelled?: boolean;
isRemovable?: boolean;

View File

@ -69,13 +69,9 @@ class Store extends EventEmitter {
private addCode (key: string, json: CodeJson): void {
try {
const abi = json.abi
? JSON.parse(json.abi) as Record<string, any>
: null;
this.allCode[json.codeHash] = {
contractAbi: abi
? new Abi(abi)
contractAbi: json.abi
? new Abi(json.abi)
: undefined,
json
};

View File

@ -8,7 +8,6 @@ import { Abi } from '@polkadot/api-contract';
import { u8aToString } from '@polkadot/util';
import store from './store';
import { useTranslation } from './translate';
interface UseAbi {
abi: string | null;
@ -22,7 +21,6 @@ interface UseAbi {
}
export default function useAbi (initialValue: [string | null | undefined, Abi | null | undefined] = [null, null], codeHash: StringOrNull = null, isRequired = false): UseAbi {
const { t } = useTranslation();
const [[abi, contractAbi, isAbiSupplied, isAbiValid], setAbi] = useState<[string | null | undefined, Abi | null | undefined, boolean, boolean]>([initialValue[0], initialValue[1], !!initialValue[1], !isRequired || !!initialValue[1]]);
const [[isAbiError, errorText], setError] = useState<[boolean, string | null]>([false, null]);
@ -38,13 +36,7 @@ export default function useAbi (initialValue: [string | null | undefined, Abi |
const json = u8aToString(u8a);
try {
const abi = JSON.parse(json) as Record<string, any>;
if (!abi.metadataVersion) {
throw new Error(t('You are using an ABI with an outdated format. Please generate a new one.'));
}
setAbi([json, new Abi(abi), true, true]);
setAbi([json, new Abi(json), true, true]);
codeHash && store.saveCode(
codeHash,
@ -57,7 +49,7 @@ export default function useAbi (initialValue: [string | null | undefined, Abi |
setError([true, error]);
}
},
[codeHash, t]
[codeHash]
);
const onRemoveAbi = useCallback(

View File

@ -31,7 +31,7 @@
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-reactive#readme",
"dependencies": {
"@babel/runtime": "^7.11.2",
"@polkadot/api": "^2.1.2-20",
"@polkadot/api": "^2.1.2-23",
"@polkadot/extension-dapp": "^0.35.0-beta.12",
"rxjs-compat": "^6.6.3"
}

112
yarn.lock
View File

@ -2039,57 +2039,57 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/api-contract@npm:^2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/api-contract@npm:2.1.2-20"
"@polkadot/api-contract@npm:^2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/api-contract@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api": 2.1.2-20
"@polkadot/rpc-core": 2.1.2-20
"@polkadot/types": 2.1.2-20
"@polkadot/api": 2.1.2-23
"@polkadot/rpc-core": 2.1.2-23
"@polkadot/types": 2.1.2-23
"@polkadot/util": ^3.5.1
bn.js: ^5.1.3
rxjs: ^6.6.3
checksum: 138f3f2ec27b6772d87d988b2c69fcbc303c821f2c68d1e99af52afe6eb257a0d3395b3350c450a73f7abc8657cb79fe07f54ca073bf38c13d3dae14fb8b9910
checksum: c7580494c919dcc521c69f480d0e2994b7c07cb3b7bd2217abb13ccc643d5fd0865540bda2e7dcbe3e9f90355100ae29eac66c92b3a6d5e5ca1c406792003bd2
languageName: node
linkType: hard
"@polkadot/api-derive@npm:2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/api-derive@npm:2.1.2-20"
"@polkadot/api-derive@npm:2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/api-derive@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api": 2.1.2-20
"@polkadot/rpc-core": 2.1.2-20
"@polkadot/rpc-provider": 2.1.2-20
"@polkadot/types": 2.1.2-20
"@polkadot/api": 2.1.2-23
"@polkadot/rpc-core": 2.1.2-23
"@polkadot/rpc-provider": 2.1.2-23
"@polkadot/types": 2.1.2-23
"@polkadot/util": ^3.5.1
"@polkadot/util-crypto": ^3.5.1
bn.js: ^5.1.3
memoizee: ^0.4.14
rxjs: ^6.6.3
checksum: c3294b0cf54e499e260faaaf23ffea74b7188df80efc80b3f7ce8630b5afe55f2dfdb209b15a5e7edcba673e1a52837bfdc4f84e7f9b85d5d5fc6ca1560818a5
checksum: a8ab3ef976aec27ba7aac21b4ebbe95b282728da94cdaea9ea56e161cf6a1f53d5623fc1cc1e86978a869c80fbd492b727a8c32273f0a987f43699f05821e013
languageName: node
linkType: hard
"@polkadot/api@npm:^2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/api@npm:2.1.2-20"
"@polkadot/api@npm:^2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/api@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api-derive": 2.1.2-20
"@polkadot/api-derive": 2.1.2-23
"@polkadot/keyring": ^3.5.1
"@polkadot/metadata": 2.1.2-20
"@polkadot/rpc-core": 2.1.2-20
"@polkadot/rpc-provider": 2.1.2-20
"@polkadot/types": 2.1.2-20
"@polkadot/types-known": 2.1.2-20
"@polkadot/metadata": 2.1.2-23
"@polkadot/rpc-core": 2.1.2-23
"@polkadot/rpc-provider": 2.1.2-23
"@polkadot/types": 2.1.2-23
"@polkadot/types-known": 2.1.2-23
"@polkadot/util": ^3.5.1
"@polkadot/util-crypto": ^3.5.1
bn.js: ^5.1.3
eventemitter3: ^4.0.7
rxjs: ^6.6.3
checksum: 680d0fe4d9e3613cc888cb309a44e2a589fc8bef6bb727bd3bfba8432242a485348691b2c78b83b591a5767e15d44164dc1f3b93856252e0e2053c26300617c0
checksum: 00a752c764499df433dcff386895683a9faf31f12b789aac7456efc92d331c280723e2939b586a21dda8d2b9a5691667d7f2bef3d6fe298d960b2a26c0db2939
languageName: node
linkType: hard
@ -2145,7 +2145,7 @@ __metadata:
resolution: "@polkadot/app-contracts@workspace:packages/page-contracts"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api-contract": ^2.1.2-20
"@polkadot/api-contract": ^2.1.2-23
languageName: unknown
linkType: soft
@ -2525,17 +2525,17 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/metadata@npm:2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/metadata@npm:2.1.2-20"
"@polkadot/metadata@npm:2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/metadata@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/types": 2.1.2-20
"@polkadot/types-known": 2.1.2-20
"@polkadot/types": 2.1.2-23
"@polkadot/types-known": 2.1.2-23
"@polkadot/util": ^3.5.1
"@polkadot/util-crypto": ^3.5.1
bn.js: ^5.1.3
checksum: f08a577035578d691f26142dd5e18ba3202849f176ec422ba2150a1cbdba939701f7e0a699cab4d9d188a165b1c3ddc9ff06f01f0c1663ab31ed44b5137fc0e5
checksum: 874d82dd9bae258e122502efd3ebcb2a5060c2d410085fc30ca9b8b1aba6544561452ddbf6dde39b96379a7bd74e35f4d04382d8e0c1044d8bdcc9ee4c4a6fc7
languageName: node
linkType: hard
@ -2544,7 +2544,7 @@ __metadata:
resolution: "@polkadot/react-api@workspace:packages/react-api"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api": ^2.1.2-20
"@polkadot/api": ^2.1.2-23
"@polkadot/extension-dapp": ^0.35.0-beta.12
rxjs-compat: ^6.6.3
languageName: unknown
@ -2667,35 +2667,35 @@ __metadata:
languageName: unknown
linkType: soft
"@polkadot/rpc-core@npm:2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/rpc-core@npm:2.1.2-20"
"@polkadot/rpc-core@npm:2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/rpc-core@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/metadata": 2.1.2-20
"@polkadot/rpc-provider": 2.1.2-20
"@polkadot/types": 2.1.2-20
"@polkadot/metadata": 2.1.2-23
"@polkadot/rpc-provider": 2.1.2-23
"@polkadot/types": 2.1.2-23
"@polkadot/util": ^3.5.1
memoizee: ^0.4.14
rxjs: ^6.6.3
checksum: ff6126e73801ddbd01e9d7b5687be820ac5442be5c4a9d4f0ea1d54ef67cae11c1eff7a7b61bde713f279dfbb3d02217cb58a2b6d801844a1711c261171db14a
checksum: c732fea7e17b7c14529984638d1a75f5728e3a830d67216317f58564b1eee101797137ddee4a26a0cec3b557788074b454835b982ecb2688bf36dc21f05692f5
languageName: node
linkType: hard
"@polkadot/rpc-provider@npm:2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/rpc-provider@npm:2.1.2-20"
"@polkadot/rpc-provider@npm:2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/rpc-provider@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/metadata": 2.1.2-20
"@polkadot/types": 2.1.2-20
"@polkadot/metadata": 2.1.2-23
"@polkadot/types": 2.1.2-23
"@polkadot/util": ^3.5.1
"@polkadot/util-crypto": ^3.5.1
"@polkadot/x-fetch": ^0.3.2
"@polkadot/x-ws": ^0.3.2
bn.js: ^5.1.3
eventemitter3: ^4.0.7
checksum: 70033a1b200505cf8a743a7e223aff098aee574e31790e3a912f5f6b1eb2faaa13e851729a202b73f6b56d5eac69e257ad5eaca78e6db9e2deee5544e92b8709
checksum: 5ce02ea0e875045016fe010a33865889715ec8e6e5c0834728dc44389068d33f735f5d67dfeb8d6c8addb8b96a9c8d9a0e3b372aa0559bd1715b6ff83878bbdb
languageName: node
linkType: hard
@ -2708,31 +2708,31 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/types-known@npm:2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/types-known@npm:2.1.2-20"
"@polkadot/types-known@npm:2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/types-known@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/types": 2.1.2-20
"@polkadot/types": 2.1.2-23
"@polkadot/util": ^3.5.1
bn.js: ^5.1.3
checksum: 595324baab89b64a248b9b7a957bd84772ba1149ceeb62b95d9d4c4ef4c0c2be1467ebb8dd3debfb9db373d7610e50fb72b5abeed156e87319793f1e13dbac15
checksum: bd61e8c289ec02ac19c82dbd06587897ec462a77427d78b29ae7051818464f42705c5cb10d5fd2d21d6adc499e1d0f3b1864fc6e63a6840e9effdc74156c922d
languageName: node
linkType: hard
"@polkadot/types@npm:^2.1.2-20":
version: 2.1.2-20
resolution: "@polkadot/types@npm:2.1.2-20"
"@polkadot/types@npm:^2.1.2-23":
version: 2.1.2-23
resolution: "@polkadot/types@npm:2.1.2-23"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/metadata": 2.1.2-20
"@polkadot/metadata": 2.1.2-23
"@polkadot/util": ^3.5.1
"@polkadot/util-crypto": ^3.5.1
"@types/bn.js": ^4.11.6
bn.js: ^5.1.3
memoizee: ^0.4.14
rxjs: ^6.6.3
checksum: 16e9885e94e5537031788b7581fa3ebb7aaa8b989ae604b9f67637ed20ea018d1c90b31b06f996d1317ecce769abc71108e4cf0e68614efd596db31524c0541a
checksum: 488d5222962f14907a4406215c34ff6f33cfd5c57e679341d3e7c66010ffc67645e55b1680ec867fe3083bb0aa9dea2f82883a1e9135f0a3a48640154ac1ee92
languageName: node
linkType: hard