signAndSend with options & callback (#1079)
* signAndSend with options & callback * Remove extra Partial wrapper * Remove more extra Partials * One more
This commit is contained in:
@@ -76,9 +76,11 @@ export interface SubmittableExtrinsic<ApiType> extends IExtrinsic {
|
||||
|
||||
sign (account: IKeyringPair, _options: Partial<SignatureOptions>): this;
|
||||
|
||||
signAndSend (account: IKeyringPair | string | AccountId | Address, options?: Partial<Partial<SignatureOptions>>): SumbitableResultResult<ApiType>;
|
||||
signAndSend (account: IKeyringPair | string | AccountId | Address, options?: Partial<SignatureOptions>): SumbitableResultResult<ApiType>;
|
||||
|
||||
signAndSend (account: IKeyringPair | string | AccountId | Address, statusCb: Callback<ISubmittableResult>): SumbitableResultSubscription<ApiType>;
|
||||
|
||||
signAndSend (account: IKeyringPair | string | AccountId | Address, options: Partial<SignatureOptions>, statusCb: Callback<ISubmittableResult>): SumbitableResultSubscription<ApiType>;
|
||||
}
|
||||
|
||||
export default function createSubmittableExtrinsic<ApiType> (
|
||||
@@ -157,6 +159,7 @@ export default function createSubmittableExtrinsic<ApiType> (
|
||||
}
|
||||
|
||||
const signOrigin = _extrinsic.sign;
|
||||
|
||||
Object.defineProperties(
|
||||
_extrinsic,
|
||||
{
|
||||
@@ -181,13 +184,13 @@ export default function createSubmittableExtrinsic<ApiType> (
|
||||
}
|
||||
},
|
||||
signAndSend: {
|
||||
value: function (account: IKeyringPair | string | AccountId | Address, _options?: Partial<Partial<SignatureOptions>> | Callback<ISubmittableResult>, statusCb?: Callback<ISubmittableResult>): SumbitableResultResult<ApiType> | SumbitableResultSubscription<ApiType> {
|
||||
let options: Partial<Partial<SignatureOptions>> = {};
|
||||
value: function (account: IKeyringPair | string | AccountId | Address, optionsOrStatus?: Partial<SignatureOptions> | Callback<ISubmittableResult>, statusCb?: Callback<ISubmittableResult>): SumbitableResultResult<ApiType> | SumbitableResultSubscription<ApiType> {
|
||||
let options: Partial<SignatureOptions> = {};
|
||||
|
||||
if (isFunction(_options)) {
|
||||
statusCb = _options;
|
||||
if (isFunction(optionsOrStatus)) {
|
||||
statusCb = optionsOrStatus;
|
||||
} else {
|
||||
options = _options || {};
|
||||
options = optionsOrStatus || {};
|
||||
}
|
||||
|
||||
const isSubscription = _noStatusCb || !!statusCb;
|
||||
|
||||
@@ -8,7 +8,7 @@ import { ApiPromise } from '@polkadot/api';
|
||||
import { HeaderExtended } from '@polkadot/api-derive';
|
||||
import testKeyring from '@polkadot/keyring/testingPairs';
|
||||
import { IExtrinsic, IMethod } from '@polkadot/types/types';
|
||||
import { Header } from '@polkadot/types';
|
||||
import { Header, Nonce } from '@polkadot/types';
|
||||
|
||||
import { SubmittableResult } from './';
|
||||
|
||||
@@ -44,9 +44,18 @@ export default async function test () {
|
||||
console.log('transfer as Method', transfer as IMethod);
|
||||
console.log('transfer as Extrinsic', transfer as IExtrinsic);
|
||||
|
||||
const hash = await transfer.signAndSend(keyring.alice);
|
||||
console.log('hash:', hash.toHex());
|
||||
// simple "return the hash" variant
|
||||
console.log('hash:', (await transfer.signAndSend(keyring.alice)).toHex());
|
||||
|
||||
// passing options, but waiting for hash
|
||||
const nonce = await api.query.system.accountNonce<Nonce>(keyring.alice.address);
|
||||
|
||||
(await api.tx.balances
|
||||
.transfer(keyring.bob.address, 12345)
|
||||
.signAndSend(keyring.alice, { nonce })
|
||||
).toHex();
|
||||
|
||||
// just with the callback
|
||||
const unsub = await api.tx.balances
|
||||
.transfer(keyring.bob.address, 12345)
|
||||
.signAndSend(keyring.alice, ({ status }: SubmittableResult) => {
|
||||
@@ -54,4 +63,14 @@ export default async function test () {
|
||||
|
||||
unsub();
|
||||
});
|
||||
|
||||
// with options and the callback
|
||||
const nonce2 = await api.query.system.accountNonce<Nonce>(keyring.alice.address);
|
||||
const unsub2 = await api.tx.balances
|
||||
.transfer(keyring.bob.address, 12345)
|
||||
.signAndSend(keyring.alice, { nonce: nonce2 }, ({ status }: SubmittableResult) => {
|
||||
console.log('transfer status:', status.type);
|
||||
|
||||
unsub2();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ export { default as LeasePeriod, LeasePeriodOf } from './LeasePeriod';
|
||||
export { default as LockIdentifier } from './LockIdentifier';
|
||||
export { default as LockPeriods } from './LockPeriods';
|
||||
// NOTE Nonce is renamed to Index
|
||||
export { default as Index } from './Nonce';
|
||||
export { default as Index, default as Nonce } from './Nonce';
|
||||
export { default as IndexCompact } from './NonceCompact';
|
||||
export { default as Justification } from './Justification';
|
||||
export { default as MemberCount } from './MemberCount';
|
||||
|
||||
Reference in New Issue
Block a user