From ca53fbc2a672375e7c15f1707e2fa23749ea94d1 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 16 Jul 2019 15:50:36 +0200 Subject: [PATCH] Allow ExtrinsicEra to construct via instance (#1136) --- packages/types/src/type/ExtrinsicEra.spec.ts | 7 +++++++ packages/types/src/type/ExtrinsicEra.ts | 14 +++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/types/src/type/ExtrinsicEra.spec.ts b/packages/types/src/type/ExtrinsicEra.spec.ts index d4cfc2b43a..0a5d5e2a62 100644 --- a/packages/types/src/type/ExtrinsicEra.spec.ts +++ b/packages/types/src/type/ExtrinsicEra.spec.ts @@ -19,6 +19,13 @@ describe('ExtrinsicEra', (): void => { expect(extrinsicEra.asMortalEra.phase.toNumber()).toEqual(20000); }); + it('decoded from an existing ExtrinsicEra', (): void => { + const extrinsicEra = new ExtrinsicEra(new ExtrinsicEra(new Uint8Array([78, 156]))); + + expect(extrinsicEra.asMortalEra.period.toNumber()).toEqual(32768); + expect(extrinsicEra.asMortalEra.phase.toNumber()).toEqual(20000); + }); + it('encode an Extrinsic Era from Object with blocknumber & period as mortal instance', (): void => { const extrinsicEra = new ExtrinsicEra({ current: 1400, period: 200 }); diff --git a/packages/types/src/type/ExtrinsicEra.ts b/packages/types/src/type/ExtrinsicEra.ts index d1efc31aed..73909f26d3 100644 --- a/packages/types/src/type/ExtrinsicEra.ts +++ b/packages/types/src/type/ExtrinsicEra.ts @@ -192,8 +192,10 @@ export default class ExtrinsicEra extends Enum implements IExtrinsicEra { } // eslint-disable-next-line @typescript-eslint/ban-types - private static decodeExtrinsicEra (value: MortalMethod | MortalEnumDef | ImmortalEnumDef | Uint8Array | string = new Uint8Array()): Uint8Array | Object | undefined { - if (isHex(value)) { + private static decodeExtrinsicEra (value: IExtrinsicEra | MortalMethod | MortalEnumDef | ImmortalEnumDef | Uint8Array | string = new Uint8Array()): Uint8Array | Object | undefined { + if (value instanceof ExtrinsicEra) { + return ExtrinsicEra.decodeExtrinsicEra(value.toU8a()); + } else if (isHex(value)) { return ExtrinsicEra.decodeExtrinsicEra(hexToU8a(value)); } else if (isU8a(value)) { if (!value.length || value[0] === 0) { @@ -263,10 +265,8 @@ export default class ExtrinsicEra extends Enum implements IExtrinsicEra { * @param isBare true when the value has none of the type-specific prefixes (internal) */ public toU8a (isBare?: boolean): Uint8Array { - if (this.index === 0) { - return this.asImmortalEra.toU8a(isBare); - } else { - return this.asMortalEra.toU8a(isBare); - } + return this.isMortalEra + ? this.asMortalEra.toU8a(isBare) + : this.asImmortalEra.toU8a(isBare); } }