diff --git a/packages/api-format/package.json b/packages/api-format/package.json index 5f5f076a55..6545fe1d51 100644 --- a/packages/api-format/package.json +++ b/packages/api-format/package.json @@ -37,7 +37,7 @@ "@babel/runtime": "^7.0.0-beta.51", "@polkadot/jsonrpc": "^0.28.11", "@polkadot/primitives": "^0.28.11", - "@polkadot/util": "^0.28.1", - "@polkadot/util-keyring": "^0.28.1" + "@polkadot/util": "^0.28.2", + "@polkadot/util-keyring": "^0.28.2" } } diff --git a/packages/api-format/src/output.ts b/packages/api-format/src/output.ts index 0559de4e53..8dec87c742 100644 --- a/packages/api-format/src/output.ts +++ b/packages/api-format/src/output.ts @@ -10,6 +10,7 @@ import bnDecode from '@polkadot/primitives/json/bn/decode'; import bytesDecode from '@polkadot/primitives/json/bytes/decode'; import hashDecode from '@polkadot/primitives/json/hash/decode'; import headerDecode from '@polkadot/primitives/json/header/decode'; +import blockDecode from '@polkadot/primitives/json/block/decode'; import isNull from '@polkadot/util/is/null'; import isUndefined from '@polkadot/util/is/undefined'; @@ -22,6 +23,7 @@ const formatters = new Map([ ['Bytes', bytesDecode], ['Hash', hashDecode], ['Header', headerDecode], + ['SignedBlock', blockDecode], ['u64', bnDecode] ]); diff --git a/packages/api-provider/package.json b/packages/api-provider/package.json index a79f8afd3d..8399642539 100644 --- a/packages/api-provider/package.json +++ b/packages/api-provider/package.json @@ -40,9 +40,9 @@ "dependencies": { "@babel/runtime": "^7.0.0-beta.51", "@polkadot/storage": "^0.28.11", - "@polkadot/util": "^0.28.1", - "@polkadot/util-crypto": "^0.28.1", - "@polkadot/util-keyring": "^0.28.1", + "@polkadot/util": "^0.28.2", + "@polkadot/util-crypto": "^0.28.2", + "@polkadot/util-keyring": "^0.28.2", "@types/nock": "^9.1.3", "eventemitter3": "^2.0.3", "isomorphic-fetch": "^2.2.1", diff --git a/packages/api-provider/test/e2e.test.js b/packages/api-provider/test/e2e.test.js index f7563f4f67..4259c2bcf2 100644 --- a/packages/api-provider/test/e2e.test.js +++ b/packages/api-provider/test/e2e.test.js @@ -38,22 +38,51 @@ describe.skip('e2e', () => { it('subscribes to storage', (done) => { api.state - .subscribeStorage([ - [storage.staking.public.freeBalanceOf, '5Ejbye9R8ygByQPrDSasaUid1munedPZUmg4f118HGmtodGp'], - [storage.staking.public.freeBalanceOf, '5DTestUPts3kjeXSTMyerHihn1uwMfLj8vU8sqF7qYrFacT7'] - ], (error, data) => { - if (error) { - return done(error); + .subscribeStorage( + [ + [storage.system.public.accountIndexOf, '5Ejbye9R8ygByQPrDSasaUid1munedPZUmg4f118HGmtodGp'], + [storage.staking.public.freeBalanceOf, '5DTestUPts3kjeXSTMyerHihn1uwMfLj8vU8sqF7qYrFacT7'] + ], + (error, data) => { + if (error) { + return done(error); + } + + expect(data).toHaveLength(2); + expect(data[0].toNumber()).toEqual(0); + expect(data[1].toNumber()).not.toEqual(0); + + done(); } - - expect(data).toHaveLength(2); - expect(data[0].toNumber()).toEqual(0); - expect(data[1].toNumber()).not.toEqual(0); - - done(); - }) + ) .then((subscriptionId) => { console.log('newHead: subscriptionId =', subscriptionId); }); }); + + it('retrieves a block by hash', () => { + return api.chain + .getBlock('0x627847bffdf5f3e01ac440d057dec6a37a12a6f329db7ef8367665574b76b5df') + .then((block) => { + expect(block).toBeDefined(); + }) + .catch((error) => { + console.error(error); + + throw error; + }); + }); + + it.skip('retrieves the pending extrinsics', () => { + return api.author + .pendingExtrinsics() + .then((extrinsics) => { + console.error('extrinsics', extrinsics); + }) + .catch((error) => { + console.error(error); + + throw error; + }); + }); }); diff --git a/packages/api/package.json b/packages/api/package.json index 1c6402df6b..2fa6a57199 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -39,6 +39,6 @@ "@polkadot/api-provider": "^0.28.11", "@polkadot/jsonrpc": "^0.28.11", "@polkadot/params": "^0.28.11", - "@polkadot/util": "^0.28.1" + "@polkadot/util": "^0.28.2" } } diff --git a/packages/type-extrinsics/package.json b/packages/type-extrinsics/package.json index 3b238234e0..5c16c61914 100644 --- a/packages/type-extrinsics/package.json +++ b/packages/type-extrinsics/package.json @@ -18,6 +18,6 @@ "@babel/runtime": "^7.0.0-beta.51", "@polkadot/params": "^0.28.11", "@polkadot/primitives": "^0.28.11", - "@polkadot/util": "^0.28.1" + "@polkadot/util": "^0.28.2" } } diff --git a/packages/type-extrinsics/src/consensus.ts b/packages/type-extrinsics/src/consensus.ts index cbf805be24..dd024e57ea 100644 --- a/packages/type-extrinsics/src/consensus.ts +++ b/packages/type-extrinsics/src/consensus.ts @@ -32,7 +32,7 @@ const setStorage: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Consensus', public: { diff --git a/packages/type-extrinsics/src/council.ts b/packages/type-extrinsics/src/council.ts index f5f2603682..5492cc2104 100644 --- a/packages/type-extrinsics/src/council.ts +++ b/packages/type-extrinsics/src/council.ts @@ -86,7 +86,7 @@ const setTermDuration: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Council', public: { diff --git a/packages/type-extrinsics/src/councilVoting.ts b/packages/type-extrinsics/src/councilVoting.ts index f12b383a1c..55aff62b95 100644 --- a/packages/type-extrinsics/src/councilVoting.ts +++ b/packages/type-extrinsics/src/councilVoting.ts @@ -49,7 +49,7 @@ const setVotingPeriod: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Council Voting', public: { diff --git a/packages/type-extrinsics/src/democracy.ts b/packages/type-extrinsics/src/democracy.ts index 2e72ee4c5c..bde1625cf2 100644 --- a/packages/type-extrinsics/src/democracy.ts +++ b/packages/type-extrinsics/src/democracy.ts @@ -51,7 +51,7 @@ const cancelReferendum: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Democracy', public: { diff --git a/packages/type-extrinsics/src/parachains.ts b/packages/type-extrinsics/src/parachains.ts index a0f0681ad1..9cc8aca2b5 100644 --- a/packages/type-extrinsics/src/parachains.ts +++ b/packages/type-extrinsics/src/parachains.ts @@ -35,7 +35,7 @@ const setHeads: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Parchains', public: { diff --git a/packages/type-extrinsics/src/session.ts b/packages/type-extrinsics/src/session.ts index d8a3b52e6c..8d67ea2069 100644 --- a/packages/type-extrinsics/src/session.ts +++ b/packages/type-extrinsics/src/session.ts @@ -30,7 +30,7 @@ const forceNewSession: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Session', public: { diff --git a/packages/type-extrinsics/src/staking.ts b/packages/type-extrinsics/src/staking.ts index d682a78729..4034732219 100644 --- a/packages/type-extrinsics/src/staking.ts +++ b/packages/type-extrinsics/src/staking.ts @@ -77,7 +77,7 @@ const forceNewEra: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Staking', public: { diff --git a/packages/type-extrinsics/src/timestamp.ts b/packages/type-extrinsics/src/timestamp.ts index 5d624d774c..c69592a43a 100644 --- a/packages/type-extrinsics/src/timestamp.ts +++ b/packages/type-extrinsics/src/timestamp.ts @@ -17,7 +17,7 @@ const set: CreateItemOptions = { type: [] }; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Timestamp', public: { diff --git a/packages/type-extrinsics/src/treasury.ts b/packages/type-extrinsics/src/treasury.ts index 284760d41f..954341355c 100644 --- a/packages/type-extrinsics/src/treasury.ts +++ b/packages/type-extrinsics/src/treasury.ts @@ -7,7 +7,7 @@ import { Extrinsics, Extrinsic$Sections } from './types'; import createSection from '@polkadot/params/section'; -export default (name: Extrinsic$Sections, index: number): Section => +export default (name: Extrinsic$Sections, index: number): Section => createSection(name, index)((createMethod: CreateItems) => ({ description: 'Timestamp' })); diff --git a/packages/type-extrinsics/src/types.d.ts b/packages/type-extrinsics/src/types.d.ts index da6d17762a..c8cc1b4e74 100644 --- a/packages/type-extrinsics/src/types.d.ts +++ b/packages/type-extrinsics/src/types.d.ts @@ -6,16 +6,16 @@ import { Section } from '@polkadot/params/types'; export type Extrinsics = { // substrate - consensus: Section, - council: Section, - councilVoting: Section, - democracy: Section, - session: Section, - staking: Section, - timestamp: Section, - treasury: Section, + consensus: Section, + council: Section, + councilVoting: Section, + democracy: Section, + session: Section, + staking: Section, + timestamp: Section, + treasury: Section, // polkadot - parachains: Section + parachains: Section }; export type Extrinsic$Sections = keyof Extrinsics; diff --git a/packages/type-jsonrpc/src/author.ts b/packages/type-jsonrpc/src/author.ts index 8b66b8fc29..3611a3ba80 100644 --- a/packages/type-jsonrpc/src/author.ts +++ b/packages/type-jsonrpc/src/author.ts @@ -2,12 +2,18 @@ // This software may be modified and distributed under the terms // of the ISC license. See the LICENSE file for details. -import { CreateItems, CreateItemOptions, Section } from '@polkadot/params/types'; +import { CreateItems, CreateItemOptions, CreateItemOptionsMap, Section, SectionItems } from '@polkadot/params/types'; import { Interfaces, Interface$Sections } from './types'; import param from '@polkadot/params/param'; import createSection from '@polkadot/params/section'; +const pendingExtrinsics: CreateItemOptions = { + description: 'Returns all pending extrinsics, potentially grouped by sender', + params: [], + type: 'PrendingExtrinsics' +}; + const submitExtrinsic: CreateItemOptions = { isSigned: true, description: 'Submit a fully formatted extrinsic for block inclusion', @@ -17,14 +23,24 @@ const submitExtrinsic: CreateItemOptions = { type: 'Hash' }; +const privateMethods: CreateItemOptionsMap = {}; + +const publicMethods: CreateItemOptionsMap = { + pendingExtrinsics, submitExtrinsic +}; + +export type PrivateMethods = typeof privateMethods; +export type PublicMethods = typeof publicMethods; + /** * @summary Methods to work with authors & contributors. */ -export default (name: Interface$Sections): Section => +export default (name: Interface$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Authoring of network items', - public: { - submitExtrinsic: - createMethod('submitExtrinsic')(submitExtrinsic) - } + public: Object.keys(publicMethods).reduce((result, key) => { + result[key] = createMethod(key)(publicMethods[key]); + + return result; + }, {} as SectionItems) })); diff --git a/packages/type-jsonrpc/src/chain.ts b/packages/type-jsonrpc/src/chain.ts index 670a5a95a8..2c645fec8a 100644 --- a/packages/type-jsonrpc/src/chain.ts +++ b/packages/type-jsonrpc/src/chain.ts @@ -2,12 +2,20 @@ // This software may be modified and distributed under the terms // of the ISC license. See the LICENSE file for details. -import { CreateItems, CreateItemOptions, Section } from '@polkadot/params/types'; +import { CreateItems, CreateItemOptions, CreateItemOptionsMap, Section, SectionItems } from '@polkadot/params/types'; import { Interfaces, Interface$Sections } from './types'; import param from '@polkadot/params/param'; import createSection from '@polkadot/params/section'; +const getBlock: CreateItemOptions = { + description: 'Get header and body of a relay chain block', + params: [ + param('hash', 'Hash') + ], + type: 'SignedBlock' +}; + const getHead: CreateItemOptions = { description: 'Retrieves the best headerHash', params: [], @@ -29,18 +37,24 @@ const subscribeNewHead: CreateItemOptions = { type: 'Header' }; +const privateMethods: CreateItemOptionsMap = {}; + +const publicMethods: CreateItemOptionsMap = { + getBlock, getHead, getHeader, subscribeNewHead +}; + +export type PublicMethods = typeof publicMethods; +export type PrivateMethods = typeof privateMethods; + /** * @summary Methods to retrieve chain data. */ -export default (name: Interface$Sections): Section => +export default (name: Interface$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Retrieval of chain data', - public: { - getHead: - createMethod('getHead')(getHead), - getHeader: - createMethod('getHeader')(getHeader), - subscribeNewHead: - createMethod('subscribeNewHead')(subscribeNewHead) - } + public: Object.keys(publicMethods).reduce((result, key) => { + result[key] = createMethod(key)(publicMethods[key]); + + return result; + }, {} as SectionItems) })); diff --git a/packages/type-jsonrpc/src/state.ts b/packages/type-jsonrpc/src/state.ts index f281e83f8b..48bd215227 100644 --- a/packages/type-jsonrpc/src/state.ts +++ b/packages/type-jsonrpc/src/state.ts @@ -2,7 +2,7 @@ // This software may be modified and distributed under the terms // of the ISC license. See the LICENSE file for details. -import { CreateItems, CreateItemOptions, Section } from '@polkadot/params/types'; +import { CreateItems, CreateItemOptions, CreateItemOptionsMap, Section } from '@polkadot/params/types'; import { Interfaces, Interface$Sections } from './types'; import param from '@polkadot/params/param'; @@ -87,10 +87,19 @@ const subscribeStorage: CreateItemOptions = { type: 'StorageResultSet' }; +const privateMethods: CreateItemOptionsMap = {}; + +const publicMethods: CreateItemOptionsMap = { + call, callAt, getStorage, getStorageAt, getStorageHash, getStorageHashAt, getStorageSize, getStorageSizeAt, subscribeStorage +}; + +export type PrivateMethods = typeof privateMethods; +export type PublicMethods = typeof publicMethods; + /** * @summary Query the state and state storage. */ -export default (name: Interface$Sections): Section => +export default (name: Interface$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Query of state', public: { diff --git a/packages/type-jsonrpc/src/system.ts b/packages/type-jsonrpc/src/system.ts index 64a9e009e2..0020ee4ad9 100644 --- a/packages/type-jsonrpc/src/system.ts +++ b/packages/type-jsonrpc/src/system.ts @@ -2,7 +2,7 @@ // This software may be modified and distributed under the terms // of the ISC license. See the LICENSE file for details. -import { CreateItems, CreateItemOptions, Section } from '@polkadot/params/types'; +import { CreateItems, CreateItemOptions, CreateItemOptionsMap, Section } from '@polkadot/params/types'; import { Interfaces, Interface$Sections } from './types'; import createSection from '@polkadot/params/section'; @@ -25,10 +25,19 @@ const version: CreateItemOptions = { type: 'String' }; +const privateMethods: CreateItemOptionsMap = {}; + +const publicMethods: CreateItemOptionsMap = { + chain, name, version +}; + +export type PrivateMethods = typeof privateMethods; +export type PublicMethods = typeof publicMethods; + /** * @summary Methods to retrieve system info. */ -export default (sname: Interface$Sections): Section => +export default (sname: Interface$Sections): Section => createSection(sname)((createMethod: CreateItems) => ({ description: 'Methods to retrieve system info', public: { diff --git a/packages/type-jsonrpc/src/types.d.ts b/packages/type-jsonrpc/src/types.d.ts index faed54a953..63d0189405 100644 --- a/packages/type-jsonrpc/src/types.d.ts +++ b/packages/type-jsonrpc/src/types.d.ts @@ -3,12 +3,16 @@ // of the ISC license. See the LICENSE file for details. import { Section } from '@polkadot/params/types'; +import { PrivateMethods as AuthorPrivate, PublicMethods as AuthorPublic} from './author'; +import { PrivateMethods as ChainPrivate, PublicMethods as ChainPublic} from './chain'; +import { PrivateMethods as StatePrivate, PublicMethods as StatePublic} from './state'; +import { PrivateMethods as SystemPrivate, PublicMethods as SystemPublic} from './system'; export type Interfaces = { - author: Section, - chain: Section, - state: Section, - system:Section + author: Section, + chain: Section, + state: Section, + system: Section } export type Interface$Sections = keyof Interfaces; diff --git a/packages/type-params/package.json b/packages/type-params/package.json index b7945c842e..bc5d18a89f 100644 --- a/packages/type-params/package.json +++ b/packages/type-params/package.json @@ -37,7 +37,7 @@ "@polkadot/extrinsics": "^0.28.11", "@polkadot/params": "^0.28.11", "@polkadot/primitives": "^0.28.11", - "@polkadot/util": "^0.28.1", - "@polkadot/util-keyring": "^0.28.1" + "@polkadot/util": "^0.28.2", + "@polkadot/util-keyring": "^0.28.2" } } diff --git a/packages/type-params/src/decode/value/method.ts b/packages/type-params/src/decode/value/method.ts index e9d6063055..c659bc9043 100644 --- a/packages/type-params/src/decode/value/method.ts +++ b/packages/type-params/src/decode/value/method.ts @@ -24,7 +24,7 @@ export default function call (decode: Decoder, input: Uint8Array | null | undefi } as Param$Decoded; } - const section: Section | undefined = Object.values(extrinsics).find(({ index }) => + const section: Section | undefined = Object.values(extrinsics).find(({ index }) => index[0] === input[0] ); diff --git a/packages/type-params/src/section.ts b/packages/type-params/src/section.ts index 2a4d9f4367..ab07e641fd 100644 --- a/packages/type-params/src/section.ts +++ b/packages/type-params/src/section.ts @@ -8,9 +8,9 @@ import bnToU8a from '@polkadot/util/bn/toU8a'; import createMethod from './method'; -export default function createSection (name: keyof T, _index: number = 0): CreateSection { +export default function createSection (name: keyof T, _index: number = 0): CreateSection { const index = bnToU8a(_index, 8, true); - const creator = (optOrFn: CreateSectionOptions): Section => { + const creator = (optOrFn: CreateSectionOptions): Section => { if (typeof optOrFn === 'function') { return creator( optOrFn( diff --git a/packages/type-params/src/types.d.ts b/packages/type-params/src/types.d.ts index 48c6ae6ea5..eea5cd5e76 100644 --- a/packages/type-params/src/types.d.ts +++ b/packages/type-params/src/types.d.ts @@ -14,7 +14,7 @@ export type EncodingVersions = 'poc-1' | 'latest'; // - @polkadot/storage/key/params.ts // - decode/value/index.js // - encode/type/index.js -export type Param$Type = 'AccountId' | 'AccountIndex' | 'Balance' | 'BlockNumber' | 'bool' | 'Bytes' | 'Call' | 'CandidateReceipt' | 'Code' | 'Digest' | 'Gas' | 'Hash' | 'Header' | 'KeyValue' | 'MisbehaviorReport' | 'ParachainId' | 'PropIndex' | 'Proposal' | 'ReferendumIndex' | 'SessionKey' | 'Signature' | 'StorageKey' | 'StorageKeyValue' | 'StorageResult' | 'StorageResultSet' | 'String' | 'Timestamp' | 'u32' | 'u64' | 'u128' | 'VoteIndex' | 'VoteThreshold'; +export type Param$Type = 'AccountId' | 'AccountIndex' | 'Balance' | 'BlockNumber' | 'bool' | 'Bytes' | 'Call' | 'CandidateReceipt' | 'Code' | 'Digest' | 'Gas' | 'Hash' | 'Header' | 'KeyValue' | 'MisbehaviorReport' | 'ParachainId' | 'PrendingExtrinsics' | 'PropIndex' | 'Proposal' | 'ReferendumIndex' | 'SessionKey' | 'Signature' | 'SignedBlock' | 'StorageKey' | 'StorageKeyValue' | 'StorageResult' | 'StorageResultSet' | 'String' | 'Timestamp' | 'u32' | 'u64' | 'u128' | 'VoteIndex' | 'VoteThreshold'; export type Param$Type$Array = Array>>; @@ -25,6 +25,20 @@ export type ExtrinsicDecoded = { params: Array } +export type BlockExtrinsicDecoded = { + address: string, + nonce: BN, + extrinsic: SectionItem, + params: Array, + signature: Uint8Array +} + +export type BlockDecoded = { + header: Header, + extrinsics: Array, + justification: any +}; + export type KeyValue = { key: Uint8Array, value: Uint8Array @@ -68,21 +82,21 @@ export type SectionItem = { type: Param$Types }; -export type SectionItems = { - [index: string]: SectionItem +export type SectionItems = { + [key in keyof K]: SectionItem }; -export type Section = { +export type Section = { isDeprecated: boolean, isHidden: boolean, description: string, index: Uint8Array, name: keyof T, - private: SectionItems, - public: SectionItems + private: SectionItems, + public: SectionItems }; -export type Sections = Map>; +export type Sections = Map>; export type CreateItemOptions = { description: string, @@ -96,20 +110,24 @@ export type CreateItemOptions = { type: Param$Types }; +export type CreateItemOptionsMap = { + [index: string]: CreateItemOptions +}; + export type CreateItem = (options: CreateItemOptions) => SectionItem; export type CreateItems = (name: string, index?: number) => CreateItem; -export type CreateSectionOptions$Only = { +export type CreateSectionOptions$Only = { description: string, isDeprecated?: boolean, isHidden?: boolean, - 'private'?: SectionItems, - 'public'?: SectionItems + 'private'?: SectionItems, + 'public'?: SectionItems }; -export type CreateSectionOptions$Fn = (method: CreateItems) => CreateSectionOptions$Only; +export type CreateSectionOptions$Fn = (method: CreateItems) => CreateSectionOptions$Only; -export type CreateSectionOptions = CreateSectionOptions$Only | CreateSectionOptions$Fn; +export type CreateSectionOptions = CreateSectionOptions$Only | CreateSectionOptions$Fn; -export type CreateSection = (options: CreateSectionOptions) => Section; +export type CreateSection = (options: CreateSectionOptions) => Section; diff --git a/packages/type-primitives/package.json b/packages/type-primitives/package.json index 36e2965eca..28e83d6973 100644 --- a/packages/type-primitives/package.json +++ b/packages/type-primitives/package.json @@ -34,8 +34,8 @@ }, "dependencies": { "@babel/runtime": "^7.0.0-beta.51", - "@polkadot/trie-hash": "^0.28.1", - "@polkadot/util": "^0.28.1" + "@polkadot/trie-hash": "^0.28.2", + "@polkadot/util": "^0.28.2" }, "devDependencies": { "bn.js": "^4.11.8" diff --git a/packages/type-primitives/src/codec/block/decode.ts b/packages/type-primitives/src/codec/block/decode.ts new file mode 100644 index 0000000000..9098ffd8e2 --- /dev/null +++ b/packages/type-primitives/src/codec/block/decode.ts @@ -0,0 +1,18 @@ +// Copyright 2017-2018 @polkadot/primitives authors & contributors +// This software may be modified and distributed under the terms +// of the ISC license. See the LICENSE file for details. + +import { Block } from '../../block'; + +import createBlock from '../../create/block'; +import decodeHeader from '../header/decode'; +import decodeRaw from './decodeRaw'; + +export default function decodeBlock (u8a: Uint8Array): Block { + const { header, extrinsics } = decodeRaw(u8a); + + return createBlock({ + header: decodeHeader(header), + extrinsics + }); +} diff --git a/packages/type-primitives/src/json/block/decode.ts b/packages/type-primitives/src/json/block/decode.ts new file mode 100644 index 0000000000..69028ec773 --- /dev/null +++ b/packages/type-primitives/src/json/block/decode.ts @@ -0,0 +1,24 @@ +// Copyright 2017-2018 @polkadot/primitives authors & contributors +// This software may be modified and distributed under the terms +// of the ISC license. See the LICENSE file for details. + +import { BlockDecoded } from '@polkadot/params/types'; +import { JsonBlock } from '../types'; + +import toU8a from '@polkadot/util/u8a/toU8a'; + +import decodeExtrinsic from '../extrinsic/decode'; +import decodeHeader from '../header/decode'; + +export default function blockDecode ({ block: { extrinsics, header }, justification }: JsonBlock): BlockDecoded { + return { + // TODO We should decode the justifications (and change type from any) + justification, + header: decodeHeader(header), + extrinsics: extrinsics.map((extrinsic) => + decodeExtrinsic( + toU8a(extrinsic as any) + ) + ) + }; +} diff --git a/packages/type-primitives/src/json/extrinsic/decode.ts b/packages/type-primitives/src/json/extrinsic/decode.ts new file mode 100644 index 0000000000..4a29170ef8 --- /dev/null +++ b/packages/type-primitives/src/json/extrinsic/decode.ts @@ -0,0 +1,22 @@ +// Copyright 2017-2018 @polkadot/primitives authors & contributors +// This software may be modified and distributed under the terms +// of the ISC license. See the LICENSE file for details. + +import { BlockExtrinsicDecoded, ExtrinsicDecoded } from '@polkadot/params/types'; + +import BN from 'bn.js'; +import decoder from '@polkadot/params/decode'; + +export default function extrinsicDecode (extrinsic: Uint8Array): BlockExtrinsicDecoded { + const addressDecoded = decoder('AccountId', extrinsic, 'latest'); + const nonceDecoded = decoder('AccountIndex', extrinsic.subarray(addressDecoded.length), 'latest'); + const extrinsicDecoded = decoder('Call', extrinsic.subarray(addressDecoded.length + nonceDecoded.length), 'latest'); + const signature = extrinsic.subarray(addressDecoded.length + nonceDecoded.length + extrinsicDecoded.length); + + return { + ...(extrinsicDecoded.value as ExtrinsicDecoded), + address: addressDecoded.value as string, + nonce: nonceDecoded.value as BN, + signature + }; +} diff --git a/packages/type-primitives/src/json/hash/encode.ts b/packages/type-primitives/src/json/hash/encode.ts index 8399ec88c1..861e78743a 100644 --- a/packages/type-primitives/src/json/hash/encode.ts +++ b/packages/type-primitives/src/json/hash/encode.ts @@ -6,7 +6,10 @@ import { Hash } from '../../base'; import { JsonHash } from '../types'; import u8aToHex from '@polkadot/util/u8a/toHex'; +import toU8a from '@polkadot/util/u8a/toU8a'; -export default function hashEncode (value: Hash, bitLength: number = -1): JsonHash { - return u8aToHex(value); +export default function hashEncode (value: Hash | string, bitLength: number = -1): JsonHash { + return u8aToHex( + toU8a(value) + ); } diff --git a/packages/type-primitives/src/json/types.d.ts b/packages/type-primitives/src/json/types.d.ts index c2a08b1c35..e5b378c6c0 100644 --- a/packages/type-primitives/src/json/types.d.ts +++ b/packages/type-primitives/src/json/types.d.ts @@ -2,6 +2,8 @@ // This software may be modified and distributed under the terms // of the ISC license. See the LICENSE file for details. +import { ExtrinsicDecoded } from '@polkadot/params/types'; + export type JsonBnType = string; export type JsonHash = string; @@ -44,8 +46,12 @@ export type JsonHeader = { digest: JsonDigest }; +export type JsonJustification = {}; + export type JsonBlock = { - header: JsonHeader, - timestamp: JsonU64, - transactions: Array + block: { + extrinsics: Array>, + header: JsonHeader, + }, + justification: JsonJustification }; diff --git a/packages/type-storage/package.json b/packages/type-storage/package.json index a9d9d0e6d9..54a5fb5464 100644 --- a/packages/type-storage/package.json +++ b/packages/type-storage/package.json @@ -37,8 +37,8 @@ "@babel/runtime": "^7.0.0-beta.51", "@polkadot/params": "^0.28.11", "@polkadot/primitives": "^0.28.11", - "@polkadot/util": "^0.28.1", - "@polkadot/util-crypto": "^0.28.1", - "@polkadot/util-keyring": "^0.28.1" + "@polkadot/util": "^0.28.2", + "@polkadot/util-crypto": "^0.28.2", + "@polkadot/util-keyring": "^0.28.2" } } diff --git a/packages/type-storage/src/consensus.ts b/packages/type-storage/src/consensus.ts index 6e1e159f70..952c7a176d 100644 --- a/packages/type-storage/src/consensus.ts +++ b/packages/type-storage/src/consensus.ts @@ -34,7 +34,7 @@ const code: CreateItemOptions = { type: 'Code' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Consensus', public: { diff --git a/packages/type-storage/src/contract.ts b/packages/type-storage/src/contract.ts index 4f10c06f5e..f4f4cfdbcb 100644 --- a/packages/type-storage/src/contract.ts +++ b/packages/type-storage/src/contract.ts @@ -52,7 +52,7 @@ const codeOf: CreateItemOptions = { type: 'Code' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Contract', public: { diff --git a/packages/type-storage/src/council.ts b/packages/type-storage/src/council.ts index a8b8d9d8a0..7a8f6b55e6 100644 --- a/packages/type-storage/src/council.ts +++ b/packages/type-storage/src/council.ts @@ -154,7 +154,7 @@ const leaderboard: CreateItemOptions = { type: [['Balance', 'AccountId']] }; -export default (name: keyof Storages): Section => +export default (name: keyof Storages): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Council', public: { diff --git a/packages/type-storage/src/councilVoting.ts b/packages/type-storage/src/councilVoting.ts index 567a40fd9e..771048c983 100644 --- a/packages/type-storage/src/councilVoting.ts +++ b/packages/type-storage/src/councilVoting.ts @@ -66,7 +66,7 @@ const vetoedProposal: CreateItemOptions = { type: ['BlockNumber', 'AccountId'] }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Council voting', public: { diff --git a/packages/type-storage/src/democracy.ts b/packages/type-storage/src/democracy.ts index e24137944c..a611879df8 100644 --- a/packages/type-storage/src/democracy.ts +++ b/packages/type-storage/src/democracy.ts @@ -94,7 +94,7 @@ const voteOf: CreateItemOptions = { type: 'bool' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Democracy', public: { diff --git a/packages/type-storage/src/parachains.ts b/packages/type-storage/src/parachains.ts index 3bbf4d6848..2fd6ed5820 100644 --- a/packages/type-storage/src/parachains.ts +++ b/packages/type-storage/src/parachains.ts @@ -40,7 +40,7 @@ const didUpdate: CreateItemOptions = { type: 'bool' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Parachain related entries', public: { diff --git a/packages/type-storage/src/session.ts b/packages/type-storage/src/session.ts index 62118624af..2c0c9b8997 100644 --- a/packages/type-storage/src/session.ts +++ b/packages/type-storage/src/session.ts @@ -73,7 +73,7 @@ const nextLength: CreateItemOptions = { type: 'BlockNumber' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Session management information', public: { diff --git a/packages/type-storage/src/staking.ts b/packages/type-storage/src/staking.ts index eb4f1b4ba3..4f456bbb7c 100644 --- a/packages/type-storage/src/staking.ts +++ b/packages/type-storage/src/staking.ts @@ -197,7 +197,7 @@ const bondageOf: CreateItemOptions = { type: 'Balance' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Staking', public: { diff --git a/packages/type-storage/src/system.ts b/packages/type-storage/src/system.ts index 957a9832dc..dca2c9236e 100644 --- a/packages/type-storage/src/system.ts +++ b/packages/type-storage/src/system.ts @@ -70,7 +70,7 @@ const digest: CreateItemOptions = { type: 'Digest' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'System', public: { diff --git a/packages/type-storage/src/timestamp.ts b/packages/type-storage/src/timestamp.ts index 06712d9304..62530015cd 100644 --- a/packages/type-storage/src/timestamp.ts +++ b/packages/type-storage/src/timestamp.ts @@ -28,7 +28,7 @@ const didUpdate: CreateItemOptions = { type: 'bool' }; -export default (name: Storage$Sections): Section => +export default (name: Storage$Sections): Section => createSection(name)((createMethod: CreateItems) => ({ description: 'Timestamp related entries', public: { diff --git a/packages/type-storage/src/types.d.ts b/packages/type-storage/src/types.d.ts index d45c00d26c..2570de38a5 100644 --- a/packages/type-storage/src/types.d.ts +++ b/packages/type-storage/src/types.d.ts @@ -8,16 +8,16 @@ import { Section } from '@polkadot/params/types'; export type Storage$Key$Value = number | BN | Uint8Array | string; export type Storages = { - consensus: Section, - // contract: Section, - council: Section, - councilVoting: Section, - democracy: Section, - parachains: Section, - session: Section, - staking: Section, - system: Section, - timestamp: Section + consensus: Section, + // contract: Section, + council: Section, + councilVoting: Section, + democracy: Section, + parachains: Section, + session: Section, + staking: Section, + system: Section, + timestamp: Section }; export type Storage$Sections = keyof Storages; diff --git a/yarn.lock b/yarn.lock index 1752c4414f..8aaa51a23f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -734,50 +734,50 @@ typedoc "^0.11.1" typescript "^2.9.2" -"@polkadot/trie-hash@^0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@polkadot/trie-hash/-/trie-hash-0.28.1.tgz#8e220bd2280813818d6d90e4d7d826edfb0d407d" +"@polkadot/trie-hash@^0.28.2": + version "0.28.2" + resolved "https://registry.yarnpkg.com/@polkadot/trie-hash/-/trie-hash-0.28.2.tgz#89eb0bca267a5a576bf1629a1d9b173f4ab02c50" dependencies: "@babel/runtime" "^7.0.0-beta.51" - "@polkadot/util" "^0.28.1" - "@polkadot/util-crypto" "^0.28.1" - "@polkadot/util-rlp" "^0.28.1" + "@polkadot/util" "^0.28.2" + "@polkadot/util-crypto" "^0.28.2" + "@polkadot/util-rlp" "^0.28.2" "@polkadot/ts@^0.1.10": version "0.1.10" resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.1.10.tgz#784d460cf4b2e9b38bb1c77f9366dd01425f220d" -"@polkadot/util-crypto@^0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.28.1.tgz#07bef16d5b68889f96ff9b9c034b92e22bd6f63d" +"@polkadot/util-crypto@^0.28.2": + version "0.28.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.28.2.tgz#17bf06af6e3e57c9c6541ee4a166011dfda18434" dependencies: "@babel/runtime" "^7.0.0-beta.51" - "@polkadot/util" "^0.28.1" + "@polkadot/util" "^0.28.2" blakejs "^1.1.0" js-sha3 "^0.7.0" tweetnacl "^1.0.0" xxhashjs "^0.2.2" -"@polkadot/util-keyring@^0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-keyring/-/util-keyring-0.28.1.tgz#68fac78bc7154226d7e6d06acfcfaebc6232814c" +"@polkadot/util-keyring@^0.28.2": + version "0.28.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-keyring/-/util-keyring-0.28.2.tgz#a391e785a0710518be349f0ca2d688c89879a69d" dependencies: "@babel/runtime" "^7.0.0-beta.51" - "@polkadot/util" "^0.28.1" - "@polkadot/util-crypto" "^0.28.1" + "@polkadot/util" "^0.28.2" + "@polkadot/util-crypto" "^0.28.2" "@types/bs58" "^3.0.30" bs58 "^4.0.1" -"@polkadot/util-rlp@^0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-rlp/-/util-rlp-0.28.1.tgz#101cecbb30223fc3b66bd3448371eb5404d46ac6" +"@polkadot/util-rlp@^0.28.2": + version "0.28.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-rlp/-/util-rlp-0.28.2.tgz#21c326cdca437b1b31a44bbbf26bf9adcac4fb7f" dependencies: "@babel/runtime" "^7.0.0-beta.51" - "@polkadot/util" "^0.28.1" + "@polkadot/util" "^0.28.2" -"@polkadot/util@^0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.28.1.tgz#7c566cc46741c422d93f535fbd27db4e6eff5f80" +"@polkadot/util@^0.28.2": + version "0.28.2" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.28.2.tgz#59fb5a0f3f34d73520a5e0ac54f55ccfde94a8b5" dependencies: "@babel/runtime" "^7.0.0-beta.51" "@types/bn.js" "^4.11.1"