signAndSend for SubmittableExtrinsic (#558)
* signAndSend for SubmittableExtrinsic * signAndSend for ApiPromise * Import odering
This commit is contained in:
@@ -7,7 +7,8 @@ import { AnyNumber, AnyU8a } from '@polkadot/types/types';
|
||||
import { SubmittableSendResult } from '../types';
|
||||
import { ApiPromiseInterface, UnsubFunction } from './types';
|
||||
|
||||
import { EventRecord, Extrinsic, ExtrinsicStatus, Hash, Method, SignedBlock } from '@polkadot/types/index';
|
||||
import { EventRecord, Extrinsic, ExtrinsicStatus, Hash, Index, Method, SignedBlock } from '@polkadot/types/index';
|
||||
import { assert } from '@polkadot/util';
|
||||
|
||||
import filterEvents from '../util/filterEvents';
|
||||
|
||||
@@ -20,7 +21,6 @@ export default class SubmittableExtrinsic extends Extrinsic {
|
||||
this._api = api;
|
||||
}
|
||||
|
||||
// FIXME split into graph derivation once available
|
||||
private trackStatus (statusCb: (result: SubmittableSendResult) => any): (status: ExtrinsicStatus) => Promise<void> {
|
||||
return async (status: ExtrinsicStatus): Promise<void> => {
|
||||
let events: Array<any> | undefined = undefined;
|
||||
@@ -54,4 +54,25 @@ export default class SubmittableExtrinsic extends Extrinsic {
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
signAndSend (signerPair: KeyringPair, statusCb: (result: SubmittableSendResult) => any): Promise<Hash> | UnsubFunction {
|
||||
assert(this._api.hasSubscriptions, 'Api does not support subscriptions');
|
||||
|
||||
let unsubscribe: UnsubFunction | undefined;
|
||||
|
||||
this._api.query.system
|
||||
.accountNonce(signerPair.address())
|
||||
.then((nonce) => {
|
||||
unsubscribe = this.sign(signerPair, nonce as Index).send(statusCb) as UnsubFunction;
|
||||
})
|
||||
.catch(console.error);
|
||||
|
||||
return (): void => {
|
||||
if (unsubscribe) {
|
||||
unsubscribe();
|
||||
}
|
||||
|
||||
unsubscribe = undefined;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ import { SubmittableSendResult } from '../types';
|
||||
import { ApiRxInterface } from './types';
|
||||
|
||||
import { Observable, of, combineLatest } from 'rxjs';
|
||||
import { map, switchMap } from 'rxjs/operators';
|
||||
import { Extrinsic, ExtrinsicStatus, Hash, Method } from '@polkadot/types/index';
|
||||
import { first, map, switchMap } from 'rxjs/operators';
|
||||
import { Extrinsic, ExtrinsicStatus, Hash, Index, Method } from '@polkadot/types/index';
|
||||
|
||||
import filterEvents from '../util/filterEvents';
|
||||
|
||||
@@ -22,7 +22,6 @@ export default class SubmittableExtrinsic extends Extrinsic {
|
||||
this._api = api;
|
||||
}
|
||||
|
||||
// FIXME split into graph derivation once available
|
||||
private trackStatus = (status: ExtrinsicStatus): Observable<SubmittableSendResult> => {
|
||||
if (status.type !== 'Finalised') {
|
||||
return of({
|
||||
@@ -56,4 +55,15 @@ export default class SubmittableExtrinsic extends Extrinsic {
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
signAndSend (signerPair: KeyringPair): Observable<SubmittableSendResult> {
|
||||
return this._api.query.system
|
||||
.accountNonce(signerPair.address())
|
||||
.pipe(
|
||||
first(),
|
||||
switchMap((nonce) =>
|
||||
this.sign(signerPair, nonce as Index).send()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user