Compare commits

..
81 Commits
Author SHA1 Message Date
github-actions[bot] b363833a9f [CI Skip] release/stable 6.10.1
skip-checks: true
2021-11-29 06:45:19 +00:00
Jaco f083ea3861 6.10.1 (#4267) 2021-11-29 08:38:21 +02:00
github-actions[bot] f62e7f8bf9 [CI Skip] release/beta 6.9.3-6
skip-checks: true
2021-11-29 05:55:26 +00:00
Jaco fedb0a3f09 Re-order augmentation imports (#4266) 2021-11-29 07:46:34 +02:00
github-actions[bot] 38928448bf [CI Skip] release/beta 6.9.3-5
skip-checks: true
2021-11-26 12:54:56 +00:00
Jaco cfbde5f6bd Fix RPC non-available section init (#4263) 2021-11-26 14:47:54 +02:00
github-actions[bot] 4b0e0bc6d3 [CI Skip] release/beta 6.9.3-4
skip-checks: true
2021-11-26 10:51:45 +00:00
Jaco 9acb79f500 Bump common (#4262)
* Bump common

* Adjust
2021-11-26 12:45:02 +02:00
Github Actions 5dc0b38881 [CI Skip] release/beta 6.9.3-3
skip-checks: true
2021-11-24 14:59:43 +00:00
Jaco fab6f7e883 Adjust stale schedule (#4257) 2021-11-24 16:52:40 +02:00
Github Actions 66e635e909 [CI Skip] release/beta 6.9.3-2
skip-checks: true
2021-11-23 08:08:38 +00:00
Jaco 6e496d5a3c Add missing types -> types-known dep (#4252)
* Add missing types -> types-known dep

* Run install :)
2021-11-23 09:59:53 +02:00
Github Actions ca172c9a53 [CI Skip] release/beta 6.9.3-1
skip-checks: true
2021-11-22 09:49:34 +00:00
Jaco e9b83a9ff6 Bump static metadata (#4248)
* Bump static metadata

* metadata static json

* Adjust tests (new signed extensions)
2021-11-22 11:42:27 +02:00
Github Actions cf18d97b3a [CI Skip] release/beta 6.9.3-0
skip-checks: true
2021-11-22 06:41:45 +00:00
Jaco 0b1c715408 Bump dev (#4247) 2021-11-22 08:32:50 +02:00
Github Actions 5d493e1a03 [CI Skip] release/stable 6.9.2
skip-checks: true
2021-11-22 05:34:55 +00:00
Jaco e5437ef9e9 6.9.2 (#4246)
* 6.9.2

* Pull in new util
2021-11-22 07:26:47 +02:00
Github Actions b56bed39e1 [CI Skip] release/stable 6.9.1
skip-checks: true
2021-11-21 09:36:41 +00:00
Jaco e789f91850 6.9.1 (#4244) 2021-11-21 11:28:52 +02:00
Github Actions a236eb9453 [CI Skip] release/beta 6.8.2-18
skip-checks: true
2021-11-21 09:14:31 +00:00
Jaco 7ef01b8534 Bump common (#4243) 2021-11-21 11:06:08 +02:00
Github Actions 0e58545a9d [CI Skip] release/beta 6.8.2-17
skip-checks: true
2021-11-19 10:21:44 +00:00
Jaco c474123777 Bump common (#4239)
* Bump common

* CHANGELOG
2021-11-19 12:14:05 +02:00
Github Actions 93edfcf560 [CI Skip] release/beta 6.8.2-16
skip-checks: true
2021-11-19 07:59:40 +00:00
Daniel SavuandGithub Actions e5a67d82fa fix: Generate custom type definitions (#4224)
* fix: Generate custom type definitions

* Generate separate lookup types

* fix: Custom imports

* fix linting errors

Co-authored-by: Github Actions <action@github.com>
2021-11-19 09:51:51 +02:00
Github Actions 194f6aece1 [CI Skip] release/beta 6.8.2-15
skip-checks: true
2021-11-19 05:35:22 +00:00
Jaco 3b4fef8f6e Bump deps (#4238) 2021-11-19 07:26:28 +02:00
Github Actions 6c7323ee3a [CI Skip] release/beta 6.8.2-14
skip-checks: true
2021-11-18 20:00:39 +00:00
Jaco a97b50decb Additional isU8a decoding shortcuts (#4236) 2021-11-18 21:52:24 +02:00
Github Actions 52accf6444 [CI Skip] release/beta 6.8.2-13
skip-checks: true
2021-11-18 13:27:34 +00:00
Jaco 5b8eb231cc CHANGELOG (#4234) 2021-11-18 15:20:21 +02:00
Github Actions 5ea62367d3 [CI Skip] release/beta 6.8.2-12
skip-checks: true
2021-11-18 10:49:36 +00:00
Jaco 49a034a1a0 Place u8a decoding top-of-tree (#4230)
* Place u8a decoding top-of-tree

* Adjust
2021-11-18 12:41:27 +02:00
Github Actions 62a476cb4c [CI Skip] release/beta 6.8.2-11
skip-checks: true
2021-11-18 09:59:41 +00:00
Jaco b283673812 Squeek less recursion out of DetectCodec (#4232)
* Squeek less recursion out of DetectCodec

* Flatten more

* TS 4.5.2 for checking
2021-11-18 11:52:31 +02:00
Github Actions b6a075fefb [CI Skip] release/beta 6.8.2-10
skip-checks: true
2021-11-18 09:11:06 +00:00
Jaco afa844ae01 Bump deps (#4231) 2021-11-18 11:03:45 +02:00
Github Actions 353ef59a1c [CI Skip] release/beta 6.8.2-9
skip-checks: true
2021-11-18 06:32:55 +00:00
Jaco 6228999e6f Decoding cleanups (#4228)
* Decoding cleanups

* CHANGELOG

* Additional adjustments

* Adjust

* Ordering
2021-11-18 08:24:52 +02:00
Github Actions 56db42fedf [CI Skip] release/beta 6.8.2-8
skip-checks: true
2021-11-18 04:48:36 +00:00
Jaco df44693e5d Use stringPascalCase from @polkadot/util (#4211) 2021-11-18 06:40:28 +02:00
Github Actions cfa25f8dda [CI Skip] release/beta 6.8.2-7
skip-checks: true
2021-11-18 04:01:38 +00:00
Jaco bc8934f3c3 Ensure generation of Call/Event enums (#4226) 2021-11-18 05:53:54 +02:00
Github Actions bc67c72e9b [CI Skip] release/beta 6.8.2-6
skip-checks: true
2021-11-17 12:26:35 +00:00
Jaco 22d85e745a Bump deps (#4221)
* Bump deps

* Adjust

* Adjust
2021-11-17 14:19:21 +02:00
Github Actions 60ba2952f7 [CI Skip] release/beta 6.8.2-5
skip-checks: true
2021-11-17 08:28:22 +00:00
Jaco bb10d2813f Expand runtime Call/Event matching (#4220)
* Expand runtime Call/Event matching

* Adjust * matching

* CHANGELOG
2021-11-17 10:18:55 +02:00
Github Actions 80b581f0df [CI Skip] release/beta 6.8.2-4
skip-checks: true
2021-11-13 06:00:08 +00:00
Jaco ef37c421ac Option toJSON output same as from Substrate input (#4212)
* Option toJSON output same as from Substrate input

* CHANGELOG
2021-11-13 07:53:15 +02:00
Github Actions 6e1e8e622b [CI Skip] release/beta 6.8.2-3
skip-checks: true
2021-11-13 05:41:31 +00:00
Jaco ec38a1510f CHANGELOG (#4210) 2021-11-13 07:33:18 +02:00
Github Actions e550ca5a71 [CI Skip] release/beta 6.8.2-2
skip-checks: true
2021-11-12 10:56:32 +00:00
Jaco 80241f732f Split base/essential definition handling (#4206)
* Split base/essential definition handling

* Adjust
2021-11-12 12:47:34 +02:00
Github Actions 84fc0be12e [CI Skip] release/beta 6.8.2-1
skip-checks: true
2021-11-12 08:53:05 +00:00
flex e1f14e8a83 Change BeefySignedCommitment signatures type to EcdsaSignature (#4204) 2021-11-12 10:45:09 +02:00
Github Actions 1155724604 [CI Skip] release/beta 6.8.2-0
skip-checks: true
2021-11-11 12:55:42 +00:00
Jaco 3bb9541943 Bump deps (#4203) 2021-11-11 14:47:26 +02:00
Github Actions 25288f664a [CI Skip] release/stable 6.8.1
skip-checks: true
2021-11-11 11:15:45 +00:00
Jaco 879c5d7b44 6.8.1 (#4201)
* 6.8.1

* rx.queryAt param CHANGELOG
2021-11-11 13:08:24 +02:00
Jaco cdaec1953c Add knownVersion on rx.queryAt (#4194) 2021-11-11 11:30:16 +02:00
Github Actions f4bf7a9c52 [CI Skip] release/beta 6.7.3-7
skip-checks: true
2021-11-11 05:28:44 +00:00
Jaco 7b46c6aa15 Adjust signFake to apply large default signature (#4199)
* Adjust signFake to apply empty default signature

* 0x01... default

* Rename constant

* Add previously failing test
2021-11-11 07:19:21 +02:00
Github Actions d28f4ccfa0 [CI Skip] release/beta 6.7.3-6
skip-checks: true
2021-11-10 17:43:43 +00:00
Jaco e5b05dc700 Slight adjustment to rpc-provider LRU (#4198) 2021-11-10 19:35:20 +02:00
Github Actions bf9831753e [CI Skip] release/beta 6.7.3-5
skip-checks: true
2021-11-10 12:53:27 +00:00
Jaco 5e1670dbae Provider-level caching for historic requests (#4195)
* Provider-level caching for historic requests

* LRUCache

* Adjust

* Adjust

* Adjust

* Opts

* private variables

* Implementation link

* lru .entries adjustment (using .keys)

* Adjust expectations
2021-11-10 14:46:13 +02:00
Github Actions 0d0a230c86 [CI Skip] release/beta 6.7.3-4
skip-checks: true
2021-11-10 08:55:22 +00:00
Jaco 9989b69b46 Rename decorate method (#4193)
* Rename decorateMethod*

* Split exports
2021-11-10 10:48:20 +02:00
Github Actions 66693253ef [CI Skip] release/beta 6.7.3-3
skip-checks: true
2021-11-10 07:05:56 +00:00
Jaco cbffc37dcf Optimize PortableRegistry (#4192)
* Optimize PortableRegistry

* Additional

* Adjust shortcut

* Adjust params

* Move decorateMethod

* Ordering

* Adjust

* Exports

* Renames
2021-11-10 08:58:50 +02:00
Github Actions 74ee42ed66 [CI Skip] release/beta 6.7.3-2
skip-checks: true
2021-11-10 05:15:04 +00:00
Jaco f642e2399f Polkadot 9122 block (#4191) 2021-11-10 07:07:31 +02:00
Github Actions 8cefb055db [CI Skip] release/beta 6.7.3-1
skip-checks: true
2021-11-09 14:17:36 +00:00
Jaco 1f31756019 Ensure known types for v14 is empty (#4190) 2021-11-09 16:10:44 +02:00
Github Actions 4d6a1da6d5 [CI Skip] release/beta 6.7.3-0
skip-checks: true
2021-11-09 11:30:34 +00:00
Jaco d62e720627 Remove ::generic:: from names & namespaces (#4189) 2021-11-09 13:23:10 +02:00
Github Actions 4af4470998 [CI Skip] release/stable 6.7.2
skip-checks: true
2021-11-09 09:24:30 +00:00
Jaco 8bb6218132 Detect AccountId & Address via SpRuntime* defs (#4188)
* Detect AccountId & Address via SpRuntime* defs

* Always do check via UncheckedExtrinsic

* Adjust

* 6.7.2

* Add Signature detection

* Extract ExtrinsicSignature type
2021-11-09 11:14:31 +02:00
Github Actions f4197f8752 [CI Skip] release/beta 6.7.2-0
skip-checks: true
2021-11-08 14:31:55 +00:00
Jaco 7cfad3b1c4 Derive combineLatest order adjustments (#4186) 2021-11-08 16:24:27 +02:00
131 changed files with 18424 additions and 11966 deletions
+3 -1
View File
@@ -41,4 +41,6 @@
6.1.2 6.1.2
6.4.2 6.4.2
6.5.2 6.5.2
6.7.2
6.9.2
+1 -1
View File
@@ -2,7 +2,7 @@ name: 'Lock Threads'
on: on:
schedule: schedule:
- cron: '30 1/2 * * *' - cron: '10 1 * * *'
jobs: jobs:
lock: lock:
+1 -1
View File
@@ -1,7 +1,7 @@
name: 'Close stale issues and PRs' name: 'Close stale issues and PRs'
on: on:
schedule: schedule:
- cron: '30 2/2 * * *' - cron: '55 1 * * *'
jobs: jobs:
stale: stale:
+66
View File
@@ -1,5 +1,71 @@
# CHANGELOG # CHANGELOG
## 6.10.1 Nov 29, 2021
Upgrade priority: Low. Recommended for users of `HttpProvider` and for chains generating types using TS augmentation.
Changes:
- Fix for HttpProvider init (RPC sections with only subscriptions)
- Re-order imports in lookup type augmentation interfaces
- Bump static metadata for latest Substrate, Polkadot & Kusama
## 6.9.2 Nov 22, 2021
Upgrade priority: Medium. Pulls in `@polkadot/util-crypto` fix for TS projects.
Changes:
- Update `@polkadot/util-crypto` with TS compilation work-around
## 6.9.1 Nov 21, 2021
Upgrade priority: Medium. Recommended for metadata v14 parachains. For TS users, the package now support TypeScript 4.5.2 and allows extraction of user types from metadata v14.
Contributed:
- Lookup TS generation for all metadata v14 chains (Thanks to https://github.com/savudani8)
- Update `BeefySignedCommitment` type (Thanks to https://github.com/czl1378)
Changes:
- Adjust runtime `*::{Call, Event}` matching for metadata v14
- Adjust derive decoration with (optional) known methods
- Expose `*{Call, Event, Error}` TS types for metadata v14
- Align Option `.toJSON` output with Substrate input
- Optimize Enum, Struct, Option & Number decoding paths
- Ajust PascalCase conversions with function from util
- Prepare pre-v13 types for optional injection
- Adjustments for TS 4.5.2 support (flatten type infers)
## 6.8.1 Nov 11, 2021
Upgrade priority: Low. Recommended for chains with non-MultiSignature variants where `paymentInfo` is required.
Changes:
- Adjust `paymentInfo` signatures to cater for non-MultiSignature variants
- Remove `::generic::` from names & namespaces under metadata v14
- Add Polkadot 9122 upgrade block
- Cleanup Polkadot/Kusama/Westend/Rococo known types (>= v14 metadata)
- Internal `decorateMethod{Promise, Rx}` renamed to `to{Promise, Rx}Method`
- Add RPC provider-level LRU for historic requests
- Add optional known runtime version param to internal `rx.queryAt`
## 6.7.2 Nov 9, 2021
Upgrade priority: Low. Recommended for chains on metadata v14 with non-default `Address` implementations.
Changes:
- Detect `AccountId` & `Address` types via `SpRuntime*` definitions
- Adjust api-derive call ordering when using `.queryAt`
## 6.7.1 Nov 7, 2021 ## 6.7.1 Nov 7, 2021
Upgrade priority: Low. Internal maintenance updates, focussed on internal optimizations. Upgrade priority: Low. Internal maintenance updates, focussed on internal optimizations.
+6 -6
View File
@@ -11,7 +11,7 @@
}, },
"sideEffects": false, "sideEffects": false,
"type": "commonjs", "type": "commonjs",
"version": "6.7.1", "version": "6.10.1",
"workspaces": [ "workspaces": [
"packages/*" "packages/*"
], ],
@@ -33,14 +33,14 @@
"devDependencies": { "devDependencies": {
"@babel/core": "^7.16.0", "@babel/core": "^7.16.0",
"@babel/register": "^7.16.0", "@babel/register": "^7.16.0",
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/dev": "^0.63.27", "@polkadot/dev": "^0.63.33",
"@polkadot/ts": "^0.4.13", "@polkadot/ts": "^0.4.15",
"@polkadot/typegen": "workspace:packages/typegen", "@polkadot/typegen": "workspace:packages/typegen",
"@types/jest": "^27.0.2", "@types/jest": "^27.0.3",
"copyfiles": "^2.4.1" "copyfiles": "^2.4.1"
}, },
"resolutions": { "resolutions": {
"typescript": "^4.4.4" "typescript": "^4.5.2"
} }
} }
+5 -5
View File
@@ -20,13 +20,13 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/api": "6.7.1", "@polkadot/api": "6.10.1",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/util": "^7.8.2", "@polkadot/util": "^8.0.2",
"rxjs": "^7.4.0" "rxjs": "^7.4.0"
} }
} }
+2 -1
View File
@@ -23,7 +23,8 @@ export abstract class Base<ApiType extends ApiTypes> {
this.api = api; this.api = api;
this._decorateMethod = decorateMethod; this._decorateMethod = decorateMethod;
assert(!!(api && api.isConnected && api.tx && api.tx.contracts && Object.keys(api.tx.contracts).length), 'Your API has not been initialized correctly and it not decorated with the runtime interfaces for contracts as retrieved from the on-chain runtime'); assert(!!(api && api.isConnected && api.tx), 'Your API has not been initialized correctly and is not connected to a chain');
assert(!!(api.tx.contracts && Object.keys(api.tx.contracts).length), 'You need to connect to a chain with a runtime that supports contracts');
assert(isFunction(api.tx.contracts.instantiateWithCode), 'You need to connect to a chain with a runtime with a V3 contracts module. The runtime does not expose api.tx.contracts.instantiateWithCode'); assert(isFunction(api.tx.contracts.instantiateWithCode), 'You need to connect to a chain with a runtime with a V3 contracts module. The runtime does not expose api.tx.contracts.instantiateWithCode');
} }
+4 -4
View File
@@ -6,7 +6,7 @@ import type { AnyJson } from '@polkadot/types/types';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import { decorateMethodPromise } from '@polkadot/api'; import { toPromiseMethod } from '@polkadot/api';
import v0contractFlipper from '../../test/contracts/ink/v0/flipper.contract.json'; import v0contractFlipper from '../../test/contracts/ink/v0/flipper.contract.json';
import v0abiFlipper from '../../test/contracts/ink/v0/flipper.json'; import v0abiFlipper from '../../test/contracts/ink/v0/flipper.json';
@@ -19,19 +19,19 @@ const v0wasmFlipper = fs.readFileSync(path.join(__dirname, '../../test/contracts
describe('Code', (): void => { describe('Code', (): void => {
it('can construct with an individual ABI/WASM combo', (): void => { it('can construct with an individual ABI/WASM combo', (): void => {
expect( expect(
() => new Code(mockApi, v0abiFlipper as AnyJson, v0wasmFlipper, decorateMethodPromise) () => new Code(mockApi, v0abiFlipper as AnyJson, v0wasmFlipper, toPromiseMethod)
).not.toThrow(); ).not.toThrow();
}); });
it('can construct with an .contract ABI (v0)', (): void => { it('can construct with an .contract ABI (v0)', (): void => {
expect( expect(
() => new Code(mockApi, v0contractFlipper as AnyJson, null, decorateMethodPromise) () => new Code(mockApi, v0contractFlipper as AnyJson, null, toPromiseMethod)
).not.toThrow(); ).not.toThrow();
}); });
it.only('can construct with an .contract ABI (v1)', (): void => { it.only('can construct with an .contract ABI (v1)', (): void => {
expect( expect(
() => new Code(mockApi, v1contractFlipper as AnyJson, null, decorateMethodPromise) () => new Code(mockApi, v1contractFlipper as AnyJson, null, toPromiseMethod)
).not.toThrow(); ).not.toThrow();
}); });
}); });
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api-contract', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/api-contract', version: '6.10.1' };
@@ -4,13 +4,13 @@
import type { Hash } from '@polkadot/types/interfaces'; import type { Hash } from '@polkadot/types/interfaces';
import type { AnyJson } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types';
import { ApiPromise, decorateMethodPromise } from '@polkadot/api'; import { ApiPromise, toPromiseMethod } from '@polkadot/api';
import { Abi } from '../Abi'; import { Abi } from '../Abi';
import { Blueprint as BaseBlueprint } from '../base'; import { Blueprint as BaseBlueprint } from '../base';
export class Blueprint extends BaseBlueprint<'promise'> { export class Blueprint extends BaseBlueprint<'promise'> {
constructor (api: ApiPromise, abi: AnyJson | Abi, codeHash: string | Hash) { constructor (api: ApiPromise, abi: AnyJson | Abi, codeHash: string | Hash) {
super(api, abi, codeHash, decorateMethodPromise); super(api, abi, codeHash, toPromiseMethod);
} }
} }
+2 -2
View File
@@ -4,13 +4,13 @@
import type { ApiPromise } from '@polkadot/api'; import type { ApiPromise } from '@polkadot/api';
import type { AnyJson } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types';
import { decorateMethodPromise } from '@polkadot/api'; import { toPromiseMethod } from '@polkadot/api';
import { Abi } from '../Abi'; import { Abi } from '../Abi';
import { Code as BaseCode } from '../base'; import { Code as BaseCode } from '../base';
export class Code extends BaseCode<'promise'> { export class Code extends BaseCode<'promise'> {
constructor (api: ApiPromise, abi: AnyJson | Abi, wasm: Uint8Array | string | Buffer | null | undefined) { constructor (api: ApiPromise, abi: AnyJson | Abi, wasm: Uint8Array | string | Buffer | null | undefined) {
super(api, abi, wasm, decorateMethodPromise); super(api, abi, wasm, toPromiseMethod);
} }
} }
@@ -4,13 +4,13 @@
import type { AccountId } from '@polkadot/types/interfaces'; import type { AccountId } from '@polkadot/types/interfaces';
import type { AnyJson } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types';
import { ApiPromise, decorateMethodPromise } from '@polkadot/api'; import { ApiPromise, toPromiseMethod } from '@polkadot/api';
import { Abi } from '../Abi'; import { Abi } from '../Abi';
import { Contract as BaseContract } from '../base'; import { Contract as BaseContract } from '../base';
export class Contract extends BaseContract<'promise'> { export class Contract extends BaseContract<'promise'> {
constructor (api: ApiPromise, abi: AnyJson | Abi, address: string | AccountId) { constructor (api: ApiPromise, abi: AnyJson | Abi, address: string | AccountId) {
super(api, abi, address, decorateMethodPromise); super(api, abi, address, toPromiseMethod);
} }
} }
+2 -2
View File
@@ -4,13 +4,13 @@
import type { Hash } from '@polkadot/types/interfaces'; import type { Hash } from '@polkadot/types/interfaces';
import type { AnyJson } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types';
import { ApiRx, decorateMethodRx } from '@polkadot/api'; import { ApiRx, toRxMethod } from '@polkadot/api';
import { Abi } from '../Abi'; import { Abi } from '../Abi';
import { Blueprint as BaseBlueprint } from '../base'; import { Blueprint as BaseBlueprint } from '../base';
export class Blueprint extends BaseBlueprint<'rxjs'> { export class Blueprint extends BaseBlueprint<'rxjs'> {
constructor (api: ApiRx, abi: AnyJson | Abi, codeHash: string | Hash) { constructor (api: ApiRx, abi: AnyJson | Abi, codeHash: string | Hash) {
super(api, abi, codeHash, decorateMethodRx); super(api, abi, codeHash, toRxMethod);
} }
} }
+2 -2
View File
@@ -4,13 +4,13 @@
import type { ApiRx } from '@polkadot/api'; import type { ApiRx } from '@polkadot/api';
import type { AnyJson } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types';
import { decorateMethodRx } from '@polkadot/api'; import { toRxMethod } from '@polkadot/api';
import { Abi } from '../Abi'; import { Abi } from '../Abi';
import { Code as BaseCode } from '../base'; import { Code as BaseCode } from '../base';
export class Code extends BaseCode<'rxjs'> { export class Code extends BaseCode<'rxjs'> {
constructor (api: ApiRx, abi: AnyJson | Abi, wasm: Uint8Array | string | Buffer | null | undefined) { constructor (api: ApiRx, abi: AnyJson | Abi, wasm: Uint8Array | string | Buffer | null | undefined) {
super(api, abi, wasm, decorateMethodRx); super(api, abi, wasm, toRxMethod);
} }
} }
+2 -2
View File
@@ -4,13 +4,13 @@
import type { AccountId } from '@polkadot/types/interfaces'; import type { AccountId } from '@polkadot/types/interfaces';
import type { AnyJson } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types';
import { ApiRx, decorateMethodRx } from '@polkadot/api'; import { ApiRx, toRxMethod } from '@polkadot/api';
import { Abi } from '../Abi'; import { Abi } from '../Abi';
import { Contract as BaseContract } from '../base'; import { Contract as BaseContract } from '../base';
export class Contract extends BaseContract<'rxjs'> { export class Contract extends BaseContract<'rxjs'> {
constructor (api: ApiRx, abi: AnyJson | Abi, address: string | AccountId) { constructor (api: ApiRx, abi: AnyJson | Abi, address: string | AccountId) {
super(api, abi, address, decorateMethodRx); super(api, abi, address, toRxMethod);
} }
} }
+9 -9
View File
@@ -20,19 +20,19 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/api": "6.7.1", "@polkadot/api": "6.10.1",
"@polkadot/rpc-core": "6.7.1", "@polkadot/rpc-core": "6.10.1",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/util": "^7.8.2", "@polkadot/util": "^8.0.2",
"@polkadot/util-crypto": "^7.8.2", "@polkadot/util-crypto": "^8.0.2",
"rxjs": "^7.4.0" "rxjs": "^7.4.0"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/keyring": "^7.8.2", "@polkadot/keyring": "^8.0.2",
"@polkadot/rpc-provider": "6.7.1" "@polkadot/rpc-provider": "6.10.1"
} }
} }
+74 -16
View File
@@ -30,6 +30,7 @@ export * from './type';
interface Avail { interface Avail {
instances: string[]; instances: string[];
methods: string[];
withDetect?: boolean; withDetect?: boolean;
} }
@@ -54,19 +55,61 @@ export type ExactDerive = DeriveAllSections<typeof derive>;
// Enable derive only if some of these modules are available // Enable derive only if some of these modules are available
const checks: Record<string, Avail> = { const checks: Record<string, Avail> = {
contracts: { instances: ['contracts'] }, contracts: {
council: { instances: ['council'], withDetect: true }, instances: ['contracts'],
crowdloan: { instances: ['crowdloan'] }, methods: []
democracy: { instances: ['democracy'] }, },
elections: { instances: ['phragmenElection', 'electionsPhragmen', 'elections', 'council'], withDetect: true }, council: {
imOnline: { instances: ['imOnline'] }, instances: ['council'],
membership: { instances: ['membership'] }, methods: [],
parachains: { instances: ['parachains', 'registrar'] }, withDetect: true
session: { instances: ['session'] }, },
society: { instances: ['society'] }, crowdloan: {
staking: { instances: ['staking'] }, instances: ['crowdloan'],
technicalCommittee: { instances: ['technicalCommittee'], withDetect: true }, methods: []
treasury: { instances: ['treasury'] } },
democracy: {
instances: ['democracy'],
methods: []
},
elections: {
instances: ['phragmenElection', 'electionsPhragmen', 'elections', 'council'],
methods: [],
withDetect: true
},
imOnline: {
instances: ['imOnline'],
methods: []
},
membership: {
instances: ['membership'],
methods: []
},
parachains: {
instances: ['parachains', 'registrar'],
methods: []
},
session: {
instances: ['session'],
methods: []
},
society: {
instances: ['society'],
methods: []
},
staking: {
instances: ['staking'],
methods: ['erasRewardPoints']
},
technicalCommittee: {
instances: ['technicalCommittee'],
methods: [],
withDetect: true
},
treasury: {
instances: ['treasury'],
methods: []
}
}; };
function getModuleInstances (api: ApiInterfaceRx, specName: string, moduleName: string): string[] { function getModuleInstances (api: ApiInterfaceRx, specName: string, moduleName: string): string[] {
@@ -88,12 +131,27 @@ function injectFunctions (instanceId: string, api: ApiInterfaceRx, derives: Deri
const filterInstances = (q: string) => const filterInstances = (q: string) =>
getModuleInstances(api, specName, q).some(filterQueryKeys); getModuleInstances(api, specName, q).some(filterQueryKeys);
const filterMethods = (instances: string[]) =>
(m: string) =>
instances.some((q) =>
queryKeys.includes(q) &&
!!api.query[q][m]
);
const isIncluded = (s: string) => ( const isIncluded = (s: string) => (
!checks[s] || !checks[s] ||
checks[s].instances.some(filterQueryKeys) ||
( (
checks[s].withDetect && (
checks[s].instances.some(filterInstances) checks[s].instances.some(filterQueryKeys) &&
(
!checks[s].methods.length ||
checks[s].methods.every(filterMethods(checks[s].instances))
)
) ||
(
checks[s].withDetect &&
checks[s].instances.some(filterInstances)
)
) )
); );
+14 -11
View File
@@ -25,17 +25,20 @@ import { memo } from '../util';
*/ */
export function getBlock (instanceId: string, api: ApiInterfaceRx): (hash: Uint8Array | string) => Observable<SignedBlockExtended | undefined> { export function getBlock (instanceId: string, api: ApiInterfaceRx): (hash: Uint8Array | string) => Observable<SignedBlockExtended | undefined> {
return memo(instanceId, (blockHash: Uint8Array | string): Observable<SignedBlockExtended | undefined> => return memo(instanceId, (blockHash: Uint8Array | string): Observable<SignedBlockExtended | undefined> =>
api.queryAt(blockHash).pipe( combineLatest([
switchMap((queryAt) => api.rpc.chain.getBlock(blockHash),
combineLatest([ api.queryAt(blockHash).pipe(
api.rpc.chain.getBlock(blockHash), switchMap((queryAt) =>
queryAt.system.events(), combineLatest([
queryAt.session queryAt.system.events(),
? queryAt.session.validators() queryAt.session
: of([]) ? queryAt.session.validators()
]) : of([])
), ])
map(([signedBlock, events, validators]) => )
)
]).pipe(
map(([signedBlock, [events, validators]]) =>
createSignedBlockExtended(api.registry, signedBlock, events, validators) createSignedBlockExtended(api.registry, signedBlock, events, validators)
), ),
catchError((): Observable<undefined> => catchError((): Observable<undefined> =>
+9 -8
View File
@@ -25,17 +25,18 @@ import { memo } from '../util';
* console.log(`block #${number} was authored by ${author}`); * console.log(`block #${number} was authored by ${author}`);
* ``` * ```
*/ */
export function getHeader (instanceId: string, api: ApiInterfaceRx): (hash: Uint8Array | string) => Observable<HeaderExtended | undefined> { export function getHeader (instanceId: string, api: ApiInterfaceRx): (blockHash: Uint8Array | string) => Observable<HeaderExtended | undefined> {
return memo(instanceId, (hash: Uint8Array | string): Observable<HeaderExtended | undefined> => return memo(instanceId, (blockHash: Uint8Array | string): Observable<HeaderExtended | undefined> =>
api.queryAt(hash).pipe( combineLatest([
switchMap((queryAt) => api.rpc.chain.getHeader(blockHash),
combineLatest([ api.queryAt(blockHash).pipe(
api.rpc.chain.getHeader(hash), switchMap((queryAt) =>
queryAt.session queryAt.session
? queryAt.session.validators() ? queryAt.session.validators()
: of([] as AccountId[]) : of([] as AccountId[])
]) )
), )
]).pipe(
map(([header, validators]) => map(([header, validators]) =>
createHeaderExtended(header.registry, header, validators) createHeaderExtended(header.registry, header, validators)
), ),
@@ -21,15 +21,15 @@ export function subscribeNewBlocks (instanceId: string, api: ApiInterfaceRx): ()
const blockHash = header.createdAtHash || header.hash; const blockHash = header.createdAtHash || header.hash;
// we get the block first, setting up the registry // we get the block first, setting up the registry
return api.queryAt(blockHash).pipe( return combineLatest([
switchMap((queryAt) => of(header),
combineLatest([ api.rpc.chain.getBlock(blockHash),
of(header), api.queryAt(blockHash).pipe(
api.rpc.chain.getBlock(blockHash), switchMap((queryAt) =>
queryAt.system.events() queryAt.system.events()
]) )
) )
); ]);
}), }),
map(([header, block, events]) => map(([header, block, events]) =>
createSignedBlockExtended(block.registry, block, events, header.validators) createSignedBlockExtended(block.registry, block, events, header.validators)
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api-derive', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/api-derive', version: '6.10.1' };
+7 -6
View File
@@ -16,13 +16,14 @@ interface Result {
export function events (instanceId: string, api: ApiInterfaceRx): (at: Hash) => Observable<Result> { export function events (instanceId: string, api: ApiInterfaceRx): (at: Hash) => Observable<Result> {
return memo(instanceId, (blockHash: Hash) => return memo(instanceId, (blockHash: Hash) =>
api.queryAt(blockHash).pipe( combineLatest([
switchMap((queryAt) => api.rpc.chain.getBlock(blockHash),
combineLatest([ api.queryAt(blockHash).pipe(
api.rpc.chain.getBlock(blockHash), switchMap((queryAt) =>
queryAt.system.events() queryAt.system.events()
]) )
), )
]).pipe(
map(([block, events]): Result => ({ block, events })) map(([block, events]): Result => ({ block, events }))
) )
); );
+16 -13
View File
@@ -32,20 +32,23 @@ function nextNonce (api: ApiInterfaceRx, address: string): Observable<Index> {
function signingHeader (api: ApiInterfaceRx): Observable<Header> { function signingHeader (api: ApiInterfaceRx): Observable<Header> {
return combineLatest([ return combineLatest([
api.rpc.chain.getHeader(), api.rpc.chain.getHeader().pipe(
api.rpc.chain.getFinalizedHead() switchMap((header) =>
]).pipe( // check for chains at genesis (until block 1 is produced, e.g. 6s), since
switchMap(([bestHeader, finHash]) => // we do need to allow transactions at chain start (also dev/seal chains)
// retrieve the headers - in the case of the current block, we use the parent header.parentHash.isEmpty
// to minimize (not completely remove) the impact that forks do have on the system ? of(header)
// (when at genesis, just return the current header as the last known) // in the case of the current block, we use the parent to minimize the
bestHeader.parentHash.isEmpty // impact of forks on the system, but not completely remove it
? of([bestHeader, bestHeader]) : api.rpc.chain.getHeader(header.parentHash)
: combineLatest([ )
api.rpc.chain.getHeader(bestHeader.parentHash),
api.rpc.chain.getHeader(finHash)
])
), ),
api.rpc.chain.getFinalizedHead().pipe(
switchMap((hash) =>
api.rpc.chain.getHeader(hash)
)
)
]).pipe(
map(([current, finalized]) => map(([current, finalized]) =>
// determine the hash to use, current when lag > max, else finalized // determine the hash to use, current when lag > max, else finalized
current.number.unwrap().sub(finalized.number.unwrap()).gt(MAX_FINALITY_LAG) current.number.unwrap().sub(finalized.number.unwrap()).gt(MAX_FINALITY_LAG)
@@ -8,14 +8,14 @@ import type { ApprovalFlag } from '@polkadot/types/interfaces/elections';
export function approvalFlagsToBools (flags: Vec<ApprovalFlag> | ApprovalFlag[]): boolean[] { export function approvalFlagsToBools (flags: Vec<ApprovalFlag> | ApprovalFlag[]): boolean[] {
const bools: boolean[] = []; const bools: boolean[] = [];
flags.forEach((flag: ApprovalFlag): void => { for (let i = 0; i < flags.length; i++) {
const str = flag.toString(2); const str = flags[i].toString(2);
// read from lowest bit to highest // read from lowest bit to highest
for (const bit of str.split('').reverse()) { for (const bit of str.split('').reverse()) {
bools.push(!!parseInt(bit, 10)); bools.push(!!parseInt(bit, 10));
} }
}); }
// slice off trailing "false" values, as in substrate // slice off trailing "false" values, as in substrate
const lastApproval = bools.lastIndexOf(true); const lastApproval = bools.lastIndexOf(true);
+2 -4
View File
@@ -10,10 +10,8 @@ export const deriveMapCache: DeriveCache = {
mapCache.delete(key); mapCache.delete(key);
}, },
forEach: (cb: (key: string, value: any) => void): void => { forEach: (cb: (key: string, value: any) => void): void => {
const entries = mapCache.entries(); for (const [k, v] of mapCache.entries()) {
cb(k, v);
for (const entry in entries) {
cb(entry[0], entry[1]);
} }
}, },
get: <T = any> (key: string): T | undefined => { get: <T = any> (key: string): T | undefined => {
+10 -10
View File
@@ -20,18 +20,18 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/api-derive": "6.7.1", "@polkadot/api-derive": "6.10.1",
"@polkadot/keyring": "^7.8.2", "@polkadot/keyring": "^8.0.2",
"@polkadot/rpc-core": "6.7.1", "@polkadot/rpc-core": "6.10.1",
"@polkadot/rpc-provider": "6.7.1", "@polkadot/rpc-provider": "6.10.1",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/types-known": "6.7.1", "@polkadot/types-known": "6.10.1",
"@polkadot/util": "^7.8.2", "@polkadot/util": "^8.0.2",
"@polkadot/util-crypto": "^7.8.2", "@polkadot/util-crypto": "^8.0.2",
"eventemitter3": "^4.0.7", "eventemitter3": "^4.0.7",
"rxjs": "^7.4.0" "rxjs": "^7.4.0"
} }
+1 -1
View File
@@ -741,7 +741,7 @@ declare module '@polkadot/api/types/consts' {
* that the runtime should know about the prefix in order to make use of it as * that the runtime should know about the prefix in order to make use of it as
* an identifier of the chain. * an identifier of the chain.
**/ **/
ss58Prefix: u16 & AugmentedConst<ApiType>; sS58Prefix: u16 & AugmentedConst<ApiType>;
/** /**
* Get the chain's current version. * Get the chain's current version.
**/ **/
+3 -1
View File
@@ -1172,7 +1172,9 @@ declare module '@polkadot/api/types/errors' {
**/ **/
IncorrectSlashingSpans: AugmentedError<ApiType>; IncorrectSlashingSpans: AugmentedError<ApiType>;
/** /**
* Can not bond with value less than minimum required. * Cannot have a validator or nominator role, with value less than the minimum defined by
* governance (see `MinValidatorBond` and `MinNominatorBond`). If unbonding is the
* intention, `chill` first to remove one's role as validator/nominator.
**/ **/
InsufficientBond: AugmentedError<ApiType>; InsufficientBond: AugmentedError<ApiType>;
/** /**
+98 -142
View File
@@ -12,33 +12,30 @@ declare module '@polkadot/api/types/events' {
assets: { assets: {
/** /**
* An approval for account `delegate` was cancelled by `owner`. * An approval for account `delegate` was cancelled by `owner`.
* \[id, owner, delegate\]
**/ **/
ApprovalCancelled: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32]>; ApprovalCancelled: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32]>;
/** /**
* (Additional) funds have been approved for transfer to a destination account. * (Additional) funds have been approved for transfer to a destination account.
* \[asset_id, source, delegate, amount\]
**/ **/
ApprovedTransfer: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, u64]>; ApprovedTransfer: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, u128]>;
/** /**
* Some asset `asset_id` was frozen. \[asset_id\] * Some asset `asset_id` was frozen.
**/ **/
AssetFrozen: AugmentedEvent<ApiType, [u32]>; AssetFrozen: AugmentedEvent<ApiType, [u32]>;
/** /**
* An asset has had its attributes changed by the `Force` origin. * An asset has had its attributes changed by the `Force` origin.
* \[id\]
**/ **/
AssetStatusChanged: AugmentedEvent<ApiType, [u32]>; AssetStatusChanged: AugmentedEvent<ApiType, [u32]>;
/** /**
* Some asset `asset_id` was thawed. \[asset_id\] * Some asset `asset_id` was thawed.
**/ **/
AssetThawed: AugmentedEvent<ApiType, [u32]>; AssetThawed: AugmentedEvent<ApiType, [u32]>;
/** /**
* Some assets were destroyed. \[asset_id, owner, balance\] * Some assets were destroyed.
**/ **/
Burned: AugmentedEvent<ApiType, [u32, AccountId32, u64]>; Burned: AugmentedEvent<ApiType, [u32, AccountId32, u128]>;
/** /**
* Some asset class was created. \[asset_id, creator, owner\] * Some asset class was created.
**/ **/
Created: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32]>; Created: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32]>;
/** /**
@@ -46,47 +43,46 @@ declare module '@polkadot/api/types/events' {
**/ **/
Destroyed: AugmentedEvent<ApiType, [u32]>; Destroyed: AugmentedEvent<ApiType, [u32]>;
/** /**
* Some asset class was force-created. \[asset_id, owner\] * Some asset class was force-created.
**/ **/
ForceCreated: AugmentedEvent<ApiType, [u32, AccountId32]>; ForceCreated: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* Some account `who` was frozen. \[asset_id, who\] * Some account `who` was frozen.
**/ **/
Frozen: AugmentedEvent<ApiType, [u32, AccountId32]>; Frozen: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* Some assets were issued. \[asset_id, owner, total_supply\] * Some assets were issued.
**/ **/
Issued: AugmentedEvent<ApiType, [u32, AccountId32, u64]>; Issued: AugmentedEvent<ApiType, [u32, AccountId32, u128]>;
/** /**
* Metadata has been cleared for an asset. \[asset_id\] * Metadata has been cleared for an asset.
**/ **/
MetadataCleared: AugmentedEvent<ApiType, [u32]>; MetadataCleared: AugmentedEvent<ApiType, [u32]>;
/** /**
* New metadata has been set for an asset. \[asset_id, name, symbol, decimals, is_frozen\] * New metadata has been set for an asset.
**/ **/
MetadataSet: AugmentedEvent<ApiType, [u32, Bytes, Bytes, u8, bool]>; MetadataSet: AugmentedEvent<ApiType, [u32, Bytes, Bytes, u8, bool]>;
/** /**
* The owner changed \[asset_id, owner\] * The owner changed.
**/ **/
OwnerChanged: AugmentedEvent<ApiType, [u32, AccountId32]>; OwnerChanged: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* The management team changed \[asset_id, issuer, admin, freezer\] * The management team changed.
**/ **/
TeamChanged: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, AccountId32]>; TeamChanged: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, AccountId32]>;
/** /**
* Some account `who` was thawed. \[asset_id, who\] * Some account `who` was thawed.
**/ **/
Thawed: AugmentedEvent<ApiType, [u32, AccountId32]>; Thawed: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* Some assets were transferred. \[asset_id, from, to, amount\] * Some assets were transferred.
**/ **/
Transferred: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, u64]>; Transferred: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, u128]>;
/** /**
* An `amount` was transferred in its entirety from `owner` to `destination` by * An `amount` was transferred in its entirety from `owner` to `destination` by
* the approved `delegate`. * the approved `delegate`.
* \[id, owner, delegate, destination\]
**/ **/
TransferredApproved: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, AccountId32, u64]>; TransferredApproved: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, AccountId32, u128]>;
/** /**
* Generic event * Generic event
**/ **/
@@ -94,7 +90,7 @@ declare module '@polkadot/api/types/events' {
}; };
bagsList: { bagsList: {
/** /**
* Moved an account from one bag to another. \[who, from, to\]. * Moved an account from one bag to another.
**/ **/
Rebagged: AugmentedEvent<ApiType, [AccountId32, u64, u64]>; Rebagged: AugmentedEvent<ApiType, [AccountId32, u64, u64]>;
/** /**
@@ -104,48 +100,45 @@ declare module '@polkadot/api/types/events' {
}; };
balances: { balances: {
/** /**
* A balance was set by root. \[who, free, reserved\] * A balance was set by root.
**/ **/
BalanceSet: AugmentedEvent<ApiType, [AccountId32, u128, u128]>; BalanceSet: AugmentedEvent<ApiType, [AccountId32, u128, u128]>;
/** /**
* Some amount was deposited into the account (e.g. for transaction fees). \[who, * Some amount was deposited (e.g. for transaction fees).
* deposit\]
**/ **/
Deposit: AugmentedEvent<ApiType, [AccountId32, u128]>; Deposit: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* An account was removed whose balance was non-zero but below ExistentialDeposit, * An account was removed whose balance was non-zero but below ExistentialDeposit,
* resulting in an outright loss. \[account, balance\] * resulting in an outright loss.
**/ **/
DustLost: AugmentedEvent<ApiType, [AccountId32, u128]>; DustLost: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* An account was created with some free balance. \[account, free_balance\] * An account was created with some free balance.
**/ **/
Endowed: AugmentedEvent<ApiType, [AccountId32, u128]>; Endowed: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* Some balance was reserved (moved from free to reserved). \[who, value\] * Some balance was reserved (moved from free to reserved).
**/ **/
Reserved: AugmentedEvent<ApiType, [AccountId32, u128]>; Reserved: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* Some balance was moved from the reserve of the first account to the second account. * Some balance was moved from the reserve of the first account to the second account.
* Final argument indicates the destination balance type. * Final argument indicates the destination balance type.
* \[from, to, balance, destination_status\]
**/ **/
ReserveRepatriated: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128, FrameSupportTokensMiscBalanceStatus]>; ReserveRepatriated: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128, FrameSupportTokensMiscBalanceStatus]>;
/** /**
* Some amount was removed from the account (e.g. for misbehavior). \[who, * Some amount was removed from the account (e.g. for misbehavior).
* amount_slashed\]
**/ **/
Slashed: AugmentedEvent<ApiType, [AccountId32, u128]>; Slashed: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* Transfer succeeded. \[from, to, value\] * Transfer succeeded.
**/ **/
Transfer: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>; Transfer: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>;
/** /**
* Some balance was unreserved (moved from reserved to free). \[who, value\] * Some balance was unreserved (moved from reserved to free).
**/ **/
Unreserved: AugmentedEvent<ApiType, [AccountId32, u128]>; Unreserved: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* Some amount was withdrawn from the account (e.g. for transaction fees). \[who, value\] * Some amount was withdrawn from the account (e.g. for transaction fees).
**/ **/
Withdraw: AugmentedEvent<ApiType, [AccountId32, u128]>; Withdraw: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
@@ -155,31 +148,31 @@ declare module '@polkadot/api/types/events' {
}; };
bounties: { bounties: {
/** /**
* A bounty is awarded to a beneficiary. \[index, beneficiary\] * A bounty is awarded to a beneficiary.
**/ **/
BountyAwarded: AugmentedEvent<ApiType, [u32, AccountId32]>; BountyAwarded: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* A bounty proposal is funded and became active. \[index\] * A bounty proposal is funded and became active.
**/ **/
BountyBecameActive: AugmentedEvent<ApiType, [u32]>; BountyBecameActive: AugmentedEvent<ApiType, [u32]>;
/** /**
* A bounty is cancelled. \[index\] * A bounty is cancelled.
**/ **/
BountyCanceled: AugmentedEvent<ApiType, [u32]>; BountyCanceled: AugmentedEvent<ApiType, [u32]>;
/** /**
* A bounty is claimed by beneficiary. \[index, payout, beneficiary\] * A bounty is claimed by beneficiary.
**/ **/
BountyClaimed: AugmentedEvent<ApiType, [u32, u128, AccountId32]>; BountyClaimed: AugmentedEvent<ApiType, [u32, u128, AccountId32]>;
/** /**
* A bounty expiry is extended. \[index\] * A bounty expiry is extended.
**/ **/
BountyExtended: AugmentedEvent<ApiType, [u32]>; BountyExtended: AugmentedEvent<ApiType, [u32]>;
/** /**
* New bounty proposal. \[index\] * New bounty proposal.
**/ **/
BountyProposed: AugmentedEvent<ApiType, [u32]>; BountyProposed: AugmentedEvent<ApiType, [u32]>;
/** /**
* A bounty proposal was rejected; funds were slashed. \[index, bond\] * A bounty proposal was rejected; funds were slashed.
**/ **/
BountyRejected: AugmentedEvent<ApiType, [u32, u128]>; BountyRejected: AugmentedEvent<ApiType, [u32, u128]>;
/** /**
@@ -227,39 +220,32 @@ declare module '@polkadot/api/types/events' {
council: { council: {
/** /**
* A motion was approved by the required threshold. * A motion was approved by the required threshold.
* \[proposal_hash\]
**/ **/
Approved: AugmentedEvent<ApiType, [H256]>; Approved: AugmentedEvent<ApiType, [H256]>;
/** /**
* A proposal was closed because its threshold was reached or after its duration was up. * A proposal was closed because its threshold was reached or after its duration was up.
* \[proposal_hash, yes, no\]
**/ **/
Closed: AugmentedEvent<ApiType, [H256, u32, u32]>; Closed: AugmentedEvent<ApiType, [H256, u32, u32]>;
/** /**
* A motion was not approved by the required threshold. * A motion was not approved by the required threshold.
* \[proposal_hash\]
**/ **/
Disapproved: AugmentedEvent<ApiType, [H256]>; Disapproved: AugmentedEvent<ApiType, [H256]>;
/** /**
* A motion was executed; result will be `Ok` if it returned without error. * A motion was executed; result will be `Ok` if it returned without error.
* \[proposal_hash, result\]
**/ **/
Executed: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>; Executed: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>;
/** /**
* A single member did some action; result will be `Ok` if it returned without error. * A single member did some action; result will be `Ok` if it returned without error.
* \[proposal_hash, result\]
**/ **/
MemberExecuted: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>; MemberExecuted: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>;
/** /**
* A motion (given hash) has been proposed (by given account) with a threshold (given * A motion (given hash) has been proposed (by given account) with a threshold (given
* `MemberCount`). * `MemberCount`).
* \[account, proposal_index, proposal_hash, threshold\]
**/ **/
Proposed: AugmentedEvent<ApiType, [AccountId32, u32, H256, u32]>; Proposed: AugmentedEvent<ApiType, [AccountId32, u32, H256, u32]>;
/** /**
* A motion (given hash) has been voted on by given account, leaving * A motion (given hash) has been voted on by given account, leaving
* a tally (yes votes and no votes given respectively as `MemberCount`). * a tally (yes votes and no votes given respectively as `MemberCount`).
* \[account, proposal_hash, voted, yes, no\]
**/ **/
Voted: AugmentedEvent<ApiType, [AccountId32, H256, bool, u32, u32]>; Voted: AugmentedEvent<ApiType, [AccountId32, H256, bool, u32, u32]>;
/** /**
@@ -269,19 +255,19 @@ declare module '@polkadot/api/types/events' {
}; };
democracy: { democracy: {
/** /**
* A proposal \[hash\] has been blacklisted permanently. * A proposal_hash has been blacklisted permanently.
**/ **/
Blacklisted: AugmentedEvent<ApiType, [H256]>; Blacklisted: AugmentedEvent<ApiType, [H256]>;
/** /**
* A referendum has been cancelled. \[ref_index\] * A referendum has been cancelled.
**/ **/
Cancelled: AugmentedEvent<ApiType, [u32]>; Cancelled: AugmentedEvent<ApiType, [u32]>;
/** /**
* An account has delegated their vote to another account. \[who, target\] * An account has delegated their vote to another account.
**/ **/
Delegated: AugmentedEvent<ApiType, [AccountId32, AccountId32]>; Delegated: AugmentedEvent<ApiType, [AccountId32, AccountId32]>;
/** /**
* A proposal has been enacted. \[ref_index, result\] * A proposal has been enacted.
**/ **/
Executed: AugmentedEvent<ApiType, [u32, Result<Null, SpRuntimeDispatchError>]>; Executed: AugmentedEvent<ApiType, [u32, Result<Null, SpRuntimeDispatchError>]>;
/** /**
@@ -289,56 +275,51 @@ declare module '@polkadot/api/types/events' {
**/ **/
ExternalTabled: AugmentedEvent<ApiType, []>; ExternalTabled: AugmentedEvent<ApiType, []>;
/** /**
* A proposal has been rejected by referendum. \[ref_index\] * A proposal has been rejected by referendum.
**/ **/
NotPassed: AugmentedEvent<ApiType, [u32]>; NotPassed: AugmentedEvent<ApiType, [u32]>;
/** /**
* A proposal has been approved by referendum. \[ref_index\] * A proposal has been approved by referendum.
**/ **/
Passed: AugmentedEvent<ApiType, [u32]>; Passed: AugmentedEvent<ApiType, [u32]>;
/** /**
* A proposal could not be executed because its preimage was invalid. * A proposal could not be executed because its preimage was invalid.
* \[proposal_hash, ref_index\]
**/ **/
PreimageInvalid: AugmentedEvent<ApiType, [H256, u32]>; PreimageInvalid: AugmentedEvent<ApiType, [H256, u32]>;
/** /**
* A proposal could not be executed because its preimage was missing. * A proposal could not be executed because its preimage was missing.
* \[proposal_hash, ref_index\]
**/ **/
PreimageMissing: AugmentedEvent<ApiType, [H256, u32]>; PreimageMissing: AugmentedEvent<ApiType, [H256, u32]>;
/** /**
* A proposal's preimage was noted, and the deposit taken. \[proposal_hash, who, deposit\] * A proposal's preimage was noted, and the deposit taken.
**/ **/
PreimageNoted: AugmentedEvent<ApiType, [H256, AccountId32, u128]>; PreimageNoted: AugmentedEvent<ApiType, [H256, AccountId32, u128]>;
/** /**
* A registered preimage was removed and the deposit collected by the reaper. * A registered preimage was removed and the deposit collected by the reaper.
* \[proposal_hash, provider, deposit, reaper\]
**/ **/
PreimageReaped: AugmentedEvent<ApiType, [H256, AccountId32, u128, AccountId32]>; PreimageReaped: AugmentedEvent<ApiType, [H256, AccountId32, u128, AccountId32]>;
/** /**
* A proposal preimage was removed and used (the deposit was returned). * A proposal preimage was removed and used (the deposit was returned).
* \[proposal_hash, provider, deposit\]
**/ **/
PreimageUsed: AugmentedEvent<ApiType, [H256, AccountId32, u128]>; PreimageUsed: AugmentedEvent<ApiType, [H256, AccountId32, u128]>;
/** /**
* A motion has been proposed by a public account. \[proposal_index, deposit\] * A motion has been proposed by a public account.
**/ **/
Proposed: AugmentedEvent<ApiType, [u32, u128]>; Proposed: AugmentedEvent<ApiType, [u32, u128]>;
/** /**
* A referendum has begun. \[ref_index, threshold\] * A referendum has begun.
**/ **/
Started: AugmentedEvent<ApiType, [u32, PalletDemocracyVoteThreshold]>; Started: AugmentedEvent<ApiType, [u32, PalletDemocracyVoteThreshold]>;
/** /**
* A public proposal has been tabled for referendum vote. \[proposal_index, deposit, * A public proposal has been tabled for referendum vote.
* depositors\]
**/ **/
Tabled: AugmentedEvent<ApiType, [u32, u128, Vec<AccountId32>]>; Tabled: AugmentedEvent<ApiType, [u32, u128, Vec<AccountId32>]>;
/** /**
* An \[account\] has cancelled a previous delegation operation. * An account has cancelled a previous delegation operation.
**/ **/
Undelegated: AugmentedEvent<ApiType, [AccountId32]>; Undelegated: AugmentedEvent<ApiType, [AccountId32]>;
/** /**
* An external proposal has been vetoed. \[who, proposal_hash, until\] * An external proposal has been vetoed.
**/ **/
Vetoed: AugmentedEvent<ApiType, [AccountId32, H256, u32]>; Vetoed: AugmentedEvent<ApiType, [AccountId32, H256, u32]>;
/** /**
@@ -384,7 +365,7 @@ declare module '@polkadot/api/types/events' {
}; };
elections: { elections: {
/** /**
* A \[candidate\] was slashed by \[amount\] due to failing to obtain a seat as member or * A candidate was slashed by amount due to failing to obtain a seat as member or
* runner-up. * runner-up.
* *
* Note that old members and runners-up are also candidates. * Note that old members and runners-up are also candidates.
@@ -400,12 +381,12 @@ declare module '@polkadot/api/types/events' {
**/ **/
EmptyTerm: AugmentedEvent<ApiType, []>; EmptyTerm: AugmentedEvent<ApiType, []>;
/** /**
* A \[member\] has been removed. This should always be followed by either `NewTerm` or * A member has been removed. This should always be followed by either `NewTerm` or
* `EmptyTerm`. * `EmptyTerm`.
**/ **/
MemberKicked: AugmentedEvent<ApiType, [AccountId32]>; MemberKicked: AugmentedEvent<ApiType, [AccountId32]>;
/** /**
* A new term with \[new_members\]. This indicates that enough candidates existed to run * A new term with new_members. This indicates that enough candidates existed to run
* the election, not that enough have has been elected. The inner value must be examined * the election, not that enough have has been elected. The inner value must be examined
* for this purpose. A `NewTerm(\[\])` indicates that some candidates got their bond * for this purpose. A `NewTerm(\[\])` indicates that some candidates got their bond
* slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to * slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to
@@ -417,7 +398,7 @@ declare module '@polkadot/api/types/events' {
**/ **/
Renounced: AugmentedEvent<ApiType, [AccountId32]>; Renounced: AugmentedEvent<ApiType, [AccountId32]>;
/** /**
* A \[seat holder\] was slashed by \[amount\] by being forcefully removed from the set. * A seat holder was slashed by amount by being forcefully removed from the set.
**/ **/
SeatHolderSlashed: AugmentedEvent<ApiType, [AccountId32, u128]>; SeatHolderSlashed: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
@@ -428,22 +409,18 @@ declare module '@polkadot/api/types/events' {
gilt: { gilt: {
/** /**
* A bid was successfully placed. * A bid was successfully placed.
* \[ who, amount, duration \]
**/ **/
BidPlaced: AugmentedEvent<ApiType, [AccountId32, u128, u32]>; BidPlaced: AugmentedEvent<ApiType, [AccountId32, u128, u32]>;
/** /**
* A bid was successfully removed (before being accepted as a gilt). * A bid was successfully removed (before being accepted as a gilt).
* \[ who, amount, duration \]
**/ **/
BidRetracted: AugmentedEvent<ApiType, [AccountId32, u128, u32]>; BidRetracted: AugmentedEvent<ApiType, [AccountId32, u128, u32]>;
/** /**
* A bid was accepted as a gilt. The balance may not be released until expiry. * A bid was accepted as a gilt. The balance may not be released until expiry.
* \[ index, expiry, who, amount \]
**/ **/
GiltIssued: AugmentedEvent<ApiType, [u32, u32, AccountId32, u128]>; GiltIssued: AugmentedEvent<ApiType, [u32, u32, AccountId32, u128]>;
/** /**
* An expired gilt has been thawed. * An expired gilt has been thawed.
* \[ index, who, original_amount, additional_amount \]
**/ **/
GiltThawed: AugmentedEvent<ApiType, [u32, AccountId32, u128, u128]>; GiltThawed: AugmentedEvent<ApiType, [u32, AccountId32, u128, u128]>;
/** /**
@@ -453,7 +430,7 @@ declare module '@polkadot/api/types/events' {
}; };
grandpa: { grandpa: {
/** /**
* New authority set has been applied. \[authority_set\] * New authority set has been applied.
**/ **/
NewAuthorities: AugmentedEvent<ApiType, [Vec<ITuple<[SpFinalityGrandpaAppPublic, u64]>>]>; NewAuthorities: AugmentedEvent<ApiType, [Vec<ITuple<[SpFinalityGrandpaAppPublic, u64]>>]>;
/** /**
@@ -471,45 +448,44 @@ declare module '@polkadot/api/types/events' {
}; };
identity: { identity: {
/** /**
* A name was cleared, and the given balance returned. \[who, deposit\] * A name was cleared, and the given balance returned.
**/ **/
IdentityCleared: AugmentedEvent<ApiType, [AccountId32, u128]>; IdentityCleared: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* A name was removed and the given balance slashed. \[who, deposit\] * A name was removed and the given balance slashed.
**/ **/
IdentityKilled: AugmentedEvent<ApiType, [AccountId32, u128]>; IdentityKilled: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
* A name was set or reset (which will remove all judgements). \[who\] * A name was set or reset (which will remove all judgements).
**/ **/
IdentitySet: AugmentedEvent<ApiType, [AccountId32]>; IdentitySet: AugmentedEvent<ApiType, [AccountId32]>;
/** /**
* A judgement was given by a registrar. \[target, registrar_index\] * A judgement was given by a registrar.
**/ **/
JudgementGiven: AugmentedEvent<ApiType, [AccountId32, u32]>; JudgementGiven: AugmentedEvent<ApiType, [AccountId32, u32]>;
/** /**
* A judgement was asked from a registrar. \[who, registrar_index\] * A judgement was asked from a registrar.
**/ **/
JudgementRequested: AugmentedEvent<ApiType, [AccountId32, u32]>; JudgementRequested: AugmentedEvent<ApiType, [AccountId32, u32]>;
/** /**
* A judgement request was retracted. \[who, registrar_index\] * A judgement request was retracted.
**/ **/
JudgementUnrequested: AugmentedEvent<ApiType, [AccountId32, u32]>; JudgementUnrequested: AugmentedEvent<ApiType, [AccountId32, u32]>;
/** /**
* A registrar was added. \[registrar_index\] * A registrar was added.
**/ **/
RegistrarAdded: AugmentedEvent<ApiType, [u32]>; RegistrarAdded: AugmentedEvent<ApiType, [u32]>;
/** /**
* A sub-identity was added to an identity and the deposit paid. \[sub, main, deposit\] * A sub-identity was added to an identity and the deposit paid.
**/ **/
SubIdentityAdded: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>; SubIdentityAdded: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>;
/** /**
* A sub-identity was removed from an identity and the deposit freed. * A sub-identity was removed from an identity and the deposit freed.
* \[sub, main, deposit\]
**/ **/
SubIdentityRemoved: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>; SubIdentityRemoved: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>;
/** /**
* A sub-identity was cleared, and the given deposit repatriated from the * A sub-identity was cleared, and the given deposit repatriated from the
* main identity account to the sub-identity account. \[sub, main, deposit\] * main identity account to the sub-identity account.
**/ **/
SubIdentityRevoked: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>; SubIdentityRevoked: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>;
/** /**
@@ -523,11 +499,11 @@ declare module '@polkadot/api/types/events' {
**/ **/
AllGood: AugmentedEvent<ApiType, []>; AllGood: AugmentedEvent<ApiType, []>;
/** /**
* A new heartbeat was received from `AuthorityId` \[authority_id\] * A new heartbeat was received from `AuthorityId`.
**/ **/
HeartbeatReceived: AugmentedEvent<ApiType, [PalletImOnlineSr25519AppSr25519Public]>; HeartbeatReceived: AugmentedEvent<ApiType, [PalletImOnlineSr25519AppSr25519Public]>;
/** /**
* At the end of the session, at least one validator was found to be \[offline\]. * At the end of the session, at least one validator was found to be offline.
**/ **/
SomeOffline: AugmentedEvent<ApiType, [Vec<ITuple<[AccountId32, PalletStakingExposure]>>]>; SomeOffline: AugmentedEvent<ApiType, [Vec<ITuple<[AccountId32, PalletStakingExposure]>>]>;
/** /**
@@ -537,15 +513,15 @@ declare module '@polkadot/api/types/events' {
}; };
indices: { indices: {
/** /**
* A account index was assigned. \[index, who\] * A account index was assigned.
**/ **/
IndexAssigned: AugmentedEvent<ApiType, [AccountId32, u32]>; IndexAssigned: AugmentedEvent<ApiType, [AccountId32, u32]>;
/** /**
* A account index has been freed up (unassigned). \[index\] * A account index has been freed up (unassigned).
**/ **/
IndexFreed: AugmentedEvent<ApiType, [u32]>; IndexFreed: AugmentedEvent<ApiType, [u32]>;
/** /**
* A account index has been frozen to its current account ID. \[index, who\] * A account index has been frozen to its current account ID.
**/ **/
IndexFrozen: AugmentedEvent<ApiType, [u32, AccountId32]>; IndexFrozen: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
@@ -578,19 +554,18 @@ declare module '@polkadot/api/types/events' {
multisig: { multisig: {
/** /**
* A multisig operation has been approved by someone. * A multisig operation has been approved by someone.
* \[approving, timepoint, multisig, call_hash\]
**/ **/
MultisigApproval: AugmentedEvent<ApiType, [AccountId32, PalletMultisigTimepoint, AccountId32, U8aFixed]>; MultisigApproval: AugmentedEvent<ApiType, [AccountId32, PalletMultisigTimepoint, AccountId32, U8aFixed]>;
/** /**
* A multisig operation has been cancelled. \[canceling, timepoint, multisig, call_hash\] * A multisig operation has been cancelled.
**/ **/
MultisigCancelled: AugmentedEvent<ApiType, [AccountId32, PalletMultisigTimepoint, AccountId32, U8aFixed]>; MultisigCancelled: AugmentedEvent<ApiType, [AccountId32, PalletMultisigTimepoint, AccountId32, U8aFixed]>;
/** /**
* A multisig operation has been executed. \[approving, timepoint, multisig, call_hash\] * A multisig operation has been executed.
**/ **/
MultisigExecuted: AugmentedEvent<ApiType, [AccountId32, PalletMultisigTimepoint, AccountId32, U8aFixed, Result<Null, SpRuntimeDispatchError>]>; MultisigExecuted: AugmentedEvent<ApiType, [AccountId32, PalletMultisigTimepoint, AccountId32, U8aFixed, Result<Null, SpRuntimeDispatchError>]>;
/** /**
* A new multisig operation has begun. \[approving, multisig, call_hash\] * A new multisig operation has begun.
**/ **/
NewMultisig: AugmentedEvent<ApiType, [AccountId32, AccountId32, U8aFixed]>; NewMultisig: AugmentedEvent<ApiType, [AccountId32, AccountId32, U8aFixed]>;
/** /**
@@ -612,21 +587,20 @@ declare module '@polkadot/api/types/events' {
}; };
proxy: { proxy: {
/** /**
* An announcement was placed to make a call in the future. \[real, proxy, call_hash\] * An announcement was placed to make a call in the future.
**/ **/
Announced: AugmentedEvent<ApiType, [AccountId32, AccountId32, H256]>; Announced: AugmentedEvent<ApiType, [AccountId32, AccountId32, H256]>;
/** /**
* Anonymous account has been created by new proxy with given * Anonymous account has been created by new proxy with given
* disambiguation index and proxy type. \[anonymous, who, proxy_type, * disambiguation index and proxy type.
* disambiguation_index\]
**/ **/
AnonymousCreated: AugmentedEvent<ApiType, [AccountId32, AccountId32, NodeRuntimeProxyType, u16]>; AnonymousCreated: AugmentedEvent<ApiType, [AccountId32, AccountId32, NodeRuntimeProxyType, u16]>;
/** /**
* A proxy was added. \[delegator, delegatee, proxy_type, delay\] * A proxy was added.
**/ **/
ProxyAdded: AugmentedEvent<ApiType, [AccountId32, AccountId32, NodeRuntimeProxyType, u32]>; ProxyAdded: AugmentedEvent<ApiType, [AccountId32, AccountId32, NodeRuntimeProxyType, u32]>;
/** /**
* A proxy was executed correctly, with the given \[result\]. * A proxy was executed correctly, with the given.
**/ **/
ProxyExecuted: AugmentedEvent<ApiType, [Result<Null, SpRuntimeDispatchError>]>; ProxyExecuted: AugmentedEvent<ApiType, [Result<Null, SpRuntimeDispatchError>]>;
/** /**
@@ -637,30 +611,26 @@ declare module '@polkadot/api/types/events' {
recovery: { recovery: {
/** /**
* Lost account has been successfully recovered by rescuer account. * Lost account has been successfully recovered by rescuer account.
* \[lost, rescuer\]
**/ **/
AccountRecovered: AugmentedEvent<ApiType, [AccountId32, AccountId32]>; AccountRecovered: AugmentedEvent<ApiType, [AccountId32, AccountId32]>;
/** /**
* A recovery process for lost account by rescuer account has been closed. * A recovery process for lost account by rescuer account has been closed.
* \[lost, rescuer\]
**/ **/
RecoveryClosed: AugmentedEvent<ApiType, [AccountId32, AccountId32]>; RecoveryClosed: AugmentedEvent<ApiType, [AccountId32, AccountId32]>;
/** /**
* A recovery process has been set up for an \[account\]. * A recovery process has been set up for an account.
**/ **/
RecoveryCreated: AugmentedEvent<ApiType, [AccountId32]>; RecoveryCreated: AugmentedEvent<ApiType, [AccountId32]>;
/** /**
* A recovery process has been initiated for lost account by rescuer account. * A recovery process has been initiated for lost account by rescuer account.
* \[lost, rescuer\]
**/ **/
RecoveryInitiated: AugmentedEvent<ApiType, [AccountId32, AccountId32]>; RecoveryInitiated: AugmentedEvent<ApiType, [AccountId32, AccountId32]>;
/** /**
* A recovery process has been removed for an \[account\]. * A recovery process has been removed for an account.
**/ **/
RecoveryRemoved: AugmentedEvent<ApiType, [AccountId32]>; RecoveryRemoved: AugmentedEvent<ApiType, [AccountId32]>;
/** /**
* A recovery process for lost account by rescuer account has been vouched for by sender. * A recovery process for lost account by rescuer account has been vouched for by sender.
* \[lost, rescuer, sender\]
**/ **/
RecoveryVouched: AugmentedEvent<ApiType, [AccountId32, AccountId32, AccountId32]>; RecoveryVouched: AugmentedEvent<ApiType, [AccountId32, AccountId32, AccountId32]>;
/** /**
@@ -688,7 +658,7 @@ declare module '@polkadot/api/types/events' {
}; };
session: { session: {
/** /**
* New session has happened. Note that the argument is the \[session_index\], not the * New session has happened. Note that the argument is the session index, not the
* block number as the type might suggest. * block number as the type might suggest.
**/ **/
NewSession: AugmentedEvent<ApiType, [u32]>; NewSession: AugmentedEvent<ApiType, [u32]>;
@@ -885,39 +855,32 @@ declare module '@polkadot/api/types/events' {
technicalCommittee: { technicalCommittee: {
/** /**
* A motion was approved by the required threshold. * A motion was approved by the required threshold.
* \[proposal_hash\]
**/ **/
Approved: AugmentedEvent<ApiType, [H256]>; Approved: AugmentedEvent<ApiType, [H256]>;
/** /**
* A proposal was closed because its threshold was reached or after its duration was up. * A proposal was closed because its threshold was reached or after its duration was up.
* \[proposal_hash, yes, no\]
**/ **/
Closed: AugmentedEvent<ApiType, [H256, u32, u32]>; Closed: AugmentedEvent<ApiType, [H256, u32, u32]>;
/** /**
* A motion was not approved by the required threshold. * A motion was not approved by the required threshold.
* \[proposal_hash\]
**/ **/
Disapproved: AugmentedEvent<ApiType, [H256]>; Disapproved: AugmentedEvent<ApiType, [H256]>;
/** /**
* A motion was executed; result will be `Ok` if it returned without error. * A motion was executed; result will be `Ok` if it returned without error.
* \[proposal_hash, result\]
**/ **/
Executed: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>; Executed: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>;
/** /**
* A single member did some action; result will be `Ok` if it returned without error. * A single member did some action; result will be `Ok` if it returned without error.
* \[proposal_hash, result\]
**/ **/
MemberExecuted: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>; MemberExecuted: AugmentedEvent<ApiType, [H256, Result<Null, SpRuntimeDispatchError>]>;
/** /**
* A motion (given hash) has been proposed (by given account) with a threshold (given * A motion (given hash) has been proposed (by given account) with a threshold (given
* `MemberCount`). * `MemberCount`).
* \[account, proposal_index, proposal_hash, threshold\]
**/ **/
Proposed: AugmentedEvent<ApiType, [AccountId32, u32, H256, u32]>; Proposed: AugmentedEvent<ApiType, [AccountId32, u32, H256, u32]>;
/** /**
* A motion (given hash) has been voted on by given account, leaving * A motion (given hash) has been voted on by given account, leaving
* a tally (yes votes and no votes given respectively as `MemberCount`). * a tally (yes votes and no votes given respectively as `MemberCount`).
* \[account, proposal_hash, voted, yes, no\]
**/ **/
Voted: AugmentedEvent<ApiType, [AccountId32, H256, bool, u32, u32]>; Voted: AugmentedEvent<ApiType, [AccountId32, H256, bool, u32, u32]>;
/** /**
@@ -957,23 +920,23 @@ declare module '@polkadot/api/types/events' {
}; };
tips: { tips: {
/** /**
* A new tip suggestion has been opened. \[tip_hash\] * A new tip suggestion has been opened.
**/ **/
NewTip: AugmentedEvent<ApiType, [H256]>; NewTip: AugmentedEvent<ApiType, [H256]>;
/** /**
* A tip suggestion has been closed. \[tip_hash, who, payout\] * A tip suggestion has been closed.
**/ **/
TipClosed: AugmentedEvent<ApiType, [H256, AccountId32, u128]>; TipClosed: AugmentedEvent<ApiType, [H256, AccountId32, u128]>;
/** /**
* A tip suggestion has reached threshold and is closing. \[tip_hash\] * A tip suggestion has reached threshold and is closing.
**/ **/
TipClosing: AugmentedEvent<ApiType, [H256]>; TipClosing: AugmentedEvent<ApiType, [H256]>;
/** /**
* A tip suggestion has been retracted. \[tip_hash\] * A tip suggestion has been retracted.
**/ **/
TipRetracted: AugmentedEvent<ApiType, [H256]>; TipRetracted: AugmentedEvent<ApiType, [H256]>;
/** /**
* A tip suggestion has been slashed. \[tip_hash, finder, deposit\] * A tip suggestion has been slashed.
**/ **/
TipSlashed: AugmentedEvent<ApiType, [H256, AccountId32, u128]>; TipSlashed: AugmentedEvent<ApiType, [H256, AccountId32, u128]>;
/** /**
@@ -1038,97 +1001,91 @@ declare module '@polkadot/api/types/events' {
/** /**
* An approval for a `delegate` account to transfer the `instance` of an asset `class` was * An approval for a `delegate` account to transfer the `instance` of an asset `class` was
* cancelled by its `owner`. * cancelled by its `owner`.
* \[ class, instance, owner, delegate \]
**/ **/
ApprovalCancelled: AugmentedEvent<ApiType, [u32, u32, AccountId32, AccountId32]>; ApprovalCancelled: AugmentedEvent<ApiType, [u32, u32, AccountId32, AccountId32]>;
/** /**
* An `instance` of an asset `class` has been approved by the `owner` for transfer by a * An `instance` of an asset `class` has been approved by the `owner` for transfer by a
* `delegate`. * `delegate`.
* \[ class, instance, owner, delegate \]
**/ **/
ApprovedTransfer: AugmentedEvent<ApiType, [u32, u32, AccountId32, AccountId32]>; ApprovedTransfer: AugmentedEvent<ApiType, [u32, u32, AccountId32, AccountId32]>;
/** /**
* An asset `class` has had its attributes changed by the `Force` origin. * An asset `class` has had its attributes changed by the `Force` origin.
* \[ class \]
**/ **/
AssetStatusChanged: AugmentedEvent<ApiType, [u32]>; AssetStatusChanged: AugmentedEvent<ApiType, [u32]>;
/** /**
* Attribute metadata has been cleared for an asset class or instance. * Attribute metadata has been cleared for an asset class or instance.
* \[ class, maybe_instance, key, maybe_value \]
**/ **/
AttributeCleared: AugmentedEvent<ApiType, [u32, Option<u32>, Bytes]>; AttributeCleared: AugmentedEvent<ApiType, [u32, Option<u32>, Bytes]>;
/** /**
* New attribute metadata has been set for an asset class or instance. * New attribute metadata has been set for an asset class or instance.
* \[ class, maybe_instance, key, value \]
**/ **/
AttributeSet: AugmentedEvent<ApiType, [u32, Option<u32>, Bytes, Bytes]>; AttributeSet: AugmentedEvent<ApiType, [u32, Option<u32>, Bytes, Bytes]>;
/** /**
* An asset `instance` was destroyed. \[ class, instance, owner \] * An asset `instance` was destroyed.
**/ **/
Burned: AugmentedEvent<ApiType, [u32, u32, AccountId32]>; Burned: AugmentedEvent<ApiType, [u32, u32, AccountId32]>;
/** /**
* Some asset `class` was frozen. \[ class \] * Some asset `class` was frozen.
**/ **/
ClassFrozen: AugmentedEvent<ApiType, [u32]>; ClassFrozen: AugmentedEvent<ApiType, [u32]>;
/** /**
* Metadata has been cleared for an asset class. \[ class \] * Metadata has been cleared for an asset class.
**/ **/
ClassMetadataCleared: AugmentedEvent<ApiType, [u32]>; ClassMetadataCleared: AugmentedEvent<ApiType, [u32]>;
/** /**
* New metadata has been set for an asset class. \[ class, data, is_frozen \] * New metadata has been set for an asset class.
**/ **/
ClassMetadataSet: AugmentedEvent<ApiType, [u32, Bytes, bool]>; ClassMetadataSet: AugmentedEvent<ApiType, [u32, Bytes, bool]>;
/** /**
* Some asset `class` was thawed. \[ class \] * Some asset `class` was thawed.
**/ **/
ClassThawed: AugmentedEvent<ApiType, [u32]>; ClassThawed: AugmentedEvent<ApiType, [u32]>;
/** /**
* An asset class was created. \[ class, creator, owner \] * An asset class was created.
**/ **/
Created: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32]>; Created: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32]>;
/** /**
* An asset `class` was destroyed. \[ class \] * An asset `class` was destroyed.
**/ **/
Destroyed: AugmentedEvent<ApiType, [u32]>; Destroyed: AugmentedEvent<ApiType, [u32]>;
/** /**
* An asset class was force-created. \[ class, owner \] * An asset class was force-created.
**/ **/
ForceCreated: AugmentedEvent<ApiType, [u32, AccountId32]>; ForceCreated: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* Some asset `instance` was frozen. \[ class, instance \] * Some asset `instance` was frozen.
**/ **/
Frozen: AugmentedEvent<ApiType, [u32, u32]>; Frozen: AugmentedEvent<ApiType, [u32, u32]>;
/** /**
* An asset `instance` was issued. \[ class, instance, owner \] * An asset `instance` was issued.
**/ **/
Issued: AugmentedEvent<ApiType, [u32, u32, AccountId32]>; Issued: AugmentedEvent<ApiType, [u32, u32, AccountId32]>;
/** /**
* Metadata has been cleared for an asset instance. \[ class, instance \] * Metadata has been cleared for an asset instance.
**/ **/
MetadataCleared: AugmentedEvent<ApiType, [u32, u32]>; MetadataCleared: AugmentedEvent<ApiType, [u32, u32]>;
/** /**
* New metadata has been set for an asset instance. * New metadata has been set for an asset instance.
* \[ class, instance, data, is_frozen \]
**/ **/
MetadataSet: AugmentedEvent<ApiType, [u32, u32, Bytes, bool]>; MetadataSet: AugmentedEvent<ApiType, [u32, u32, Bytes, bool]>;
/** /**
* The owner changed \[ class, new_owner \] * The owner changed.
**/ **/
OwnerChanged: AugmentedEvent<ApiType, [u32, AccountId32]>; OwnerChanged: AugmentedEvent<ApiType, [u32, AccountId32]>;
/** /**
* Metadata has been cleared for an asset instance. \[ class, successful_instances \] * Metadata has been cleared for an asset instance.
**/ **/
Redeposited: AugmentedEvent<ApiType, [u32, Vec<u32>]>; Redeposited: AugmentedEvent<ApiType, [u32, Vec<u32>]>;
/** /**
* The management team changed \[ class, issuer, admin, freezer \] * The management team changed.
**/ **/
TeamChanged: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, AccountId32]>; TeamChanged: AugmentedEvent<ApiType, [u32, AccountId32, AccountId32, AccountId32]>;
/** /**
* Some asset `instance` was thawed. \[ class, instance \] * Some asset `instance` was thawed.
**/ **/
Thawed: AugmentedEvent<ApiType, [u32, u32]>; Thawed: AugmentedEvent<ApiType, [u32, u32]>;
/** /**
* An asset `instance` was transferred. \[ class, instance, from, to \] * An asset `instance` was transferred.
**/ **/
Transferred: AugmentedEvent<ApiType, [u32, u32, AccountId32, AccountId32]>; Transferred: AugmentedEvent<ApiType, [u32, u32, AccountId32, AccountId32]>;
/** /**
@@ -1143,7 +1100,7 @@ declare module '@polkadot/api/types/events' {
BatchCompleted: AugmentedEvent<ApiType, []>; BatchCompleted: AugmentedEvent<ApiType, []>;
/** /**
* Batch of dispatches did not complete fully. Index of first failing dispatch given, as * Batch of dispatches did not complete fully. Index of first failing dispatch given, as
* well as the error. \[index, error\] * well as the error.
**/ **/
BatchInterrupted: AugmentedEvent<ApiType, [u32, SpRuntimeDispatchError]>; BatchInterrupted: AugmentedEvent<ApiType, [u32, SpRuntimeDispatchError]>;
/** /**
@@ -1167,7 +1124,6 @@ declare module '@polkadot/api/types/events' {
/** /**
* The amount vested has been updated. This could indicate a change in funds available. * The amount vested has been updated. This could indicate a change in funds available.
* The balance given is the amount which is left unvested (and thus locked). * The balance given is the amount which is left unvested (and thus locked).
* \[account, unvested\]
**/ **/
VestingUpdated: AugmentedEvent<ApiType, [AccountId32, u128]>; VestingUpdated: AugmentedEvent<ApiType, [AccountId32, u128]>;
/** /**
+3 -3
View File
@@ -4,7 +4,7 @@
import type { ApiTypes } from '@polkadot/api/types'; import type { ApiTypes } from '@polkadot/api/types';
import type { BTreeMap, Bytes, Data, Null, Option, U8aFixed, Vec, WrapperOpaque, bool, u128, u32, u64, u8 } from '@polkadot/types'; import type { BTreeMap, Bytes, Data, Null, Option, U8aFixed, Vec, WrapperOpaque, bool, u128, u32, u64, u8 } from '@polkadot/types';
import type { AccountId32, Call, H256, Perbill, Percent } from '@polkadot/types/interfaces/runtime'; import type { AccountId32, Call, H256, Perbill, Percent } from '@polkadot/types/interfaces/runtime';
import type { FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, NodeRuntimeSessionKeys, PalletAssetsApproval, PalletAssetsAssetBalance, PalletAssetsAssetDetails, PalletAssetsAssetMetadata, PalletAuthorshipUncleEntryItem, PalletBagsListListBag, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletBountiesBounty, PalletCollectiveVotes, PalletContractsStorageDeletedContract, PalletContractsStorageRawContractInfo, PalletContractsWasmPrefabWasmModule, PalletDemocracyPreimageStatus, PalletDemocracyReferendumInfo, PalletDemocracyReleases, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenSeatHolder, PalletElectionsPhragmenVoter, PalletGiltActiveGilt, PalletGiltActiveGiltsTotal, PalletGiltGiltBid, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineSr25519AppSr25519Public, PalletLotteryLotteryConfig, PalletMultisigMultisig, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletRecoveryActiveRecovery, PalletRecoveryRecoveryConfig, PalletSchedulerReleases, PalletSchedulerScheduledV2, PalletSocietyBid, PalletSocietyBidKind, PalletSocietyVote, PalletSocietyVouchingStatus, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingNominations, PalletStakingReleases, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingValidatorPrefs, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTransactionStorageTransactionInfo, PalletTreasuryProposal, PalletUniquesClassDetails, PalletUniquesClassMetadata, PalletUniquesInstanceDetails, PalletUniquesInstanceMetadata, PalletVestingReleases, PalletVestingVestingInfo, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpCoreCryptoKeyTypeId, SpRuntimeGenericDigest, SpStakingOffenceOffenceDetails } from '@polkadot/types/lookup'; import type { FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, NodeRuntimeSessionKeys, PalletAssetsApproval, PalletAssetsAssetBalance, PalletAssetsAssetDetails, PalletAssetsAssetMetadata, PalletAuthorshipUncleEntryItem, PalletBagsListListBag, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletBountiesBounty, PalletCollectiveVotes, PalletContractsStorageDeletedContract, PalletContractsStorageRawContractInfo, PalletContractsWasmPrefabWasmModule, PalletDemocracyPreimageStatus, PalletDemocracyReferendumInfo, PalletDemocracyReleases, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenSeatHolder, PalletElectionsPhragmenVoter, PalletGiltActiveGilt, PalletGiltActiveGiltsTotal, PalletGiltGiltBid, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineSr25519AppSr25519Public, PalletLotteryLotteryConfig, PalletMultisigMultisig, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletRecoveryActiveRecovery, PalletRecoveryRecoveryConfig, PalletSchedulerReleases, PalletSchedulerScheduledV2, PalletSocietyBid, PalletSocietyBidKind, PalletSocietyVote, PalletSocietyVouchingStatus, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingNominations, PalletStakingReleases, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingValidatorPrefs, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTransactionStorageTransactionInfo, PalletTreasuryProposal, PalletUniquesClassDetails, PalletUniquesClassMetadata, PalletUniquesInstanceDetails, PalletUniquesInstanceMetadata, PalletVestingReleases, PalletVestingVestingInfo, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpStakingOffenceOffenceDetails } from '@polkadot/types/lookup';
import type { AnyNumber, ITuple, Observable } from '@polkadot/types/types'; import type { AnyNumber, ITuple, Observable } from '@polkadot/types/types';
declare module '@polkadot/api/types/storage' { declare module '@polkadot/api/types/storage' {
@@ -169,7 +169,7 @@ declare module '@polkadot/api/types/storage' {
}; };
bagsList: { bagsList: {
/** /**
* How many ids are registered. * Counter for the related counted storage map
**/ **/
counterForListNodes: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>; counterForListNodes: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
/** /**
@@ -1163,7 +1163,7 @@ declare module '@polkadot/api/types/storage' {
/** /**
* Digest of the current block, also part of the block header. * Digest of the current block, also part of the block header.
**/ **/
digest: AugmentedQuery<ApiType, () => Observable<SpRuntimeGenericDigest>, []> & QueryableStorageEntry<ApiType, []>; digest: AugmentedQuery<ApiType, () => Observable<SpRuntimeDigest>, []> & QueryableStorageEntry<ApiType, []>;
/** /**
* The number of events in the `Events<T>` list. * The number of events in the `Events<T>` list.
**/ **/
+35 -38
View File
@@ -5,7 +5,7 @@ import type { ApiTypes, SubmittableExtrinsic } from '@polkadot/api/types';
import type { Bytes, Compact, Data, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types'; import type { Bytes, Compact, Data, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types';
import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics';
import type { AccountId32, Call, H256, MultiAddress, Perbill, Percent, Perquintill } from '@polkadot/types/interfaces/runtime'; import type { AccountId32, Call, H256, MultiAddress, Perbill, Percent, Perquintill } from '@polkadot/types/interfaces/runtime';
import type { NodeRuntimeOriginCaller, NodeRuntimeProxyType, NodeRuntimeSessionKeys, PalletAssetsDestroyWitness, PalletDemocracyConviction, PalletDemocracyVoteAccountVote, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenRenouncing, PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, PalletMultisigTimepoint, PalletSocietyJudgement, PalletStakingRewardDestination, PalletStakingValidatorPrefs, PalletUniquesDestroyWitness, PalletVestingVestingInfo, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusSlotsEquivocationProof, SpCoreChangesTrieChangesTrieConfiguration, SpFinalityGrandpaEquivocationProof, SpNposElectionsSupport, SpRuntimeGenericHeader, SpSessionMembershipProof, SpTransactionStorageProofTransactionStorageProof } from '@polkadot/types/lookup'; import type { NodeRuntimeOriginCaller, NodeRuntimeProxyType, NodeRuntimeSessionKeys, PalletAssetsDestroyWitness, PalletDemocracyConviction, PalletDemocracyVoteAccountVote, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenRenouncing, PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, PalletMultisigTimepoint, PalletSocietyJudgement, PalletStakingRewardDestination, PalletStakingValidatorPrefs, PalletUniquesDestroyWitness, PalletVestingVestingInfo, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusSlotsEquivocationProof, SpFinalityGrandpaEquivocationProof, SpNposElectionsSupport, SpRuntimeHeader, SpSessionMembershipProof, SpTransactionStorageProofTransactionStorageProof } from '@polkadot/types/lookup';
import type { AnyNumber, ITuple } from '@polkadot/types/types'; import type { AnyNumber, ITuple } from '@polkadot/types/types';
declare module '@polkadot/api/types/submittable' { declare module '@polkadot/api/types/submittable' {
@@ -33,7 +33,7 @@ declare module '@polkadot/api/types/submittable' {
* *
* Weight: `O(1)` * Weight: `O(1)`
**/ **/
approveTransfer: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u64>]>; approveTransfer: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u128>]>;
/** /**
* Reduce the balance of `who` by as much as possible up to `amount` assets of `id`. * Reduce the balance of `who` by as much as possible up to `amount` assets of `id`.
* *
@@ -51,7 +51,7 @@ declare module '@polkadot/api/types/submittable' {
* Weight: `O(1)` * Weight: `O(1)`
* Modes: Post-existence of `who`; Pre & post Zombie-status of `who`. * Modes: Post-existence of `who`; Pre & post Zombie-status of `who`.
**/ **/
burn: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u64>]>; burn: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u128>]>;
/** /**
* Cancel all of some asset approved for delegated transfer by a third-party account. * Cancel all of some asset approved for delegated transfer by a third-party account.
* *
@@ -103,7 +103,7 @@ declare module '@polkadot/api/types/submittable' {
* *
* Weight: `O(1)` * Weight: `O(1)`
**/ **/
create: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, minBalance: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, u64]>; create: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, minBalance: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, u128]>;
/** /**
* Destroy a class of fungible assets. * Destroy a class of fungible assets.
* *
@@ -149,7 +149,7 @@ declare module '@polkadot/api/types/submittable' {
* *
* Weight: `O(1)` * Weight: `O(1)`
**/ **/
forceAssetStatus: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, issuer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, freezer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, minBalance: Compact<u64> | AnyNumber | Uint8Array, isSufficient: bool | boolean | Uint8Array, isFrozen: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, MultiAddress, MultiAddress, MultiAddress, Compact<u64>, bool, bool]>; forceAssetStatus: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, issuer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, freezer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, minBalance: Compact<u128> | AnyNumber | Uint8Array, isSufficient: bool | boolean | Uint8Array, isFrozen: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, MultiAddress, MultiAddress, MultiAddress, Compact<u128>, bool, bool]>;
/** /**
* Cancel all of some asset approved for delegated transfer by a third-party account. * Cancel all of some asset approved for delegated transfer by a third-party account.
* *
@@ -201,7 +201,7 @@ declare module '@polkadot/api/types/submittable' {
* *
* Weight: `O(1)` * Weight: `O(1)`
**/ **/
forceCreate: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, isSufficient: bool | boolean | Uint8Array, minBalance: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, bool, Compact<u64>]>; forceCreate: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, isSufficient: bool | boolean | Uint8Array, minBalance: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, bool, Compact<u128>]>;
/** /**
* Force the metadata for an asset to some value. * Force the metadata for an asset to some value.
* *
@@ -240,7 +240,7 @@ declare module '@polkadot/api/types/submittable' {
* Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of * Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of
* `dest`. * `dest`.
**/ **/
forceTransfer: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, MultiAddress, Compact<u64>]>; forceTransfer: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, MultiAddress, Compact<u128>]>;
/** /**
* Disallow further unprivileged transfers from an account. * Disallow further unprivileged transfers from an account.
* *
@@ -280,7 +280,7 @@ declare module '@polkadot/api/types/submittable' {
* Weight: `O(1)` * Weight: `O(1)`
* Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`. * Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`.
**/ **/
mint: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u64>]>; mint: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u128>]>;
/** /**
* Set the metadata for an asset. * Set the metadata for an asset.
* *
@@ -360,7 +360,7 @@ declare module '@polkadot/api/types/submittable' {
* Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of * Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of
* `target`. * `target`.
**/ **/
transfer: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u64>]>; transfer: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u128>]>;
/** /**
* Transfer some asset balance from a previously delegated account to some third-party * Transfer some asset balance from a previously delegated account to some third-party
* account. * account.
@@ -381,7 +381,7 @@ declare module '@polkadot/api/types/submittable' {
* *
* Weight: `O(1)` * Weight: `O(1)`
**/ **/
transferApproved: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, destination: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, MultiAddress, Compact<u64>]>; transferApproved: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, destination: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, MultiAddress, Compact<u128>]>;
/** /**
* Move some assets from the sender account to another, keeping the sender account alive. * Move some assets from the sender account to another, keeping the sender account alive.
* *
@@ -402,7 +402,7 @@ declare module '@polkadot/api/types/submittable' {
* Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of * Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of
* `target`. * `target`.
**/ **/
transferKeepAlive: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u64>]>; transferKeepAlive: AugmentedSubmittable<(id: Compact<u32> | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>, MultiAddress, Compact<u128>]>;
/** /**
* Change the Owner of an asset. * Change the Owner of an asset.
* *
@@ -425,7 +425,7 @@ declare module '@polkadot/api/types/submittable' {
/** /**
* Provide a set of uncles. * Provide a set of uncles.
**/ **/
setUncles: AugmentedSubmittable<(newUncles: Vec<SpRuntimeGenericHeader> | (SpRuntimeGenericHeader | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [Vec<SpRuntimeGenericHeader>]>; setUncles: AugmentedSubmittable<(newUncles: Vec<SpRuntimeHeader> | (SpRuntimeHeader | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [Vec<SpRuntimeHeader>]>;
/** /**
* Generic tx * Generic tx
**/ **/
@@ -871,6 +871,13 @@ declare module '@polkadot/api/types/submittable' {
* NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but * NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but
* the weight estimations rely on it to estimate dispatchable weight. * the weight estimations rely on it to estimate dispatchable weight.
* *
* # WARNING:
*
* The `pallet-collective` can also be managed by logic outside of the pallet through the
* implementation of the trait [`ChangeMembers`].
* Any call to `set_members` must be careful that the member set doesn't get out of sync
* with other logic managing the member set.
*
* # <weight> * # <weight>
* ## Weight * ## Weight
* - `O(MP + N)` where: * - `O(MP + N)` where:
@@ -3156,22 +3163,18 @@ declare module '@polkadot/api/types/submittable' {
**/ **/
payoutStakers: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32]>; payoutStakers: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32]>;
/** /**
* Remove all data structure concerning a staker/stash once its balance is at the minimum. * Remove all data structures concerning a staker/stash once it is at a state where it can
* This is essentially equivalent to `withdraw_unbonded` except it can be called by anyone * be considered `dust` in the staking system. The requirements are:
* and the target `stash` must have no funds left beyond the ED.
* *
* This can be called from any origin. * 1. the `total_balance` of the stash is below existential deposit.
* 2. or, the `ledger.total` of the stash is below existential deposit.
* *
* - `stash`: The stash account to reap. Its balance must be zero. * The former can happen in cases like a slash; the latter when a fully unbonded account
* is still receiving staking rewards in `RewardDestination::Staked`.
* *
* # <weight> * It can be called by anyone, as long as `stash` meets the above requirements.
* Complexity: O(S) where S is the number of slashing spans on the account. *
* DB Weight: * Refunds the transaction fees upon successful execution.
* - Reads: Stash Account, Bonded, Slashing Spans, Locks
* - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators,
* Stash Account, Locks
* - Writes Each: SpanSlash * S
* # </weight>
**/ **/
reapStash: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32]>; reapStash: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32]>;
/** /**
@@ -3456,19 +3459,6 @@ declare module '@polkadot/api/types/submittable' {
* # </weight> * # </weight>
**/ **/
remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>; remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
/**
* Set the new changes trie configuration.
*
* # <weight>
* - `O(1)`
* - 1 storage write or delete (codec `O(1)`).
* - 1 call to `deposit_log`: Uses `append` API, so O(1)
* - Base Weight: 7.218 µs
* - DB Weight:
* - Writes: Changes Trie, System Digest
* # </weight>
**/
setChangesTrieConfig: AugmentedSubmittable<(changesTrieConfig: Option<SpCoreChangesTrieChangesTrieConfiguration> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<SpCoreChangesTrieChangesTrieConfiguration>]>;
/** /**
* Set the new runtime code. * Set the new runtime code.
* *
@@ -3634,6 +3624,13 @@ declare module '@polkadot/api/types/submittable' {
* NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but * NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but
* the weight estimations rely on it to estimate dispatchable weight. * the weight estimations rely on it to estimate dispatchable weight.
* *
* # WARNING:
*
* The `pallet-collective` can also be managed by logic outside of the pallet through the
* implementation of the trait [`ChangeMembers`].
* Any call to `set_members` must be careful that the member set doesn't get out of sync
* with other logic managing the member set.
*
* # <weight> * # <weight>
* ## Weight * ## Weight
* - `O(MP + N)` where: * - `O(MP + N)` where:
+6 -4
View File
@@ -146,8 +146,8 @@ export abstract class Decorate<ApiType extends ApiTypes> extends Events {
this.#instanceId = `${++instanceCounter}`; this.#instanceId = `${++instanceCounter}`;
this.#registry = options.source?.registry || options.registry || new TypeRegistry(); this.#registry = options.source?.registry || options.registry || new TypeRegistry();
this._rx.queryAt = (blockHash: Uint8Array | string) => this._rx.queryAt = (blockHash: Uint8Array | string, knownVersion?: RuntimeVersion) =>
from(this.at(blockHash)).pipe(map((a) => a.rx.query)); from(this.at(blockHash, knownVersion)).pipe(map((a) => a.rx.query));
this._rx.registry = this.#registry; this._rx.registry = this.#registry;
const thisProvider = options.source const thisProvider = options.source
@@ -354,8 +354,10 @@ export abstract class Decorate<ApiType extends ApiTypes> extends Events {
const [k, { method, section }] = allKnown[i]; const [k, { method, section }] = allKnown[i];
if (hasResults && !exposed.includes(k) && k !== 'rpc_methods') { if (hasResults && !exposed.includes(k) && k !== 'rpc_methods') {
delete (this._rpc as Record<string, Record<string, unknown>>)[section][method]; if ((this._rpc as Record<string, Record<string, unknown>>)[section]) {
delete (this._rx.rpc as Record<string, Record<string, unknown>>)[section][method]; delete (this._rpc as Record<string, Record<string, unknown>>)[section][method];
delete (this._rx.rpc as Record<string, Record<string, unknown>>)[section][method];
}
} }
} }
} }
+2 -2
View File
@@ -5,6 +5,6 @@ export { Keyring } from '@polkadot/keyring';
export { WsProvider, HttpProvider } from '@polkadot/rpc-provider'; export { WsProvider, HttpProvider } from '@polkadot/rpc-provider';
export { packageInfo } from './packageInfo'; export { packageInfo } from './packageInfo';
export { ApiPromise, decorateMethod as decorateMethodPromise } from './promise'; export * from './promise';
export { SubmittableResult } from './submittable'; export { SubmittableResult } from './submittable';
export { ApiRx, decorateMethod as decorateMethodRx } from './rx'; export * from './rx';
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/api', version: '6.10.1' };
+215
View File
@@ -0,0 +1,215 @@
// Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ApiOptions, UnsubscribePromise } from '../types';
import { objectSpread } from '@polkadot/util';
import { ApiBase } from '../base';
import { Combinator, CombinatorCallback, CombinatorFunction } from './Combinator';
import { promiseTracker, toPromiseMethod } from './decorateMethod';
/**
* # @polkadot/api/promise
*
* ## Overview
*
* @name ApiPromise
* @description
* ApiPromise is a standard JavaScript wrapper around the RPC and interfaces on the Polkadot network. As a full Promise-based, all interface calls return Promises, including the static `.create(...)`. Subscription calls utilise `(value) => {}` callbacks to pass through the latest values.
*
* The API is well suited to real-time applications where either the single-shot state is needed or use is to be made of the subscription-based features of Polkadot (and Substrate) clients.
*
* @see [[ApiRx]]
*
* ## Usage
*
* Making rpc calls -
* <BR>
*
* ```javascript
* import ApiPromise from '@polkadot/api/promise';
*
* // initialise via static create
* const api = await ApiPromise.create();
*
* // make a subscription to the network head
* api.rpc.chain.subscribeNewHeads((header) => {
* console.log(`Chain is at #${header.number}`);
* });
* ```
* <BR>
*
* Subscribing to chain state -
* <BR>
*
* ```javascript
* import { ApiPromise, WsProvider } from '@polkadot/api';
*
* // initialise a provider with a specific endpoint
* const provider = new WsProvider('wss://example.com:9944')
*
* // initialise via isReady & new with specific provider
* const api = await new ApiPromise({ provider }).isReady;
*
* // retrieve the block target time
* const blockPeriod = await api.query.timestamp.blockPeriod().toNumber();
* let last = 0;
*
* // subscribe to the current block timestamp, updates automatically (callback provided)
* api.query.timestamp.now((timestamp) => {
* const elapsed = last
* ? `, ${timestamp.toNumber() - last}s since last`
* : '';
*
* last = timestamp.toNumber();
* console.log(`timestamp ${timestamp}${elapsed} (${blockPeriod}s target)`);
* });
* ```
* <BR>
*
* Submitting a transaction -
* <BR>
*
* ```javascript
* import ApiPromise from '@polkadot/api/promise';
*
* ApiPromise.create().then((api) => {
* const [nonce] = await api.query.system.account(keyring.alice.address);
*
* api.tx.balances
* // create transfer
* transfer(keyring.bob.address, 12345)
* // sign the transcation
* .sign(keyring.alice, { nonce })
* // send the transaction (optional status callback)
* .send((status) => {
* console.log(`current status ${status.type}`);
* })
* // retrieve the submitted extrinsic hash
* .then((hash) => {
* console.log(`submitted with hash ${hash}`);
* });
* });
* ```
*/
export class ApiPromise extends ApiBase<'promise'> {
#isReadyPromise: Promise<ApiPromise>;
#isReadyOrErrorPromise: Promise<ApiPromise>;
/**
* @description Creates an instance of the ApiPromise class
* @param options Options to create an instance. This can be either [[ApiOptions]] or
* an [[WsProvider]].
* @example
* <BR>
*
* ```javascript
* import Api from '@polkadot/api/promise';
*
* new Api().isReady.then((api) => {
* api.rpc.subscribeNewHeads((header) => {
* console.log(`new block #${header.number.toNumber()}`);
* });
* });
* ```
*/
constructor (options?: ApiOptions) {
super(options, 'promise', toPromiseMethod);
this.#isReadyPromise = new Promise((resolve): void => {
super.once('ready', () => resolve(this));
});
this.#isReadyOrErrorPromise = new Promise((resolve, reject): void => {
const tracker = promiseTracker(resolve, reject);
super.once('ready', () => tracker.resolve(this));
super.once('error', (error: Error) => tracker.reject(error));
});
}
/**
* @description Creates an ApiPromise instance using the supplied provider. Returns an Promise containing the actual Api instance.
* @param options options that is passed to the class contructor. Can be either [[ApiOptions]] or a
* provider (see the constructor arguments)
* @example
* <BR>
*
* ```javascript
* import Api from '@polkadot/api/promise';
*
* Api.create().then(async (api) => {
* const timestamp = await api.query.timestamp.now();
*
* console.log(`lastest block timestamp ${timestamp}`);
* });
* ```
*/
public static create (options?: ApiOptions): Promise<ApiPromise> {
const instance = new ApiPromise(options);
if (options && options.throwOnConnect) {
return instance.isReadyOrError;
}
// Swallow any rejections on isReadyOrError
// (in Node 15.x this creates issues, when not being looked at)
instance.isReadyOrError.catch(() => {
// ignore
});
return instance.isReady;
}
/**
* @description Promise that resolves the first time we are connected and loaded
*/
public get isReady (): Promise<ApiPromise> {
return this.#isReadyPromise;
}
/**
* @description Promise that resolves if we can connect, or reject if there is an error
*/
public get isReadyOrError (): Promise<ApiPromise> {
return this.#isReadyOrErrorPromise;
}
/**
* @description Returns a clone of this ApiPromise instance (new underlying provider connection)
*/
public clone (): ApiPromise {
return new ApiPromise(
objectSpread({}, this._options, { source: this })
);
}
/**
* @description Creates a combinator that can be used to combine the latest results from multiple subscriptions
* @param fns An array of function to combine, each in the form of `(cb: (value: void)) => void`
* @param callback A callback that will return an Array of all the values this combinator has been applied to
* @example
* <BR>
*
* ```javascript
* const address = '5DTestUPts3kjeXSTMyerHihn1uwMfLj8vU8sqF7qYrFacT7';
*
* // combines values from balance & nonce as it updates
* api.combineLatest([
* api.rpc.chain.subscribeNewHeads,
* (cb) => api.query.system.account(address, cb)
* ], ([head, [balance, nonce]]) => {
* console.log(`#${head.number}: You have ${balance.free} units, with ${nonce} transactions sent`);
* });
* ```
*/
// eslint-disable-next-line @typescript-eslint/require-await
public async combineLatest <T extends any[] = any[]> (fns: (CombinatorFunction | [CombinatorFunction, ...any[]])[], callback: CombinatorCallback<T>): UnsubscribePromise {
const combinator = new Combinator(fns, callback);
return (): void => {
combinator.unsubscribe();
};
}
}
+108
View File
@@ -0,0 +1,108 @@
// Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Observable } from 'rxjs';
import type { Callback, Codec } from '@polkadot/types/types';
import type { DecorateFn, DecorateMethodOptions, ObsInnerType, StorageEntryPromiseOverloads, UnsubscribePromise, VoidFn } from '../types';
import { catchError, EMPTY, Subscription, tap } from 'rxjs';
import { assert, isFunction } from '@polkadot/util';
interface Tracker<T> {
reject: (value: Error) => Observable<never>;
resolve: (value: T) => void;
}
// a Promise completion tracker, wrapping an isComplete variable that ensures the promise only resolves once
export function promiseTracker<T> (resolve: (value: T) => void, reject: (value: Error) => void): Tracker<T> {
let isCompleted = false;
return {
reject: (error: Error): Observable<never> => {
if (!isCompleted) {
isCompleted = true;
reject(error);
}
return EMPTY;
},
resolve: (value: T): void => {
if (!isCompleted) {
isCompleted = true;
resolve(value);
}
}
};
}
// extract the arguments and callback params from a value array possibly containing a callback
function extractArgs (args: unknown[], needsCallback: boolean): [unknown[], Callback<Codec> | undefined] {
let callback: Callback<Codec> | undefined;
const actualArgs = args.slice();
// If the last arg is a function, we pop it, put it into callback.
// actualArgs will then hold the actual arguments to be passed to `method`
if (args.length && isFunction(args[args.length - 1])) {
callback = actualArgs.pop() as Callback<Codec>;
}
// When we need a subscription, ensure that a valid callback is actually passed
assert(!needsCallback || isFunction(callback), 'Expected a callback to be passed with subscriptions');
return [actualArgs, callback];
}
// Decorate a call for a single-shot result - retrieve and then immediate unsubscribe
function decorateCall<M extends DecorateFn<ObsInnerType<ReturnType<M>>>> (method: M, args: unknown[]): Promise<ObsInnerType<ReturnType<M>>> {
return new Promise((resolve, reject): void => {
// single result tracker - either reject with Error or resolve with Codec result
const tracker = promiseTracker(resolve, reject);
// encoding errors reject immediately, any result unsubscribes and resolves
const subscription: Subscription = method(...args)
.pipe(
catchError((error: Error) => tracker.reject(error))
)
.subscribe((result): void => {
tracker.resolve(result);
setTimeout(() => subscription.unsubscribe(), 0);
});
});
}
// Decorate a subscription where we have a result callback specified
function decorateSubscribe<M extends DecorateFn<ObsInnerType<ReturnType<M>>>> (method: M, args: unknown[], resultCb: Callback<Codec>): UnsubscribePromise {
return new Promise<VoidFn>((resolve, reject): void => {
// either reject with error or resolve with unsubscribe callback
const tracker = promiseTracker(resolve, reject);
// errors reject immediately, the first result resolves with an unsubscribe promise, all results via callback
const subscription: Subscription = method(...args)
.pipe(
catchError((error: Error) => tracker.reject(error)),
tap(() => tracker.resolve(() => subscription.unsubscribe()))
)
.subscribe((result): void => {
// queue result (back of queue to clear current)
setTimeout(() => resultCb(result) as void, 0);
});
});
}
/**
* @description Decorate method for ApiPromise, where the results are converted to the Promise equivalent
*/
export function toPromiseMethod<M extends DecorateFn<ObsInnerType<ReturnType<M>>>> (method: M, options?: DecorateMethodOptions): StorageEntryPromiseOverloads {
const needsCallback = !!(options && options.methodName && options.methodName.includes('subscribe'));
return function (...args: unknown[]): Promise<ObsInnerType<ReturnType<M>>> | UnsubscribePromise {
const [actualArgs, resultCb] = extractArgs(args, needsCallback);
return resultCb
? decorateSubscribe(method, actualArgs, resultCb)
: decorateCall((options?.overrideNoSub as M) || method, actualArgs);
} as StorageEntryPromiseOverloads;
}
+1 -1
View File
@@ -14,7 +14,7 @@ import { hexToU8a } from '@polkadot/util';
import { SingleAccountSigner } from '../../test/util'; import { SingleAccountSigner } from '../../test/util';
import { ApiPromise } from '.'; import { ApiPromise } from '.';
const TRANSFER_SIG = '0x54f39e43f32376a5ab6cdfd4d0ce57802aa9ff85514a7ffa9f2a949078f02beca16af87427c45fe60d54aa847fd241d127ed39e21b101806f6b1f50f7a82500b'; const TRANSFER_SIG = '0xcc277eb341d3801c08f149508221583fa3185cc3944e6cb376cd061640305edd7dc24dfd754adb24768f1d8547389b7720e6f626bc81f5593fba1141e7f7ba07';
describe('ApiPromise', (): void => { describe('ApiPromise', (): void => {
const registry = new TypeRegistry(); const registry = new TypeRegistry();
+2 -309
View File
@@ -1,312 +1,5 @@
// Copyright 2017-2021 @polkadot/api authors & contributors // Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { Observable } from 'rxjs'; export { ApiPromise } from './Api';
import type { Callback, Codec } from '@polkadot/types/types'; export { toPromiseMethod } from './decorateMethod';
import type { ApiOptions, DecorateFn, DecorateMethodOptions, ObsInnerType, StorageEntryPromiseOverloads, UnsubscribePromise, VoidFn } from '../types';
import { catchError, EMPTY, Subscription, tap } from 'rxjs';
import { assert, isFunction, objectSpread } from '@polkadot/util';
import { ApiBase } from '../base';
import { Combinator, CombinatorCallback, CombinatorFunction } from './Combinator';
interface Tracker<T> {
reject: (value: Error) => Observable<never>;
resolve: (value: T) => void;
}
// extract the arguments and callback params from a value array possibly containing a callback
function extractArgs (args: unknown[], needsCallback: boolean): [unknown[], Callback<Codec> | undefined] {
let callback: Callback<Codec> | undefined;
const actualArgs = args.slice();
// If the last arg is a function, we pop it, put it into callback.
// actualArgs will then hold the actual arguments to be passed to `method`
if (args.length && isFunction(args[args.length - 1])) {
callback = actualArgs.pop() as Callback<Codec>;
}
// When we need a subscription, ensure that a valid callback is actually passed
assert(!needsCallback || isFunction(callback), 'Expected a callback to be passed with subscriptions');
return [actualArgs, callback];
}
// a Promise completion tracker, wrapping an isComplete variable that ensures the promise only resolves once
function promiseTracker<T> (resolve: (value: T) => void, reject: (value: Error) => void): Tracker<T> {
let isCompleted = false;
return {
reject: (error: Error): Observable<never> => {
if (!isCompleted) {
isCompleted = true;
reject(error);
}
return EMPTY;
},
resolve: (value: T): void => {
if (!isCompleted) {
isCompleted = true;
resolve(value);
}
}
};
}
// Decorate a call for a single-shot result - retrieve and then immediate unsubscribe
function decorateCall<Method extends DecorateFn<ObsInnerType<ReturnType<Method>>>> (method: Method, actualArgs: unknown[]): Promise<ObsInnerType<ReturnType<Method>>> {
return new Promise((resolve, reject): void => {
// single result tracker - either reject with Error or resolve with Codec result
const tracker = promiseTracker(resolve, reject);
// encoding errors reject immediately, any result unsubscribes and resolves
const subscription: Subscription = method(...actualArgs).pipe(
catchError((error: Error) => tracker.reject(error))
).subscribe((result): void => {
tracker.resolve(result);
setTimeout(() => subscription.unsubscribe(), 0);
});
});
}
// Decorate a subscription where we have a result callback specified
function decorateSubscribe<Method extends DecorateFn<ObsInnerType<ReturnType<Method>>>> (method: Method, actualArgs: unknown[], resultCb: Callback<Codec>): UnsubscribePromise {
return new Promise<VoidFn>((resolve, reject): void => {
// either reject with error or resolve with unsubscribe callback
const tracker = promiseTracker(resolve, reject);
// errors reject immediately, the first result resolves with an unsubscribe promise, all results via callback
const subscription: Subscription = method(...actualArgs).pipe(
catchError((error: Error) => tracker.reject(error)),
tap(() => tracker.resolve(() => subscription.unsubscribe()))
).subscribe((result): void => {
// queue result (back of queue to clear current)
setTimeout(() => resultCb(result) as void, 0);
});
});
}
/**
* @description Decorate method for ApiPromise, where the results are converted to the Promise equivalent
*/
export function decorateMethod<Method extends DecorateFn<ObsInnerType<ReturnType<Method>>>> (method: Method, options?: DecorateMethodOptions): StorageEntryPromiseOverloads {
const needsCallback = options && options.methodName && options.methodName.includes('subscribe');
return function (...args: unknown[]): Promise<ObsInnerType<ReturnType<Method>>> | UnsubscribePromise {
const [actualArgs, resultCb] = extractArgs(args, !!needsCallback);
return resultCb
? decorateSubscribe(method, actualArgs, resultCb)
: decorateCall((options?.overrideNoSub as Method) || method, actualArgs);
} as StorageEntryPromiseOverloads;
}
/**
* # @polkadot/api/promise
*
* ## Overview
*
* @name ApiPromise
* @description
* ApiPromise is a standard JavaScript wrapper around the RPC and interfaces on the Polkadot network. As a full Promise-based, all interface calls return Promises, including the static `.create(...)`. Subscription calls utilise `(value) => {}` callbacks to pass through the latest values.
*
* The API is well suited to real-time applications where either the single-shot state is needed or use is to be made of the subscription-based features of Polkadot (and Substrate) clients.
*
* @see [[ApiRx]]
*
* ## Usage
*
* Making rpc calls -
* <BR>
*
* ```javascript
* import ApiPromise from '@polkadot/api/promise';
*
* // initialise via static create
* const api = await ApiPromise.create();
*
* // make a subscription to the network head
* api.rpc.chain.subscribeNewHeads((header) => {
* console.log(`Chain is at #${header.number}`);
* });
* ```
* <BR>
*
* Subscribing to chain state -
* <BR>
*
* ```javascript
* import { ApiPromise, WsProvider } from '@polkadot/api';
*
* // initialise a provider with a specific endpoint
* const provider = new WsProvider('wss://example.com:9944')
*
* // initialise via isReady & new with specific provider
* const api = await new ApiPromise({ provider }).isReady;
*
* // retrieve the block target time
* const blockPeriod = await api.query.timestamp.blockPeriod().toNumber();
* let last = 0;
*
* // subscribe to the current block timestamp, updates automatically (callback provided)
* api.query.timestamp.now((timestamp) => {
* const elapsed = last
* ? `, ${timestamp.toNumber() - last}s since last`
* : '';
*
* last = timestamp.toNumber();
* console.log(`timestamp ${timestamp}${elapsed} (${blockPeriod}s target)`);
* });
* ```
* <BR>
*
* Submitting a transaction -
* <BR>
*
* ```javascript
* import ApiPromise from '@polkadot/api/promise';
*
* ApiPromise.create().then((api) => {
* const [nonce] = await api.query.system.account(keyring.alice.address);
*
* api.tx.balances
* // create transfer
* transfer(keyring.bob.address, 12345)
* // sign the transcation
* .sign(keyring.alice, { nonce })
* // send the transaction (optional status callback)
* .send((status) => {
* console.log(`current status ${status.type}`);
* })
* // retrieve the submitted extrinsic hash
* .then((hash) => {
* console.log(`submitted with hash ${hash}`);
* });
* });
* ```
*/
export class ApiPromise extends ApiBase<'promise'> {
#isReadyPromise: Promise<ApiPromise>;
#isReadyOrErrorPromise: Promise<ApiPromise>;
/**
* @description Creates an ApiPromise instance using the supplied provider. Returns an Promise containing the actual Api instance.
* @param options options that is passed to the class contructor. Can be either [[ApiOptions]] or a
* provider (see the constructor arguments)
* @example
* <BR>
*
* ```javascript
* import Api from '@polkadot/api/promise';
*
* Api.create().then(async (api) => {
* const timestamp = await api.query.timestamp.now();
*
* console.log(`lastest block timestamp ${timestamp}`);
* });
* ```
*/
public static create (options?: ApiOptions): Promise<ApiPromise> {
const instance = new ApiPromise(options);
if (options && options.throwOnConnect) {
return instance.isReadyOrError;
}
// Swallow any rejections on isReadyOrError
// (in Node 15.x this creates issues, when not being looked at)
instance.isReadyOrError.catch(() => {
// ignore
});
return instance.isReady;
}
/**
* @description Creates an instance of the ApiPromise class
* @param options Options to create an instance. This can be either [[ApiOptions]] or
* an [[WsProvider]].
* @example
* <BR>
*
* ```javascript
* import Api from '@polkadot/api/promise';
*
* new Api().isReady.then((api) => {
* api.rpc.subscribeNewHeads((header) => {
* console.log(`new block #${header.number.toNumber()}`);
* });
* });
* ```
*/
constructor (options?: ApiOptions) {
super(options, 'promise', decorateMethod);
this.#isReadyPromise = new Promise((resolve): void => {
super.once('ready', () => resolve(this));
});
this.#isReadyOrErrorPromise = new Promise((resolve, reject): void => {
const tracker = promiseTracker(resolve, reject);
super.once('ready', () => tracker.resolve(this));
super.once('error', (error: Error) => tracker.reject(error));
});
}
/**
* @description Promise that resolves the first time we are connected and loaded
*/
public get isReady (): Promise<ApiPromise> {
return this.#isReadyPromise;
}
/**
* @description Promise that resolves if we can connect, or reject if there is an error
*/
public get isReadyOrError (): Promise<ApiPromise> {
return this.#isReadyOrErrorPromise;
}
/**
* @description Returns a clone of this ApiPromise instance (new underlying provider connection)
*/
public clone (): ApiPromise {
return new ApiPromise(
objectSpread({}, this._options, { source: this })
);
}
/**
* @description Creates a combinator that can be used to combine the latest results from multiple subscriptions
* @param fns An array of function to combine, each in the form of `(cb: (value: void)) => void`
* @param callback A callback that will return an Array of all the values this combinator has been applied to
* @example
* <BR>
*
* ```javascript
* const address = '5DTestUPts3kjeXSTMyerHihn1uwMfLj8vU8sqF7qYrFacT7';
*
* // combines values from balance & nonce as it updates
* api.combineLatest([
* api.rpc.chain.subscribeNewHeads,
* (cb) => api.query.system.account(address, cb)
* ], ([head, [balance, nonce]]) => {
* console.log(`#${head.number}: You have ${balance.free} units, with ${nonce} transactions sent`);
* });
* ```
*/
// eslint-disable-next-line @typescript-eslint/require-await
public async combineLatest <T extends any[] = any[]> (fns: (CombinatorFunction | [CombinatorFunction, ...any[]])[], callback: CombinatorCallback<T>): UnsubscribePromise {
const combinator = new Combinator(fns, callback);
return (): void => {
combinator.unsubscribe();
};
}
}
+185
View File
@@ -0,0 +1,185 @@
// Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ApiOptions } from '../types';
import { from, Observable } from 'rxjs';
import { objectSpread } from '@polkadot/util';
import { ApiBase } from '../base';
import { toRxMethod } from './decorateMethod';
/**
* # @polkadot/api/rx
*
* ## Overview
*
* @name ApiRx
*
* @description
* ApiRx is a powerful RxJS Observable wrapper around the RPC and interfaces on the Polkadot network. As a full Observable API, all interface calls return RxJS Observables, including the static `.create(...)`. In the same fashion and subscription-based methods return long-running Observables that update with the latest values.
*
* The API is well suited to real-time applications where the latest state is needed, unlocking the subscription-based features of Polkadot (and Substrate) clients. Some familiarity with RxJS is a requirement to use the API, however just understanding `.subscribe` and `.pipe` on Observables will unlock full-scale use thereof.
*
* @see [[ApiPromise]]
*
* ## Usage
*
* Making rpc calls -
* <BR>
*
* ```javascript
* import ApiRx from '@polkadot/api/rx';
*
* // initialize via Promise & static create
* const api = await ApiRx.create().toPromise();
*
* // make a call to retrieve the current network head
* api.rpc.chain.subscribeNewHeads().subscribe((header) => {
* console.log(`Chain is at #${header.number}`);
* });
* ```
* <BR>
*
* Subscribing to chain state -
* <BR>
*
* ```javascript
* import { combineLatest, pairwise, switchMap } from 'rxjs';
* import { ApiRx, WsProvider } from '@polkadot/api';
*
*
* // initialize a provider with a specific endpoint
* const provider = new WsProvider('wss://example.com:9944')
*
* // initialize via isReady & new with specific provider
* new ApiRx({ provider })
* .isReady
* .pipe(
* switchMap((api) =>
* combineLatest([
* api.query.timestamp.blockPeriod(),
* api.query.timestamp.now().pipe(pairwise())
* ])
* )
* )
* .subscribe(([blockPeriod, timestamp]) => {
* const elapsed = timestamp[1].toNumber() - timestamp[0].toNumber();
* console.log(`timestamp ${timestamp[1]} \nelapsed ${elapsed} \n(${blockPeriod}s target)`);
* });
* ```
* <BR>
*
* Submitting a transaction -
* <BR>
*
* ```javascript
* import { first, switchMap } from 'rxjs';
* import ApiRx from '@polkadot/api/rx';
*
* // import the test keyring (already has dev keys for Alice, Bob, Charlie, Eve & Ferdie)
* import testingPairs from '@polkadot/keyring/testingPairs';
* const keyring = testingPairs();
*
* // get api via Promise
* const api = await ApiRx.create().toPromise();
*
* // retrieve nonce for the account
* api.query.system
* .account(keyring.alice.address)
* .pipe(
* first(),
* // pipe nonce into transfer
* switchMap(([nonce]) =>
* api.tx.balances
* // create transfer
* .transfer(keyring.bob.address, 12345)
* // sign the transaction
* .sign(keyring.alice, { nonce })
* // send the transaction
* .send()
* )
* )
* // subscribe to overall result
* .subscribe(({ status }) => {
* if (status.isInBlock) {
* console.log('Completed at block hash', status.asFinalized.toHex());
* }
* });
* ```
*/
export class ApiRx extends ApiBase<'rxjs'> {
#isReadyRx: Observable<ApiRx>;
/**
* @description Create an instance of the ApiRx class
* @param options Options to create an instance. Can be either [[ApiOptions]] or [[WsProvider]]
* @example
* <BR>
*
* ```javascript
* import { switchMap } from 'rxjs';
* import Api from '@polkadot/api/rx';
*
* new Api().isReady
* .pipe(
* switchMap((api) =>
* api.rpc.chain.subscribeNewHeads()
* ))
* .subscribe((header) => {
* console.log(`new block #${header.number.toNumber()}`);
* });
* ```
*/
constructor (options?: ApiOptions) {
super(options, 'rxjs', toRxMethod);
this.#isReadyRx = from<Promise<ApiRx>>(
// You can create an observable from an event, however my mind groks this form better
new Promise((resolve): void => {
super.on('ready', () => resolve(this));
})
);
}
/**
* @description Creates an ApiRx instance using the supplied provider. Returns an Observable containing the actual Api instance.
* @param options options that is passed to the class constructor. Can be either [[ApiOptions]] or [[WsProvider]]
* @example
* <BR>
*
* ```javascript
* import { switchMap } from 'rxjs';
* import Api from '@polkadot/api/rx';
*
* Api.create()
* .pipe(
* switchMap((api) =>
* api.rpc.chain.subscribeNewHeads()
* ))
* .subscribe((header) => {
* console.log(`new block #${header.number.toNumber()}`);
* });
* ```
*/
public static create (options?: ApiOptions): Observable<ApiRx> {
return new ApiRx(options).isReady;
}
/**
* @description Observable that returns the first time we are connected and loaded
*/
public get isReady (): Observable<ApiRx> {
return this.#isReadyRx;
}
/**
* @description Returns a clone of this ApiRx instance (new underlying provider connection)
*/
public clone (): ApiRx {
return new ApiRx(
objectSpread({}, this._options, { source: this })
);
}
}
+9
View File
@@ -0,0 +1,9 @@
// Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Codec } from '@polkadot/types/types';
import type { DecorateFn } from '../types';
export function toRxMethod <M extends DecorateFn<Codec>> (method: M): M {
return method;
}
+2 -186
View File
@@ -1,189 +1,5 @@
// Copyright 2017-2021 @polkadot/api authors & contributors // Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { Codec } from '@polkadot/types/types'; export { ApiRx } from './Api';
import type { ApiOptions, DecorateFn } from '../types'; export { toRxMethod } from './decorateMethod';
import { from, Observable } from 'rxjs';
import { objectSpread } from '@polkadot/util';
import { ApiBase } from '../base';
export function decorateMethod <Method extends DecorateFn<Codec>> (method: Method): Method {
return method;
}
/**
* # @polkadot/api/rx
*
* ## Overview
*
* @name ApiRx
*
* @description
* ApiRx is a powerful RxJS Observable wrapper around the RPC and interfaces on the Polkadot network. As a full Observable API, all interface calls return RxJS Observables, including the static `.create(...)`. In the same fashion and subscription-based methods return long-running Observables that update with the latest values.
*
* The API is well suited to real-time applications where the latest state is needed, unlocking the subscription-based features of Polkadot (and Substrate) clients. Some familiarity with RxJS is a requirement to use the API, however just understanding `.subscribe` and `.pipe` on Observables will unlock full-scale use thereof.
*
* @see [[ApiPromise]]
*
* ## Usage
*
* Making rpc calls -
* <BR>
*
* ```javascript
* import ApiRx from '@polkadot/api/rx';
*
* // initialize via Promise & static create
* const api = await ApiRx.create().toPromise();
*
* // make a call to retrieve the current network head
* api.rpc.chain.subscribeNewHeads().subscribe((header) => {
* console.log(`Chain is at #${header.number}`);
* });
* ```
* <BR>
*
* Subscribing to chain state -
* <BR>
*
* ```javascript
* import { combineLatest, pairwise, switchMap } from 'rxjs';
* import { ApiRx, WsProvider } from '@polkadot/api';
*
*
* // initialize a provider with a specific endpoint
* const provider = new WsProvider('wss://example.com:9944')
*
* // initialize via isReady & new with specific provider
* new ApiRx({ provider })
* .isReady
* .pipe(
* switchMap((api) =>
* combineLatest([
* api.query.timestamp.blockPeriod(),
* api.query.timestamp.now().pipe(pairwise())
* ])
* )
* )
* .subscribe(([blockPeriod, timestamp]) => {
* const elapsed = timestamp[1].toNumber() - timestamp[0].toNumber();
* console.log(`timestamp ${timestamp[1]} \nelapsed ${elapsed} \n(${blockPeriod}s target)`);
* });
* ```
* <BR>
*
* Submitting a transaction -
* <BR>
*
* ```javascript
* import { first, switchMap } from 'rxjs';
* import ApiRx from '@polkadot/api/rx';
*
* // import the test keyring (already has dev keys for Alice, Bob, Charlie, Eve & Ferdie)
* import testingPairs from '@polkadot/keyring/testingPairs';
* const keyring = testingPairs();
*
* // get api via Promise
* const api = await ApiRx.create().toPromise();
*
* // retrieve nonce for the account
* api.query.system
* .account(keyring.alice.address)
* .pipe(
* first(),
* // pipe nonce into transfer
* switchMap(([nonce]) =>
* api.tx.balances
* // create transfer
* .transfer(keyring.bob.address, 12345)
* // sign the transaction
* .sign(keyring.alice, { nonce })
* // send the transaction
* .send()
* )
* )
* // subscribe to overall result
* .subscribe(({ status }) => {
* if (status.isInBlock) {
* console.log('Completed at block hash', status.asFinalized.toHex());
* }
* });
* ```
*/
export class ApiRx extends ApiBase<'rxjs'> {
#isReadyRx: Observable<ApiRx>;
/**
* @description Creates an ApiRx instance using the supplied provider. Returns an Observable containing the actual Api instance.
* @param options options that is passed to the class constructor. Can be either [[ApiOptions]] or [[WsProvider]]
* @example
* <BR>
*
* ```javascript
* import { switchMap } from 'rxjs';
* import Api from '@polkadot/api/rx';
*
* Api.create()
* .pipe(
* switchMap((api) =>
* api.rpc.chain.subscribeNewHeads()
* ))
* .subscribe((header) => {
* console.log(`new block #${header.number.toNumber()}`);
* });
* ```
*/
public static create (options?: ApiOptions): Observable<ApiRx> {
return new ApiRx(options).isReady;
}
/**
* @description Create an instance of the ApiRx class
* @param options Options to create an instance. Can be either [[ApiOptions]] or [[WsProvider]]
* @example
* <BR>
*
* ```javascript
* import { switchMap } from 'rxjs';
* import Api from '@polkadot/api/rx';
*
* new Api().isReady
* .pipe(
* switchMap((api) =>
* api.rpc.chain.subscribeNewHeads()
* ))
* .subscribe((header) => {
* console.log(`new block #${header.number.toNumber()}`);
* });
* ```
*/
constructor (options?: ApiOptions) {
super(options, 'rxjs', decorateMethod);
this.#isReadyRx = from<Promise<ApiRx>>(
// You can create an observable from an event, however my mind groks this form better
new Promise((resolve): void => {
super.on('ready', () => resolve(this));
})
);
}
/**
* @description Observable that returns the first time we are connected and loaded
*/
public get isReady (): Observable<ApiRx> {
return this.#isReadyRx;
}
/**
* @description Returns a clone of this ApiRx instance (new underlying provider connection)
*/
public clone (): ApiRx {
return new ApiRx(
objectSpread({}, this._options, { source: this })
);
}
}
+1 -1
View File
@@ -95,7 +95,7 @@ export interface ApiInterfaceRx {
runtimeMetadata: Metadata; runtimeMetadata: Metadata;
runtimeVersion: RuntimeVersion; runtimeVersion: RuntimeVersion;
query: QueryableStorage<'rxjs'>; query: QueryableStorage<'rxjs'>;
queryAt: (blockHash: Uint8Array | string) => Observable<QueryableStorage<'rxjs'>>; queryAt: (blockHash: Uint8Array | string, knownVersion?: RuntimeVersion) => Observable<QueryableStorage<'rxjs'>>;
queryMulti: QueryableStorageMulti<'rxjs'>; queryMulti: QueryableStorageMulti<'rxjs'>;
rpc: DecoratedRpc<'rxjs', RpcInterface>; rpc: DecoratedRpc<'rxjs', RpcInterface>;
tx: SubmittableExtrinsics<'rxjs'>; tx: SubmittableExtrinsics<'rxjs'>;
+6 -6
View File
@@ -20,16 +20,16 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/rpc-provider": "6.7.1", "@polkadot/rpc-provider": "6.10.1",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/util": "^7.8.2", "@polkadot/util": "^8.0.2",
"rxjs": "^7.4.0" "rxjs": "^7.4.0"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/keyring": "^7.8.2" "@polkadot/keyring": "^8.0.2"
} }
} }
+1 -1
View File
@@ -204,7 +204,7 @@ export class RpcCore {
? await this.#getBlockRegistry(u8aToU8a(blockHash)) ? await this.#getBlockRegistry(u8aToU8a(blockHash))
: { registry: this.#registryDefault }; : { registry: this.#registryDefault };
const params = this._formatInputs(registry, null, def, values); const params = this._formatInputs(registry, null, def, values);
const result = await this.provider.send<AnyJson>(rpcName, params.map((p) => p.toJSON())); const result = await this.provider.send<AnyJson>(rpcName, params.map((p) => p.toJSON()), !!blockHash);
return this._formatResult(isScale, registry, blockHash, method, def, params, result); return this._formatResult(isScale, registry, blockHash, method, def, params, result);
}; };
+1 -1
View File
@@ -62,7 +62,7 @@ describe('methodSend', (): void => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
method(new Uint8Array([2 << 2, 0x12, 0x34])).subscribe((): void => { method(new Uint8Array([2 << 2, 0x12, 0x34])).subscribe((): void => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
expect(provider.send).toHaveBeenCalledWith('test_blah', ['0x1234']); expect(provider.send).toHaveBeenCalledWith('test_blah', ['0x1234'], false);
done(); done();
}); });
}); });
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/rpc-core', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/rpc-core', version: '6.10.1' };
+12 -12
View File
@@ -20,22 +20,22 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/util": "^7.8.2", "@polkadot/util": "^8.0.2",
"@polkadot/util-crypto": "^7.8.2", "@polkadot/util-crypto": "^8.0.2",
"@polkadot/x-fetch": "^7.8.2", "@polkadot/x-fetch": "^8.0.2",
"@polkadot/x-global": "^7.8.2", "@polkadot/x-global": "^8.0.2",
"@polkadot/x-ws": "^7.8.2", "@polkadot/x-ws": "^8.0.2",
"eventemitter3": "^4.0.7" "eventemitter3": "^4.0.7"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/keyring": "^7.8.2", "@polkadot/keyring": "^8.0.2",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"mock-socket": "^9.0.7", "mock-socket": "^9.0.8",
"nock": "^13.1.4" "nock": "^13.2.1"
} }
} }
+20 -1
View File
@@ -8,6 +8,7 @@ import { fetch } from '@polkadot/x-fetch';
import { RpcCoder } from '../coder'; import { RpcCoder } from '../coder';
import defaults from '../defaults'; import defaults from '../defaults';
import { LRUCache } from '../lru';
const ERROR_SUBSCRIBE = 'HTTP Provider does not have subscriptions, use WebSockets instead'; const ERROR_SUBSCRIBE = 'HTTP Provider does not have subscriptions, use WebSockets instead';
@@ -34,6 +35,8 @@ const l = logger('api-http');
* @see [[WsProvider]] * @see [[WsProvider]]
*/ */
export class HttpProvider implements ProviderInterface { export class HttpProvider implements ProviderInterface {
readonly #callCache = new LRUCache();
readonly #coder: RpcCoder; readonly #coder: RpcCoder;
readonly #endpoint: string; readonly #endpoint: string;
@@ -103,8 +106,24 @@ export class HttpProvider implements ProviderInterface {
/** /**
* @summary Send HTTP POST Request with Body to configured HTTP Endpoint. * @summary Send HTTP POST Request with Body to configured HTTP Endpoint.
*/ */
public async send <T> (method: string, params: unknown[]): Promise<T> { public async send <T> (method: string, params: unknown[], isCacheable?: boolean): Promise<T> {
const body = this.#coder.encodeJson(method, params); const body = this.#coder.encodeJson(method, params);
let resultPromise: Promise<T> | null = isCacheable
? this.#callCache.get(body) as Promise<T>
: null;
if (!resultPromise) {
resultPromise = this.#send(body);
if (isCacheable) {
this.#callCache.set(body, resultPromise);
}
}
return resultPromise;
}
async #send <T> (body: string): Promise<T> {
const response = await fetch(this.#endpoint, { const response = await fetch(this.#endpoint, {
body, body,
headers: { headers: {
+55
View File
@@ -0,0 +1,55 @@
// Copyright 2017-2021 @polkadot/rpc-provider authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { LRUCache } from './lru';
describe('LRUCache', (): void => {
it('allows getting of items below capacity', (): void => {
const keys = ['1', '2', '3', '4'];
const lru = new LRUCache(4);
keys.forEach((k) => lru.set(k, `${k}${k}${k}`));
expect(lru.keys().join(', ')).toEqual(keys.reverse().join(', '));
expect(lru.length === lru.lengthData && lru.length === lru.lengthRefs).toBe(true);
keys.forEach((k) => expect(lru.get(k)).toEqual(`${k}${k}${k}`));
});
it('drops items when at capacity', (): void => {
const keys = ['1', '2', '3', '4', '5', '6'];
const lru = new LRUCache(4);
keys.forEach((k) => lru.set(k, `${k}${k}${k}`));
expect(lru.keys().join(', ')).toEqual(keys.slice(2).reverse().join(', '));
expect(lru.length === lru.lengthData && lru.length === lru.lengthRefs).toBe(true);
keys.slice(2).forEach((k) => expect(lru.get(k)).toEqual(`${k}${k}${k}`));
});
it('adjusts the order as they are used', (): void => {
const keys = ['1', '2', '3', '4', '5'];
const lru = new LRUCache(4);
keys.forEach((k) => lru.set(k, `${k}${k}${k}`));
expect(lru.entries()).toEqual([['5', '555'], ['4', '444'], ['3', '333'], ['2', '222']]);
expect(lru.length === lru.lengthData && lru.length === lru.lengthRefs).toBe(true);
lru.get('3');
expect(lru.entries()).toEqual([['3', '333'], ['5', '555'], ['4', '444'], ['2', '222']]);
expect(lru.length === lru.lengthData && lru.length === lru.lengthRefs).toBe(true);
lru.set('4', '4433');
expect(lru.entries()).toEqual([['4', '4433'], ['3', '333'], ['5', '555'], ['2', '222']]);
expect(lru.length === lru.lengthData && lru.length === lru.lengthRefs).toBe(true);
lru.set('6', '666');
expect(lru.entries()).toEqual([['6', '666'], ['4', '4433'], ['3', '333'], ['5', '555']]);
expect(lru.length === lru.lengthData && lru.length === lru.lengthRefs).toBe(true);
});
});
+128
View File
@@ -0,0 +1,128 @@
// Copyright 2017-2021 @polkadot/rpc-provider authors & contributors
// SPDX-License-Identifier: Apache-2.0
const DEFAULT_CAPACITY = 2048;
class LRUNode {
public readonly key: string;
public next: LRUNode;
public prev: LRUNode;
constructor (key: string) {
this.key = key;
this.next = this.prev = this;
}
}
// https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU
export class LRUCache {
readonly capacity: number;
readonly #data: Map<string, unknown> = new Map();
readonly #refs: Map<string, LRUNode> = new Map();
#length = 0;
#head: LRUNode;
#tail: LRUNode;
constructor (capacity = DEFAULT_CAPACITY) {
this.capacity = capacity;
this.#head = this.#tail = new LRUNode('<empty>');
}
get length (): number {
return this.#length;
}
get lengthData (): number {
return this.#data.size;
}
get lengthRefs (): number {
return this.#refs.size;
}
entries (): [string, unknown][] {
const keys = this.keys();
const entries = new Array<[string, unknown]>(keys.length);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
entries[i] = [key, this.#data.get(key)];
}
return entries;
}
keys (): string[] {
const keys: string[] = [];
if (this.#length) {
let curr = this.#head;
while (curr !== this.#tail) {
keys.push(curr.key);
curr = curr.next;
}
keys.push(curr.key);
}
return keys;
}
get <T> (key: string): T | null {
const data = this.#data.get(key);
if (data) {
this.#toHead(key);
return data as T;
}
return null;
}
set <T> (key: string, value: T): void {
if (this.#data.has(key)) {
this.#toHead(key);
} else {
const node = new LRUNode(key);
this.#refs.set(node.key, node);
if (this.length === 0) {
this.#head = this.#tail = node;
} else {
this.#head.prev = node;
node.next = this.#head;
this.#head = node;
}
if (this.#length === this.capacity) {
this.#data.delete(this.#tail.key);
this.#refs.delete(this.#tail.key);
this.#tail = this.#tail.prev;
} else {
this.#length += 1;
}
}
this.#data.set(key, value);
}
#toHead (key: string): void {
const ref = this.#refs.get(key);
if (ref && ref !== this.#head) {
ref.prev.next = ref.next;
ref.next.prev = ref.prev;
ref.next = this.#head;
this.#head.prev = ref;
this.#head = ref;
}
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/rpc-provider', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/rpc-provider', version: '6.10.1' };
+1 -1
View File
@@ -49,7 +49,7 @@ export interface ProviderInterface {
connect (): Promise<void>; connect (): Promise<void>;
disconnect (): Promise<void>; disconnect (): Promise<void>;
on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void; on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void;
send <T = any> (method: string, params: unknown[]): Promise<T>; send <T = any> (method: string, params: unknown[], isCacheable?: boolean): Promise<T>;
subscribe (type: string, method: string, params: unknown[], cb: ProviderInterfaceCallback): Promise<number | string>; subscribe (type: string, method: string, params: unknown[], cb: ProviderInterfaceCallback): Promise<number | string>;
unsubscribe (type: string, method: string, id: number | string): Promise<boolean>; unsubscribe (type: string, method: string, id: number | string): Promise<boolean>;
} }
+25 -7
View File
@@ -7,12 +7,13 @@ import type { JsonRpcResponse, ProviderInterface, ProviderInterfaceCallback, Pro
import EventEmitter from 'eventemitter3'; import EventEmitter from 'eventemitter3';
import { assert, isChildClass, isNull, isUndefined, logger } from '@polkadot/util'; import { assert, isChildClass, isNull, isUndefined, logger, objectSpread } from '@polkadot/util';
import { xglobal } from '@polkadot/x-global'; import { xglobal } from '@polkadot/x-global';
import { WebSocket } from '@polkadot/x-ws'; import { WebSocket } from '@polkadot/x-ws';
import { RpcCoder } from '../coder'; import { RpcCoder } from '../coder';
import defaults from '../defaults'; import defaults from '../defaults';
import { LRUCache } from '../lru';
import { getWSErrorString } from './errors'; import { getWSErrorString } from './errors';
interface SubscriptionHandler { interface SubscriptionHandler {
@@ -75,6 +76,8 @@ function eraseRecord<T> (record: Record<string, T>, cb?: (item: T) => void): voi
* @see [[HttpProvider]] * @see [[HttpProvider]]
*/ */
export class WsProvider implements ProviderInterface { export class WsProvider implements ProviderInterface {
readonly #callCache = new LRUCache();
readonly #coder: RpcCoder; readonly #coder: RpcCoder;
readonly #endpoints: string[]; readonly #endpoints: string[];
@@ -260,12 +263,28 @@ export class WsProvider implements ProviderInterface {
* @param params Encoded parameters as applicable for the method * @param params Encoded parameters as applicable for the method
* @param subscription Subscription details (internally used) * @param subscription Subscription details (internally used)
*/ */
public send <T = any> (method: string, params: unknown[], subscription?: SubscriptionHandler): Promise<T> { public send <T = any> (method: string, params: unknown[], isCacheable?: boolean, subscription?: SubscriptionHandler): Promise<T> {
const body = this.#coder.encodeJson(method, params);
let resultPromise: Promise<T> | null = isCacheable
? this.#callCache.get(body) as Promise<T>
: null;
if (!resultPromise) {
resultPromise = this.#send(body, method, params, subscription);
if (isCacheable) {
this.#callCache.set(body, resultPromise);
}
}
return resultPromise;
}
async #send <T> (json: string, method: string, params: unknown[], subscription?: SubscriptionHandler): Promise<T> {
return new Promise<T>((resolve, reject): void => { return new Promise<T>((resolve, reject): void => {
try { try {
assert(this.isConnected && !isNull(this.#websocket), 'WebSocket is not connected'); assert(this.isConnected && !isNull(this.#websocket), 'WebSocket is not connected');
const json = this.#coder.encodeJson(method, params);
const id = this.#coder.getId(); const id = this.#coder.getId();
const callback = (error?: Error | null, result?: T): void => { const callback = (error?: Error | null, result?: T): void => {
@@ -309,7 +328,7 @@ export class WsProvider implements ProviderInterface {
* ``` * ```
*/ */
public subscribe (type: string, method: string, params: unknown[], callback: ProviderInterfaceCallback): Promise<number | string> { public subscribe (type: string, method: string, params: unknown[], callback: ProviderInterfaceCallback): Promise<number | string> {
return this.send<number | string>(method, params, { callback, type }); return this.send<number | string>(method, params, false, { callback, type });
} }
/** /**
@@ -410,11 +429,10 @@ export class WsProvider implements ProviderInterface {
if (subscription) { if (subscription) {
const subId = `${subscription.type}::${result}`; const subId = `${subscription.type}::${result}`;
this.#subscriptions[subId] = { this.#subscriptions[subId] = objectSpread({}, subscription, {
...subscription,
method, method,
params params
}; });
// if we have a result waiting for this subscription already // if we have a result waiting for this subscription already
if (this.#waitingForId[subId]) { if (this.#waitingForId[subId]) {
+8 -8
View File
@@ -20,7 +20,7 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"bin": { "bin": {
"polkadot-types-chain-info": "./scripts/polkadot-types-chain-info.cjs", "polkadot-types-chain-info": "./scripts/polkadot-types-chain-info.cjs",
@@ -32,18 +32,18 @@
"dependencies": { "dependencies": {
"@babel/core": "^7.16.0", "@babel/core": "^7.16.0",
"@babel/register": "^7.16.0", "@babel/register": "^7.16.0",
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/api": "6.7.1", "@polkadot/api": "6.10.1",
"@polkadot/rpc-provider": "6.7.1", "@polkadot/rpc-provider": "6.10.1",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/types-support": "6.7.1", "@polkadot/types-support": "6.10.1",
"@polkadot/util": "^7.8.2", "@polkadot/util": "^8.0.2",
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
"websocket": "^1.0.34", "websocket": "^1.0.34",
"yargs": "^17.2.1" "yargs": "^17.2.1"
}, },
"devDependencies": { "devDependencies": {
"@types/websocket": "^1.0.4", "@types/websocket": "^1.0.4",
"@types/yargs": "^17.0.5" "@types/yargs": "^17.0.7"
} }
} }
+17 -4
View File
@@ -4,6 +4,7 @@
import path from 'path'; import path from 'path';
import yargs from 'yargs'; import yargs from 'yargs';
import { Definitions } from '@polkadot/types/types';
import { formatNumber } from '@polkadot/util'; import { formatNumber } from '@polkadot/util';
import { WebSocket } from '@polkadot/x-ws'; import { WebSocket } from '@polkadot/x-ws';
@@ -18,12 +19,24 @@ function generate (metaHex: string, pkg: string | undefined, output: string, isS
? { [pkg]: require(path.join(process.cwd(), output, 'definitions')) as Record<string, any> } ? { [pkg]: require(path.join(process.cwd(), output, 'definitions')) as Record<string, any> }
: {}; : {};
generateDefaultConsts(path.join(process.cwd(), output, 'augment-api-consts.ts'), metaHex, extraTypes, isStrict); let customLookupDefinitions;
try {
customLookupDefinitions = {
rpc: {},
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
types: require(path.join(process.cwd(), output, 'lookup.ts')).default
} as Definitions;
} catch (error) {
console.log('No custom definitions found.');
}
generateDefaultConsts(path.join(process.cwd(), output, 'augment-api-consts.ts'), metaHex, extraTypes, isStrict, customLookupDefinitions);
generateDefaultErrors(path.join(process.cwd(), output, 'augment-api-errors.ts'), metaHex, extraTypes, isStrict); generateDefaultErrors(path.join(process.cwd(), output, 'augment-api-errors.ts'), metaHex, extraTypes, isStrict);
generateDefaultEvents(path.join(process.cwd(), output, 'augment-api-events.ts'), metaHex, extraTypes, isStrict); generateDefaultEvents(path.join(process.cwd(), output, 'augment-api-events.ts'), metaHex, extraTypes, isStrict, customLookupDefinitions);
generateDefaultQuery(path.join(process.cwd(), output, 'augment-api-query.ts'), metaHex, extraTypes, isStrict); generateDefaultQuery(path.join(process.cwd(), output, 'augment-api-query.ts'), metaHex, extraTypes, isStrict, customLookupDefinitions);
generateDefaultRpc(path.join(process.cwd(), output, 'augment-api-rpc.ts'), extraTypes); generateDefaultRpc(path.join(process.cwd(), output, 'augment-api-rpc.ts'), extraTypes);
generateDefaultTx(path.join(process.cwd(), output, 'augment-api-tx.ts'), metaHex, extraTypes, isStrict); generateDefaultTx(path.join(process.cwd(), output, 'augment-api-tx.ts'), metaHex, extraTypes, isStrict, customLookupDefinitions);
writeFile(path.join(process.cwd(), output, 'augment-api.ts'), (): string => writeFile(path.join(process.cwd(), output, 'augment-api.ts'), (): string =>
[ [
+14 -2
View File
@@ -8,11 +8,16 @@ import * as substrateDefs from '@polkadot/types/interfaces/definitions';
import { generateInterfaceTypes } from './generate/interfaceRegistry'; import { generateInterfaceTypes } from './generate/interfaceRegistry';
import { generateTsDef } from './generate/tsDef'; import { generateTsDef } from './generate/tsDef';
import { generateDefaultLookup } from './generate';
type ArgV = { input: string; package: string }; type ArgV = { input: string; package: string; endpoint?: string; };
export function main (): void { export function main (): void {
const { input, package: pkg } = yargs.strict().options({ const { endpoint, input, package: pkg } = yargs.strict().options({
endpoint: {
description: 'The endpoint to connect to (e.g. wss://kusama-rpc.polkadot.io) or relative path to a file containing the JSON output of an RPC state_getMetadata call',
type: 'string'
},
input: { input: {
description: 'The directory to use for the user definitions', description: 'The directory to use for the user definitions',
required: true, required: true,
@@ -25,6 +30,13 @@ export function main (): void {
} }
}).argv as ArgV; }).argv as ArgV;
if (endpoint) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const metaHex = (require(path.join(process.cwd(), endpoint)) as Record<string, string>).result;
generateDefaultLookup(path.join(process.cwd(), input), metaHex);
}
// eslint-disable-next-line @typescript-eslint/no-var-requires // eslint-disable-next-line @typescript-eslint/no-var-requires
const userDefs = require(path.join(process.cwd(), input, 'definitions.ts')) as Record<string, any>; const userDefs = require(path.join(process.cwd(), input, 'definitions.ts')) as Record<string, any>;
const userKeys = Object.keys(userDefs); const userKeys = Object.keys(userDefs);
+10 -4
View File
@@ -8,6 +8,7 @@ import Handlebars from 'handlebars';
import lookupDefinitions from '@polkadot/types/augment/lookup/definitions'; import lookupDefinitions from '@polkadot/types/augment/lookup/definitions';
import * as defaultDefs from '@polkadot/types/interfaces/definitions'; import * as defaultDefs from '@polkadot/types/interfaces/definitions';
import { Definitions } from '@polkadot/types/types';
import { stringCamelCase } from '@polkadot/util'; import { stringCamelCase } from '@polkadot/util';
import { compareName, createImports, formatType, initMeta, readTemplate, setImports, writeFile } from '../util'; import { compareName, createImports, formatType, initMeta, readTemplate, setImports, writeFile } from '../util';
@@ -16,10 +17,15 @@ const template = readTemplate('consts');
const generateForMetaTemplate = Handlebars.compile(template); const generateForMetaTemplate = Handlebars.compile(template);
/** @internal */ /** @internal */
function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean): void { function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean, customLookupDefinitions?: Definitions): void {
writeFile(dest, (): string => { writeFile(dest, (): string => {
const allTypes = { const allTypes = {
'@polkadot/types/augment': { lookup: lookupDefinitions }, '@polkadot/types/augment': {
lookup: {
...lookupDefinitions,
...customLookupDefinitions
}
},
'@polkadot/types/interfaces': defaultDefs, '@polkadot/types/interfaces': defaultDefs,
...extraTypes ...extraTypes
}; };
@@ -79,8 +85,8 @@ function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes,
// Call `generateForMeta()` with current static metadata // Call `generateForMeta()` with current static metadata
/** @internal */ /** @internal */
export function generateDefaultConsts (dest = 'packages/api/src/augment/consts.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { export function generateDefaultConsts (dest = 'packages/api/src/augment/consts.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false, customLookupDefinitions?: Definitions): void {
const { metadata } = initMeta(data, extraTypes); const { metadata } = initMeta(data, extraTypes);
return generateForMeta(metadata, dest, extraTypes, isStrict); return generateForMeta(metadata, dest, extraTypes, isStrict, customLookupDefinitions);
} }
+10 -4
View File
@@ -8,6 +8,7 @@ import Handlebars from 'handlebars';
import lookupDefinitions from '@polkadot/types/augment/lookup/definitions'; import lookupDefinitions from '@polkadot/types/augment/lookup/definitions';
import * as defaultDefs from '@polkadot/types/interfaces/definitions'; import * as defaultDefs from '@polkadot/types/interfaces/definitions';
import { Definitions } from '@polkadot/types/types';
import { stringCamelCase } from '@polkadot/util'; import { stringCamelCase } from '@polkadot/util';
import { compareName, createImports, formatType, initMeta, readTemplate, setImports, writeFile } from '../util'; import { compareName, createImports, formatType, initMeta, readTemplate, setImports, writeFile } from '../util';
@@ -16,10 +17,15 @@ const template = readTemplate('events');
const generateForMetaTemplate = Handlebars.compile(template); const generateForMetaTemplate = Handlebars.compile(template);
/** @internal */ /** @internal */
function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean): void { function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean, customLookupDefinitions?: Definitions): void {
writeFile(dest, (): string => { writeFile(dest, (): string => {
const allTypes = { const allTypes = {
'@polkadot/types/augment': { lookup: lookupDefinitions }, '@polkadot/types/augment': {
lookup: {
...lookupDefinitions,
...customLookupDefinitions
}
},
'@polkadot/types/interfaces': defaultDefs, '@polkadot/types/interfaces': defaultDefs,
...extraTypes ...extraTypes
}; };
@@ -71,8 +77,8 @@ function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes,
// Call `generateForMeta()` with current static metadata // Call `generateForMeta()` with current static metadata
/** @internal */ /** @internal */
export function generateDefaultEvents (dest = 'packages/api/src/augment/events.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { export function generateDefaultEvents (dest = 'packages/api/src/augment/events.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false, customLookupDefinitions?: Definitions): void {
const { metadata } = initMeta(data, extraTypes); const { metadata } = initMeta(data, extraTypes);
return generateForMeta(metadata, dest, extraTypes, isStrict); return generateForMeta(metadata, dest, extraTypes, isStrict, customLookupDefinitions);
} }
+2 -29
View File
@@ -18,7 +18,6 @@ import { isString, stringify } from '@polkadot/util';
import { createImports, exportType, initMeta, readTemplate, writeFile } from '../util'; import { createImports, exportType, initMeta, readTemplate, writeFile } from '../util';
import { typeEncoders } from './tsDef'; import { typeEncoders } from './tsDef';
const MAP_ENUMS = ['Call', 'Event', 'Error', 'RawEvent'];
const WITH_TYPEDEF = false; const WITH_TYPEDEF = false;
const generateLookupDefsTmpl = Handlebars.compile(readTemplate('lookup/defs')); const generateLookupDefsTmpl = Handlebars.compile(readTemplate('lookup/defs'));
@@ -131,33 +130,7 @@ function expandDefToString ({ lookupNameRoot, type }: TypeDef, indent: number):
} }
function getFilteredTypes (lookup: PortableRegistry, exclude: string[] = []): [PortableType, TypeDef][] { function getFilteredTypes (lookup: PortableRegistry, exclude: string[] = []): [PortableType, TypeDef][] {
const named = lookup.types.filter(({ id, type: { path } }) => { const named = lookup.types.filter(({ id }) => !!lookup.getTypeDef(id).lookupName);
const typeDef = lookup.getTypeDef(id);
return (
// We actually only want those with lookupName set
!!typeDef.lookupName &&
!(
path.length === 2 &&
(
(
// Ensure that we match {node, kusama, *}_runtime
path[0].toString().split('_')[1] === 'runtime' &&
!['Call', 'Event'].includes(path[1].toString())
) ||
path[0].toString().startsWith('pallet_')
) &&
// Ensure we strip generics, e.g. Event<T>
MAP_ENUMS.includes(path[1].toString().split('<')[0])
) &&
!(
path.length >= 3 &&
path[path.length - 2].toString() === 'pallet' &&
// As above, cater for generics
MAP_ENUMS.includes(path[path.length - 1].toString().split('<')[0])
)
);
});
const names = named.map(({ id }) => lookup.getName(id)); const names = named.map(({ id }) => lookup.getName(id));
return named return named
@@ -261,7 +234,7 @@ export function generateDefaultLookup (destDir = 'packages/types/src/augment/loo
generateLookup( generateLookup(
destDir, destDir,
staticData staticData
? [[undefined, staticData]] ? [['lookup', staticData]]
: [ : [
['substrate', staticSubstrate], ['substrate', staticSubstrate],
['polkadot', staticPolkadot], ['polkadot', staticPolkadot],
+10 -5
View File
@@ -3,7 +3,7 @@
import type { StorageEntryMetadataLatest } from '@polkadot/types/interfaces'; import type { StorageEntryMetadataLatest } from '@polkadot/types/interfaces';
import type { Metadata, PortableRegistry } from '@polkadot/types/metadata'; import type { Metadata, PortableRegistry } from '@polkadot/types/metadata';
import type { Registry } from '@polkadot/types/types'; import type { Definitions, Registry } from '@polkadot/types/types';
import type { ExtraTypes } from './types'; import type { ExtraTypes } from './types';
import Handlebars from 'handlebars'; import Handlebars from 'handlebars';
@@ -66,10 +66,15 @@ const template = readTemplate('query');
const generateForMetaTemplate = Handlebars.compile(template); const generateForMetaTemplate = Handlebars.compile(template);
/** @internal */ /** @internal */
function generateForMeta (registry: Registry, meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean): void { function generateForMeta (registry: Registry, meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean, customLookupDefinitions?: Definitions): void {
writeFile(dest, (): string => { writeFile(dest, (): string => {
const allTypes: ExtraTypes = { const allTypes: ExtraTypes = {
'@polkadot/types/augment': { lookup: lookupDefinitions }, '@polkadot/types/augment': {
lookup: {
...lookupDefinitions,
...customLookupDefinitions
}
},
'@polkadot/types/interfaces': defaultDefs, '@polkadot/types/interfaces': defaultDefs,
...extraTypes ...extraTypes
}; };
@@ -129,8 +134,8 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr
// Call `generateForMeta()` with current static metadata // Call `generateForMeta()` with current static metadata
/** @internal */ /** @internal */
export function generateDefaultQuery (dest = 'packages/api/src/augment/query.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { export function generateDefaultQuery (dest = 'packages/api/src/augment/query.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false, customLookupDefinitions?: Definitions): void {
const { metadata, registry } = initMeta(data, extraTypes); const { metadata, registry } = initMeta(data, extraTypes);
return generateForMeta(registry, metadata, dest, extraTypes, isStrict); return generateForMeta(registry, metadata, dest, extraTypes, isStrict, customLookupDefinitions);
} }
+2 -2
View File
@@ -11,7 +11,7 @@ import path from 'path';
import { getTypeDef, TypeRegistry } from '@polkadot/types/create'; import { getTypeDef, TypeRegistry } from '@polkadot/types/create';
import { TypeDefInfo } from '@polkadot/types/create/types'; import { TypeDefInfo } from '@polkadot/types/create/types';
import * as defaultDefinitions from '@polkadot/types/interfaces/definitions'; import * as defaultDefinitions from '@polkadot/types/interfaces/definitions';
import { assert, isString, stringCamelCase, stringify, stringUpperFirst } from '@polkadot/util'; import { assert, isString, stringify, stringPascalCase } from '@polkadot/util';
import { createImports, exportInterface, exportType, formatType, readTemplate, setImports, TypeImports, writeFile } from '../util'; import { createImports, exportInterface, exportType, formatType, readTemplate, setImports, TypeImports, writeFile } from '../util';
@@ -56,7 +56,7 @@ function tsEnum (registry: Registry, definitions: Record<string, ModuleTypes>, {
.filter(({ name }) => !!name && !name.startsWith('__Unused')) .filter(({ name }) => !!name && !name.startsWith('__Unused'))
.map((def, index): string => { .map((def, index): string => {
const { info, lookupName, name = `unknown${index}`, type } = def; const { info, lookupName, name = `unknown${index}`, type } = def;
const getter = stringUpperFirst(stringCamelCase(name.replace(' ', '_'))); const getter = stringPascalCase(name.replace(' ', '_'));
const isComplex = [TypeDefInfo.Option, TypeDefInfo.Result, TypeDefInfo.Struct, TypeDefInfo.Tuple, TypeDefInfo.Vec, TypeDefInfo.VecFixed].includes(info); const isComplex = [TypeDefInfo.Option, TypeDefInfo.Result, TypeDefInfo.Struct, TypeDefInfo.Tuple, TypeDefInfo.Vec, TypeDefInfo.VecFixed].includes(info);
const asGetter = type === 'Null' || info === TypeDefInfo.DoNotConstruct const asGetter = type === 'Null' || info === TypeDefInfo.DoNotConstruct
? '' ? ''
+10 -5
View File
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { Metadata } from '@polkadot/types/metadata/Metadata'; import type { Metadata } from '@polkadot/types/metadata/Metadata';
import type { Registry } from '@polkadot/types/types'; import type { Definitions, Registry } from '@polkadot/types/types';
import type { ExtraTypes } from './types'; import type { ExtraTypes } from './types';
import Handlebars from 'handlebars'; import Handlebars from 'handlebars';
@@ -29,10 +29,15 @@ const template = readTemplate('tx');
const generateForMetaTemplate = Handlebars.compile(template); const generateForMetaTemplate = Handlebars.compile(template);
/** @internal */ /** @internal */
function generateForMeta (registry: Registry, meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean): void { function generateForMeta (registry: Registry, meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean, customLookupDefinitions?: Definitions): void {
writeFile(dest, (): string => { writeFile(dest, (): string => {
const allTypes: ExtraTypes = { const allTypes: ExtraTypes = {
'@polkadot/types/augment': { lookup: lookupDefinitions }, '@polkadot/types/augment': {
lookup: {
...lookupDefinitions,
...customLookupDefinitions
}
},
'@polkadot/types/interfaces': defaultDefs, '@polkadot/types/interfaces': defaultDefs,
...extraTypes ...extraTypes
}; };
@@ -114,8 +119,8 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr
// Call `generateForMeta()` with current static metadata // Call `generateForMeta()` with current static metadata
/** @internal */ /** @internal */
export function generateDefaultTx (dest = 'packages/api/src/augment/tx.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { export function generateDefaultTx (dest = 'packages/api/src/augment/tx.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false, customLookupDefinitions?: Definitions): void {
const { metadata, registry } = initMeta(data, extraTypes); const { metadata, registry } = initMeta(data, extraTypes);
return generateForMeta(registry, metadata, dest, extraTypes, isStrict); return generateForMeta(registry, metadata, dest, extraTypes, isStrict, customLookupDefinitions);
} }
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/typegen', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/typegen', version: '6.10.1' };
@@ -2,8 +2,6 @@
/* eslint-disable sort-keys */ /* eslint-disable sort-keys */
import type { DefinitionsTypes } from '../../types';
export default { export default {
{{#each defs}} {{#each defs}}
{{> docs}} {{> docs}}
@@ -11,5 +9,5 @@ export default {
{{{this}}} {{{this}}}
{{/each}} {{/each}}
{{/each}} {{/each}}
} as DefinitionsTypes; };
{{> footer }} {{> footer }}
@@ -2,8 +2,6 @@
/* eslint-disable sort-keys */ /* eslint-disable sort-keys */
import type { Definitions } from '../../types';
export default { export default {
rpc: {}, rpc: {},
types: { types: {
@@ -14,5 +12,5 @@ export default {
{{/each}} {{/each}}
{{/each}} {{/each}}
} }
} as Definitions; };
{{> footer }} {{> footer }}
@@ -1,9 +1,9 @@
{{> header }} {{> header }}
{{{ imports }}}
declare module '@polkadot/types/lookup' { declare module '@polkadot/types/lookup' {
{{{ imports }}}
{{#each items}} {{#each items}}
{{{this}}} {{{this}}}
+5 -5
View File
@@ -20,12 +20,12 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/networks": "^7.8.2", "@polkadot/networks": "^8.0.2",
"@polkadot/types": "6.7.1", "@polkadot/types": "6.10.1",
"@polkadot/util": "^7.8.2" "@polkadot/util": "^8.0.2"
} }
} }
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/types-known', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/types-known', version: '6.10.1' };
+1 -1
View File
@@ -185,7 +185,7 @@ const versioned: OverrideVersionedType[] = [
{ {
// metadata v14 // metadata v14
minmax: [9106, undefined], minmax: [9106, undefined],
types: objectSpread({}, sharedTypes) types: {}
} }
]; ];
+1 -1
View File
@@ -73,7 +73,7 @@ const versioned: OverrideVersionedType[] = [
{ {
// metadata v14 // metadata v14
minmax: [9110, undefined], minmax: [9110, undefined],
types: objectSpread({}, sharedTypes) types: {}
} }
]; ];
+1 -1
View File
@@ -49,7 +49,7 @@ const versioned: OverrideVersionedType[] = [
{ {
// metadata v14 // metadata v14
minmax: [9106, undefined], minmax: [9106, undefined],
types: objectSpread({}, sharedTypes) types: {}
} }
]; ];
+1 -1
View File
@@ -37,7 +37,7 @@ const versioned: OverrideVersionedType[] = [
{ {
// metadata V14 // metadata V14
minmax: [500, undefined], minmax: [500, undefined],
types: objectSpread({}, sharedTypes) types: {}
} }
]; ];
+1 -1
View File
@@ -91,7 +91,7 @@ const versioned: OverrideVersionedType[] = [
{ {
// metadata v14 // metadata v14
minmax: [9106, undefined], minmax: [9106, undefined],
types: objectSpread({}, sharedTypes) types: {}
} }
]; ];
@@ -9,7 +9,7 @@ const upgrades: ChainUpgradesRaw = [
[528470, 13], [687751, 14], [746085, 15], [787923, 16], [799302, 17], [528470, 13], [687751, 14], [746085, 15], [787923, 16], [799302, 17],
[1205128, 18], [1603423, 23], [1733218, 24], [2005673, 25], [2436698, 26], [1205128, 18], [1603423, 23], [1733218, 24], [2005673, 25], [2436698, 26],
[3613564, 27], [3899547, 28], [4345767, 29], [4876134, 30], [5661442, 9050], [3613564, 27], [3899547, 28], [4345767, 29], [4876134, 30], [5661442, 9050],
[6321619, 9080], [6713249, 9090], [7217907, 9100], [7229126, 9110] [6321619, 9080], [6713249, 9090], [7217907, 9100], [7229126, 9110], [7560558, 9122]
]; ];
export default upgrades; export default upgrades;
+3 -3
View File
@@ -20,10 +20,10 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/util": "^7.8.2" "@polkadot/util": "^8.0.2"
} }
} }
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit // Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/types-support', version: '6.7.1' }; export const packageInfo = { name: '@polkadot/types-support', version: '6.10.1' };
+7 -6
View File
@@ -20,17 +20,18 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "6.7.1", "version": "6.10.1",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.0", "@babel/runtime": "^7.16.3",
"@polkadot/util": "^7.8.2", "@polkadot/types-known": "6.10.1",
"@polkadot/util-crypto": "^7.8.2", "@polkadot/util": "^8.0.2",
"@polkadot/util-crypto": "^8.0.2",
"rxjs": "^7.4.0" "rxjs": "^7.4.0"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/keyring": "^7.8.2", "@polkadot/keyring": "^8.0.2",
"@polkadot/types-support": "6.7.1", "@polkadot/types-support": "6.10.1",
"@types/bn.js": "^4.11.6", "@types/bn.js": "^4.11.6",
"bn.js": "^4.12.0" "bn.js": "^4.12.0"
} }
+125 -44
View File
@@ -3,24 +3,45 @@
/* eslint-disable sort-keys */ /* eslint-disable sort-keys */
import type { DefinitionsTypes } from '../../types';
export default { export default {
/** /**
* Lookup74: kusama_runtime::ProxyType * Lookup71: kusama_runtime::ProxyType
**/ **/
KusamaRuntimeProxyType: { KusamaRuntimeProxyType: {
_enum: ['Any', 'NonTransfer', 'Governance', 'Staking', 'IdentityJudgement', 'CancelProxy', 'Auction'] _enum: ['Any', 'NonTransfer', 'Governance', 'Staking', 'IdentityJudgement', 'CancelProxy', 'Auction']
}, },
/** /**
* Lookup108: xcm::v1::multilocation::MultiLocation * Lookup104: pallet_xcm::pallet::Event<T>
**/
PalletXcmEvent: {
_enum: {
Attempted: 'XcmV2TraitsOutcome',
Sent: '(XcmV1MultiLocation,XcmV1MultiLocation,XcmV2Xcm)',
UnexpectedResponse: '(XcmV1MultiLocation,u64)',
ResponseReady: '(u64,XcmV2Response)',
Notified: '(u64,u8,u8)',
NotifyOverweight: '(u64,u8,u8,u64,u64)',
NotifyDispatchError: '(u64,u8,u8)',
NotifyDecodeFailed: '(u64,u8,u8)',
InvalidResponder: '(XcmV1MultiLocation,u64,Option<XcmV1MultiLocation>)',
InvalidResponderVersion: '(XcmV1MultiLocation,u64)',
ResponseTaken: 'u64',
AssetsTrapped: '(H256,XcmV1MultiLocation,XcmVersionedMultiAssets)',
VersionChangeNotified: '(XcmV1MultiLocation,u32)',
SupportedVersionChanged: '(XcmV1MultiLocation,u32)',
NotifyTargetSendFail: '(XcmV1MultiLocation,u64,XcmV2TraitsError)',
NotifyTargetMigrationFail: '(XcmVersionedMultiLocation,u64)'
}
},
/**
* Lookup105: xcm::v1::multilocation::MultiLocation
**/ **/
XcmV1MultiLocation: { XcmV1MultiLocation: {
parents: 'u8', parents: 'u8',
interior: 'XcmV1MultilocationJunctions' interior: 'XcmV1MultilocationJunctions'
}, },
/** /**
* Lookup109: xcm::v1::multilocation::Junctions * Lookup106: xcm::v1::multilocation::Junctions
**/ **/
XcmV1MultilocationJunctions: { XcmV1MultilocationJunctions: {
_enum: { _enum: {
@@ -36,7 +57,7 @@ export default {
} }
}, },
/** /**
* Lookup110: xcm::v1::junction::Junction * Lookup107: xcm::v1::junction::Junction
**/ **/
XcmV1Junction: { XcmV1Junction: {
_enum: { _enum: {
@@ -64,7 +85,7 @@ export default {
} }
}, },
/** /**
* Lookup112: xcm::v0::junction::NetworkId * Lookup109: xcm::v0::junction::NetworkId
**/ **/
XcmV0JunctionNetworkId: { XcmV0JunctionNetworkId: {
_enum: { _enum: {
@@ -75,7 +96,7 @@ export default {
} }
}, },
/** /**
* Lookup114: xcm::v0::junction::BodyId * Lookup111: xcm::v0::junction::BodyId
**/ **/
XcmV0JunctionBodyId: { XcmV0JunctionBodyId: {
_enum: { _enum: {
@@ -89,7 +110,7 @@ export default {
} }
}, },
/** /**
* Lookup115: xcm::v0::junction::BodyPart * Lookup112: xcm::v0::junction::BodyPart
**/ **/
XcmV0JunctionBodyPart: { XcmV0JunctionBodyPart: {
_enum: { _enum: {
@@ -112,11 +133,11 @@ export default {
} }
}, },
/** /**
* Lookup116: xcm::v2::Xcm<Call> * Lookup113: xcm::v2::Xcm<Call>
**/ **/
XcmV2Xcm: 'Vec<XcmV2Instruction>', XcmV2Xcm: 'Vec<XcmV2Instruction>',
/** /**
* Lookup118: xcm::v2::Instruction<Call> * Lookup115: xcm::v2::Instruction<Call>
**/ **/
XcmV2Instruction: { XcmV2Instruction: {
_enum: { _enum: {
@@ -214,18 +235,18 @@ export default {
} }
}, },
/** /**
* Lookup119: xcm::v1::multiasset::MultiAssets * Lookup116: xcm::v1::multiasset::MultiAssets
**/ **/
XcmV1MultiassetMultiAssets: 'Vec<XcmV1MultiAsset>', XcmV1MultiassetMultiAssets: 'Vec<XcmV1MultiAsset>',
/** /**
* Lookup121: xcm::v1::multiasset::MultiAsset * Lookup118: xcm::v1::multiasset::MultiAsset
**/ **/
XcmV1MultiAsset: { XcmV1MultiAsset: {
id: 'XcmV1MultiassetAssetId', id: 'XcmV1MultiassetAssetId',
fun: 'XcmV1MultiassetFungibility' fun: 'XcmV1MultiassetFungibility'
}, },
/** /**
* Lookup122: xcm::v1::multiasset::AssetId * Lookup119: xcm::v1::multiasset::AssetId
**/ **/
XcmV1MultiassetAssetId: { XcmV1MultiassetAssetId: {
_enum: { _enum: {
@@ -234,7 +255,7 @@ export default {
} }
}, },
/** /**
* Lookup123: xcm::v1::multiasset::Fungibility * Lookup120: xcm::v1::multiasset::Fungibility
**/ **/
XcmV1MultiassetFungibility: { XcmV1MultiassetFungibility: {
_enum: { _enum: {
@@ -243,7 +264,7 @@ export default {
} }
}, },
/** /**
* Lookup124: xcm::v1::multiasset::AssetInstance * Lookup121: xcm::v1::multiasset::AssetInstance
**/ **/
XcmV1MultiassetAssetInstance: { XcmV1MultiassetAssetInstance: {
_enum: { _enum: {
@@ -257,7 +278,7 @@ export default {
} }
}, },
/** /**
* Lookup126: xcm::v2::Response * Lookup123: xcm::v2::Response
**/ **/
XcmV2Response: { XcmV2Response: {
_enum: { _enum: {
@@ -268,19 +289,19 @@ export default {
} }
}, },
/** /**
* Lookup129: xcm::v0::OriginKind * Lookup126: xcm::v0::OriginKind
**/ **/
XcmV0OriginKind: { XcmV0OriginKind: {
_enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm']
}, },
/** /**
* Lookup130: xcm::double_encoded::DoubleEncoded<T> * Lookup127: xcm::double_encoded::DoubleEncoded<T>
**/ **/
XcmDoubleEncoded: { XcmDoubleEncoded: {
encoded: 'Bytes' encoded: 'Bytes'
}, },
/** /**
* Lookup131: xcm::v1::multiasset::MultiAssetFilter * Lookup128: xcm::v1::multiasset::MultiAssetFilter
**/ **/
XcmV1MultiassetMultiAssetFilter: { XcmV1MultiassetMultiAssetFilter: {
_enum: { _enum: {
@@ -289,7 +310,7 @@ export default {
} }
}, },
/** /**
* Lookup132: xcm::v1::multiasset::WildMultiAsset * Lookup129: xcm::v1::multiasset::WildMultiAsset
**/ **/
XcmV1MultiassetWildMultiAsset: { XcmV1MultiassetWildMultiAsset: {
_enum: { _enum: {
@@ -301,13 +322,13 @@ export default {
} }
}, },
/** /**
* Lookup133: xcm::v1::multiasset::WildFungibility * Lookup130: xcm::v1::multiasset::WildFungibility
**/ **/
XcmV1MultiassetWildFungibility: { XcmV1MultiassetWildFungibility: {
_enum: ['Fungible', 'NonFungible'] _enum: ['Fungible', 'NonFungible']
}, },
/** /**
* Lookup134: xcm::v2::WeightLimit * Lookup131: xcm::v2::WeightLimit
**/ **/
XcmV2WeightLimit: { XcmV2WeightLimit: {
_enum: { _enum: {
@@ -316,7 +337,7 @@ export default {
} }
}, },
/** /**
* Lookup136: xcm::VersionedMultiAssets * Lookup133: xcm::VersionedMultiAssets
**/ **/
XcmVersionedMultiAssets: { XcmVersionedMultiAssets: {
_enum: { _enum: {
@@ -325,7 +346,7 @@ export default {
} }
}, },
/** /**
* Lookup138: xcm::v0::multi_asset::MultiAsset * Lookup135: xcm::v0::multi_asset::MultiAsset
**/ **/
XcmV0MultiAsset: { XcmV0MultiAsset: {
_enum: { _enum: {
@@ -364,7 +385,7 @@ export default {
} }
}, },
/** /**
* Lookup139: xcm::v0::multi_location::MultiLocation * Lookup136: xcm::v0::multi_location::MultiLocation
**/ **/
XcmV0MultiLocation: { XcmV0MultiLocation: {
_enum: { _enum: {
@@ -380,7 +401,7 @@ export default {
} }
}, },
/** /**
* Lookup140: xcm::v0::junction::Junction * Lookup137: xcm::v0::junction::Junction
**/ **/
XcmV0Junction: { XcmV0Junction: {
_enum: { _enum: {
@@ -409,7 +430,7 @@ export default {
} }
}, },
/** /**
* Lookup141: xcm::VersionedMultiLocation * Lookup138: xcm::VersionedMultiLocation
**/ **/
XcmVersionedMultiLocation: { XcmVersionedMultiLocation: {
_enum: { _enum: {
@@ -418,7 +439,7 @@ export default {
} }
}, },
/** /**
* Lookup241: kusama_runtime::SessionKeys * Lookup238: kusama_runtime::SessionKeys
**/ **/
KusamaRuntimeSessionKeys: { KusamaRuntimeSessionKeys: {
grandpa: 'SpFinalityGrandpaAppPublic', grandpa: 'SpFinalityGrandpaAppPublic',
@@ -429,7 +450,7 @@ export default {
authorityDiscovery: 'SpAuthorityDiscoveryAppPublic' authorityDiscovery: 'SpAuthorityDiscoveryAppPublic'
}, },
/** /**
* Lookup316: kusama_runtime::OriginCaller * Lookup313: kusama_runtime::OriginCaller
**/ **/
KusamaRuntimeOriginCaller: { KusamaRuntimeOriginCaller: {
_enum: { _enum: {
@@ -536,7 +557,7 @@ export default {
} }
}, },
/** /**
* Lookup321: pallet_xcm::pallet::Origin * Lookup318: pallet_xcm::pallet::Origin
**/ **/
PalletXcmOrigin: { PalletXcmOrigin: {
_enum: { _enum: {
@@ -545,7 +566,7 @@ export default {
} }
}, },
/** /**
* Lookup379: kusama_runtime::NposCompactSolution24 * Lookup376: kusama_runtime::NposCompactSolution24
**/ **/
KusamaRuntimeNposCompactSolution24: { KusamaRuntimeNposCompactSolution24: {
votes1: 'Vec<(Compact<u32>,Compact<u16>)>', votes1: 'Vec<(Compact<u32>,Compact<u16>)>',
@@ -574,7 +595,61 @@ export default {
votes24: 'Vec<(Compact<u32>,[(Compact<u16>,Compact<PerU16>);23],Compact<u16>)>' votes24: 'Vec<(Compact<u32>,[(Compact<u16>,Compact<PerU16>);23],Compact<u16>)>'
}, },
/** /**
* Lookup512: xcm::VersionedXcm<Call> * Lookup508: pallet_xcm::pallet::Call<T>
**/
PalletXcmCall: {
_enum: {
send: {
dest: 'XcmVersionedMultiLocation',
message: 'XcmVersionedXcm',
},
teleport_assets: {
dest: 'XcmVersionedMultiLocation',
beneficiary: 'XcmVersionedMultiLocation',
assets: 'XcmVersionedMultiAssets',
feeAssetItem: 'u32',
},
reserve_transfer_assets: {
dest: 'XcmVersionedMultiLocation',
beneficiary: 'XcmVersionedMultiLocation',
assets: 'XcmVersionedMultiAssets',
feeAssetItem: 'u32',
},
execute: {
message: 'XcmVersionedXcm',
maxWeight: 'u64',
},
force_xcm_version: {
location: 'XcmV1MultiLocation',
xcmVersion: 'u32',
},
force_default_xcm_version: {
maybeXcmVersion: 'Option<u32>',
},
force_subscribe_version_notify: {
location: 'XcmVersionedMultiLocation',
},
force_unsubscribe_version_notify: {
location: 'XcmVersionedMultiLocation',
},
limited_reserve_transfer_assets: {
dest: 'XcmVersionedMultiLocation',
beneficiary: 'XcmVersionedMultiLocation',
assets: 'XcmVersionedMultiAssets',
feeAssetItem: 'u32',
weightLimit: 'XcmV2WeightLimit',
},
limited_teleport_assets: {
dest: 'XcmVersionedMultiLocation',
beneficiary: 'XcmVersionedMultiLocation',
assets: 'XcmVersionedMultiAssets',
feeAssetItem: 'u32',
weightLimit: 'XcmV2WeightLimit'
}
}
},
/**
* Lookup509: xcm::VersionedXcm<Call>
**/ **/
XcmVersionedXcm: { XcmVersionedXcm: {
_enum: { _enum: {
@@ -584,7 +659,7 @@ export default {
} }
}, },
/** /**
* Lookup513: xcm::v0::Xcm<Call> * Lookup510: xcm::v0::Xcm<Call>
**/ **/
XcmV0Xcm: { XcmV0Xcm: {
_enum: { _enum: {
@@ -638,7 +713,7 @@ export default {
} }
}, },
/** /**
* Lookup515: xcm::v0::order::Order<Call> * Lookup512: xcm::v0::order::Order<Call>
**/ **/
XcmV0Order: { XcmV0Order: {
_enum: { _enum: {
@@ -681,7 +756,7 @@ export default {
} }
}, },
/** /**
* Lookup517: xcm::v0::Response * Lookup514: xcm::v0::Response
**/ **/
XcmV0Response: { XcmV0Response: {
_enum: { _enum: {
@@ -689,7 +764,7 @@ export default {
} }
}, },
/** /**
* Lookup518: xcm::v1::Xcm<Call> * Lookup515: xcm::v1::Xcm<Call>
**/ **/
XcmV1Xcm: { XcmV1Xcm: {
_enum: { _enum: {
@@ -748,7 +823,7 @@ export default {
} }
}, },
/** /**
* Lookup520: xcm::v1::order::Order<Call> * Lookup517: xcm::v1::order::Order<Call>
**/ **/
XcmV1Order: { XcmV1Order: {
_enum: { _enum: {
@@ -793,7 +868,7 @@ export default {
} }
}, },
/** /**
* Lookup522: xcm::v1::Response * Lookup519: xcm::v1::Response
**/ **/
XcmV1Response: { XcmV1Response: {
_enum: { _enum: {
@@ -802,7 +877,7 @@ export default {
} }
}, },
/** /**
* Lookup690: pallet_xcm::pallet::QueryStatus<BlockNumber> * Lookup687: pallet_xcm::pallet::QueryStatus<BlockNumber>
**/ **/
PalletXcmQueryStatus: { PalletXcmQueryStatus: {
_enum: { _enum: {
@@ -822,7 +897,7 @@ export default {
} }
}, },
/** /**
* Lookup693: xcm::VersionedResponse * Lookup690: xcm::VersionedResponse
**/ **/
XcmVersionedResponse: { XcmVersionedResponse: {
_enum: { _enum: {
@@ -832,7 +907,7 @@ export default {
} }
}, },
/** /**
* Lookup699: pallet_xcm::pallet::VersionMigrationStage * Lookup696: pallet_xcm::pallet::VersionMigrationStage
**/ **/
PalletXcmVersionMigrationStage: { PalletXcmVersionMigrationStage: {
_enum: { _enum: {
@@ -843,7 +918,13 @@ export default {
} }
}, },
/** /**
* Lookup711: kusama_runtime::Runtime * Lookup697: pallet_xcm::pallet::Error<T>
**/
PalletXcmError: {
_enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed']
},
/**
* Lookup708: kusama_runtime::Runtime
**/ **/
KusamaRuntimeRuntime: 'Null' KusamaRuntimeRuntime: 'Null'
} as DefinitionsTypes; };
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+159 -45
View File
@@ -1,13 +1,13 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit // Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */ /* eslint-disable */
import type { Bytes, Compact, Enum, Null, Option, Struct, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types';
import type { PerU16 } from '@polkadot/types/interfaces/runtime';
import type { ITuple } from '@polkadot/types/types';
declare module '@polkadot/types/lookup' { declare module '@polkadot/types/lookup' {
/** @name KusamaRuntimeProxyType (74) */ import type { Bytes, Compact, Enum, Null, Option, Struct, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types';
import type { H256, PerU16 } from '@polkadot/types/interfaces/runtime';
import type { ITuple } from '@polkadot/types/types';
/** @name KusamaRuntimeProxyType (71) */
export interface KusamaRuntimeProxyType extends Enum { export interface KusamaRuntimeProxyType extends Enum {
readonly isAny: boolean; readonly isAny: boolean;
readonly isNonTransfer: boolean; readonly isNonTransfer: boolean;
@@ -18,13 +18,49 @@ declare module '@polkadot/types/lookup' {
readonly isAuction: boolean; readonly isAuction: boolean;
} }
/** @name XcmV1MultiLocation (108) */ /** @name PalletXcmEvent (104) */
export interface PalletXcmEvent extends Enum {
readonly isAttempted: boolean;
readonly asAttempted: XcmV2TraitsOutcome;
readonly isSent: boolean;
readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;
readonly isUnexpectedResponse: boolean;
readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;
readonly isResponseReady: boolean;
readonly asResponseReady: ITuple<[u64, XcmV2Response]>;
readonly isNotified: boolean;
readonly asNotified: ITuple<[u64, u8, u8]>;
readonly isNotifyOverweight: boolean;
readonly asNotifyOverweight: ITuple<[u64, u8, u8, u64, u64]>;
readonly isNotifyDispatchError: boolean;
readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;
readonly isNotifyDecodeFailed: boolean;
readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;
readonly isInvalidResponder: boolean;
readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;
readonly isInvalidResponderVersion: boolean;
readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;
readonly isResponseTaken: boolean;
readonly asResponseTaken: u64;
readonly isAssetsTrapped: boolean;
readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;
readonly isVersionChangeNotified: boolean;
readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;
readonly isSupportedVersionChanged: boolean;
readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;
readonly isNotifyTargetSendFail: boolean;
readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;
readonly isNotifyTargetMigrationFail: boolean;
readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;
}
/** @name XcmV1MultiLocation (105) */
export interface XcmV1MultiLocation extends Struct { export interface XcmV1MultiLocation extends Struct {
readonly parents: u8; readonly parents: u8;
readonly interior: XcmV1MultilocationJunctions; readonly interior: XcmV1MultilocationJunctions;
} }
/** @name XcmV1MultilocationJunctions (109) */ /** @name XcmV1MultilocationJunctions (106) */
export interface XcmV1MultilocationJunctions extends Enum { export interface XcmV1MultilocationJunctions extends Enum {
readonly isHere: boolean; readonly isHere: boolean;
readonly isX1: boolean; readonly isX1: boolean;
@@ -45,7 +81,7 @@ declare module '@polkadot/types/lookup' {
readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
} }
/** @name XcmV1Junction (110) */ /** @name XcmV1Junction (107) */
export interface XcmV1Junction extends Enum { export interface XcmV1Junction extends Enum {
readonly isParachain: boolean; readonly isParachain: boolean;
readonly asParachain: Compact<u32>; readonly asParachain: Compact<u32>;
@@ -78,7 +114,7 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV0JunctionNetworkId (112) */ /** @name XcmV0JunctionNetworkId (109) */
export interface XcmV0JunctionNetworkId extends Enum { export interface XcmV0JunctionNetworkId extends Enum {
readonly isAny: boolean; readonly isAny: boolean;
readonly isNamed: boolean; readonly isNamed: boolean;
@@ -87,7 +123,7 @@ declare module '@polkadot/types/lookup' {
readonly isKusama: boolean; readonly isKusama: boolean;
} }
/** @name XcmV0JunctionBodyId (114) */ /** @name XcmV0JunctionBodyId (111) */
export interface XcmV0JunctionBodyId extends Enum { export interface XcmV0JunctionBodyId extends Enum {
readonly isUnit: boolean; readonly isUnit: boolean;
readonly isNamed: boolean; readonly isNamed: boolean;
@@ -100,7 +136,7 @@ declare module '@polkadot/types/lookup' {
readonly isJudicial: boolean; readonly isJudicial: boolean;
} }
/** @name XcmV0JunctionBodyPart (115) */ /** @name XcmV0JunctionBodyPart (112) */
export interface XcmV0JunctionBodyPart extends Enum { export interface XcmV0JunctionBodyPart extends Enum {
readonly isVoice: boolean; readonly isVoice: boolean;
readonly isMembers: boolean; readonly isMembers: boolean;
@@ -124,10 +160,10 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV2Xcm (116) */ /** @name XcmV2Xcm (113) */
export interface XcmV2Xcm extends Vec<XcmV2Instruction> {} export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}
/** @name XcmV2Instruction (118) */ /** @name XcmV2Instruction (115) */
export interface XcmV2Instruction extends Enum { export interface XcmV2Instruction extends Enum {
readonly isWithdrawAsset: boolean; readonly isWithdrawAsset: boolean;
readonly asWithdrawAsset: XcmV1MultiassetMultiAssets; readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;
@@ -246,16 +282,16 @@ declare module '@polkadot/types/lookup' {
readonly isUnsubscribeVersion: boolean; readonly isUnsubscribeVersion: boolean;
} }
/** @name XcmV1MultiassetMultiAssets (119) */ /** @name XcmV1MultiassetMultiAssets (116) */
export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {} export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}
/** @name XcmV1MultiAsset (121) */ /** @name XcmV1MultiAsset (118) */
export interface XcmV1MultiAsset extends Struct { export interface XcmV1MultiAsset extends Struct {
readonly id: XcmV1MultiassetAssetId; readonly id: XcmV1MultiassetAssetId;
readonly fun: XcmV1MultiassetFungibility; readonly fun: XcmV1MultiassetFungibility;
} }
/** @name XcmV1MultiassetAssetId (122) */ /** @name XcmV1MultiassetAssetId (119) */
export interface XcmV1MultiassetAssetId extends Enum { export interface XcmV1MultiassetAssetId extends Enum {
readonly isConcrete: boolean; readonly isConcrete: boolean;
readonly asConcrete: XcmV1MultiLocation; readonly asConcrete: XcmV1MultiLocation;
@@ -263,7 +299,7 @@ declare module '@polkadot/types/lookup' {
readonly asAbstract: Bytes; readonly asAbstract: Bytes;
} }
/** @name XcmV1MultiassetFungibility (123) */ /** @name XcmV1MultiassetFungibility (120) */
export interface XcmV1MultiassetFungibility extends Enum { export interface XcmV1MultiassetFungibility extends Enum {
readonly isFungible: boolean; readonly isFungible: boolean;
readonly asFungible: Compact<u128>; readonly asFungible: Compact<u128>;
@@ -271,7 +307,7 @@ declare module '@polkadot/types/lookup' {
readonly asNonFungible: XcmV1MultiassetAssetInstance; readonly asNonFungible: XcmV1MultiassetAssetInstance;
} }
/** @name XcmV1MultiassetAssetInstance (124) */ /** @name XcmV1MultiassetAssetInstance (121) */
export interface XcmV1MultiassetAssetInstance extends Enum { export interface XcmV1MultiassetAssetInstance extends Enum {
readonly isUndefined: boolean; readonly isUndefined: boolean;
readonly isIndex: boolean; readonly isIndex: boolean;
@@ -288,7 +324,7 @@ declare module '@polkadot/types/lookup' {
readonly asBlob: Bytes; readonly asBlob: Bytes;
} }
/** @name XcmV2Response (126) */ /** @name XcmV2Response (123) */
export interface XcmV2Response extends Enum { export interface XcmV2Response extends Enum {
readonly isNull: boolean; readonly isNull: boolean;
readonly isAssets: boolean; readonly isAssets: boolean;
@@ -299,7 +335,7 @@ declare module '@polkadot/types/lookup' {
readonly asVersion: u32; readonly asVersion: u32;
} }
/** @name XcmV0OriginKind (129) */ /** @name XcmV0OriginKind (126) */
export interface XcmV0OriginKind extends Enum { export interface XcmV0OriginKind extends Enum {
readonly isNative: boolean; readonly isNative: boolean;
readonly isSovereignAccount: boolean; readonly isSovereignAccount: boolean;
@@ -307,12 +343,12 @@ declare module '@polkadot/types/lookup' {
readonly isXcm: boolean; readonly isXcm: boolean;
} }
/** @name XcmDoubleEncoded (130) */ /** @name XcmDoubleEncoded (127) */
export interface XcmDoubleEncoded extends Struct { export interface XcmDoubleEncoded extends Struct {
readonly encoded: Bytes; readonly encoded: Bytes;
} }
/** @name XcmV1MultiassetMultiAssetFilter (131) */ /** @name XcmV1MultiassetMultiAssetFilter (128) */
export interface XcmV1MultiassetMultiAssetFilter extends Enum { export interface XcmV1MultiassetMultiAssetFilter extends Enum {
readonly isDefinite: boolean; readonly isDefinite: boolean;
readonly asDefinite: XcmV1MultiassetMultiAssets; readonly asDefinite: XcmV1MultiassetMultiAssets;
@@ -320,7 +356,7 @@ declare module '@polkadot/types/lookup' {
readonly asWild: XcmV1MultiassetWildMultiAsset; readonly asWild: XcmV1MultiassetWildMultiAsset;
} }
/** @name XcmV1MultiassetWildMultiAsset (132) */ /** @name XcmV1MultiassetWildMultiAsset (129) */
export interface XcmV1MultiassetWildMultiAsset extends Enum { export interface XcmV1MultiassetWildMultiAsset extends Enum {
readonly isAll: boolean; readonly isAll: boolean;
readonly isAllOf: boolean; readonly isAllOf: boolean;
@@ -330,20 +366,20 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV1MultiassetWildFungibility (133) */ /** @name XcmV1MultiassetWildFungibility (130) */
export interface XcmV1MultiassetWildFungibility extends Enum { export interface XcmV1MultiassetWildFungibility extends Enum {
readonly isFungible: boolean; readonly isFungible: boolean;
readonly isNonFungible: boolean; readonly isNonFungible: boolean;
} }
/** @name XcmV2WeightLimit (134) */ /** @name XcmV2WeightLimit (131) */
export interface XcmV2WeightLimit extends Enum { export interface XcmV2WeightLimit extends Enum {
readonly isUnlimited: boolean; readonly isUnlimited: boolean;
readonly isLimited: boolean; readonly isLimited: boolean;
readonly asLimited: Compact<u64>; readonly asLimited: Compact<u64>;
} }
/** @name XcmVersionedMultiAssets (136) */ /** @name XcmVersionedMultiAssets (133) */
export interface XcmVersionedMultiAssets extends Enum { export interface XcmVersionedMultiAssets extends Enum {
readonly isV0: boolean; readonly isV0: boolean;
readonly asV0: Vec<XcmV0MultiAsset>; readonly asV0: Vec<XcmV0MultiAsset>;
@@ -351,7 +387,7 @@ declare module '@polkadot/types/lookup' {
readonly asV1: XcmV1MultiassetMultiAssets; readonly asV1: XcmV1MultiassetMultiAssets;
} }
/** @name XcmV0MultiAsset (138) */ /** @name XcmV0MultiAsset (135) */
export interface XcmV0MultiAsset extends Enum { export interface XcmV0MultiAsset extends Enum {
readonly isNone: boolean; readonly isNone: boolean;
readonly isAll: boolean; readonly isAll: boolean;
@@ -395,7 +431,7 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV0MultiLocation (139) */ /** @name XcmV0MultiLocation (136) */
export interface XcmV0MultiLocation extends Enum { export interface XcmV0MultiLocation extends Enum {
readonly isNull: boolean; readonly isNull: boolean;
readonly isX1: boolean; readonly isX1: boolean;
@@ -416,7 +452,7 @@ declare module '@polkadot/types/lookup' {
readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
} }
/** @name XcmV0Junction (140) */ /** @name XcmV0Junction (137) */
export interface XcmV0Junction extends Enum { export interface XcmV0Junction extends Enum {
readonly isParent: boolean; readonly isParent: boolean;
readonly isParachain: boolean; readonly isParachain: boolean;
@@ -450,7 +486,7 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmVersionedMultiLocation (141) */ /** @name XcmVersionedMultiLocation (138) */
export interface XcmVersionedMultiLocation extends Enum { export interface XcmVersionedMultiLocation extends Enum {
readonly isV0: boolean; readonly isV0: boolean;
readonly asV0: XcmV0MultiLocation; readonly asV0: XcmV0MultiLocation;
@@ -458,7 +494,7 @@ declare module '@polkadot/types/lookup' {
readonly asV1: XcmV1MultiLocation; readonly asV1: XcmV1MultiLocation;
} }
/** @name KusamaRuntimeSessionKeys (241) */ /** @name KusamaRuntimeSessionKeys (238) */
export interface KusamaRuntimeSessionKeys extends Struct { export interface KusamaRuntimeSessionKeys extends Struct {
readonly grandpa: SpFinalityGrandpaAppPublic; readonly grandpa: SpFinalityGrandpaAppPublic;
readonly babe: SpConsensusBabeAppPublic; readonly babe: SpConsensusBabeAppPublic;
@@ -468,7 +504,7 @@ declare module '@polkadot/types/lookup' {
readonly authorityDiscovery: SpAuthorityDiscoveryAppPublic; readonly authorityDiscovery: SpAuthorityDiscoveryAppPublic;
} }
/** @name KusamaRuntimeOriginCaller (316) */ /** @name KusamaRuntimeOriginCaller (313) */
export interface KusamaRuntimeOriginCaller extends Enum { export interface KusamaRuntimeOriginCaller extends Enum {
readonly isSystem: boolean; readonly isSystem: boolean;
readonly asSystem: FrameSystemRawOrigin; readonly asSystem: FrameSystemRawOrigin;
@@ -483,7 +519,7 @@ declare module '@polkadot/types/lookup' {
readonly asXcmPallet: PalletXcmOrigin; readonly asXcmPallet: PalletXcmOrigin;
} }
/** @name PalletXcmOrigin (321) */ /** @name PalletXcmOrigin (318) */
export interface PalletXcmOrigin extends Enum { export interface PalletXcmOrigin extends Enum {
readonly isXcm: boolean; readonly isXcm: boolean;
readonly asXcm: XcmV1MultiLocation; readonly asXcm: XcmV1MultiLocation;
@@ -491,7 +527,7 @@ declare module '@polkadot/types/lookup' {
readonly asResponse: XcmV1MultiLocation; readonly asResponse: XcmV1MultiLocation;
} }
/** @name KusamaRuntimeNposCompactSolution24 (379) */ /** @name KusamaRuntimeNposCompactSolution24 (376) */
export interface KusamaRuntimeNposCompactSolution24 extends Struct { export interface KusamaRuntimeNposCompactSolution24 extends Struct {
readonly votes1: Vec<ITuple<[Compact<u32>, Compact<u16>]>>; readonly votes1: Vec<ITuple<[Compact<u32>, Compact<u16>]>>;
readonly votes2: Vec<ITuple<[Compact<u32>, ITuple<[Compact<u16>, Compact<PerU16>]>, Compact<u16>]>>; readonly votes2: Vec<ITuple<[Compact<u32>, ITuple<[Compact<u16>, Compact<PerU16>]>, Compact<u16>]>>;
@@ -519,7 +555,68 @@ declare module '@polkadot/types/lookup' {
readonly votes24: Vec<ITuple<[Compact<u32>, Vec<ITuple<[Compact<u16>, Compact<PerU16>]>>, Compact<u16>]>>; readonly votes24: Vec<ITuple<[Compact<u32>, Vec<ITuple<[Compact<u16>, Compact<PerU16>]>>, Compact<u16>]>>;
} }
/** @name XcmVersionedXcm (512) */ /** @name PalletXcmCall (508) */
export interface PalletXcmCall extends Enum {
readonly isSend: boolean;
readonly asSend: {
readonly dest: XcmVersionedMultiLocation;
readonly message: XcmVersionedXcm;
} & Struct;
readonly isTeleportAssets: boolean;
readonly asTeleportAssets: {
readonly dest: XcmVersionedMultiLocation;
readonly beneficiary: XcmVersionedMultiLocation;
readonly assets: XcmVersionedMultiAssets;
readonly feeAssetItem: u32;
} & Struct;
readonly isReserveTransferAssets: boolean;
readonly asReserveTransferAssets: {
readonly dest: XcmVersionedMultiLocation;
readonly beneficiary: XcmVersionedMultiLocation;
readonly assets: XcmVersionedMultiAssets;
readonly feeAssetItem: u32;
} & Struct;
readonly isExecute: boolean;
readonly asExecute: {
readonly message: XcmVersionedXcm;
readonly maxWeight: u64;
} & Struct;
readonly isForceXcmVersion: boolean;
readonly asForceXcmVersion: {
readonly location: XcmV1MultiLocation;
readonly xcmVersion: u32;
} & Struct;
readonly isForceDefaultXcmVersion: boolean;
readonly asForceDefaultXcmVersion: {
readonly maybeXcmVersion: Option<u32>;
} & Struct;
readonly isForceSubscribeVersionNotify: boolean;
readonly asForceSubscribeVersionNotify: {
readonly location: XcmVersionedMultiLocation;
} & Struct;
readonly isForceUnsubscribeVersionNotify: boolean;
readonly asForceUnsubscribeVersionNotify: {
readonly location: XcmVersionedMultiLocation;
} & Struct;
readonly isLimitedReserveTransferAssets: boolean;
readonly asLimitedReserveTransferAssets: {
readonly dest: XcmVersionedMultiLocation;
readonly beneficiary: XcmVersionedMultiLocation;
readonly assets: XcmVersionedMultiAssets;
readonly feeAssetItem: u32;
readonly weightLimit: XcmV2WeightLimit;
} & Struct;
readonly isLimitedTeleportAssets: boolean;
readonly asLimitedTeleportAssets: {
readonly dest: XcmVersionedMultiLocation;
readonly beneficiary: XcmVersionedMultiLocation;
readonly assets: XcmVersionedMultiAssets;
readonly feeAssetItem: u32;
readonly weightLimit: XcmV2WeightLimit;
} & Struct;
}
/** @name XcmVersionedXcm (509) */
export interface XcmVersionedXcm extends Enum { export interface XcmVersionedXcm extends Enum {
readonly isV0: boolean; readonly isV0: boolean;
readonly asV0: XcmV0Xcm; readonly asV0: XcmV0Xcm;
@@ -529,7 +626,7 @@ declare module '@polkadot/types/lookup' {
readonly asV2: XcmV2Xcm; readonly asV2: XcmV2Xcm;
} }
/** @name XcmV0Xcm (513) */ /** @name XcmV0Xcm (510) */
export interface XcmV0Xcm extends Enum { export interface XcmV0Xcm extends Enum {
readonly isWithdrawAsset: boolean; readonly isWithdrawAsset: boolean;
readonly asWithdrawAsset: { readonly asWithdrawAsset: {
@@ -591,7 +688,7 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV0Order (515) */ /** @name XcmV0Order (512) */
export interface XcmV0Order extends Enum { export interface XcmV0Order extends Enum {
readonly isNull: boolean; readonly isNull: boolean;
readonly isDepositAsset: boolean; readonly isDepositAsset: boolean;
@@ -638,13 +735,13 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV0Response (517) */ /** @name XcmV0Response (514) */
export interface XcmV0Response extends Enum { export interface XcmV0Response extends Enum {
readonly isAssets: boolean; readonly isAssets: boolean;
readonly asAssets: Vec<XcmV0MultiAsset>; readonly asAssets: Vec<XcmV0MultiAsset>;
} }
/** @name XcmV1Xcm (518) */ /** @name XcmV1Xcm (515) */
export interface XcmV1Xcm extends Enum { export interface XcmV1Xcm extends Enum {
readonly isWithdrawAsset: boolean; readonly isWithdrawAsset: boolean;
readonly asWithdrawAsset: { readonly asWithdrawAsset: {
@@ -712,7 +809,7 @@ declare module '@polkadot/types/lookup' {
readonly isUnsubscribeVersion: boolean; readonly isUnsubscribeVersion: boolean;
} }
/** @name XcmV1Order (520) */ /** @name XcmV1Order (517) */
export interface XcmV1Order extends Enum { export interface XcmV1Order extends Enum {
readonly isNoop: boolean; readonly isNoop: boolean;
readonly isDepositAsset: boolean; readonly isDepositAsset: boolean;
@@ -761,7 +858,7 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmV1Response (522) */ /** @name XcmV1Response (519) */
export interface XcmV1Response extends Enum { export interface XcmV1Response extends Enum {
readonly isAssets: boolean; readonly isAssets: boolean;
readonly asAssets: XcmV1MultiassetMultiAssets; readonly asAssets: XcmV1MultiassetMultiAssets;
@@ -769,7 +866,7 @@ declare module '@polkadot/types/lookup' {
readonly asVersion: u32; readonly asVersion: u32;
} }
/** @name PalletXcmQueryStatus (690) */ /** @name PalletXcmQueryStatus (687) */
export interface PalletXcmQueryStatus extends Enum { export interface PalletXcmQueryStatus extends Enum {
readonly isPending: boolean; readonly isPending: boolean;
readonly asPending: { readonly asPending: {
@@ -789,7 +886,7 @@ declare module '@polkadot/types/lookup' {
} & Struct; } & Struct;
} }
/** @name XcmVersionedResponse (693) */ /** @name XcmVersionedResponse (690) */
export interface XcmVersionedResponse extends Enum { export interface XcmVersionedResponse extends Enum {
readonly isV0: boolean; readonly isV0: boolean;
readonly asV0: XcmV0Response; readonly asV0: XcmV0Response;
@@ -799,7 +896,7 @@ declare module '@polkadot/types/lookup' {
readonly asV2: XcmV2Response; readonly asV2: XcmV2Response;
} }
/** @name PalletXcmVersionMigrationStage (699) */ /** @name PalletXcmVersionMigrationStage (696) */
export interface PalletXcmVersionMigrationStage extends Enum { export interface PalletXcmVersionMigrationStage extends Enum {
readonly isMigrateSupportedVersion: boolean; readonly isMigrateSupportedVersion: boolean;
readonly isMigrateVersionNotifiers: boolean; readonly isMigrateVersionNotifiers: boolean;
@@ -808,7 +905,24 @@ declare module '@polkadot/types/lookup' {
readonly isMigrateAndNotifyOldTargets: boolean; readonly isMigrateAndNotifyOldTargets: boolean;
} }
/** @name KusamaRuntimeRuntime (711) */ /** @name PalletXcmError (697) */
export interface PalletXcmError extends Enum {
readonly isUnreachable: boolean;
readonly isSendFailure: boolean;
readonly isFiltered: boolean;
readonly isUnweighableMessage: boolean;
readonly isDestinationNotInvertible: boolean;
readonly isEmpty: boolean;
readonly isCannotReanchor: boolean;
readonly isTooManyAssets: boolean;
readonly isInvalidOrigin: boolean;
readonly isBadVersion: boolean;
readonly isBadLocation: boolean;
readonly isNoSubscription: boolean;
readonly isAlreadySubscribed: boolean;
}
/** @name KusamaRuntimeRuntime (708) */
export type KusamaRuntimeRuntime = Null; export type KusamaRuntimeRuntime = Null;
} }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -81,8 +81,9 @@ assert(hh[0].bitLength() && ms[0].strings && ms[1].values && ms[2].keys, 'All ok
const tt1 = registry.createType('(u32, Compact<u64>, u128 , Something)'); const tt1 = registry.createType('(u32, Compact<u64>, u128 , Something)');
// unwraps into a u32 // unwraps into a u32
const tt2 = registry.createType('(((u32)))'); const tt2 = registry.createType('(((u32)))');
// TEST: Adding a single param makes this go over the recursion limit in 4.4.4
// lots and lots of params (indicates recursion limit) // lots and lots of params (indicates recursion limit)
const tt4 = registry.createType('(u8,u16,u32,u64,u128,u256,u8,u16,u32,u64,u128,u256,u8,u16,u32,u64,u128,u256)'); const tt4 = registry.createType('(u8,u16,u32,u64,u128,u256,u8,u16,u32,u64,u128,u256,u8,u16,u32,u64,u128,u256,u8)');
// empty // empty
const tt5 = registry.createType('()'); const tt5 = registry.createType('()');
// nested tuples // nested tuples
+11 -15
View File
@@ -6,7 +6,7 @@ import type { CodecHash, Hash } from '../interfaces/runtime';
import type { AnyNumber, INumber, Registry } from '../types'; import type { AnyNumber, INumber, Registry } from '../types';
import type { UIntBitLength } from './types'; import type { UIntBitLength } from './types';
import { assert, BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_QUINTILL, BN_ZERO, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isBn, isHex, isU8a, stringify, u8aToBn } from '@polkadot/util'; import { assert, BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_QUINTILL, BN_ZERO, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isBn, isHex, isU8a, u8aToBn } from '@polkadot/util';
export const DEFAULT_UINT_BITS = 64; export const DEFAULT_UINT_BITS = 64;
@@ -28,20 +28,8 @@ function toPercentage (value: BN, divisor: BN): string {
/** @internal */ /** @internal */
function decodeAbstractInt (value: AnyNumber, bitLength: UIntBitLength, isNegative: boolean): string { function decodeAbstractInt (value: AnyNumber, bitLength: UIntBitLength, isNegative: boolean): string {
// This function returns a string, which will be passed in the BN
// constructor. It would be ideal to actually return a BN, but there's a
// bug: https://github.com/indutny/bn.js/issues/206.
if (isU8a(value)) { if (isU8a(value)) {
if (!value.length) { return u8aToBn(value.subarray(0, bitLength / 8), { isLe: true, isNegative }).toString();
return '0';
}
try {
// NOTE When passing u8a in (typically from decoded data), it is always Little Endian
return u8aToBn(value.subarray(0, bitLength / 8), { isLe: true, isNegative }).toString();
} catch (error) {
throw new Error(`AbstractInt: failed on ${stringify(value)}:: ${(error as Error).message}`);
}
} else if (isBn(value)) { } else if (isBn(value)) {
return value.toString(); return value.toString();
} else if (isHex(value, -1, true)) { } else if (isHex(value, -1, true)) {
@@ -68,7 +56,15 @@ export abstract class AbstractInt extends BN implements INumber {
readonly #isSigned: boolean; readonly #isSigned: boolean;
constructor (registry: Registry, value: AnyNumber = 0, bitLength: UIntBitLength = DEFAULT_UINT_BITS, isSigned = false) { constructor (registry: Registry, value: AnyNumber = 0, bitLength: UIntBitLength = DEFAULT_UINT_BITS, isSigned = false) {
super(decodeAbstractInt(value, bitLength, isSigned)); // Construct via a string, which will be passed in the BN constructor.
// It would be ideal to actually return a BN, but there is an issue:
// https://github.com/indutny/bn.js/issues/206
super(
// shortcut isU8a as used in SCALE decoding
isU8a(value)
? u8aToBn(value.subarray(0, bitLength / 8), { isLe: true, isNegative: isSigned }).toString()
: decodeAbstractInt(value, bitLength, isSigned)
);
this.registry = registry; this.registry = registry;
this.#bitLength = bitLength; this.#bitLength = bitLength;
+2 -2
View File
@@ -7,7 +7,7 @@ import type { AnyJson, Codec, Constructor, ISet, Registry } from '../types';
import { compactFromU8a, compactToU8a, isHex, isU8a, logger, stringify, u8aConcat, u8aToHex, u8aToU8a } from '@polkadot/util'; import { compactFromU8a, compactToU8a, isHex, isU8a, logger, stringify, u8aConcat, u8aToHex, u8aToU8a } from '@polkadot/util';
import { compareSet, decodeU8a, sortSet, typeToConstructor } from './utils'; import { compareSet, decodeU8aVec, sortSet, typeToConstructor } from './utils';
const l = logger('BTreeSet'); const l = logger('BTreeSet');
@@ -15,7 +15,7 @@ const l = logger('BTreeSet');
function decodeSetFromU8a<V extends Codec> (registry: Registry, ValClass: Constructor<V>, u8a: Uint8Array): [Set<V>, number] { function decodeSetFromU8a<V extends Codec> (registry: Registry, ValClass: Constructor<V>, u8a: Uint8Array): [Set<V>, number] {
const output = new Set<V>(); const output = new Set<V>();
const [offset, length] = compactFromU8a(u8a); const [offset, length] = compactFromU8a(u8a);
const [values, decodedLength] = decodeU8a<V>(registry, u8a.subarray(offset), new Array(length.toNumber()).fill(ValClass)); const [values, decodedLength] = decodeU8aVec(registry, u8a, offset, ValClass, length.toNumber());
for (let i = 0; i < values.length; i++) { for (let i = 0; i < values.length; i++) {
output.add(values[i]); output.add(values[i]);
+48 -59
View File
@@ -5,7 +5,7 @@ import type { HexString } from '@polkadot/util/types';
import type { CodecHash, Hash } from '../interfaces'; import type { CodecHash, Hash } from '../interfaces';
import type { AnyJson, Codec, Constructor, IEnum, Registry } from '../types'; import type { AnyJson, Codec, Constructor, IEnum, Registry } from '../types';
import { assert, hexToU8a, isHex, isNumber, isObject, isString, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, stringUpperFirst, u8aConcat, u8aToHex } from '@polkadot/util'; import { assert, isHex, isNumber, isObject, isString, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, stringPascalCase, u8aConcat, u8aToHex, u8aToU8a } from '@polkadot/util';
import { Null } from '../primitive/Null'; import { Null } from '../primitive/Null';
import { mapToTypeMap, typesToMap } from './utils'; import { mapToTypeMap, typesToMap } from './utils';
@@ -40,40 +40,37 @@ function isRustEnum (def: Record<string, string | Constructor> | Record<string,
} }
function extractDef (registry: Registry, _def: Record<string, string | Constructor> | Record<string, number> | string[]): { def: TypesDef; isBasic: boolean; isIndexed: boolean } { function extractDef (registry: Registry, _def: Record<string, string | Constructor> | Record<string, number> | string[]): { def: TypesDef; isBasic: boolean; isIndexed: boolean } {
if (Array.isArray(_def)) { const def: TypesDef = {};
return {
def: _def.reduce((def: TypesDef, key, index): TypesDef => {
def[key] = { Type: Null, index };
return def;
}, {}),
isBasic: true,
isIndexed: false
};
}
let isBasic: boolean; let isBasic: boolean;
let isIndexed: boolean; let isIndexed: boolean;
let def: TypesDef;
if (isRustEnum(_def)) { if (Array.isArray(_def)) {
def = Object for (let i = 0; i < _def.length; i++) {
.entries(mapToTypeMap(registry, _def)) def[_def[i]] = { Type: Null, index: i };
.reduce((def: TypesDef, [key, Type], index): TypesDef => { }
def[key] = { Type, index };
isBasic = true;
isIndexed = false;
} else if (isRustEnum(_def)) {
const entries = Object.entries(mapToTypeMap(registry, _def));
for (let i = 0; i < entries.length; i++) {
const [key, Type] = entries[i];
def[key] = { Type, index: i };
}
return def;
}, {});
isBasic = !Object.values(def).some(({ Type }) => Type !== Null); isBasic = !Object.values(def).some(({ Type }) => Type !== Null);
isIndexed = false; isIndexed = false;
} else { } else {
def = Object const entries = Object.entries(_def);
.entries(_def)
.reduce((def: TypesDef, [key, index]): TypesDef => { for (let i = 0; i < entries.length; i++) {
def[key] = { Type: Null, index }; const [key, index] = entries[i];
def[key] = { Type: Null, index };
}
return def;
}, {});
isBasic = true; isBasic = true;
isIndexed = true; isIndexed = true;
} }
@@ -114,23 +111,24 @@ function decodeFromJSON (registry: Registry, def: TypesDef, key: string, value?:
} }
} }
function decodeFromString (registry: Registry, def: TypesDef, value: string): Decoded { function decodeEnum (registry: Registry, def: TypesDef, value?: unknown, index?: number): Decoded {
return isHex(value) // NOTE We check the index path first, before looking at values - this allows treating
// eslint-disable-next-line @typescript-eslint/no-use-before-define // the optional indexes before anything else, more-specific > less-specific
? decodeFromValue(registry, def, hexToU8a(value)) if (isNumber(index)) {
: decodeFromJSON(registry, def, value); return createFromValue(registry, def, index, value);
} } else if (isU8a(value) || isHex(value)) {
const u8a = u8aToU8a(value);
function decodeFromValue (registry: Registry, def: TypesDef, value?: unknown): Decoded {
if (isU8a(value)) {
// nested, we don't want to match isObject below // nested, we don't want to match isObject below
if (value.length) { if (u8a.length) {
return createFromValue(registry, def, value[0], value.subarray(1)); return createFromValue(registry, def, u8a[0], u8a.subarray(1));
} }
} else if (value instanceof Enum) {
return createFromValue(registry, def, value.index, value.value);
} else if (isNumber(value)) { } else if (isNumber(value)) {
return createFromValue(registry, def, value); return createFromValue(registry, def, value);
} else if (isString(value)) { } else if (isString(value)) {
return decodeFromString(registry, def, value.toString()); return decodeFromJSON(registry, def, value.toString());
} else if (isObject(value)) { } else if (isObject(value)) {
const key = Object.keys(value)[0]; const key = Object.keys(value)[0];
@@ -141,19 +139,6 @@ function decodeFromValue (registry: Registry, def: TypesDef, value?: unknown): D
return createFromValue(registry, def, Object.values(def)[0].index); return createFromValue(registry, def, Object.values(def)[0].index);
} }
function decodeEnum (registry: Registry, def: TypesDef, value?: unknown, index?: number): Decoded {
// NOTE We check the index path first, before looking at values - this allows treating
// the optional indexes before anything else, more-specific > less-specific
if (isNumber(index)) {
return createFromValue(registry, def, index, value);
// eslint-disable-next-line @typescript-eslint/no-use-before-define
} else if (value instanceof Enum) {
return createFromValue(registry, def, value.index, value.value);
}
return decodeFromValue(registry, def, value);
}
/** /**
* @name Enum * @name Enum
* @description * @description
@@ -179,15 +164,19 @@ export class Enum implements IEnum {
readonly #raw: Codec; readonly #raw: Codec;
constructor (registry: Registry, def: Record<string, string | Constructor> | Record<string, number> | string[], value?: unknown, index?: number) { constructor (registry: Registry, Types: Record<string, string | Constructor> | Record<string, number> | string[], value?: unknown, index?: number) {
const defInfo = extractDef(registry, def); const { def, isBasic, isIndexed } = extractDef(registry, Types);
const decoded = decodeEnum(registry, defInfo.def, value, index);
// shortcut isU8a as used in SCALE decoding
const decoded = isU8a(value) && value.length && !isNumber(index)
? createFromValue(registry, def, value[0], value.subarray(1))
: decodeEnum(registry, def, value, index);
this.registry = registry; this.registry = registry;
this.#def = defInfo.def; this.#def = def;
this.#isBasic = defInfo.isBasic; this.#isBasic = isBasic;
this.#isIndexed = defInfo.isIndexed; this.#isIndexed = isIndexed;
this.#indexes = Object.values(defInfo.def).map(({ index }) => index); this.#indexes = Object.values(def).map(({ index }) => index);
this.#entryIndex = this.#indexes.indexOf(decoded.index) || 0; this.#entryIndex = this.#indexes.indexOf(decoded.index) || 0;
this.#raw = decoded.value; this.#raw = decoded.value;
@@ -204,7 +193,7 @@ export class Enum implements IEnum {
const isKeys = new Array<string>(keys.length); const isKeys = new Array<string>(keys.length);
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
const name = stringUpperFirst(stringCamelCase(keys[i].replace(' ', '_'))); const name = stringPascalCase(keys[i].replace(' ', '_'));
asKeys[i] = `as${name}`; asKeys[i] = `as${name}`;
isKeys[i] = `is${name}`; isKeys[i] = `is${name}`;
+18
View File
@@ -102,6 +102,24 @@ describe('Option', (): void => {
).toEqual(new Uint8Array([0])); ).toEqual(new Uint8Array([0]));
}); });
it('converts toJSON() as null without', (): void => {
expect(
new Option(registry, Text).toJSON()
).toEqual(null);
});
it('converts toJSON() as non-null with Bytes', (): void => {
expect(
new Option(registry, Bytes, 'abcde').toJSON()
).toEqual('0x6162636465');
});
it('converts toJSON() as non-null with Text', (): void => {
expect(
new Option(registry, Text, 'abcde').toJSON()
).toEqual('abcde');
});
describe('utils', (): void => { describe('utils', (): void => {
const test = new Option(registry, Text, '1234'); const test = new Option(registry, Text, '1234');
+22 -15
View File
@@ -5,22 +5,20 @@ import type { HexString } from '@polkadot/util/types';
import type { CodecHash, Hash } from '../interfaces'; import type { CodecHash, Hash } from '../interfaces';
import type { AnyJson, Codec, Constructor, IOption, Registry } from '../types'; import type { AnyJson, Codec, Constructor, IOption, Registry } from '../types';
import { assert, isNull, isU8a, isUndefined, u8aToHex } from '@polkadot/util'; import { assert, isCodec, isNull, isU8a, isUndefined, u8aToHex } from '@polkadot/util';
import { Null } from '../primitive/Null'; import { Null } from '../primitive/Null';
import { typeToConstructor } from './utils'; import { typeToConstructor } from './utils';
/** @internal */ /** @internal */
function decodeOption (registry: Registry, typeName: Constructor | string, value?: unknown): Codec { function decodeOption (registry: Registry, Type: Constructor, value?: unknown): Codec {
if (isNull(value) || isUndefined(value) || value instanceof Null || value === '0x') { // In the case of an option, unwrap the inner
return new Null(registry); if (value instanceof Option) {
value = value.value;
} }
const Type = typeToConstructor(registry, typeName); if (isNull(value) || isUndefined(value) || value instanceof Null || value === '0x') {
return new Null(registry);
// eslint-disable-next-line @typescript-eslint/no-use-before-define
if (value instanceof Option) {
return decodeOption(registry, Type, value.value);
} else if (value instanceof Type) { } else if (value instanceof Type) {
// don't re-create, use as it (which also caters for derived types) // don't re-create, use as it (which also caters for derived types)
return value; return value;
@@ -55,12 +53,19 @@ export class Option<T extends Codec> implements IOption<T> {
readonly #raw: T; readonly #raw: T;
constructor (registry: Registry, typeName: Constructor<T> | string, value?: unknown) { constructor (registry: Registry, typeName: Constructor<T> | string, value?: unknown) {
this.registry = registry; const Type = typeToConstructor(registry, typeName);
this.#Type = typeToConstructor(registry, typeName); const decoded = isU8a(value) && value.length && !isCodec(value)
this.#raw = decodeOption(registry, typeName, value) as T; ? value[0] === 0
? new Null(registry)
: new Type(registry, value.subarray(1))
: decodeOption(registry, Type, value);
if (this.#raw.initialU8aLength) { this.registry = registry;
this.#initialU8aLength = 1 + this.#raw.initialU8aLength; this.#Type = Type;
this.#raw = decoded as T;
if (decoded.initialU8aLength) {
this.#initialU8aLength = 1 + decoded.initialU8aLength;
} }
} }
@@ -155,7 +160,9 @@ export class Option<T extends Codec> implements IOption<T> {
* @description Converts the Object to JSON, typically used for RPC transfers * @description Converts the Object to JSON, typically used for RPC transfers
*/ */
public toJSON (): AnyJson { public toJSON (): AnyJson {
return this.#raw.toJSON(); return this.isNone
? null
: this.#raw.toJSON();
} }
/** /**
+2 -2
View File
@@ -5,7 +5,7 @@ import type { HexString } from '@polkadot/util/types';
import type { CodecHash, Hash } from '../interfaces/runtime'; import type { CodecHash, Hash } from '../interfaces/runtime';
import type { Constructor, ISet, Registry } from '../types'; import type { Constructor, ISet, Registry } from '../types';
import { assert, BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, stringUpperFirst, u8aToBn, u8aToHex, u8aToU8a } from '@polkadot/util'; import { assert, BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringify, stringPascalCase, u8aToBn, u8aToHex, u8aToU8a } from '@polkadot/util';
import { compareArray } from './utils'; import { compareArray } from './utils';
@@ -108,7 +108,7 @@ export class CodecSet extends Set<string> implements ISet<string> {
const isKeys = new Array<string>(keys.length); const isKeys = new Array<string>(keys.length);
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
isKeys[i] = `is${stringUpperFirst(stringCamelCase(keys[i]))}`; isKeys[i] = `is${stringPascalCase(keys[i])}`;
} }
return class extends CodecSet { return class extends CodecSet {
+12 -39
View File
@@ -5,14 +5,14 @@ import type { HexString } from '@polkadot/util/types';
import type { CodecHash, Hash } from '../interfaces/runtime'; import type { CodecHash, Hash } from '../interfaces/runtime';
import type { AnyJson, BareOpts, Codec, Constructor, ConstructorDef, IStruct, Registry } from '../types'; import type { AnyJson, BareOpts, Codec, Constructor, ConstructorDef, IStruct, Registry } from '../types';
import { assert, hexToU8a, isBoolean, isFunction, isHex, isObject, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, u8aConcat, u8aToHex } from '@polkadot/util'; import { assert, isBoolean, isFunction, isHex, isObject, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, u8aConcat, u8aToHex, u8aToU8a } from '@polkadot/util';
import { compareMap, decodeU8a, mapToTypeMap, typesToMap } from './utils'; import { compareMap, decodeU8a, mapToTypeMap, typesToMap } from './utils';
type TypesDef<T = Codec> = Record<string, string | Constructor<T>>; type TypesDef<T = Codec> = Record<string, string | Constructor<T>>;
/** @internal */ /** @internal */
function decodeStructFromObject (registry: Registry, Types: ConstructorDef, value: any, jsonMap: Map<string, string>): Iterable<[string, Codec]> { function decodeStructFromObject (registry: Registry, Types: ConstructorDef, value: any, jsonMap: Map<string, string>): [Iterable<[string, Codec]>, number] {
let jsonObj: Record<string, unknown> | undefined; let jsonObj: Record<string, unknown> | undefined;
const inputKeys = Object.keys(Types); const inputKeys = Object.keys(Types);
const typeofArray = Array.isArray(value); const typeofArray = Array.isArray(value);
@@ -71,40 +71,7 @@ function decodeStructFromObject (registry: Registry, Types: ConstructorDef, valu
} }
} }
return raw; return [raw, 0];
}
function decodeZip (k: string, v: Codec): [string, Codec] {
return [k, v];
}
/**
* Decode input to pass into constructor.
*
* @param Types - Types definition.
* @param value - Value to decode, one of:
* - null
* - undefined
* - hex
* - Uint8Array
* - object with `{ key1: value1, key2: value2 }`, assuming `key1` and `key2`
* are also keys in `Types`
* - array with `[value1, value2]` assuming the array has the same length as
* `Object.keys(Types)`
* @param jsonMap
* @internal
*/
function decodeStruct (registry: Registry, Types: ConstructorDef, value: unknown, jsonMap: Map<string, string>): [Iterable<[string, Codec]>, number] {
if (isU8a(value)) {
return decodeU8a(registry, value, Types, decodeZip);
} else if (value instanceof Struct) {
return [value as Iterable<[string, Codec]>, 0];
} else if (isHex(value)) {
return decodeStruct(registry, Types, hexToU8a(value), jsonMap);
}
// We assume from here that value is a JS object (Array, Map, Object)
return [decodeStructFromObject(registry, Types, value || {}, jsonMap), 0];
} }
/** /**
@@ -134,16 +101,22 @@ export class Struct<
readonly #Types: ConstructorDef; readonly #Types: ConstructorDef;
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
constructor (registry: Registry, Types: S, value?: V | Map<unknown, unknown> | unknown[] | HexString | null, jsonMap = new Map<string, string>()) { constructor (registry: Registry, Types: S, value?: V | Map<unknown, unknown> | unknown[] | HexString | null, jsonMap = new Map<string, string>()) {
const [decoded, decodedLength] = decodeStruct(registry, mapToTypeMap(registry, Types), value, jsonMap); const typeMap = mapToTypeMap(registry, Types);
const [decoded, decodedLength] = isU8a(value)
? decodeU8a<Codec, [string, Codec]>(registry, value, typeMap, true)
: isHex(value)
? decodeU8a<Codec, [string, Codec]>(registry, u8aToU8a(value), typeMap, true)
: value instanceof Struct
? [value as Iterable<[string, Codec]>, 0]
: decodeStructFromObject(registry, typeMap, value || {}, jsonMap);
super(decoded); super(decoded);
this.registry = registry; this.registry = registry;
this.initialU8aLength = decodedLength; this.initialU8aLength = decodedLength;
this.#jsonMap = jsonMap; this.#jsonMap = jsonMap;
this.#Types = mapToTypeMap(registry, Types); this.#Types = typeMap;
} }
public static with<S extends TypesDef> (Types: S, jsonMap?: Map<string, string>): Constructor<Struct<S>> { public static with<S extends TypesDef> (Types: S, jsonMap?: Map<string, string>): Constructor<Struct<S>> {

Some files were not shown because too many files have changed in this diff Show More