signAndSend with options & callback (#1079)

* signAndSend with options & callback

* Remove extra Partial wrapper

* Remove more extra Partials

* One more
This commit is contained in:
Jaco Greeff
2019-07-08 20:32:13 +02:00
committed by GitHub
parent dc1f79d015
commit 9c48e40780
3 changed files with 32 additions and 10 deletions
+9 -6
View File
@@ -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;
+22 -3
View File
@@ -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();
});
}
+1 -1
View File
@@ -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';