From 9c48e40780d485e67c43987d871d14e31bd0fd7c Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Mon, 8 Jul 2019 20:32:13 +0200 Subject: [PATCH] signAndSend with options & callback (#1079) * signAndSend with options & callback * Remove extra Partial wrapper * Remove more extra Partials * One more --- packages/api/src/SubmittableExtrinsic.ts | 15 ++++++++------ packages/api/src/checkTypes.manual.ts | 25 +++++++++++++++++++++--- packages/types/src/type/index.ts | 2 +- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/packages/api/src/SubmittableExtrinsic.ts b/packages/api/src/SubmittableExtrinsic.ts index 079d515c14..bbcb014325 100644 --- a/packages/api/src/SubmittableExtrinsic.ts +++ b/packages/api/src/SubmittableExtrinsic.ts @@ -76,9 +76,11 @@ export interface SubmittableExtrinsic extends IExtrinsic { sign (account: IKeyringPair, _options: Partial): this; - signAndSend (account: IKeyringPair | string | AccountId | Address, options?: Partial>): SumbitableResultResult; + signAndSend (account: IKeyringPair | string | AccountId | Address, options?: Partial): SumbitableResultResult; signAndSend (account: IKeyringPair | string | AccountId | Address, statusCb: Callback): SumbitableResultSubscription; + + signAndSend (account: IKeyringPair | string | AccountId | Address, options: Partial, statusCb: Callback): SumbitableResultSubscription; } export default function createSubmittableExtrinsic ( @@ -157,6 +159,7 @@ export default function createSubmittableExtrinsic ( } const signOrigin = _extrinsic.sign; + Object.defineProperties( _extrinsic, { @@ -181,13 +184,13 @@ export default function createSubmittableExtrinsic ( } }, signAndSend: { - value: function (account: IKeyringPair | string | AccountId | Address, _options?: Partial> | Callback, statusCb?: Callback): SumbitableResultResult | SumbitableResultSubscription { - let options: Partial> = {}; + value: function (account: IKeyringPair | string | AccountId | Address, optionsOrStatus?: Partial | Callback, statusCb?: Callback): SumbitableResultResult | SumbitableResultSubscription { + let options: Partial = {}; - if (isFunction(_options)) { - statusCb = _options; + if (isFunction(optionsOrStatus)) { + statusCb = optionsOrStatus; } else { - options = _options || {}; + options = optionsOrStatus || {}; } const isSubscription = _noStatusCb || !!statusCb; diff --git a/packages/api/src/checkTypes.manual.ts b/packages/api/src/checkTypes.manual.ts index 9f2b906804..92813af584 100644 --- a/packages/api/src/checkTypes.manual.ts +++ b/packages/api/src/checkTypes.manual.ts @@ -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(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(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(); + }); } diff --git a/packages/types/src/type/index.ts b/packages/types/src/type/index.ts index a3954fa8f3..08d96b5a16 100644 --- a/packages/types/src/type/index.ts +++ b/packages/types/src/type/index.ts @@ -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';