@polkadot/types/interfaces#RuntimeDispatchInfo TypeScript Examples
The following examples show how to use
@polkadot/types/interfaces#RuntimeDispatchInfo.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: block.ts From moonbeam with GNU General Public License v3.0 | 6 votes |
export function mapExtrinsics(
extrinsics: Extrinsic[] | any,
records: FrameSystemEventRecord[] | any,
fees?: RuntimeDispatchInfo[] | any
): TxWithEventAndFee[] {
return extrinsics.map((extrinsic, index): TxWithEventAndFee => {
let dispatchError: DispatchError | undefined;
let dispatchInfo: DispatchInfo | undefined;
const events = records
.filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index))
.map(({ event }) => {
if (event.section === "system") {
if (event.method === "ExtrinsicSuccess") {
dispatchInfo = event.data[0] as any as DispatchInfo;
} else if (event.method === "ExtrinsicFailed") {
dispatchError = event.data[0] as any as DispatchError;
dispatchInfo = event.data[1] as any as DispatchInfo;
}
}
return event as any;
});
return { dispatchError, dispatchInfo, events, extrinsic, fee: fees ? fees[index] : undefined };
});
}
Example #2
Source File: Transaction.ts From gear-js with GNU General Public License v3.0 | 6 votes |
/**
*
* @param account
* @param options
* @example
* ```javascript
* const api = await GearApi.create();
* api.program.submit({code, gasLimit});
* // same for api.message, api.reply and others
* const paymentInfo = await api.program.paymentInfo(alice);
* const transactionFee = paymentInfo.partialFee.toNumber();
* consolg.log(transactionFee);
* ```
*/
paymentInfo(account: AddressOrPair, options?: SignerOptions): Promise<RuntimeDispatchInfo> {
return this.submitted.paymentInfo(account, options);
}
Example #3
Source File: PaymentInfo.tsx From crust-apps with Apache License 2.0 | 5 votes |
function PaymentInfo ({ accountId, className = '', extrinsic }: Props): React.ReactElement<Props> | null {
const { t } = useTranslation();
const { api } = useApi();
const [dispatchInfo, setDispatchInfo] = useState<RuntimeDispatchInfo | null>(null);
const balances = useCall<DeriveBalancesAll>(api.derive.balances.all, [accountId]);
const mountedRef = useIsMountedRef();
useEffect((): void => {
accountId && extrinsic && isFunction(extrinsic.paymentInfo) && isFunction(api.rpc.payment?.queryInfo) &&
setTimeout((): void => {
try {
extrinsic
.paymentInfo(accountId)
.then((info) => mountedRef.current && setDispatchInfo(info))
.catch(console.error);
} catch (error) {
console.error(error);
}
}, 0);
}, [api, accountId, extrinsic, mountedRef]);
if (!dispatchInfo || !extrinsic) {
return null;
}
return (
<>
<Expander
className={className}
summary={
<Trans i18nKey='feesForSubmission'>
Fees of <span className='highlight'>{formatBalance(dispatchInfo.partialFee, { withSiFull: true })}</span> will be applied to the submission
</Trans>
}
/>
{api.consts.balances && api.tx.balances?.transfer && !api.tx.balances?.transfer.is(extrinsic) && balances?.accountId.eq(accountId) && balances.availableBalance.sub(dispatchInfo.partialFee).lte(api.consts.balances.existentialDeposit) && (
<MarkWarning content={t<string>('The account does not have enough free funds (excluding locked/bonded/reserved) available to cover the transaction fees without dropping the balance below the account existential amount.')} />
)}
</>
);
}
Example #4
Source File: PaymentInfo.tsx From subscan-multisig-react with Apache License 2.0 | 5 votes |
function PaymentInfo({ accountId, className = '', extrinsic }: Props): React.ReactElement<Props> | null {
const { t } = useTranslation();
const { api } = useApi();
const [dispatchInfo, setDispatchInfo] = useState<RuntimeDispatchInfo | null>(null);
const balances = useCall<DeriveBalancesAll>(api.derive.balances?.all, [accountId]);
const mountedRef = useIsMountedRef();
useEffect((): void => {
accountId &&
extrinsic &&
isFunction(extrinsic.paymentInfo) &&
isFunction(api.rpc.payment?.queryInfo) &&
setTimeout((): void => {
try {
extrinsic
.paymentInfo(accountId)
.then((info) => mountedRef.current && setDispatchInfo(info))
.catch(console.error);
} catch (error) {
console.error(error);
}
}, 0);
}, [api, accountId, extrinsic, mountedRef]);
if (!dispatchInfo || !extrinsic) {
return null;
}
const isFeeError =
api.consts.balances &&
!api.tx.balances?.transfer.is(extrinsic) &&
balances?.accountId.eq(accountId) &&
(balances.availableBalance.lte(dispatchInfo.partialFee) ||
balances.freeBalance.sub(dispatchInfo.partialFee).lte(api.consts.balances.existentialDeposit as unknown as BN));
return (
<>
<Expander
className={className}
summary={
<Trans i18nKey="feesForSubmission">
Fees of <span className="highlight">{formatBalance(dispatchInfo.partialFee, { withSiFull: true })}</span>{' '}
will be applied to the submission
</Trans>
}
/>
{isFeeError && (
<MarkWarning
content={t<string>(
'The account does not have enough free funds (excluding locked/bonded/reserved) available to cover the transaction fees without dropping the balance below the account existential amount.'
)}
/>
)}
</>
);
}