Display on-chain status for contract code & instances (#3851)

This commit is contained in:
Jaco Greeff 2020-10-11 11:50:27 +02:00 committed by GitHub
parent 6ac81ce997
commit d58852558c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 185 additions and 186 deletions

View File

@ -33,10 +33,10 @@
"afterSign": "electron-builder-notarize"
},
"resolutions": {
"@polkadot/api": "^2.1.2-17",
"@polkadot/api-contract": "^2.1.2-17",
"@polkadot/api": "^2.1.2-18",
"@polkadot/api-contract": "^2.1.2-18",
"@polkadot/keyring": "^3.5.1",
"@polkadot/types": "^2.1.2-17",
"@polkadot/types": "^2.1.2-18",
"@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-17"
"@polkadot/api-contract": "^2.1.2-18"
}
}

View File

@ -1,11 +1,13 @@
// Copyright 2017-2020 @polkadot/app-staking authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Codec } from '@polkadot/types/types';
import { CodeStored } from '../types';
import React, { useCallback } from 'react';
import { Button, Card, Forget } from '@polkadot/react-components';
import { useToggle } from '@polkadot/react-hooks';
import { useApi, useCall, useToggle } from '@polkadot/react-hooks';
import { Option } from '@polkadot/types';
import { ABI, CodeRow } from '../shared';
import RemoveABI from '../RemoveABI';
@ -21,6 +23,8 @@ interface Props {
function Code ({ className, code, onShowDeploy }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const { api } = useApi();
const optCode = useCall<Option<Codec>>(api.query.contracts.codeStorage, [code.json.codeHash]);
const [isForgetOpen, toggleIsForgetOpen] = useToggle();
const [isRemoveABIOpen, toggleIsRemoveABIOpen] = useToggle();
const { contractAbi, isAbiError, isAbiSupplied, isAbiValid, onChangeAbi, onRemoveAbi } = useAbi([code.json.abi, code.contractAbi], code.json.codeHash, true);
@ -97,6 +101,11 @@ function Code ({ className, code, onShowDeploy }: Props): React.ReactElement<Pro
withMessages={false}
/>
</td>
<td className='start together'>
{optCode && (
optCode.isSome ? t<string>('Available') : t<string>('Not on-chain')
)}
</td>
<td className='button'>
<Button
icon='trash'

View File

@ -19,7 +19,9 @@ function Codes ({ onShowDeploy }: Props): React.ReactElement<Props> {
const headerRef = useRef<[string?, string?, number?][]>([
[t('code hashes'), 'start'],
[undefined, undefined, 2]
[],
[t('status'), 'start'],
[]
]);
return (

View File

@ -2,12 +2,12 @@
// SPDX-License-Identifier: Apache-2.0
import { SubmittableExtrinsic } from '@polkadot/api/types';
import { ContractCallOutcome } from '@polkadot/api-contract/types';
import { CallResult } from './types';
import BN from 'bn.js';
import React, { useCallback, useState, useEffect, useMemo } from 'react';
import styled from 'styled-components';
import { Button, Dropdown, IconLink, InputAddress, InputBalance, Modal, TxButton } from '@polkadot/react-components';
import { Button, Dropdown, Expander, InputAddress, InputBalance, Modal, TxButton } from '@polkadot/react-components';
import { PromiseContract as ApiContract } from '@polkadot/api-contract';
import { useAccountId, useFormField } from '@polkadot/react-hooks';
import { BN_ZERO } from '@polkadot/util';
@ -31,8 +31,8 @@ function Call ({ className = '', contract, messageIndex, onChangeCallContractAdd
const { t } = useTranslation();
const message = contract.abi.messages[messageIndex];
const [accountId, setAccountId] = useAccountId();
const [endowment, isEndowmentValid, setEndowment] = useFormField<BN>(BN_ZERO);
const [outcomes, setOutcomes] = useState<ContractCallOutcome[]>([]);
const [value, isValueValid, setEndowment] = useFormField<BN>(BN_ZERO);
const [outcomes, setOutcomes] = useState<CallResult[]>([]);
const [execTx, setExecTx] = useState<SubmittableExtrinsic<'promise'> | null>(null);
const [params, setParams] = useState<any[]>([]);
const useWeightHook = useWeight();
@ -43,33 +43,35 @@ function Call ({ className = '', contract, messageIndex, onChangeCallContractAdd
}, [contract, messageIndex]);
useEffect((): void => {
endowment && message.isMutating && setExecTx((): SubmittableExtrinsic<'promise'> | null => {
value && message.isMutating && setExecTx((): SubmittableExtrinsic<'promise'> | null => {
try {
return contract.exec(message, message.isPayable ? endowment : 0, weight, ...params);
return contract.exec(message, message.isPayable ? value : 0, weight, ...params);
} catch (error) {
return null;
}
});
}, [accountId, contract, endowment, message, weight, params]);
}, [accountId, contract, message, value, weight, params]);
const _onSubmitRpc = useCallback(
(): void => {
if (!accountId || !message || !endowment || !weight) return;
if (!accountId || !message || !value || !weight) return;
contract
.read(message, 0, weight, ...params)
// when we make calls to mutables, we want the endowment & weight
// .read(callMessage, endowment, weight, ...params)
.read(message, message.isPayable ? value : 0, weight, ...params)
.send(accountId)
.then((outcome: ContractCallOutcome) => setOutcomes([outcome, ...outcomes]))
.then((outcome) => setOutcomes([
{
...outcome,
from: accountId,
message,
params,
when: new Date()
},
...outcomes
]))
.catch(console.error);
},
[accountId, contract, endowment, message, weight, outcomes, params]
);
const _onClearOutcomes = useCallback(
() => setOutcomes([]),
[]
[accountId, contract, message, value, weight, outcomes, params]
);
const _onClearOutcome = useCallback(
@ -78,8 +80,8 @@ function Call ({ className = '', contract, messageIndex, onChangeCallContractAdd
);
const isValid = useMemo(
() => !!(accountId && isWeightValid && isEndowmentValid),
[accountId, isEndowmentValid, isWeightValid]
() => !!(accountId && isWeightValid && isValueValid),
[accountId, isValueValid, isWeightValid]
);
const isViaRpc = contract.hasRpcContractsCall && !message.isMutating;
@ -127,14 +129,14 @@ function Call ({ className = '', contract, messageIndex, onChangeCallContractAdd
/>
</>
)}
{!isViaRpc && message.isPayable && (
{message.isPayable && (
<InputBalance
help={t<string>('The allotted value for this contract, i.e. the amount transferred to the contract as part of this call.')}
isError={!isEndowmentValid}
isError={!isValueValid}
isZeroable
label={t<string>('value')}
onChange={setEndowment}
value={endowment}
value={value}
/>
)}
<InputMegaGas
@ -143,26 +145,19 @@ function Call ({ className = '', contract, messageIndex, onChangeCallContractAdd
{...useWeightHook}
/>
{outcomes.length > 0 && (
<div>
<h3>
{t<string>('Call results')}
<IconLink
className='clear-all'
icon='times'
label={t<string>('Clear all')}
onClick={_onClearOutcomes}
<Expander
className='outcomes'
isOpen
summary={t<string>('Call results')}
>
{outcomes.map((outcome, index): React.ReactNode => (
<Outcome
key={`outcome-${index}`}
onClear={_onClearOutcome(index)}
outcome={outcome}
/>
</h3>
<div>
{outcomes.map((outcome, index): React.ReactNode => (
<Outcome
key={`outcome-${index}`}
onClear={_onClearOutcome(index)}
outcome={outcome}
/>
))}
</div>
</div>
))}
</Expander>
)}
</Modal.Content>
<Modal.Actions onCancel={onClose}>
@ -201,4 +196,8 @@ export default React.memo(styled(Call)`
.clear-all {
float: right;
}
.outcomes {
margin-top: 1rem;
}
`);

View File

@ -2,12 +2,15 @@
// SPDX-License-Identifier: Apache-2.0
import { ActionStatus } from '@polkadot/react-components/Status/types';
import { ContractInfo } from '@polkadot/types/interfaces';
import React, { useCallback } from 'react';
import keyring from '@polkadot/ui-keyring';
import { PromiseContract } from '@polkadot/api-contract';
import { AddressInfo, AddressMini, Button, Forget } from '@polkadot/react-components';
import { useToggle } from '@polkadot/react-hooks';
import { useApi, useCall, useToggle } from '@polkadot/react-hooks';
import { Option } from '@polkadot/types';
import { isUndefined } from '@polkadot/util';
import Messages from '../shared/Messages';
import { useTranslation } from '../translate';
@ -18,8 +21,14 @@ interface Props {
onCall: (index?: number) => void;
}
function transformInfo (optInfo: Option<ContractInfo>): ContractInfo | null {
return optInfo.unwrapOr(null);
}
function Contract ({ className, contract, onCall }: Props): React.ReactElement<Props> | null {
const { t } = useTranslation();
const { api } = useApi();
const info = useCall<ContractInfo | null>(api.query.contracts.contractInfoOf, [contract.address], { transform: transformInfo });
const [isForgetOpen, toggleIsForgetOpen] = useToggle();
const _onForget = useCallback(
@ -74,6 +83,13 @@ function Contract ({ className, contract, onCall }: Props): React.ReactElement<P
withExtended={false}
/>
</td>
<td className='start together'>
{!isUndefined(info) && (
info
? info.type
: t<string>('Not on-chain')
)}
</td>
<td className='button'>
<Button
icon='trash'

View File

@ -1,101 +1,57 @@
// Copyright 2017-2020 @polkadot/app-contracts authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { ContractCallOutcome } from '@polkadot/api-contract/types';
import { CallResult } from './types';
import React from 'react';
import styled from 'styled-components';
import { AddressMini, Button, Output } from '@polkadot/react-components';
import { Button, IdentityIcon, Output } from '@polkadot/react-components';
import MessageSignature from '../shared/MessageSignature';
interface Props {
className?: string;
onClear?: () => void;
outcome: ContractCallOutcome;
outcome: CallResult;
}
function Outcome ({ className = '', onClear, outcome: { isSuccess, message, origin, output, params, time } }: Props): React.ReactElement<Props> | null {
const dateTime = new Date(time);
function Outcome ({ className = '', onClear, outcome: { from, message, output, params, result, when } }: Props): React.ReactElement<Props> | null {
return (
<div className={className}>
<div className='info'>
<AddressMini
className='origin'
isPadded={false}
value={origin}
withAddress={false}
/>
<MessageSignature
message={message}
params={params}
/>
<span className='date-time'>
{dateTime.toLocaleDateString()}
{' '}
{dateTime.toLocaleTimeString()}
</span>
<Button
className='icon-button clear-btn'
icon='times'
onClick={onClear}
/>
</div>
<IdentityIcon value={from} />
<Output
className='output'
isError={!isSuccess}
isError={!result.isSuccess}
isFull
label={
<MessageSignature
message={message}
params={params}
/>
}
labelExtra={
<span className='date-time'>
{when.toLocaleDateString()}
{' '}
{when.toLocaleTimeString()}
</span>
}
value={(output || '()').toString()}
withLabel={false}
/>
<Button
icon='times'
onClick={onClear}
/>
</div>
);
}
export default React.memo(styled(Outcome)`
& {
.info {
display: inline-flex;
justify-content: center;
align-items: center;
padding: 0.5rem;
align-items: center;
display: flex;
& > *:not(:first-child) {
padding-left: 1.5rem !important;
}
}
.clear-btn {
opacity: 0;
}
.date-time {
color: #aaa;
white-space: nowrap;
}
.origin {
padding-left: 0 !important;
* {
margin-left: 0 !important;
}
}
.output {
font-family: monospace;
margin-left: 3.5rem;
.ui--output {
border-color: #aaa;
margin: 0;
}
}
&:hover {
.clear-btn {
opacity: 1;
}
}
.output {
flex: 1 1;
margin: 0.25rem 0.5rem;
}
`);

View File

@ -34,7 +34,9 @@ function Contracts ({ contracts: keyringContracts }: Props): React.ReactElement<
const headerRef = useRef<[string?, string?, number?][]>([
[t('contracts'), 'start'],
[undefined, undefined, 3]
[undefined, undefined, 2],
[t('status'), 'start'],
[]
]);
const contracts = useMemo(

View File

@ -0,0 +1,11 @@
// Copyright 2017-2020 @polkadot/app-staking authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { AbiMessage, ContractCallOutcome } from '@polkadot/api-contract/types';
export interface CallResult extends ContractCallOutcome {
from: string;
message: AbiMessage;
params: any[];
when: Date;
}

View File

@ -65,7 +65,7 @@ function Message ({ className = '', index, lastResult, message, onSelect }: Prop
<Button
className='accessory'
icon='play'
isDisabled={lastResult?.isSuccess}
isDisabled={lastResult?.result.isSuccess}
label={message.isMutating ? t<string>('exec') : t<string>('read')}
onClick={_onSelect}
/>
@ -86,7 +86,7 @@ function Message ({ className = '', index, lastResult, message, onSelect }: Prop
}
</div>
</div>
{lastResult && lastResult.isSuccess && lastResult.output && (
{lastResult && lastResult.result.isSuccess && lastResult.output && (
<Output
className='result'
isFull

View File

@ -2,12 +2,14 @@
// SPDX-License-Identifier: Apache-2.0
import { AbiMessage, ContractCallOutcome } from '@polkadot/api-contract/types';
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 { Expander, IconLink } from '@polkadot/react-components';
import { useApi, useCall } from '@polkadot/react-hooks';
import { Option } from '@polkadot/types';
import Message from './Message';
import { useTranslation } from '../translate';
@ -44,7 +46,7 @@ function sortMessages (messages: AbiMessage[]): [AbiMessage, number][] {
function Messages ({ className = '', contract, contractAbi: { constructors, messages }, isLabelled, isRemovable, isWatching, onRemove = NOOP, onSelect, onSelectConstructor, withConstructors, withMessages } : Props): React.ReactElement<Props> {
const { t } = useTranslation();
const { api } = useApi();
const bestNumber = useCall(api.derive.chain.bestNumber);
const optInfo = useCall<Option<ContractInfo>>(contract && api.query.contracts.contractInfoOf, [contract?.address]);
const [isUpdating, setIsUpdating] = useState(false);
const [lastResults, setLastResults] = useState<(ContractCallOutcome | undefined)[]>([]);
@ -58,7 +60,7 @@ function Messages ({ className = '', contract, contractAbi: { constructors, mess
useEffect((): void => {
const maxWeight = api.consts.system.maximumBlockWeight.muln(64).divn(100);
bestNumber && contract && isUpdating && Promise
isUpdating && optInfo && contract && Promise
.all(messages.map((m) =>
m.isMutating || m.args.length !== 0
? Promise.resolve(undefined)
@ -66,7 +68,7 @@ function Messages ({ className = '', contract, contractAbi: { constructors, mess
))
.then(setLastResults)
.catch(console.error);
}, [api, bestNumber, contract, isUpdating, isWatching, messages]);
}, [api, contract, isUpdating, isWatching, messages, optInfo]);
return (
<div className={`ui--Messages ${className} ${isLabelled ? 'labelled' : ''}`}>

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-17",
"@polkadot/api": "^2.1.2-18",
"@polkadot/extension-dapp": "^0.35.0-beta.12",
"rxjs-compat": "^6.6.3"
}

View File

@ -19,12 +19,13 @@ interface Props {
isSmall?: boolean;
isTrimmed?: boolean;
label?: React.ReactNode;
labelExtra?: React.ReactNode;
value?: string;
withCopy?: boolean;
withLabel?: boolean;
}
function Output ({ children, className = '', help, isError, isFull, isHidden, isMonospace, isSmall, isTrimmed, label, value, withCopy = false, withLabel }: Props): React.ReactElement<Props> {
function Output ({ children, className = '', help, isError, isFull, isHidden, isMonospace, isSmall, isTrimmed, label, labelExtra, value, withCopy = false, withLabel }: Props): React.ReactElement<Props> {
return (
<Labelled
className={className}
@ -33,6 +34,7 @@ function Output ({ children, className = '', help, isError, isFull, isHidden, is
isHidden={isHidden}
isSmall={isSmall}
label={label}
labelExtra={labelExtra}
withLabel={withLabel}
>
<div className={classes('ui--output', isError && 'error', isMonospace && 'monospace')}>

112
yarn.lock
View File

@ -2039,57 +2039,57 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/api-contract@npm:^2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/api-contract@npm:2.1.2-17"
"@polkadot/api-contract@npm:^2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/api-contract@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api": 2.1.2-17
"@polkadot/rpc-core": 2.1.2-17
"@polkadot/types": 2.1.2-17
"@polkadot/api": 2.1.2-18
"@polkadot/rpc-core": 2.1.2-18
"@polkadot/types": 2.1.2-18
"@polkadot/util": ^3.5.1
bn.js: ^5.1.3
rxjs: ^6.6.3
checksum: 4c0d515986518a52a021e6e7c80c0516217d3ea5bfaade47886d5b0e154216ddcde8736550720bae1b8f484dbab4ddb221b6b04b8a534d017871819089e390e5
checksum: fcdb707d1d6b6bd7cf5415dd211c18ea2609282605516fa756c4a4c88f9dbf988bbec344d2ebbf81973b76a1caed5fedee056d5f4e7bc01723e7b9f5bf425171
languageName: node
linkType: hard
"@polkadot/api-derive@npm:2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/api-derive@npm:2.1.2-17"
"@polkadot/api-derive@npm:2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/api-derive@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api": 2.1.2-17
"@polkadot/rpc-core": 2.1.2-17
"@polkadot/rpc-provider": 2.1.2-17
"@polkadot/types": 2.1.2-17
"@polkadot/api": 2.1.2-18
"@polkadot/rpc-core": 2.1.2-18
"@polkadot/rpc-provider": 2.1.2-18
"@polkadot/types": 2.1.2-18
"@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: 7722eaf10d13fbc3244463f97aff21e87eda1ba8377b1be0c5814eae4f876683aeff7eaeab3ce400000048fd63d94108ea792878ad6a06d124f2104764bd3688
checksum: 3b07c908c4584b573431942fde47c9ef052708a10e6ccc8f98e9872344ea56813f306ccc80e072f5e95dcdb45cfa499dad9241b7345e635876e1bbb329a4c3e3
languageName: node
linkType: hard
"@polkadot/api@npm:^2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/api@npm:2.1.2-17"
"@polkadot/api@npm:^2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/api@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/api-derive": 2.1.2-17
"@polkadot/api-derive": 2.1.2-18
"@polkadot/keyring": ^3.5.1
"@polkadot/metadata": 2.1.2-17
"@polkadot/rpc-core": 2.1.2-17
"@polkadot/rpc-provider": 2.1.2-17
"@polkadot/types": 2.1.2-17
"@polkadot/types-known": 2.1.2-17
"@polkadot/metadata": 2.1.2-18
"@polkadot/rpc-core": 2.1.2-18
"@polkadot/rpc-provider": 2.1.2-18
"@polkadot/types": 2.1.2-18
"@polkadot/types-known": 2.1.2-18
"@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: 0c634331a64628f61f63a6fe3f85fdbac238fd12172f864d0b610d5265583dcb3b852c498a1f227be1a0edc6699fad47bc4c0288050d2b8530a40c7ebca59a9b
checksum: 136f6eba5b20829f8d9dc85415da3d428970e4c0c651d2a32c3f50700a3a3886a53aeb57bbee46187d8a52ff33bab760dbe17ea90f0f94a08b2bcfd1d1a33518
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-17
"@polkadot/api-contract": ^2.1.2-18
languageName: unknown
linkType: soft
@ -2525,17 +2525,17 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/metadata@npm:2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/metadata@npm:2.1.2-17"
"@polkadot/metadata@npm:2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/metadata@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/types": 2.1.2-17
"@polkadot/types-known": 2.1.2-17
"@polkadot/types": 2.1.2-18
"@polkadot/types-known": 2.1.2-18
"@polkadot/util": ^3.5.1
"@polkadot/util-crypto": ^3.5.1
bn.js: ^5.1.3
checksum: afdaa5ffd1f48bf5eb723a08bd7bcd678f410436156c2f1363c383d8f66d5b9109c769a125f1213b69bc114b2c7eb32ec63b6090c93fc21ef57c81f105c87f71
checksum: 9c7f9c005a12a90b6853c36abbdab4ac7e06651fa602eb6a5da50fdf4fdc4071a7c162e1e0e47a7728db85b03a2c3a90e765691bf02ca0e44ebcf479e663a6a6
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-17
"@polkadot/api": ^2.1.2-18
"@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-17":
version: 2.1.2-17
resolution: "@polkadot/rpc-core@npm:2.1.2-17"
"@polkadot/rpc-core@npm:2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/rpc-core@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/metadata": 2.1.2-17
"@polkadot/rpc-provider": 2.1.2-17
"@polkadot/types": 2.1.2-17
"@polkadot/metadata": 2.1.2-18
"@polkadot/rpc-provider": 2.1.2-18
"@polkadot/types": 2.1.2-18
"@polkadot/util": ^3.5.1
memoizee: ^0.4.14
rxjs: ^6.6.3
checksum: fa86d07caa1e285a798ed6427e2f82baa7c4865155c13c9d539b86c590a522d0e906d27dd257520b10ca6e9b88f62798d502ab6ef65090fbe5bf5a07d44a76db
checksum: 8b85855c38ecf3fed778c630b9c4d6cbab9b0cea4b934710fd95d397af5112d2910244dd6dec57ffd783c679594778bf87766420b4873a3d96a553ad8615fea2
languageName: node
linkType: hard
"@polkadot/rpc-provider@npm:2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/rpc-provider@npm:2.1.2-17"
"@polkadot/rpc-provider@npm:2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/rpc-provider@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/metadata": 2.1.2-17
"@polkadot/types": 2.1.2-17
"@polkadot/metadata": 2.1.2-18
"@polkadot/types": 2.1.2-18
"@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: f441c6fe9709f6de489bc173ef47f141571156326d769e281425240ccbdbd7c2103121cc7241bc46ae8e4720baa93ff4af8b6a3c312691845c23b6ac00310086
checksum: 4ce0bb154ff3fce6e31c331112223c21208e4c3300a8e2b94e3693cf9608b7bc67829fed53fd05c4224ea3b0702ca41ef7099fb8481209190cb84103478201e2
languageName: node
linkType: hard
@ -2708,31 +2708,31 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/types-known@npm:2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/types-known@npm:2.1.2-17"
"@polkadot/types-known@npm:2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/types-known@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/types": 2.1.2-17
"@polkadot/types": 2.1.2-18
"@polkadot/util": ^3.5.1
bn.js: ^5.1.3
checksum: d815be3cb6a7df1aff65da5bafadef08c89db049bcbc958996f5f1e7dbab36b6e156c9a9371d1498500c5934b4db8a2557745730d1ba2421a3da31ab810532f6
checksum: 0aac5a51900d5547258dd9ca50e04097fd4d6797ac9dad9e3d6e45b904cac013b29e2d470b823592ad5d2caaa9ac885c8d67a96c61d02c45bb14f5b8d1703daf
languageName: node
linkType: hard
"@polkadot/types@npm:^2.1.2-17":
version: 2.1.2-17
resolution: "@polkadot/types@npm:2.1.2-17"
"@polkadot/types@npm:^2.1.2-18":
version: 2.1.2-18
resolution: "@polkadot/types@npm:2.1.2-18"
dependencies:
"@babel/runtime": ^7.11.2
"@polkadot/metadata": 2.1.2-17
"@polkadot/metadata": 2.1.2-18
"@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: 6e9f4f41677f83c0802d3f5024540ccca75c3a858bc94446eded09b50611b704ba692e4571f4bc11991a1e335915f73771b157ac627913f7ccd458832e5f3b61
checksum: 08affa43f668261cf5952733286309016e01e9be1f5a5ab372f4716c814219950d6b6864c789943ccf134e5ebc322831f78978bf58f0266a30ff78ec57f4d3a4
languageName: node
linkType: hard