Compare commits

...
85 Commits
Author SHA1 Message Date
Github Actions 4e7d6f03f5 [CI Skip] release/stable 6.4.1
skip-checks: true
2021-10-17 18:26:21 +00:00
Jaco cc3f258a5b 6.4.1 (#4074)
* 6.4.1

* 6.4.0  version bump

* CHANGELOG
2021-10-17 21:10:42 +03:00
Jaco 4c776c260d Bump dev (#4073) 2021-10-17 20:30:16 +03:00
Github Actions f2c636217c [CI Skip] release/beta 6.3.2-19
skip-checks: true
2021-10-17 12:23:45 +00:00
Jaco d7ab3bfbc1 Filter unused enum fields for v14 (#4071) 2021-10-17 15:05:29 +03:00
Github Actions 567504329d [CI Skip] release/beta 6.3.2-18
skip-checks: true
2021-10-17 12:03:08 +00:00
Jaco 5eb3534d8e Bump dev (w/ eslint 8) (#4070)
* Bump dev (w/ eslint 8)

* Additional linting

* Additional

* More lint fixes

* Last batch

* Additional

* Cleanups
2021-10-17 14:49:26 +03:00
Github Actions 806fda67e9 [CI Skip] release/beta 6.3.2-17
skip-checks: true
2021-10-16 07:07:51 +00:00
Jaco 5578d5d0ab Bump common (#4069) 2021-10-16 09:49:18 +03:00
Github Actions 39c540d453 [CI Skip] release/beta 6.3.2-16
skip-checks: true
2021-10-15 11:53:17 +00:00
Jaco 36a244fd75 Additional v14 types in derives (#4067) 2021-10-15 14:33:44 +03:00
Github Actions 84a0ab816e [CI Skip] release/beta 6.3.2-15
skip-checks: true
2021-10-15 07:33:33 +00:00
Jaco e305f2c11a Adjust crowdloan types to lookups (#4065)
* Adjust crowdloan types to lookups

* Remove debug hex...
2021-10-15 10:15:02 +03:00
Github Actions ed773dd158 [CI Skip] release/beta 6.3.2-14
skip-checks: true
2021-10-14 17:51:52 +00:00
Jaco 18056a8edd Statemint 5 as a patch (#4061) 2021-10-14 20:36:46 +03:00
Github Actions 96f3ce5b35 [CI Skip] release/beta 6.3.2-13
skip-checks: true
2021-10-14 07:03:28 +00:00
Jaco e7a78ae908 Ensure indexes are AccountIndex type (#4059) 2021-10-14 09:44:49 +03:00
Github Actions 295c9219c2 [CI Skip] release/beta 6.3.2-12
skip-checks: true
2021-10-13 14:27:37 +00:00
Jaco 99dc85ab4a Skip online tests 2021-10-13 17:12:33 +03:00
Jaco 16876cd0a0 Trigger, random test timeout 2021-10-13 16:54:58 +03:00
Jaco cb65fb450f Return multiple vesting schedules (#4057)
* Display multiple vesting schedules

* Derive with multiple vesting schedules

* Update
2021-10-13 16:31:41 +03:00
Github Actions 5bc2ad81f9 [CI Skip] release/beta 6.3.2-11
skip-checks: true
2021-10-13 04:45:17 +00:00
Jaco 03b98774bc Allow queries for new vesting (& prev & old...) (#4053) 2021-10-13 07:31:07 +03:00
Github Actions fb49f6bbe9 [CI Skip] release/beta 6.3.2-10
skip-checks: true
2021-10-12 13:42:59 +00:00
Jaco eb792102c8 New Polkadot 9110 upgrade block (#4051) 2021-10-12 16:22:24 +03:00
Jaco a12a258112 Remove Polkadot 9110 upgrade block (#4050)
* Remove Polkadot 9110 upgrade block

* 9111 blocks
2021-10-12 16:02:36 +03:00
Github Actions 018dd8a1c7 [CI Skip] release/beta 6.3.2-9
skip-checks: true
2021-10-12 11:23:25 +00:00
Jaco 7a100db4b4 Kusama 9110 pulled (#4049) 2021-10-12 14:00:47 +03:00
Github Actions 858a1d13c4 [CI Skip] release/beta 6.3.2-8
skip-checks: true
2021-10-12 04:53:50 +00:00
Jaco aa1630627a Add missing v14 metadata/runtime type link (#4048) 2021-10-12 07:38:04 +03:00
Github Actions c3af40ef50 [CI Skip] release/beta 6.3.2-7
skip-checks: true
2021-10-11 16:58:15 +00:00
Jaco 16534d6e5b npmjs crap... republish, yet again. 2021-10-11 19:40:16 +03:00
Github Actions eeb5f766da [CI Skip] release/beta 6.3.2-6
skip-checks: true
2021-10-11 14:05:02 +00:00
Jaco 03f41704c4 nmpjs apparently has a publishing fixe, let's check... 2021-10-11 16:46:51 +03:00
Github Actions 6b0c5fad2d [CI Skip] release/beta 6.3.2-5
skip-checks: true
2021-10-11 11:59:53 +00:00
Jaco 51165bf759 trigger... maybe npm wakes up this time... 2021-10-11 14:38:53 +03:00
Github Actions 7f45d995de [CI Skip] release/beta 6.3.2-4
skip-checks: true
2021-10-11 10:47:42 +00:00
Jaco e7b9c40dd9 Update .123trigger 2021-10-11 13:26:36 +03:00
Github Actions e7b66ceb89 [CI Skip] release/beta 6.3.2-3
skip-checks: true
2021-10-11 10:12:34 +00:00
Jaco d053b86e23 Use Si V1 in contracts (w/ PortableRegistry usage) (#3988)
* Use Si V1 in contracts (w/ PortableRegistry usage)

* Type id lookups

* Fix build & linting

* Remove extra .toNumber() (VSCode has gone crazy)

* v1 tests

* Cleanup parsing

* Explicit type cast for v1 types

* Unneeded toNumber

* Align events exposure with messages/constructors

* dedupe

* Re-add typedef extraction tests

* with typedefs

* Override for always primitives

* displayName improvements

* Versioned project

* New structure

* Fixes

* Cleanups

* Ensure API registry is the default used

* Adjust arg & return encoding/decoding

* Recursive contract

* DoNotConstruct to Si type
2021-10-11 12:50:09 +03:00
Github Actions 6a12aceae2 [CI Skip] release/beta 6.3.2-2
skip-checks: true
2021-10-10 11:19:03 +00:00
Jaco 7c6b64c6c8 Statemint v14 types (#4045)
* Statemint v14 types

* CHANGELOG

* v4 & v5

* Adjust
2021-10-10 13:59:58 +03:00
Github Actions 5495501e0c [CI Skip] release/beta 6.3.2-1
skip-checks: true
2021-10-10 10:08:34 +00:00
Jaco 6b7824fe4f Adjust contracts InstantiateReturnValue (#4044)
* Adjust contracts InstantiateReturnValue

* CHANGELOG
2021-10-10 12:50:47 +03:00
Github Actions 5f0b350a95 [CI Skip] release/beta 6.3.2-0
skip-checks: true
2021-10-10 09:46:13 +00:00
Jaco 85269716dd Kusama & Polkadot 9100/9110 upgrade blocks (#4043) 2021-10-10 12:25:48 +03:00
Github Actions 5b9f1544a3 [CI Skip] release/stable 6.3.1
skip-checks: true
2021-10-09 13:42:12 +00:00
Jaco 9943bda41f 6.3.1 (#4041)
* 6.3.1

* Set version
2021-10-09 16:26:33 +03:00
Github Actions b99e7a3cdb [CI Skip] release/beta 6.2.2-12
skip-checks: true
2021-10-09 13:08:09 +00:00
Jaco 1e491579c1 Adjust wildcard path matches (#4040) 2021-10-09 15:49:01 +03:00
Github Actions ef83cfbdc1 [CI Skip] release/beta 6.2.2-11
skip-checks: true
2021-10-08 07:49:23 +00:00
Jaco d10407a44f Bump deps (#4037)
* Bump deps

* Bump

* revamp comments

* Only use un-aliased primitives

* Revert "Only use un-aliased primitives"

This reverts commit 93d7e28f3a73351899789acc0914b75b421d4c11.
2021-10-08 10:31:11 +03:00
Github Actions 068af8b2ab [CI Skip] release/beta 6.2.2-10
skip-checks: true
2021-10-08 05:37:11 +00:00
Jaco d9f4d3e08b Adjust xcm Fungibility (#4035)
* Adjust xcm Fungibility

* V1 & V2

* Align with master
2021-10-08 08:17:49 +03:00
Github Actions fa79f35ec2 [CI Skip] release/beta 6.2.2-9
skip-checks: true
2021-10-07 13:50:37 +00:00
Jaco 8c2c2afc37 Swap Xcm to defaults instead of V0, Polkadot runtime 9100+ (#4033)
* Swap Xcm to V1 (defaults), Polkadot runtime 9100+

* V1/V2 (latest is V1 at 9100)

* Various versions

* formatting

* V1 <= 9105, V2 >= 9106
2021-10-07 16:29:18 +03:00
Github Actions 5157d8c3f0 [CI Skip] release/beta 6.2.2-8
skip-checks: true
2021-10-07 10:05:48 +00:00
Jaco bb303361e2 queryMulti via api.at (#4031)
* queryMulti via api.at

* checkTypes

* Kusama & Polkadot added

* Revert "Kusama & Polkadot added"

This reverts commit f7f2c30290d455bad50bb0b8bb1965d65b4d2ae2.
2021-10-07 12:49:43 +03:00
Github Actions ad587b0673 [CI Skip] release/beta 6.2.2-7
skip-checks: true
2021-10-07 08:32:37 +00:00
Jaco ae5cf270f0 Bump static metadata (#4030)
* Bump static metadata

* Rebuild

* Polkadot & Kusama added
2021-10-07 11:12:08 +03:00
Github Actions 9fc33ac53a [CI Skip] release/beta 6.2.2-6
skip-checks: true
2021-10-06 11:28:59 +00:00
Jaco 60d4da934a Single getMetadata on parallel same-hash queries (#4026) 2021-10-06 14:12:13 +03:00
Github Actions 550d17d349 [CI Skip] release/beta 6.2.2-5
skip-checks: true
2021-10-06 10:07:11 +00:00
Jaco ce8a2b5e4f Dedupe findCall/findError (#4028) 2021-10-06 12:46:28 +03:00
Github Actions 4c4994e63c [CI Skip] release/beta 6.2.2-4
skip-checks: true
2021-10-06 08:54:45 +00:00
Jaco df9b6959d1 Expose findCall/findError on api.at (#4027)
* Expose findCall/findError on api.at

* Move findError/findCall
2021-10-06 11:36:18 +03:00
Github Actions 6a583ee594 [CI Skip] release/beta 6.2.2-3
skip-checks: true
2021-10-06 06:13:47 +00:00
Jaco affa6ab1bd Mark api.query.<section>.<method>.at as deprecated (#4023)
* Use api.at internally for sizeAt/entriesAt/keysAt

* Remove debug logs

* Mark api.query.<section>.<method>.at as deprecated

* formatting

* @deprecated formatting

* commenting
2021-10-06 08:53:50 +03:00
Github Actions 407aca37c1 [CI Skip] release/beta 6.2.2-2
skip-checks: true
2021-10-05 07:57:23 +00:00
Jaco 246dfaf943 Use api.at internally for sizeAt/entriesAt/keysAt (#4022)
* Use api.at internally for sizeAt/entriesAt/keysAt

* Remove debug logs
2021-10-05 10:35:23 +03:00
Github Actions a05fff302f [CI Skip] release/beta 6.2.2-1
skip-checks: true
2021-10-05 06:16:34 +00:00
Jaco d45a9cfe58 Rework derives to ensure cached registries (#4021) 2021-10-05 08:57:30 +03:00
Github Actions 32881d73a0 [CI Skip] release/beta 6.2.2-0
skip-checks: true
2021-10-04 12:58:03 +00:00
Jaco e568ffe23f Static substrate bump (#4018) 2021-10-04 15:35:56 +03:00
Github Actions 8475130a22 [CI Skip] release/stable 6.2.1
skip-checks: true
2021-10-04 08:33:37 +00:00
Jaco a7e824ff09 6.2.1 (#4016)
* 6.2.1

* CHANGELOG

* Bump static metadata

* CHANGELOG
2021-10-04 11:17:55 +03:00
Alexander Popiak 9d5fb2bf72 Add asset id in signing (#4009)
* add assetId to SignerOptions

* pull assetId into extrinsic signing

* set assetId to optional AnyNumber throughout

* add logging of extrinsic options

* add assetId to _injectSignature & add getters

* re-add import

* longer doc comments
2021-10-04 10:02:28 +03:00
Github Actions 2cf0e306dd [CI Skip] release/beta 6.1.3-3
skip-checks: true
2021-10-01 10:17:38 +00:00
Jaco 72d5330727 Use lookup types in derives (#4012)
* Use lookup types in derives

* additional

* society
2021-10-01 13:02:24 +03:00
Github Actions 1c3bdda08f [CI Skip] release/beta 6.1.3-2
skip-checks: true
2021-10-01 08:51:17 +00:00
Jaco 668ad3dfe5 Handle plain multi queries diguised as map-form (#4011) 2021-10-01 11:29:12 +03:00
Github Actions 651afaeb9a [CI Skip] release/beta 6.1.3-1
skip-checks: true
2021-09-30 06:54:52 +00:00
Jaco 5036aa9ef4 Better error messages for misformed queries (#4007)
* Better error messages for misformed queries

* Cater for raw function (no meta)
2021-09-30 09:39:13 +03:00
Github Actions 3598cc25f4 [CI Skip] release/beta 6.1.3-0
skip-checks: true
2021-09-29 12:28:47 +00:00
Jaco 987a2ec2df Adjust multi to infer return types (#4002)
* Adjust multi to infer return types

* some linting

* Additional

* Dedupe
2021-09-29 14:07:29 +02:00
242 changed files with 9537 additions and 8935 deletions
+6 -2
View File
@@ -1,11 +1,14 @@
33
39
1.4.2
1.6.2
1.11.2
1.12.2
1.17.2
1.31.2
2.8.2
3.2.2
3.2.3
3.3.2
@@ -17,6 +20,7 @@
3.9.2
3.9.3
3.10.2
4.0.2
4.0.3
4.6.2
@@ -34,4 +38,4 @@
6.0.3
6.0.4
6.0.5
6.1.2
6.1.2
+56
View File
@@ -1,5 +1,61 @@
# CHANGELOG
## 6.4.1 Oct 17, 2021
Upgrade priority: Low. Recommended for Kusama & Polkadot runtime 9110+
Changes:
- Adjust Statemint known types for version 4+
- Adjust balance derives to return multiple vesting schedules
- Adjust crowdloan derives to use paged key retrieval
- Ensure account indices (derived) are `Accountindex` types
- Adjust metadata v14 to include top-level type field from metadata
- Filter metadata v14 unused enum fields in TS generation
- Adjust derives to use more metadata v14 types on returns
- Add Kusama & Polkadot upgrade blocks for 9100/9110
- Align contract usage with latrest `PortableRegistry` (remove old-generation)
- Adjust contracts `InstantiateReturnValue` type (no rent projection after 267)
- Adjust for eslint v8 checks
- Don't run any online tests on CI by default (uncontrolled external dependencies)
## 6.3.1 Oct 9, 2021
Upgrade priority: Low. Recommended for Kusama & Polkadot runtime 9100+
Changes:
- Mark `api.query.*.*.at` as deprecated (use `api.at`)
- Expose `queryMulti`, `findError` and `findCall` on `api.at`
- Optimize parallel metadata retrieval/decoration
- Rework derive `.at` to ensure no additional metadata calls
- Adjust Xcm types for Kusama, Polkadot, Westend (V1 & V2 usage)
- Fix Xcm Fungibility type
- Add upgrade blocks for Westend
- Prepare for v14 metadata swap in Kusama/Polkadot (9110 runtime)
- Adjust metadata wilcard path matching (event extraction)
- Bump static metadata for latest Substrate, Polkadot & Kusama
## 6.2.1 Oct 4, 2021
Upgrade priority: Low. Maintenance updates.
Contributed:
- Cater for new asset fee payment extension (Thanks to https://github.com/apopiak)
Changes:
- Extend error messages for malformed `queryMulti` inputs
- Correctly handle non-map queries passed to `queryMulti` in map form
- Use new metadata v14 lookup type in derive results
- Adjust definitions to infer TS types in `.multi` queries
- Fix TS lookup enum generation with nested Option & Tuple
- Bump static metadata for latest Substrate, Polkadot & Kusama
## 6.1.2 Sep 29, 2021
Upgrade priority: Low. Recommended for 6.x users using historic queries.
+5 -5
View File
@@ -8,7 +8,7 @@
"packages/*"
],
"resolutions": {
"typescript": "^4.4.3"
"typescript": "^4.4.4"
},
"scripts": {
"build": "yarn build:interfaces && polkadot-dev-build-ts",
@@ -26,15 +26,15 @@
"test:watch": "polkadot-dev-run-test --watch"
},
"devDependencies": {
"@babel/core": "^7.15.5",
"@babel/core": "^7.15.8",
"@babel/register": "^7.15.3",
"@babel/runtime": "^7.15.4",
"@polkadot/dev": "^0.62.68",
"@polkadot/ts": "^0.4.8",
"@polkadot/dev": "^0.63.3",
"@polkadot/ts": "^0.4.9",
"@polkadot/typegen": "workspace:packages/typegen",
"@types/jest": "^27.0.2",
"copyfiles": "^2.4.1"
},
"version": "6.1.2",
"version": "6.4.1",
"packageManager": "yarn@3.0.1"
}
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api-contract",
"version": "6.1.2",
"version": "6.4.1",
"type": "module",
"description": "Interfaces for interacting with contracts and contract ABIs",
"main": "index.js",
@@ -20,9 +20,9 @@
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api-contract#readme",
"dependencies": {
"@babel/runtime": "^7.15.4",
"@polkadot/api": "6.1.2",
"@polkadot/types": "6.1.2",
"@polkadot/util": "^7.4.1",
"rxjs": "^7.3.0"
"@polkadot/api": "6.4.1",
"@polkadot/types": "6.4.1",
"@polkadot/util": "^7.5.1",
"rxjs": "^7.4.0"
}
}
-52
View File
@@ -1,52 +0,0 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { blake2AsHex } from '@polkadot/util-crypto';
import abis from '../test/contracts';
import { Abi } from '.';
interface JSONAbi {
source: {
compiler: string,
hash: string,
language: string,
wasm: string
},
spec: {
messages: {
name: string[] | string
}[]
}
}
describe('Abi', (): void => {
Object.entries(abis).forEach(([abiName, abi]) => {
it(`initializes from a contract ABI (${abiName})`, (): void => {
try {
const messageIds = (abi as JSONAbi).spec.messages.map(({ name }) => Array.isArray(name) ? name[0] : name);
const inkAbi = new Abi(abis[abiName]);
expect(inkAbi.messages.map(({ identifier }) => identifier)).toEqual(messageIds);
} catch (error) {
console.error(error);
throw error;
}
});
});
it('has the correct hash for the source', (): void => {
const bundle = abis.ink_flipperBundle as JSONAbi;
const abi = new Abi(bundle as any);
// manual
expect(bundle.source.hash).toEqual(blake2AsHex(bundle.source.wasm));
// the Codec hash
expect(bundle.source.hash).toEqual(abi.project.source.wasm.hash.toHex());
// the hash as per the actual Abi
expect(bundle.source.hash).toEqual(abi.project.source.wasmHash.toHex());
});
});
+102
View File
@@ -0,0 +1,102 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { AnyJson, Registry } from '@polkadot/types/types';
import fs from 'fs';
import path from 'path';
import { TypeDefInfo } from '@polkadot/types/types';
import { blake2AsHex } from '@polkadot/util-crypto';
import abis from '../../test/contracts';
import { Abi } from '.';
interface SpecDef {
messages: {
name: string[] | string
}[]
}
interface JSONAbi {
source: {
compiler: string,
hash: string,
language: string,
wasm: string
},
spec: SpecDef;
V1: {
spec: SpecDef;
}
}
function stringifyInfo (key: string, value: unknown): unknown {
return key === 'info'
? TypeDefInfo[value as number]
: value;
}
function stringifyJson (registry: Registry): string {
const defs = registry.lookup.types.map(({ id }) =>
registry.lookup.getTypeDef(id)
);
return JSON.stringify(defs, stringifyInfo, 2);
}
describe('Abi', (): void => {
describe('ABI', (): void => {
Object.entries(abis).forEach(([abiName, abi]: [string, JSONAbi]) => {
it(`initializes from a contract ABI (${abiName})`, (): void => {
try {
const messageIds = (abi.V1 ? abi.V1 : abi).spec.messages.map(({ name }) => Array.isArray(name) ? name[0] : name);
const inkAbi = new Abi(abis[abiName] as AnyJson);
expect(inkAbi.messages.map(({ identifier }) => identifier)).toEqual(messageIds);
} catch (error) {
console.error(error);
throw error;
}
});
});
});
describe('TypeDef', (): void => {
Object.keys(abis).forEach((abiName) => {
it(`initializes from a contract ABI (${abiName})`, (): void => {
const abi = new Abi(abis[abiName] as AnyJson);
const json = stringifyJson(abi.registry);
const cmpPath = path.join(__dirname, `../../test/compare/${abiName}.test.json`);
try {
// eslint-disable-next-line @typescript-eslint/no-var-requires
expect(JSON.parse(json)).toEqual(require(cmpPath));
} catch (error) {
if (process.env.GITHUB_REPOSITORY) {
console.error(json);
throw error;
}
fs.writeFileSync(cmpPath, json, { flag: 'w' });
}
});
});
});
it('has the correct hash for the source', (): void => {
const bundle = abis.ink_v0_flipperBundle as JSONAbi;
const abi = new Abi(bundle as unknown as AnyJson);
// manual
expect(bundle.source.hash).toEqual(blake2AsHex(bundle.source.wasm));
// the Codec hash
expect(bundle.source.hash).toEqual(abi.info.source.wasm.hash.toHex());
// the hash as per the actual Abi
expect(bundle.source.hash).toEqual(abi.info.source.wasmHash.toHex());
});
});
@@ -2,16 +2,29 @@
// SPDX-License-Identifier: Apache-2.0
import type { Bytes } from '@polkadot/types';
import type { ChainProperties, ContractConstructorSpec, ContractEventSpec, ContractMessageParamSpec, ContractMessageSpec, ContractProject } from '@polkadot/types/interfaces';
import type { AnyJson, Codec } from '@polkadot/types/types';
import type { AbiConstructor, AbiEvent, AbiMessage, AbiParam, DecodedEvent, DecodedMessage } from './types';
import type { ChainProperties, ContractConstructorSpec, ContractEventSpec, ContractMessageParamSpec, ContractMessageSpec, ContractMetadataLatest, ContractProjectInfo } from '@polkadot/types/interfaces';
import type { AnyJson, Codec, Registry } from '@polkadot/types/types';
import type { AbiConstructor, AbiEvent, AbiMessage, AbiParam, DecodedEvent, DecodedMessage } from '../types';
import { TypeDefInfo, TypeRegistry } from '@polkadot/types';
import { assert, assertReturn, compactAddLength, compactStripLength, isNumber, isObject, isString, logger, stringCamelCase, stringify, u8aConcat, u8aToHex } from '@polkadot/util';
import { MetaRegistry } from './MetaRegistry';
import { toLatest } from './toLatest';
interface V0AbiJson {
metadataVersion: string;
spec: {
constructors: unknown[];
events: unknown[];
messages: unknown[];
};
types: unknown[];
}
const l = logger('Abi');
const PRIMITIVE_ALWAYS = ['AccountId', 'AccountIndex', 'Address', 'Balance'];
function findMessage <T extends AbiMessage> (list: T[], messageOrId: T | string | number): T {
const message = isNumber(messageOrId)
? list[messageOrId]
@@ -22,51 +35,71 @@ function findMessage <T extends AbiMessage> (list: T[], messageOrId: T | string
return assertReturn(message, () => `Attempted to call an invalid contract interface, ${stringify(messageOrId)}`);
}
function parseJson (json: AnyJson, chainProperties?: ChainProperties): [AnyJson, Registry, ContractMetadataLatest, ContractProjectInfo] {
const registry = new TypeRegistry();
const info = registry.createType('ContractProjectInfo', json);
const metadata = registry.createType('ContractMetadata', isString((json as unknown as V0AbiJson).metadataVersion)
? { V0: json }
: { V1: (json as Record<string, AnyJson>).V1 }
);
const latest = metadata.isV0
? toLatest(registry, metadata.asV0)
: metadata.asV1;
const lookup = registry.createType('PortableRegistry', { types: latest.types });
// attach the lookup to the registry - now the types are known
registry.setLookup(lookup);
if (chainProperties) {
registry.setChainProperties(chainProperties);
}
// warm-up the actual type, pre-use
lookup.types.forEach(({ id }) =>
lookup.getTypeDef(id)
);
return [json, registry, latest, info];
}
export class Abi {
readonly #events: AbiEvent[];
public readonly events: AbiEvent[];
public readonly constructors: AbiConstructor[];
public readonly info: ContractProjectInfo;
public readonly json: AnyJson;
public readonly messages: AbiMessage[];
public readonly project: ContractProject;
public readonly metadata: ContractMetadataLatest;
public readonly registry: MetaRegistry;
public readonly registry: Registry;
constructor (abiJson: AnyJson, chainProperties?: ChainProperties) {
const json = isString(abiJson)
? JSON.parse(abiJson) as AnyJson
: abiJson;
assert(isObject(json) && !Array.isArray(json) && json.metadataVersion && isObject(json.spec) && !Array.isArray(json.spec) && Array.isArray(json.spec.constructors) && Array.isArray(json.spec.messages), 'Invalid JSON ABI structure supplied, expected a recent metadata version');
this.json = json;
this.registry = new MetaRegistry(json.metadataVersion as string, chainProperties);
this.project = this.registry.createType('ContractProject', json);
this.registry.setMetaTypes(this.project.types);
this.project.types.forEach((_, index) =>
this.registry.getMetaTypeDef({ type: this.registry.createType('Si0LookupTypeId', index + this.registry.typeOffset) })
[this.json, this.registry, this.metadata, this.info] = parseJson(
isString(abiJson)
? JSON.parse(abiJson) as AnyJson
: abiJson,
chainProperties
);
this.constructors = this.project.spec.constructors.map((spec: ContractConstructorSpec, index) =>
this.constructors = this.metadata.spec.constructors.map((spec: ContractConstructorSpec, index) =>
this.#createMessage(spec, index, {
isConstructor: true
})
);
this.#events = this.project.spec.events.map((spec: ContractEventSpec, index) =>
this.events = this.metadata.spec.events.map((spec: ContractEventSpec, index) =>
this.#createEvent(spec, index)
);
this.messages = this.project.spec.messages.map((spec: ContractMessageSpec, index): AbiMessage => {
this.messages = this.metadata.spec.messages.map((spec: ContractMessageSpec, index): AbiMessage => {
const typeSpec = spec.returnType.unwrapOr(null);
return this.#createMessage(spec, index, {
isMutating: spec.mutates.isTrue,
isPayable: spec.payable.isTrue,
returnType: typeSpec
? this.registry.getMetaTypeDef(typeSpec)
? this.registry.lookup.getTypeDef(typeSpec.type)
: null
});
});
@@ -77,7 +110,7 @@ export class Abi {
*/
public decodeEvent (data: Bytes | Uint8Array): DecodedEvent {
const index = data[0];
const event = this.#events[index];
const event = this.events[index];
assert(event, () => `Unable to find event with index ${index}`);
@@ -107,13 +140,32 @@ export class Abi {
}
#createArgs = (args: ContractMessageParamSpec[], spec: unknown): AbiParam[] => {
return args.map((arg, index): AbiParam => {
return args.map(({ name, type }, index): AbiParam => {
try {
assert(isObject(arg.type), 'Invalid type definition found');
assert(isObject(type), 'Invalid type definition found');
const displayName = type.displayName.length
? type.displayName[type.displayName.length - 1].toString()
: undefined;
const camelName = stringCamelCase(name);
if (displayName && PRIMITIVE_ALWAYS.includes(displayName)) {
return {
name: camelName,
type: {
info: TypeDefInfo.Plain,
type: displayName
}
};
}
const typeDef = this.registry.lookup.getTypeDef(type.type);
return {
name: stringCamelCase(arg.name),
type: this.registry.getMetaTypeDef(arg.type)
name: camelName,
type: displayName && !typeDef.type.startsWith(displayName)
? { displayName, ...typeDef }
: typeDef
};
} catch (error) {
l.error(`Error expanding argument ${index} in ${stringify(spec)}`);
@@ -121,7 +173,7 @@ export class Abi {
throw error;
}
});
}
};
#createEvent = (spec: ContractEventSpec, index: number): AbiEvent => {
const args = this.#createArgs(spec.args, spec);
@@ -137,7 +189,7 @@ export class Abi {
};
return event;
}
};
#createMessage = (spec: ContractMessageSpec | ContractConstructorSpec, index: number, add: Partial<AbiMessage> = {}): AbiMessage => {
const args = this.#createArgs(spec.args, spec);
@@ -159,21 +211,21 @@ export class Abi {
};
return message;
}
};
#decodeArgs = (args: AbiParam[], data: Uint8Array): Codec[] => {
// for decoding we expect the input to be just the arg data, no selectors
// no length added (this allows use with events as well)
let offset = 0;
return args.map(({ type }): Codec => {
const value = this.registry.createType(type.type as 'Text', data.subarray(offset));
return args.map(({ type: { lookupName, type } }): Codec => {
const value = this.registry.createType(lookupName || type, data.subarray(offset));
offset += value.encodedLength;
return value;
});
}
};
#decodeMessage = (type: 'constructor' | 'message', list: AbiMessage[], data: Uint8Array): DecodedMessage => {
const [, trimmed] = compactStripLength(data);
@@ -183,7 +235,7 @@ export class Abi {
assert(message, `Unable to find ${type} with selector ${u8aToHex(selector)}`);
return message.fromU8a(trimmed.subarray(4));
}
};
#encodeArgs = ({ name, selector }: ContractMessageSpec | ContractConstructorSpec, args: AbiParam[], data: unknown[]): Uint8Array => {
assert(data.length === args.length, () => `Expected ${args.length} arguments to contract message '${name.toString()}', found ${data.length}`);
@@ -191,8 +243,10 @@ export class Abi {
return compactAddLength(
u8aConcat(
this.registry.createType('ContractSelector', selector).toU8a(),
...args.map(({ type }, index) => this.registry.createType(type.type as 'Text', data[index]).toU8a())
...args.map(({ type: { lookupName, type } }, index) =>
this.registry.createType(lookupName || type, data[index]).toU8a()
)
)
);
}
};
}
+14
View File
@@ -0,0 +1,14 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ContractMetadataLatest, ContractMetadataV0 } from '@polkadot/types/interfaces';
import type { Registry } from '@polkadot/types/types';
import { convertSiV0toV1 } from '@polkadot/types/generic/PortableRegistry';
export function toLatest (registry: Registry, v0: ContractMetadataV0): ContractMetadataLatest {
return registry.createType('ContractMetadataLatest', {
...v0,
types: convertSiV0toV1(registry, v0.types)
});
}
@@ -1,43 +0,0 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import fs from 'fs';
import path from 'path';
import { TypeDefInfo } from '@polkadot/types/types';
import abis from '../test/contracts';
import { Abi } from '.';
function stringifyInfo (key: string, value: unknown): unknown {
return key === 'info'
? TypeDefInfo[value as number]
: value;
}
describe('MetaRegistry', (): void => {
Object.keys(abis).forEach((abiName) => {
it(`initializes from a contract ABI (${abiName})`, (): void => {
const abi = new Abi(abis[abiName]);
const json = JSON.stringify(abi.registry.metaTypeDefs, stringifyInfo, 2);
const cmpPath = path.join(__dirname, `../test/compare/${abiName}.test.json`);
try {
// eslint-disable-next-line @typescript-eslint/no-var-requires
expect(JSON.parse(json)).toEqual(require(cmpPath));
} catch (error) {
if (process.env.GITHUB_REPOSITORY) {
console.error(JSON.stringify(abi.registry.metaTypeDefs, stringifyInfo));
throw error;
}
fs.writeFileSync(cmpPath, json, { flag: 'w' });
}
});
});
it('stores base project as JSON', (): void => {
expect(new Abi(abis.ink_dns).json).toEqual(abis.ink_dns);
});
});
-252
View File
@@ -1,252 +0,0 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ChainProperties, ContractDisplayName, Si0Field, Si0LookupTypeId, Si0Type, Si0TypeDefArray, Si0TypeDefSequence, Si0TypeDefTuple, Si0TypeDefVariant, Si0Variant } from '@polkadot/types/interfaces';
import type { InterfaceTypes, TypeDef } from '@polkadot/types/types';
import { TypeDefInfo, TypeRegistry, withTypeString } from '@polkadot/types';
import { assert, isUndefined } from '@polkadot/util';
interface PartialTypeSpec {
readonly type: Si0LookupTypeId;
readonly displayName?: ContractDisplayName;
}
// convert the offset into project-specific, index-1
export function getRegistryOffset (id: Si0LookupTypeId, typeOffset: number): number {
return id.toNumber() - typeOffset;
}
const PRIMITIVE_ALIAS: Record<string, keyof InterfaceTypes> = {
Char: 'u32', // Rust char is 4-bytes
Str: 'Text'
};
const PRIMITIVE_ALWAYS = ['AccountId', 'AccountIndex', 'Address', 'Balance'];
// TODO Replace usages with PortableRegistry
export class MetaRegistry extends TypeRegistry {
public readonly metaTypeDefs: TypeDef[] = [];
public readonly typeOffset;
#siTypes: Si0Type[] = [];
constructor (metadataVersion: string, chainProperties?: ChainProperties) {
super();
const [major, minor] = metadataVersion.split('.').map((n) => parseInt(n, 10));
// type indexes are 1-based pre 0.7 and 0-based post
this.typeOffset = (major === 0 && minor < 7) ? 1 : 0;
if (chainProperties) {
this.setChainProperties(chainProperties);
}
}
public setMetaTypes (metaTypes: Si0Type[]): void {
this.#siTypes = metaTypes;
}
public getMetaTypeDef (typeSpec: PartialTypeSpec): TypeDef {
const offset = getRegistryOffset(typeSpec.type, this.typeOffset);
let typeDef = this.metaTypeDefs[offset];
if (!typeDef) {
typeDef = this.#extract(this.#getMetaType(typeSpec.type), typeSpec.type);
this.metaTypeDefs[offset] = typeDef;
}
if (typeSpec.displayName && typeSpec.displayName.length) {
const displayName = typeSpec.displayName[typeSpec.displayName.length - 1].toString();
if (!typeDef.type.startsWith(displayName)) {
typeDef = {
...typeDef,
displayName,
type: PRIMITIVE_ALWAYS.includes(displayName)
? displayName
: typeDef.type
};
}
}
// Here we protect against the following cases
// - No displayName present, these are generally known primitives
// - displayName === type, these generate circular references
// - displayName Option & type Option<...something...>
if (typeDef.displayName && !this.hasType(typeDef.displayName) && !(typeDef.type === typeDef.displayName || typeDef.type.startsWith(`${typeDef.displayName}<`))) {
this.register({ [typeDef.displayName]: typeDef.type });
}
return typeDef;
}
#getMetaType = (id: Si0LookupTypeId): Si0Type => {
const type = this.#siTypes[getRegistryOffset(id, this.typeOffset)];
assert(!isUndefined(type), () => `getMetaType:: Unable to find ${id.toNumber()} in type values`);
return this.createType('Si0Type', type);
}
#extract = (type: Si0Type, id: Si0LookupTypeId): TypeDef => {
const path = [...type.path];
const isPrimitivePath = !!path.length && (
(path.length > 2 && path[0].eq('ink_env') && path[1].eq('types')) ||
PRIMITIVE_ALWAYS.includes(path[path.length - 1].toString())
);
let typeDef: Omit<TypeDef, 'type'>;
if (isPrimitivePath) {
typeDef = this.#extractPrimitivePath(type);
} else if (type.def.isPrimitive) {
typeDef = this.#extractPrimitive(type);
} else if (type.def.isComposite) {
typeDef = this.#extractFields(type.def.asComposite.fields);
} else if (type.def.isVariant) {
typeDef = this.#extractVariant(type.def.asVariant, id);
} else if (type.def.isArray) {
typeDef = this.#extractArray(type.def.asArray);
} else if (type.def.isSequence) {
typeDef = this.#extractSequence(type.def.asSequence, id);
} else if (type.def.isTuple) {
typeDef = this.#extractTuple(type.def.asTuple);
} else {
throw new Error(`Invalid ink! type at index ${id.toString()}`);
}
const displayName = path.pop()?.toString();
return withTypeString(this, {
...(displayName
? { displayName }
: {}
),
...(path.length > 1
? { namespace: path.map((s) => s.toString()).join('::') }
: {}
),
...(type.params.length > 0
? { sub: type.params.map((type) => this.getMetaTypeDef({ type })) }
: {}
),
...typeDef
});
}
#extractArray = ({ len: length, type }: Si0TypeDefArray): Omit<TypeDef, 'type'> => {
assert(!length || length.toNumber() <= 256, 'MetaRegistry: Only support for [Type; <length>], where length <= 256');
return {
info: TypeDefInfo.VecFixed,
length: length.toNumber(),
sub: this.getMetaTypeDef({ type })
};
}
#extractFields = (fields: Si0Field[]): Omit<TypeDef, 'type'> => {
const [isStruct, isTuple] = fields.reduce(([isAllNamed, isAllUnnamed], { name }) => ([
isAllNamed && name.isSome,
isAllUnnamed && name.isNone
]),
[true, true]);
assert(isTuple || isStruct, 'Invalid fields type detected, expected either Tuple or Struct');
const sub = fields.map(({ name, type }) => ({
...this.getMetaTypeDef({ type }),
...(name.isSome
? { name: name.unwrap().toString() }
: {}
)
}));
return isTuple && sub.length === 1
? sub[0]
: {
// check for tuple first (no fields may be available)
info: isTuple
? TypeDefInfo.Tuple
: TypeDefInfo.Struct,
sub
};
}
#extractPrimitive = (type: Si0Type): TypeDef => {
const typeStr = type.def.asPrimitive.type.toString();
return {
info: TypeDefInfo.Plain,
type: PRIMITIVE_ALIAS[typeStr] || typeStr.toLowerCase()
};
}
#extractPrimitivePath = (type: Si0Type): TypeDef => {
return {
info: TypeDefInfo.Plain,
type: type.path[type.path.length - 1].toString()
};
}
#extractSequence = ({ type }: Si0TypeDefSequence, id: Si0LookupTypeId): Omit<TypeDef, 'type'> => {
assert(!!type, () => `ContractRegistry: Invalid sequence type found at id ${id.toString()}`);
return {
info: TypeDefInfo.Vec,
sub: this.getMetaTypeDef({ type })
};
}
#extractTuple = (ids: Si0TypeDefTuple): Omit<TypeDef, 'type'> => {
return ids.length === 1
? this.getMetaTypeDef({ type: ids[0] })
: {
info: TypeDefInfo.Tuple,
sub: ids.map((type) => this.getMetaTypeDef({ type }))
};
}
#extractVariant = ({ variants }: Si0TypeDefVariant, id: Si0LookupTypeId): Omit<TypeDef, 'type'> => {
const { params, path } = this.#getMetaType(id);
const specialVariant = path[0].toString();
return specialVariant === 'Option'
? {
info: TypeDefInfo.Option,
sub: this.getMetaTypeDef({ type: params[0] })
}
: specialVariant === 'Result'
? {
info: TypeDefInfo.Result,
sub: params.map((type, index) => ({
name: ['Ok', 'Error'][index],
...this.getMetaTypeDef({ type })
}))
}
: {
info: TypeDefInfo.Enum,
sub: this.#extractVariantSub(variants)
};
}
#extractVariantSub = (variants: Si0Variant[]): TypeDef[] => {
return variants.every(({ fields }) => fields.length === 0)
? variants.map(({ discriminant, name }) => ({
...(
discriminant.isSome
? { ext: { discriminant: discriminant.unwrap().toNumber() } }
: {}
),
info: TypeDefInfo.Plain,
name: name.toString(),
type: 'Null'
}))
: variants.map(({ fields, name }) => withTypeString(this, {
...this.#extractFields(fields),
name: name.toString()
}));
}
}
+4 -3
View File
@@ -14,8 +14,6 @@ export abstract class Base<ApiType extends ApiTypes> {
public readonly api: ApiBase<ApiType>;
public readonly registry: Registry;
protected readonly _decorateMethod: DecorateMethod<ApiType>;
constructor (api: ApiBase<ApiType>, abi: AnyJson | Abi, decorateMethod: DecorateMethod<ApiType>) {
@@ -23,10 +21,13 @@ export abstract class Base<ApiType extends ApiTypes> {
? abi
: new Abi(abi, api.registry.getChainProperties());
this.api = api;
this.registry = this.abi.registry;
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(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');
}
public get registry (): Registry {
return this.api.registry;
}
}
+1 -1
View File
@@ -66,5 +66,5 @@ export class Blueprint<ApiType extends ApiTypes> extends Base<ApiType> {
new Contract<ApiType>(this.api, this.abi, record.event.data[1] as AccountId, this._decorateMethod)
))
);
}
};
}
+15 -6
View File
@@ -1,28 +1,37 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { AnyJson } from '@polkadot/types/types';
import fs from 'fs';
import path from 'path';
import { decorateMethodPromise } from '@polkadot/api';
import contractFlipper from '../../test/contracts/ink/flipper.contract.json';
import abiFlipper from '../../test/contracts/ink/flipper.json';
import v0contractFlipper from '../../test/contracts/ink/v0/flipper.contract.json';
import v0abiFlipper from '../../test/contracts/ink/v0/flipper.json';
import v1contractFlipper from '../../test/contracts/ink/v1/flipper.contract.json';
import { Code } from './Code';
import { mockApi } from './mock';
const wasmFlipper = fs.readFileSync(path.join(__dirname, '../../test/contracts/ink/flipper.wasm'));
const v0wasmFlipper = fs.readFileSync(path.join(__dirname, '../../test/contracts/ink/v0/flipper.wasm'));
describe('Code', (): void => {
it('can construct with an individual ABI/WASM combo', (): void => {
expect(
() => new Code(mockApi, abiFlipper, wasmFlipper, decorateMethodPromise)
() => new Code(mockApi, v0abiFlipper as AnyJson, v0wasmFlipper, decorateMethodPromise)
).not.toThrow();
});
it('can construct with an .contract ABI', (): void => {
it('can construct with an .contract ABI (v0)', (): void => {
expect(
() => new Code(mockApi, contractFlipper, null, decorateMethodPromise)
() => new Code(mockApi, v0contractFlipper as AnyJson, null, decorateMethodPromise)
).not.toThrow();
});
it.only('can construct with an .contract ABI (v1)', (): void => {
expect(
() => new Code(mockApi, v1contractFlipper as AnyJson, null, decorateMethodPromise)
).not.toThrow();
});
});
+3 -3
View File
@@ -39,8 +39,8 @@ export class Code<ApiType extends ApiTypes> extends Base<ApiType> {
constructor (api: ApiBase<ApiType>, abi: AnyJson | Abi, wasm: Uint8Array | string | Buffer | null | undefined, decorateMethod: DecorateMethod<ApiType>) {
super(api, abi, decorateMethod);
this.code = isWasm(this.abi.project.source.wasm)
? this.abi.project.source.wasm
this.code = isWasm(this.abi.info.source.wasm)
? this.abi.info.source.wasm
: u8aToU8a(wasm);
assert(isWasm(this.code), 'No WASM code provided');
@@ -76,5 +76,5 @@ export class Code<ApiType extends ApiTypes> extends Base<ApiType> {
[])
) || []))
);
}
};
}
+4 -5
View File
@@ -13,7 +13,6 @@ import { map } from 'rxjs';
import { SubmittableResult } from '@polkadot/api';
import { ApiBase } from '@polkadot/api/base';
import { createTypeUnsafe } from '@polkadot/types';
import { assert, BN, BN_HUNDRED, BN_ONE, BN_ZERO, bnToBn, isFunction, isUndefined, logger } from '@polkadot/util';
import { Abi } from '../Abi';
@@ -101,7 +100,7 @@ export class Contract<ApiType extends ApiTypes> extends Base<ApiType> {
: this.api.consts.system.maximumBlockWeight as Weight
).muln(64).div(BN_HUNDRED)
: gasLimit;
}
};
#exec = (messageOrId: AbiMessage | string | number, { gasLimit = BN_ZERO, value = BN_ZERO }: ContractOptions, params: unknown[]): SubmittableExtrinsic<ApiType> => {
return this.api.tx.contracts
@@ -127,7 +126,7 @@ export class Contract<ApiType extends ApiTypes> extends Base<ApiType> {
.filter((decoded): decoded is DecodedEvent => !!decoded)
))
);
}
};
#read = (messageOrId: AbiMessage | string | number, { gasLimit = BN_ZERO, value = BN_ZERO }: ContractOptions, params: unknown[]): ContractCallSend<ApiType> => {
assert(this.hasRpcContractsCall, ERROR_NO_CALL);
@@ -153,12 +152,12 @@ export class Contract<ApiType extends ApiTypes> extends Base<ApiType> {
? gasRequired
: gasConsumed,
output: result.isOk && message.returnType
? createTypeUnsafe(this.registry, message.returnType.type, [result.asOk.data.toU8a(true)], { isPedantic: true })
? this.abi.registry.createTypeUnsafe(message.returnType.lookupName || message.returnType.type, [result.asOk.data.toU8a(true)], { isPedantic: true })
: null,
result
}))
)
)
};
}
};
}
@@ -3,6 +3,8 @@
// Simple non-runnable checks to test type definitions in the editor itself
import type { AnyJson } from '@polkadot/types/types';
import { ApiPromise } from '@polkadot/api';
import { createTestPairs, TestKeyringMap } from '@polkadot/keyring/testingPairs';
@@ -10,7 +12,7 @@ import abiIncrementer from '../test/contracts/ink/incrementer.json';
import { BlueprintPromise, ContractPromise } from '.';
async function checkBlueprint (api: ApiPromise, pairs: TestKeyringMap): Promise<void> {
const blueprint = new BlueprintPromise(api, abiIncrementer, '0x1234');
const blueprint = new BlueprintPromise(api, abiIncrementer as AnyJson, '0x1234');
// new style
await blueprint.tx.new({ gasLimit: 456, salt: '0x1234', value: 123 }, 42).signAndSend(pairs.bob);
@@ -21,7 +23,7 @@ async function checkBlueprint (api: ApiPromise, pairs: TestKeyringMap): Promise<
}
async function checkContract (api: ApiPromise, pairs: TestKeyringMap): Promise<void> {
const contract = new ContractPromise(api, abiIncrementer, '0x1234');
const contract = new ContractPromise(api, abiIncrementer as AnyJson, '0x1234');
// queries
await contract.query.get(pairs.alice.address, {});
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api-contract', version: '6.1.2' };
export const packageInfo = { name: '@polkadot/api-contract', version: '6.4.1' };
@@ -1,31 +0,0 @@
[
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"info": "Plain",
"type": "u8"
},
{
"info": "Plain",
"type": "i32"
},
{
"displayName": "Hash",
"namespace": "ink_env::types",
"info": "Plain",
"type": "Hash"
}
]
@@ -1,204 +0,0 @@
[
{
"displayName": "Header",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "last_vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "len"
},
{
"info": "Plain",
"type": "u32",
"name": "len_entries"
}
],
"type": "{\"last_vacant\":\"u32\",\"len\":\"u32\",\"len_entries\":\"u32\"}"
},
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"displayName": "Hash",
"namespace": "ink_env::types",
"info": "Plain",
"type": "Hash",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"Hash\"}}"
},
{
"displayName": "Hash",
"namespace": "ink_env::types",
"info": "Plain",
"type": "Hash"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"info": "Plain",
"type": "u8"
},
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"AccountId\",\"key_index\":\"u32\"}"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "Result",
"sub": [
{
"name": "Ok",
"info": "Tuple",
"sub": [],
"type": "()"
},
{
"name": "Error",
"displayName": "Error",
"namespace": "dns::dns",
"info": "Enum",
"sub": [
{
"ext": {
"discriminant": 0
},
"info": "Plain",
"name": "NameAlreadyExists",
"type": "Null"
},
{
"ext": {
"discriminant": 1
},
"info": "Plain",
"name": "CallerIsNotOwner",
"type": "Null"
}
],
"type": "{\"_enum\":[\"NameAlreadyExists\",\"CallerIsNotOwner\"]}"
}
],
"info": "Result",
"type": "Result<(), Error>"
},
{
"info": "Tuple",
"sub": [],
"type": "()"
},
{
"displayName": "Error",
"namespace": "dns::dns",
"info": "Enum",
"sub": [
{
"ext": {
"discriminant": 0
},
"info": "Plain",
"name": "NameAlreadyExists",
"type": "Null"
},
{
"ext": {
"discriminant": 1
},
"info": "Plain",
"name": "CallerIsNotOwner",
"type": "Null"
}
],
"type": "{\"_enum\":[\"NameAlreadyExists\",\"CallerIsNotOwner\"]}"
},
{
"displayName": "Option",
"sub": {
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
"info": "Option",
"type": "Option<AccountId>"
}
]
@@ -1,201 +0,0 @@
[
{
"info": "Plain",
"type": "u128"
},
{
"displayName": "Header",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "last_vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "len"
},
{
"info": "Plain",
"type": "u32",
"name": "len_entries"
}
],
"type": "{\"last_vacant\":\"u32\",\"len\":\"u32\",\"len_entries\":\"u32\"}"
},
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"AccountId\"}}"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"info": "Plain",
"type": "u8"
},
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"info": "Plain",
"type": "u128",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"u128\",\"key_index\":\"u32\"}"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"info": "Tuple",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(AccountId,AccountId)",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"(AccountId,AccountId)\"}}"
},
{
"info": "Tuple",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(AccountId,AccountId)"
},
{
"info": "Plain",
"type": "bool"
},
{
"displayName": "Option",
"sub": {
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
"info": "Option",
"type": "Option<AccountId>"
}
]
@@ -1,430 +0,0 @@
[
{
"displayName": "Header",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "last_vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "len"
},
{
"info": "Plain",
"type": "u32",
"name": "len_entries"
}
],
"type": "{\"last_vacant\":\"u32\",\"len\":\"u32\",\"len_entries\":\"u32\"}"
},
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"u32\"}}"
},
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"AccountId\",\"key_index\":\"u32\"}"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"info": "Plain",
"type": "u8"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"AccountId\"}}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"u32\",\"key_index\":\"u32\"}"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"info": "Tuple",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(AccountId,AccountId)",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"(AccountId,AccountId)\"}}"
},
{
"info": "Tuple",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(AccountId,AccountId)"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"info": "Plain",
"type": "bool",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"bool\",\"key_index\":\"u32\"}"
},
{
"info": "Plain",
"type": "bool"
},
{
"displayName": "Option",
"sub": {
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
"info": "Option",
"type": "Option<AccountId>"
},
{
"displayName": "Result",
"sub": [
{
"name": "Ok",
"info": "Tuple",
"sub": [],
"type": "()"
},
{
"name": "Error",
"displayName": "Error",
"namespace": "erc721::erc721",
"info": "Enum",
"sub": [
{
"ext": {
"discriminant": 0
},
"info": "Plain",
"name": "NotOwner",
"type": "Null"
},
{
"ext": {
"discriminant": 1
},
"info": "Plain",
"name": "NotApproved",
"type": "Null"
},
{
"ext": {
"discriminant": 2
},
"info": "Plain",
"name": "TokenExists",
"type": "Null"
},
{
"ext": {
"discriminant": 3
},
"info": "Plain",
"name": "TokenNotFound",
"type": "Null"
},
{
"ext": {
"discriminant": 4
},
"info": "Plain",
"name": "CannotInsert",
"type": "Null"
},
{
"ext": {
"discriminant": 5
},
"info": "Plain",
"name": "CannotRemove",
"type": "Null"
},
{
"ext": {
"discriminant": 6
},
"info": "Plain",
"name": "CannotFetchValue",
"type": "Null"
},
{
"ext": {
"discriminant": 7
},
"info": "Plain",
"name": "NotAllowed",
"type": "Null"
}
],
"type": "{\"_enum\":[\"NotOwner\",\"NotApproved\",\"TokenExists\",\"TokenNotFound\",\"CannotInsert\",\"CannotRemove\",\"CannotFetchValue\",\"NotAllowed\"]}"
}
],
"info": "Result",
"type": "Result<(), Error>"
},
{
"info": "Tuple",
"sub": [],
"type": "()"
},
{
"displayName": "Error",
"namespace": "erc721::erc721",
"info": "Enum",
"sub": [
{
"ext": {
"discriminant": 0
},
"info": "Plain",
"name": "NotOwner",
"type": "Null"
},
{
"ext": {
"discriminant": 1
},
"info": "Plain",
"name": "NotApproved",
"type": "Null"
},
{
"ext": {
"discriminant": 2
},
"info": "Plain",
"name": "TokenExists",
"type": "Null"
},
{
"ext": {
"discriminant": 3
},
"info": "Plain",
"name": "TokenNotFound",
"type": "Null"
},
{
"ext": {
"discriminant": 4
},
"info": "Plain",
"name": "CannotInsert",
"type": "Null"
},
{
"ext": {
"discriminant": 5
},
"info": "Plain",
"name": "CannotRemove",
"type": "Null"
},
{
"ext": {
"discriminant": 6
},
"info": "Plain",
"name": "CannotFetchValue",
"type": "Null"
},
{
"ext": {
"discriminant": 7
},
"info": "Plain",
"name": "NotAllowed",
"type": "Null"
}
],
"type": "{\"_enum\":[\"NotOwner\",\"NotApproved\",\"TokenExists\",\"TokenNotFound\",\"CannotInsert\",\"CannotRemove\",\"CannotFetchValue\",\"NotAllowed\"]}"
}
]
@@ -1,6 +0,0 @@
[
{
"info": "Plain",
"type": "bool"
}
]
@@ -1,6 +0,0 @@
[
{
"info": "Plain",
"type": "bool"
}
]
@@ -1,6 +0,0 @@
[
{
"info": "Plain",
"type": "i32"
}
]
@@ -1,514 +0,0 @@
[
{
"displayName": "Header",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "last_vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "len"
},
{
"info": "Plain",
"type": "u32",
"name": "len_entries"
}
],
"type": "{\"last_vacant\":\"u32\",\"len\":\"u32\",\"len_entries\":\"u32\"}"
},
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"info": "Tuple",
"sub": [
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(u32,AccountId)",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"(u32,AccountId)\"}}"
},
{
"info": "Tuple",
"sub": [
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(u32,AccountId)"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"info": "Plain",
"type": "u8"
},
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"info": "Tuple",
"sub": [],
"type": "()",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"()\",\"key_index\":\"u32\"}"
},
{
"info": "Tuple",
"sub": [],
"type": "()"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"u32\"}}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"u32\",\"key_index\":\"u32\"}"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"displayName": "Transaction",
"namespace": "multisig_plain::multisig_plain",
"info": "Struct",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "callee"
},
{
"info": "VecFixed",
"length": 4,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;4]",
"name": "selector"
},
{
"info": "Vec",
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "Vec<u8>",
"name": "input"
},
{
"info": "Plain",
"type": "u128",
"name": "transferred_value"
},
{
"info": "Plain",
"type": "u64",
"name": "gas_limit"
}
],
"type": "{\"callee\":\"AccountId\",\"selector\":\"[u8;4]\",\"input\":\"Vec<u8>\",\"transferred_value\":\"u128\",\"gas_limit\":\"u64\"}",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"Transaction\"}}"
},
{
"displayName": "Transaction",
"namespace": "multisig_plain::multisig_plain",
"info": "Struct",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "callee"
},
{
"info": "VecFixed",
"length": 4,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;4]",
"name": "selector"
},
{
"info": "Vec",
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "Vec<u8>",
"name": "input"
},
{
"info": "Plain",
"type": "u128",
"name": "transferred_value"
},
{
"info": "Plain",
"type": "u64",
"name": "gas_limit"
}
],
"type": "{\"callee\":\"AccountId\",\"selector\":\"[u8;4]\",\"input\":\"Vec<u8>\",\"transferred_value\":\"u128\",\"gas_limit\":\"u64\"}"
},
{
"info": "VecFixed",
"length": 4,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;4]"
},
{
"info": "Vec",
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "Vec<u8>"
},
{
"info": "Plain",
"type": "u128"
},
{
"info": "Plain",
"type": "u64"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"AccountId\"}}"
},
{
"info": "Vec",
"sub": {
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
"type": "Vec<AccountId>"
},
{
"info": "Tuple",
"sub": [
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "ConfirmationStatus",
"namespace": "multisig_plain::multisig_plain",
"info": "Enum",
"sub": [
{
"info": "Tuple",
"sub": [],
"name": "Confirmed",
"type": "()"
},
{
"info": "Plain",
"type": "u32",
"name": "ConfirmationsNeeded"
}
],
"type": "{\"_enum\":{\"Confirmed\":\"()\",\"ConfirmationsNeeded\":\"u32\"}}"
}
],
"type": "(u32,ConfirmationStatus)"
},
{
"displayName": "ConfirmationStatus",
"namespace": "multisig_plain::multisig_plain",
"info": "Enum",
"sub": [
{
"info": "Tuple",
"sub": [],
"name": "Confirmed",
"type": "()"
},
{
"info": "Plain",
"type": "u32",
"name": "ConfirmationsNeeded"
}
],
"type": "{\"_enum\":{\"Confirmed\":\"()\",\"ConfirmationsNeeded\":\"u32\"}}"
},
{
"displayName": "Result",
"sub": [
{
"name": "Ok",
"info": "Tuple",
"sub": [],
"type": "()"
},
{
"name": "Error",
"info": "Tuple",
"sub": [],
"type": "()"
}
],
"info": "Result",
"type": "Result<(), ()>"
},
{
"displayName": "Result",
"sub": [
{
"name": "Ok",
"info": "Vec",
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "Vec<u8>"
},
{
"name": "Error",
"info": "Tuple",
"sub": [],
"type": "()"
}
],
"info": "Result",
"type": "Result<Vec<u8>, ()>"
},
{
"displayName": "Result",
"sub": [
{
"name": "Ok",
"displayName": "Option",
"sub": {
"info": "Vec",
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "Vec<u8>"
},
"info": "Option",
"type": "Option<Vec<u8>>"
},
{
"name": "Error",
"info": "Tuple",
"sub": [],
"type": "()"
}
],
"info": "Result",
"type": "Result<Option<Vec<u8>>, ()>"
},
{
"displayName": "Option",
"sub": {
"info": "Vec",
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "Vec<u8>"
},
"info": "Option",
"type": "Option<Vec<u8>>"
}
]
@@ -0,0 +1,47 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "VecFixed",
"lookupIndex": 2,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 4,
"type": "i32",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "Hash",
"docs": [],
"namespace": "ink_env::types::Hash",
"lookupNameRoot": "InkEnvHash"
}
]
@@ -0,0 +1,232 @@
[
{
"info": "Struct",
"lookupIndex": 1,
"lookupName": "InkStorageCollectionsStashHeader",
"type": "{\"lastVacant\":\"u32\",\"len\":\"u32\",\"lenEntries\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::Header",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lastVacant"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "len"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lenEntries"
}
]
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 3,
"lookupName": "InkStorageCollectionsStashEntry",
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"Hash\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 7,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup7",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 4,
"type": "Hash",
"docs": [],
"namespace": "ink_env::types::Hash",
"lookupNameRoot": "InkEnvHash",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Plain",
"lookupIndex": 4,
"type": "Hash",
"docs": [],
"namespace": "ink_env::types::Hash",
"lookupNameRoot": "InkEnvHash"
},
{
"info": "VecFixed",
"lookupIndex": 5,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 6,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 6,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Struct",
"lookupIndex": 7,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::VacantEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "next"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "prev"
}
]
},
{
"info": "Struct",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsHashmapValueEntry",
"type": "{\"value\":\"AccountId\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 9,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Plain",
"lookupIndex": 9,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Result",
"lookupIndex": 10,
"type": "Result<Null, DnsError>",
"docs": [],
"namespace": "Result",
"sub": [
{
"name": "Ok",
"info": "Null",
"lookupIndex": 11,
"type": "Null",
"docs": [],
"namespace": ""
},
{
"name": "Error",
"docs": [],
"info": "Si",
"lookupIndex": 12,
"lookupName": "DnsError",
"type": "Lookup12"
}
]
},
{
"info": "Null",
"lookupIndex": 11,
"type": "Null",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 12,
"lookupName": "DnsError",
"type": "{\"_enum\":[\"NameAlreadyExists\",\"CallerIsNotOwner\"]}",
"docs": [],
"namespace": "dns::dns::Error",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "NameAlreadyExists"
},
{
"info": "Null",
"type": "Null",
"index": 1,
"name": "CallerIsNotOwner"
}
]
},
{
"info": "Option",
"lookupIndex": 13,
"type": "Option<AccountId>",
"docs": [],
"namespace": "Option",
"sub": {
"info": "Plain",
"lookupIndex": 9,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
}
]
@@ -0,0 +1,252 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "u128",
"docs": [],
"namespace": ""
},
{
"info": "Struct",
"lookupIndex": 2,
"lookupName": "InkStorageCollectionsStashHeader",
"type": "{\"lastVacant\":\"u32\",\"len\":\"u32\",\"lenEntries\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::Header",
"sub": [
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lastVacant"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "len"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lenEntries"
}
]
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 4,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"AccountId\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "VecFixed",
"lookupIndex": 6,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Struct",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::VacantEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "next"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "prev"
}
]
},
{
"info": "Struct",
"lookupIndex": 9,
"lookupName": "InkStorageCollectionsHashmapValueEntry",
"type": "{\"value\":\"u128\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 1,
"type": "u128",
"docs": [],
"namespace": "",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Enum",
"lookupIndex": 10,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"(AccountId,AccountId)\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Tuple",
"lookupIndex": 11,
"type": "(AccountId,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
],
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Tuple",
"lookupIndex": 11,
"type": "(AccountId,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
]
},
{
"info": "Plain",
"lookupIndex": 12,
"type": "bool",
"docs": [],
"namespace": ""
},
{
"info": "Option",
"lookupIndex": 13,
"type": "Option<AccountId>",
"docs": [],
"namespace": "Option",
"sub": {
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
}
]
@@ -0,0 +1,412 @@
[
{
"info": "Struct",
"lookupIndex": 1,
"lookupName": "InkStorageCollectionsStashHeader",
"type": "{\"lastVacant\":\"u32\",\"len\":\"u32\",\"lenEntries\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::Header",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lastVacant"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "len"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lenEntries"
}
]
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 3,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"u32\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 4,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup4",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Struct",
"lookupIndex": 4,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::VacantEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "next"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "prev"
}
]
},
{
"info": "Struct",
"lookupIndex": 5,
"type": "{\"value\":\"AccountId\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "VecFixed",
"lookupIndex": 7,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 8,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 8,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 9,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"AccountId\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 4,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup4",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Struct",
"lookupIndex": 10,
"type": "{\"value\":\"u32\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Enum",
"lookupIndex": 11,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"(AccountId,AccountId)\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 4,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup4",
"index": 0,
"name": "Vacant"
},
{
"info": "Tuple",
"lookupIndex": 12,
"type": "(AccountId,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
],
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Tuple",
"lookupIndex": 12,
"type": "(AccountId,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
]
},
{
"info": "Struct",
"lookupIndex": 13,
"type": "{\"value\":\"bool\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 14,
"type": "bool",
"docs": [],
"namespace": "",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Plain",
"lookupIndex": 14,
"type": "bool",
"docs": [],
"namespace": ""
},
{
"info": "Option",
"lookupIndex": 15,
"type": "Option<AccountId>",
"docs": [],
"namespace": "Option",
"sub": {
"info": "Plain",
"lookupIndex": 6,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
},
{
"info": "Result",
"lookupIndex": 16,
"type": "Result<Null, Erc721Error>",
"docs": [],
"namespace": "Result",
"sub": [
{
"name": "Ok",
"info": "Null",
"lookupIndex": 17,
"type": "Null",
"docs": [],
"namespace": ""
},
{
"name": "Error",
"docs": [],
"info": "Si",
"lookupIndex": 18,
"lookupName": "Erc721Error",
"type": "Lookup18"
}
]
},
{
"info": "Null",
"lookupIndex": 17,
"type": "Null",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 18,
"lookupName": "Erc721Error",
"type": "{\"_enum\":[\"NotOwner\",\"NotApproved\",\"TokenExists\",\"TokenNotFound\",\"CannotInsert\",\"CannotRemove\",\"CannotFetchValue\",\"NotAllowed\"]}",
"docs": [],
"namespace": "erc721::erc721::Error",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "NotOwner"
},
{
"info": "Null",
"type": "Null",
"index": 1,
"name": "NotApproved"
},
{
"info": "Null",
"type": "Null",
"index": 2,
"name": "TokenExists"
},
{
"info": "Null",
"type": "Null",
"index": 3,
"name": "TokenNotFound"
},
{
"info": "Null",
"type": "Null",
"index": 4,
"name": "CannotInsert"
},
{
"info": "Null",
"type": "Null",
"index": 5,
"name": "CannotRemove"
},
{
"info": "Null",
"type": "Null",
"index": 6,
"name": "CannotFetchValue"
},
{
"info": "Null",
"type": "Null",
"index": 7,
"name": "NotAllowed"
}
]
}
]
@@ -0,0 +1,9 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "bool",
"docs": [],
"namespace": ""
}
]
@@ -0,0 +1,9 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "bool",
"docs": [],
"namespace": ""
}
]
@@ -0,0 +1,9 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "i32",
"docs": [],
"namespace": ""
}
]
@@ -0,0 +1,560 @@
[
{
"info": "Struct",
"lookupIndex": 1,
"lookupName": "InkStorageCollectionsStashHeader",
"type": "{\"lastVacant\":\"u32\",\"len\":\"u32\",\"lenEntries\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::Header",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lastVacant"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "len"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lenEntries"
}
]
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 3,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"(u32,AccountId)\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Tuple",
"lookupIndex": 4,
"type": "(u32,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
],
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Tuple",
"lookupIndex": 4,
"type": "(u32,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
]
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "VecFixed",
"lookupIndex": 6,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Struct",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::VacantEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "next"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "prev"
}
]
},
{
"info": "Struct",
"lookupIndex": 9,
"type": "{\"value\":\"Null\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Null",
"lookupIndex": 10,
"type": "Null",
"docs": [],
"namespace": "",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Null",
"lookupIndex": 10,
"type": "Null",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 11,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"u32\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Struct",
"lookupIndex": 12,
"type": "{\"value\":\"u32\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Enum",
"lookupIndex": 13,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"MultisigPlainMultisigPlainTransaction\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"docs": [],
"info": "Si",
"lookupIndex": 14,
"lookupName": "MultisigPlainMultisigPlainTransaction",
"type": "Lookup14",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Struct",
"lookupIndex": 14,
"lookupName": "MultisigPlainMultisigPlainTransaction",
"type": "{\"callee\":\"AccountId\",\"selector\":\"[u8;4]\",\"input\":\"Bytes\",\"transferredValue\":\"u128\",\"gasLimit\":\"u64\"}",
"docs": [],
"namespace": "multisig_plain::multisig_plain::Transaction",
"sub": [
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"name": "callee"
},
{
"info": "VecFixed",
"lookupIndex": 15,
"type": "[u8;4]",
"docs": [],
"namespace": "",
"length": 4,
"sub": {
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
},
"name": "selector"
},
{
"info": "Plain",
"lookupIndex": 16,
"type": "Bytes",
"docs": [],
"namespace": "",
"name": "input"
},
{
"info": "Plain",
"lookupIndex": 17,
"type": "u128",
"docs": [],
"namespace": "",
"name": "transferredValue"
},
{
"info": "Plain",
"lookupIndex": 18,
"type": "u64",
"docs": [],
"namespace": "",
"name": "gasLimit"
}
]
},
{
"info": "VecFixed",
"lookupIndex": 15,
"type": "[u8;4]",
"docs": [],
"namespace": "",
"length": 4,
"sub": {
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 16,
"type": "Bytes",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 17,
"type": "u128",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 18,
"type": "u64",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 19,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"AccountId\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Vec",
"lookupIndex": 20,
"type": "Vec<AccountId>",
"docs": [],
"namespace": "",
"sub": {
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
},
{
"info": "Tuple",
"lookupIndex": 21,
"type": "(u32,MultisigPlainMultisigPlainConfirmationStatus)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"docs": [],
"info": "Si",
"lookupIndex": 22,
"lookupName": "MultisigPlainMultisigPlainConfirmationStatus",
"type": "Lookup22"
}
]
},
{
"info": "Enum",
"lookupIndex": 22,
"lookupName": "MultisigPlainMultisigPlainConfirmationStatus",
"type": "{\"_enum\":{\"Confirmed\":\"Null\",\"ConfirmationsNeeded\":\"u32\"}}",
"docs": [],
"namespace": "multisig_plain::multisig_plain::ConfirmationStatus",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "Confirmed"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"index": 1,
"name": "ConfirmationsNeeded"
}
]
},
{
"info": "Result",
"lookupIndex": 23,
"type": "Result<Null, Null>",
"docs": [],
"namespace": "Result",
"sub": [
{
"name": "Ok",
"info": "Null",
"lookupIndex": 10,
"type": "Null",
"docs": [],
"namespace": ""
},
{
"name": "Error",
"info": "Null",
"lookupIndex": 10,
"type": "Null",
"docs": [],
"namespace": ""
}
]
},
{
"info": "Result",
"lookupIndex": 24,
"type": "Result<Bytes, Null>",
"docs": [],
"namespace": "Result",
"sub": [
{
"name": "Ok",
"info": "Plain",
"lookupIndex": 16,
"type": "Bytes",
"docs": [],
"namespace": ""
},
{
"name": "Error",
"info": "Null",
"lookupIndex": 10,
"type": "Null",
"docs": [],
"namespace": ""
}
]
},
{
"info": "Result",
"lookupIndex": 25,
"type": "Result<Option<Bytes>, Null>",
"docs": [],
"namespace": "Result",
"sub": [
{
"name": "Ok",
"info": "Option",
"lookupIndex": 26,
"type": "Option<Bytes>",
"docs": [],
"namespace": "Option",
"sub": {
"info": "Plain",
"lookupIndex": 16,
"type": "Bytes",
"docs": [],
"namespace": ""
}
},
{
"name": "Error",
"info": "Null",
"lookupIndex": 10,
"type": "Null",
"docs": [],
"namespace": ""
}
]
},
{
"info": "Option",
"lookupIndex": 26,
"type": "Option<Bytes>",
"docs": [],
"namespace": "Option",
"sub": {
"info": "Plain",
"lookupIndex": 16,
"type": "Bytes",
"docs": [],
"namespace": ""
}
}
]
@@ -0,0 +1,9 @@
[
{
"info": "Plain",
"lookupIndex": 0,
"type": "bool",
"docs": [],
"namespace": ""
}
]
@@ -1,6 +0,0 @@
[
{
"info": "Plain",
"type": "u256"
}
]
@@ -0,0 +1,9 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "u256",
"docs": [],
"namespace": ""
}
]
@@ -1,28 +0,0 @@
[
{
"info": "Plain",
"type": "u256"
},
{
"info": "Plain",
"type": "u8"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"displayName": "AccountId",
"info": "Plain",
"type": "AccountId"
},
{
"info": "Plain",
"type": "Text"
}
]
@@ -1,422 +0,0 @@
[
{
"info": "Plain",
"type": "i32"
},
{
"info": "Plain",
"type": "u32"
},
{
"info": "Plain",
"type": "u8"
},
{
"displayName": "Variant",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Tuple",
"sub": [],
"name": "None",
"type": "()"
},
{
"displayName": "Weekday",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"ext": {
"discriminant": 0
},
"info": "Plain",
"name": "Monday",
"type": "Null"
},
{
"ext": {
"discriminant": 1
},
"info": "Plain",
"name": "Tuesday",
"type": "Null"
},
{
"ext": {
"discriminant": 2
},
"info": "Plain",
"name": "Wednesday",
"type": "Null"
},
{
"ext": {
"discriminant": 3
},
"info": "Plain",
"name": "Thursday",
"type": "Null"
},
{
"ext": {
"discriminant": 4
},
"info": "Plain",
"name": "Friday",
"type": "Null"
},
{
"ext": {
"discriminant": 5
},
"info": "Plain",
"name": "Saturday",
"type": "Null"
},
{
"ext": {
"discriminant": 6
},
"info": "Plain",
"name": "Sunday",
"type": "Null"
}
],
"type": "{\"_enum\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"]}",
"name": "Weekday"
},
{
"displayName": "TupleMaybeSigned",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Plain",
"type": "i32",
"name": "Signed"
},
{
"info": "Plain",
"type": "u32",
"name": "Unsigned"
}
],
"type": "{\"_enum\":{\"Signed\":\"i32\",\"Unsigned\":\"u32\"}}",
"name": "TupleMaybeSigned"
},
{
"displayName": "NamedMaybeSigned",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "i32",
"name": "value"
}
],
"name": "Signed",
"type": "{\"value\":\"i32\"}"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "value"
}
],
"name": "Unsigned",
"type": "{\"value\":\"u32\"}"
}
],
"type": "{\"_enum\":{\"Signed\":\"{\\\"value\\\":\\\"i32\\\"}\",\"Unsigned\":\"{\\\"value\\\":\\\"u32\\\"}\"}}",
"name": "NamedMaybeSigned"
},
{
"displayName": "Color",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Tuple",
"sub": [],
"name": "Red",
"type": "()"
},
{
"info": "Tuple",
"sub": [],
"name": "Blue",
"type": "()"
},
{
"info": "Tuple",
"sub": [],
"name": "Green",
"type": "()"
},
{
"info": "Tuple",
"sub": [],
"name": "Yellow",
"type": "()"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u8",
"name": "r"
},
{
"info": "Plain",
"type": "u8",
"name": "g"
},
{
"info": "Plain",
"type": "u8",
"name": "b"
}
],
"name": "Rgb",
"type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\"}"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u8",
"name": "r"
},
{
"info": "Plain",
"type": "u8",
"name": "g"
},
{
"info": "Plain",
"type": "u8",
"name": "b"
},
{
"info": "Plain",
"type": "u8",
"name": "a"
}
],
"name": "Rgba",
"type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\",\"a\":\"u8\"}"
}
],
"type": "{\"_enum\":{\"Red\":\"()\",\"Blue\":\"()\",\"Green\":\"()\",\"Yellow\":\"()\",\"Rgb\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\"}\",\"Rgba\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\",\\\"a\\\":\\\"u8\\\"}\"}}",
"name": "Color"
}
],
"type": "{\"_enum\":{\"None\":\"()\",\"Weekday\":\"Weekday\",\"TupleMaybeSigned\":\"TupleMaybeSigned\",\"NamedMaybeSigned\":\"NamedMaybeSigned\",\"Color\":\"Color\"}}"
},
{
"displayName": "Weekday",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"ext": {
"discriminant": 0
},
"info": "Plain",
"name": "Monday",
"type": "Null"
},
{
"ext": {
"discriminant": 1
},
"info": "Plain",
"name": "Tuesday",
"type": "Null"
},
{
"ext": {
"discriminant": 2
},
"info": "Plain",
"name": "Wednesday",
"type": "Null"
},
{
"ext": {
"discriminant": 3
},
"info": "Plain",
"name": "Thursday",
"type": "Null"
},
{
"ext": {
"discriminant": 4
},
"info": "Plain",
"name": "Friday",
"type": "Null"
},
{
"ext": {
"discriminant": 5
},
"info": "Plain",
"name": "Saturday",
"type": "Null"
},
{
"ext": {
"discriminant": 6
},
"info": "Plain",
"name": "Sunday",
"type": "Null"
}
],
"type": "{\"_enum\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"]}"
},
{
"displayName": "TupleMaybeSigned",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Plain",
"type": "i32",
"name": "Signed"
},
{
"info": "Plain",
"type": "u32",
"name": "Unsigned"
}
],
"type": "{\"_enum\":{\"Signed\":\"i32\",\"Unsigned\":\"u32\"}}"
},
{
"displayName": "NamedMaybeSigned",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "i32",
"name": "value"
}
],
"name": "Signed",
"type": "{\"value\":\"i32\"}"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "value"
}
],
"name": "Unsigned",
"type": "{\"value\":\"u32\"}"
}
],
"type": "{\"_enum\":{\"Signed\":\"{\\\"value\\\":\\\"i32\\\"}\",\"Unsigned\":\"{\\\"value\\\":\\\"u32\\\"}\"}}"
},
{
"displayName": "Color",
"namespace": "enum_example::enum_example",
"info": "Enum",
"sub": [
{
"info": "Tuple",
"sub": [],
"name": "Red",
"type": "()"
},
{
"info": "Tuple",
"sub": [],
"name": "Blue",
"type": "()"
},
{
"info": "Tuple",
"sub": [],
"name": "Green",
"type": "()"
},
{
"info": "Tuple",
"sub": [],
"name": "Yellow",
"type": "()"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u8",
"name": "r"
},
{
"info": "Plain",
"type": "u8",
"name": "g"
},
{
"info": "Plain",
"type": "u8",
"name": "b"
}
],
"name": "Rgb",
"type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\"}"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u8",
"name": "r"
},
{
"info": "Plain",
"type": "u8",
"name": "g"
},
{
"info": "Plain",
"type": "u8",
"name": "b"
},
{
"info": "Plain",
"type": "u8",
"name": "a"
}
],
"name": "Rgba",
"type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\",\"a\":\"u8\"}"
}
],
"type": "{\"_enum\":{\"Red\":\"()\",\"Blue\":\"()\",\"Green\":\"()\",\"Yellow\":\"()\",\"Rgb\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\"}\",\"Rgba\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\",\\\"a\\\":\\\"u8\\\"}\"}}"
}
]
@@ -0,0 +1,54 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "u256",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "VecFixed",
"lookupIndex": 3,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 2,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "VecFixed",
"lookupIndex": 4,
"lookupName": "AccountId",
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 2,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "Text",
"docs": [],
"namespace": ""
}
]
@@ -0,0 +1,303 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "i32",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 4,
"lookupName": "EnumExampleEnumExampleVariant",
"type": "{\"_enum\":{\"None\":\"Null\",\"Weekday\":\"EnumExampleEnumExampleWeekday\",\"TupleMaybeSigned\":\"EnumExampleEnumExampleTupleMaybeSigned\",\"NamedMaybeSigned\":\"EnumExampleEnumExampleNamedMaybeSigned\",\"Color\":\"EnumExampleEnumExampleColor\"}}",
"docs": [],
"namespace": "enum_example::enum_example::Variant",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "None"
},
{
"docs": [],
"info": "Si",
"lookupIndex": 5,
"lookupName": "EnumExampleEnumExampleWeekday",
"type": "Lookup5",
"index": 1,
"name": "Weekday"
},
{
"docs": [],
"info": "Si",
"lookupIndex": 6,
"lookupName": "EnumExampleEnumExampleTupleMaybeSigned",
"type": "Lookup6",
"index": 2,
"name": "TupleMaybeSigned"
},
{
"docs": [],
"info": "Si",
"lookupIndex": 7,
"lookupName": "EnumExampleEnumExampleNamedMaybeSigned",
"type": "Lookup7",
"index": 3,
"name": "NamedMaybeSigned"
},
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "EnumExampleEnumExampleColor",
"type": "Lookup8",
"index": 4,
"name": "Color"
}
]
},
{
"info": "Enum",
"lookupIndex": 5,
"lookupName": "EnumExampleEnumExampleWeekday",
"type": "{\"_enum\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"]}",
"docs": [],
"namespace": "enum_example::enum_example::Weekday",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "Monday"
},
{
"info": "Null",
"type": "Null",
"index": 1,
"name": "Tuesday"
},
{
"info": "Null",
"type": "Null",
"index": 2,
"name": "Wednesday"
},
{
"info": "Null",
"type": "Null",
"index": 3,
"name": "Thursday"
},
{
"info": "Null",
"type": "Null",
"index": 4,
"name": "Friday"
},
{
"info": "Null",
"type": "Null",
"index": 5,
"name": "Saturday"
},
{
"info": "Null",
"type": "Null",
"index": 6,
"name": "Sunday"
}
]
},
{
"info": "Enum",
"lookupIndex": 6,
"lookupName": "EnumExampleEnumExampleTupleMaybeSigned",
"type": "{\"_enum\":{\"Signed\":\"i32\",\"Unsigned\":\"u32\"}}",
"docs": [],
"namespace": "enum_example::enum_example::TupleMaybeSigned",
"sub": [
{
"info": "Plain",
"lookupIndex": 1,
"type": "i32",
"docs": [],
"namespace": "",
"index": 0,
"name": "Signed"
},
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"index": 1,
"name": "Unsigned"
}
]
},
{
"info": "Enum",
"lookupIndex": 7,
"lookupName": "EnumExampleEnumExampleNamedMaybeSigned",
"type": "{\"_enum\":{\"Signed\":\"{\\\"value\\\":\\\"i32\\\"}\",\"Unsigned\":\"{\\\"value\\\":\\\"u32\\\"}\"}}",
"docs": [],
"namespace": "enum_example::enum_example::NamedMaybeSigned",
"sub": [
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"lookupIndex": 1,
"type": "i32",
"docs": [],
"namespace": "",
"name": "value"
}
],
"type": "{\"value\":\"i32\"}",
"index": 0,
"name": "Signed"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"lookupIndex": 2,
"type": "u32",
"docs": [],
"namespace": "",
"name": "value"
}
],
"type": "{\"value\":\"u32\"}",
"index": 1,
"name": "Unsigned"
}
]
},
{
"info": "Enum",
"lookupIndex": 8,
"lookupName": "EnumExampleEnumExampleColor",
"type": "{\"_enum\":{\"Red\":\"Null\",\"Blue\":\"Null\",\"Green\":\"Null\",\"Yellow\":\"Null\",\"Rgb\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\"}\",\"Rgba\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\",\\\"a\\\":\\\"u8\\\"}\"}}",
"docs": [],
"namespace": "enum_example::enum_example::Color",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "Red"
},
{
"info": "Null",
"type": "Null",
"index": 1,
"name": "Blue"
},
{
"info": "Null",
"type": "Null",
"index": 2,
"name": "Green"
},
{
"info": "Null",
"type": "Null",
"index": 3,
"name": "Yellow"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "r"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "g"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "b"
}
],
"type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\"}",
"index": 4,
"name": "Rgb"
},
{
"info": "Struct",
"sub": [
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "r"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "g"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "b"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u8",
"docs": [],
"namespace": "",
"name": "a"
}
],
"type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\",\"a\":\"u8\"}",
"index": 5,
"name": "Rgba"
}
]
}
]
@@ -0,0 +1,26 @@
[
{
"info": "Enum",
"lookupIndex": 1,
"lookupName": "RecursiveMyEnum",
"type": "{\"_enum\":{\"A\":\"Null\",\"B\":\"RecursiveMyEnum\"}}",
"docs": [],
"namespace": "recursive::MyEnum",
"sub": [
{
"info": "Null",
"type": "Null",
"index": 0,
"name": "A"
},
{
"info": "Si",
"lookupIndex": 1,
"lookupName": "RecursiveMyEnum",
"type": "Lookup1",
"index": 1,
"name": "B"
}
]
}
]
@@ -0,0 +1,259 @@
[
{
"info": "Plain",
"lookupIndex": 1,
"type": "u128",
"docs": [],
"namespace": ""
},
{
"info": "Struct",
"lookupIndex": 2,
"lookupName": "InkStorageCollectionsStashHeader",
"type": "{\"lastVacant\":\"u32\",\"len\":\"u32\",\"lenEntries\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::Header",
"sub": [
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lastVacant"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "len"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "lenEntries"
}
]
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": ""
},
{
"info": "Enum",
"lookupIndex": 4,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"AccountId\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId",
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "VecFixed",
"lookupIndex": 6,
"type": "[u8;32]",
"docs": [],
"namespace": "",
"length": 32,
"sub": {
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
}
},
{
"info": "Plain",
"lookupIndex": 7,
"type": "u8",
"docs": [],
"namespace": ""
},
{
"info": "Struct",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::stash::VacantEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "next"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "prev"
}
]
},
{
"info": "Struct",
"lookupIndex": 9,
"lookupName": "InkStorageCollectionsHashmapValueEntry",
"type": "{\"value\":\"u128\",\"keyIndex\":\"u32\"}",
"docs": [],
"namespace": "ink_storage::collections::hashmap::ValueEntry",
"sub": [
{
"info": "Plain",
"lookupIndex": 1,
"type": "u128",
"docs": [],
"namespace": "",
"name": "value"
},
{
"info": "Plain",
"lookupIndex": 3,
"type": "u32",
"docs": [],
"namespace": "",
"name": "keyIndex"
}
]
},
{
"info": "Enum",
"lookupIndex": 10,
"type": "{\"_enum\":{\"Vacant\":\"InkStorageCollectionsStashVacantEntry\",\"Occupied\":\"(AccountId,AccountId)\"}}",
"docs": [],
"namespace": "ink_storage::collections::stash::Entry",
"sub": [
{
"docs": [],
"info": "Si",
"lookupIndex": 8,
"lookupName": "InkStorageCollectionsStashVacantEntry",
"type": "Lookup8",
"index": 0,
"name": "Vacant"
},
{
"info": "Tuple",
"lookupIndex": 11,
"type": "(AccountId,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
],
"index": 1,
"name": "Occupied"
}
]
},
{
"info": "Tuple",
"lookupIndex": 11,
"type": "(AccountId,AccountId)",
"docs": [],
"namespace": "",
"sub": [
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
},
{
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
]
},
{
"info": "Plain",
"lookupIndex": 12,
"type": "Text",
"docs": [],
"namespace": ""
},
{
"info": "Plain",
"lookupIndex": 13,
"type": "bool",
"docs": [],
"namespace": ""
},
{
"info": "Option",
"lookupIndex": 14,
"type": "Option<AccountId>",
"docs": [],
"namespace": "Option",
"sub": {
"info": "Plain",
"lookupIndex": 5,
"type": "AccountId",
"docs": [],
"namespace": "ink_env::types::AccountId",
"lookupNameRoot": "InkEnvAccountId"
}
}
]
@@ -1,205 +0,0 @@
[
{
"info": "Plain",
"type": "u128"
},
{
"displayName": "Header",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "last_vacant"
},
{
"info": "Plain",
"type": "u32",
"name": "len"
},
{
"info": "Plain",
"type": "u32",
"name": "len_entries"
}
],
"type": "{\"last_vacant\":\"u32\",\"len\":\"u32\",\"len_entries\":\"u32\"}"
},
{
"info": "Plain",
"type": "u32"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"AccountId\"}}"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"info": "VecFixed",
"length": 32,
"sub": {
"info": "Plain",
"type": "u8"
},
"type": "[u8;32]"
},
{
"info": "Plain",
"type": "u8"
},
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}"
},
{
"displayName": "ValueEntry",
"namespace": "ink_storage::collections::hashmap",
"sub": [
{
"info": "Plain",
"type": "u128",
"name": "value"
},
{
"info": "Plain",
"type": "u32",
"name": "key_index"
}
],
"info": "Struct",
"type": "{\"value\":\"u128\",\"key_index\":\"u32\"}"
},
{
"displayName": "Entry",
"namespace": "ink_storage::collections::stash",
"sub": [
{
"displayName": "VacantEntry",
"namespace": "ink_storage::collections::stash",
"info": "Struct",
"sub": [
{
"info": "Plain",
"type": "u32",
"name": "next"
},
{
"info": "Plain",
"type": "u32",
"name": "prev"
}
],
"type": "{\"next\":\"u32\",\"prev\":\"u32\"}",
"name": "Vacant"
},
{
"info": "Tuple",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(AccountId,AccountId)",
"name": "Occupied"
}
],
"info": "Enum",
"type": "{\"_enum\":{\"Vacant\":\"VacantEntry\",\"Occupied\":\"(AccountId,AccountId)\"}}"
},
{
"info": "Tuple",
"sub": [
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
{
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
}
],
"type": "(AccountId,AccountId)"
},
{
"info": "Plain",
"type": "Text"
},
{
"info": "Plain",
"type": "bool"
},
{
"displayName": "Option",
"sub": {
"displayName": "AccountId",
"namespace": "ink_env::types",
"info": "Plain",
"type": "AccountId"
},
"info": "Option",
"type": "Option<AccountId>"
}
]
@@ -1,9 +1,9 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
import * as ink from './ink';
import * as solang from './solang';
import * as user from './user';
import ink from './ink';
import solang from './solang';
import user from './user';
const all: Record<string, any> = {};
@@ -1,11 +1,10 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as delegator } from './delegator.json';
export { default as dns } from './dns.json';
export { default as erc20 } from './erc20.json';
export { default as erc721 } from './erc721.json';
export { default as flipper } from './flipper.json';
export { default as flipperBundle } from './flipper.contract.json';
export { default as incrementer } from './incrementer.json';
export { default as multisigPlain } from './multisig_plain.json';
import { createVersionedExport } from '../util';
import * as v0 from './v0';
import * as v1 from './v1';
const exp = createVersionedExport('v0', v0, {});
export default createVersionedExport('v1', v1, exp);
@@ -0,0 +1,11 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as delegator } from './delegator.json';
export { default as dns } from './dns.json';
export { default as erc20 } from './erc20.json';
export { default as erc721 } from './erc721.json';
export { default as flipper } from './flipper.json';
export { default as flipperBundle } from './flipper.contract.json';
export { default as incrementer } from './incrementer.json';
export { default as multisigPlain } from './multisig_plain.json';
@@ -0,0 +1,111 @@
{
"source": {
"hash": "0x7c5ff777929185b2350605e8f0163bfa25781097ad9ee2704c67021962720135",
"language": "ink! 3.0.0-rc5",
"compiler": "rustc 1.57.0-nightly",
"wasm": "0x0061736d01000000012b0860027f7f0060037f7f7f0060017f017f60000060037f7f7f017f60017f0060047f7f7f7f0060017f017e02880106057365616c30107365616c5f6765745f73746f726167650004057365616c30107365616c5f7365745f73746f726167650001057365616c30167365616c5f76616c75655f7472616e736665727265640000057365616c300a7365616c5f696e7075740000057365616c300b7365616c5f72657475726e000103656e76066d656d6f727902010210030e0d020002000100070603020304050608017f01418080040b071102066465706c6f79000d0463616c6c000f0ac60f0dc60101017f230041406a22012400200141206a200041186a290300370300200141186a200041106a290300370300200141106a200041086a2903003703002001420137032820012000290300370308200141808001360234200141808004360230200141808001360238200141086a41808004200141386a10002100200141306a2001280238100602400240024020000e0402000001000b000b000b20012001290330370338200141386a100741ff017122004102470440200141406b240020004100470f0b000b3101017f230041106b22022400200241086a200120002802002000280204100c20002002290308370200200241106a24000b4201027f230041106b22012400200141086a2000100a20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0b8d0101017f230041406a22022400200241206a200141186a290300370300200241186a200141106a290300370300200241106a200141086a2903003703002002420137032820022001290300370308200241386a41808001360200200241808004360234200241003602302002200241306a20001009200241086a200228020020022802041001200241406b24000b9d0101037f230041106b22032400200141086a220428020021052004410036020020012802042104200141808004360204200320023a000f2003410120042005100c024020032802044101460440200328020020032d000f3a0000200141003602082001418080043602042005450d012001200541016b3602082001200441016a3602042000410136020420002004360200200341106a24000f0b000b000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110102201047f41000520022d000f0b3a0001200020013a0000200241106a24000b900102027f017e230041106b220124002001420037030841042102027f02400340200241084604402001410436020820012903082203a741044f0d02000b20012000100a20012d0000410171450440200141086a20026a20012d00013a0000200241016a21020c010b0b4101210241000c010b410021022003422088a70b2100200141106a24002002ad2000ad420886840b1a00200120034d044020002001360204200020023602000f0b000b11004100100e41ff01714108470440000b0ba80602057f017e230041306b22012400027f02400240200045044020014180800136020c200141808004360208200141086a10112001200129030837031041032100200141106a100b2206a722034101710d02200642ffffffffff1f832206422088a721022006421888a721002006421088a721040240200341087641ff01712203419b01470440200341ed01460d010c030b200441ff017141ae0147200041ff0171419d014772200241de0047720d024103200141106a100741ff0171220020004102461b21000c030b200441ff017141cb0047200041ff0171419d0147720d01410221002002411b470d010c020b20014180800136020c200141808004360208200141086a101120012001290308370310410121020240200141106a100b2206a722054101710440410121000c010b200642ffffffffff1f832206422088a721042006421888a721002006421088a721030240200541087641ff01712205412f470440200541e30047200341ff0171413a4772200041ff017141a50147720d0141002100200441d100470d010c020b200341ff017141860147200041ff017141db0047720d004100210041002102200441d901460d010b41012100410121020b410620000d021a20020440200141286a4200370300200141206a4200370300200141186a420037030020014200370310200141106a1005410173200141106a100841080c030b200141286a4200370300200141206a4200370300200141186a4200370300200142003703102001200141106a10053a0008230041106b220024002000200141086a36020c2000410c6a2802002d00002101230041206b22002400200041186a4180800136020020004180800436021420004100360210200041086a200041106a2001100941002000280208200028020c1004000b410321000b4106200041034622020d001a4106200020021b22004102470440200141286a4200370300200141206a4200370300200141186a4200370300200142003703102000410171200141106a100841080c010b200141286a4200370300200141206a4200370300200141186a4200370300200142003703104100200141106a100841080b200141306a24000ba30102037f017e230041206b2200240020004180800136020420004180800436020020004180800136021041808004200041106a100220002000280210100620002000290300370308200041186a22014200370300200042003703100240200041086a200041106a411010102202047e4200052000290310210320012903000b20038450452002724504404101100e41ff01714108470d01200041206a24000f0b000b000b5701057f200028020422042002492205450440200028020022062107034020022003470440200120036a200320076a2d00003a0000200341016a21030c010b0b2000200420026b3602042000200220066a3602000b20050b3301017f230041106b220124002001200028020436020c20002802002001410c6a10032000200128020c1006200141106a24000b"
},
"contract": {
"name": "flipper",
"version": "3.0.0-rc5",
"authors": [
"Parity Technologies <admin@parity.io>"
]
},
"V1": {
"spec": {
"constructors": [
{
"args": [
{
"name": "init_value",
"type": {
"displayName": [
"bool"
],
"type": 0
}
}
],
"docs": [
"Creates a new flipper smart contract initialized with the given value."
],
"name": [
"new"
],
"selector": "0x9bae9d5e"
},
{
"args": [],
"docs": [
"Creates a new flipper smart contract initialized to `false`."
],
"name": [
"default"
],
"selector": "0xed4b9d1b"
}
],
"docs": [],
"events": [],
"messages": [
{
"args": [],
"docs": [
" Flips the current value of the Flipper's boolean."
],
"mutates": true,
"name": [
"flip"
],
"payable": false,
"returnType": null,
"selector": "0x633aa551"
},
{
"args": [],
"docs": [
" Returns the current value of the Flipper's boolean."
],
"mutates": false,
"name": [
"get"
],
"payable": false,
"returnType": {
"displayName": [
"bool"
],
"type": 0
},
"selector": "0x2f865bd9"
}
]
},
"storage": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0000000000000000000000000000000000000000000000000000000000000000",
"ty": 0
}
},
"name": "value"
}
]
}
},
"types": [
{
"id": 0,
"type": {
"def": {
"primitive": "bool"
}
}
}
]
}
}
@@ -0,0 +1,4 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as flipper } from './flipper.contract.json';
@@ -1,4 +1,7 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as ints256 } from './ints256.json';
import { createVersionedExport } from '../util';
import * as v0 from './v0';
export default createVersionedExport('v0', v0, {});
@@ -0,0 +1,4 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as ints256 } from './ints256.json';
@@ -1,6 +1,7 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as assetTransfer } from './assetTransfer.json';
export { default as enumExample } from './enumExample.json';
export { default as withString } from './withString.json';
import { createVersionedExport } from '../util';
import * as v0 from './v0';
export default createVersionedExport('v0', v0, {});
@@ -0,0 +1,7 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as assetTransfer } from './assetTransfer.json';
export { default as enumExample } from './enumExample.json';
export { default as recursive } from './recursive.contract.json';
export { default as withString } from './withString.json';
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
// Copyright 2017-2021 @polkadot/api-contract authors & contributors
// SPDX-License-Identifier: Apache-2.0
export function createVersionedExport (version: string, orig: Record<string, unknown>, exp: Record<string, unknown>): Record<string, unknown> {
Object.entries(orig).forEach(([name, json]): void => {
exp[`${version}_${name}`] = json;
});
return exp;
}
+9 -9
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api-derive",
"version": "6.1.2",
"version": "6.4.1",
"type": "module",
"description": "Common functions used across Polkadot, derived from RPC calls and storage queries.",
"main": "index.js",
@@ -20,15 +20,15 @@
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api-derive#readme",
"dependencies": {
"@babel/runtime": "^7.15.4",
"@polkadot/api": "6.1.2",
"@polkadot/rpc-core": "6.1.2",
"@polkadot/types": "6.1.2",
"@polkadot/util": "^7.4.1",
"@polkadot/util-crypto": "^7.4.1",
"rxjs": "^7.3.0"
"@polkadot/api": "6.4.1",
"@polkadot/rpc-core": "6.4.1",
"@polkadot/types": "6.4.1",
"@polkadot/util": "^7.5.1",
"@polkadot/util-crypto": "^7.5.1",
"rxjs": "^7.4.0"
},
"devDependencies": {
"@polkadot/keyring": "^7.4.1",
"@polkadot/rpc-provider": "6.1.2"
"@polkadot/keyring": "^7.5.1",
"@polkadot/rpc-provider": "6.4.1"
}
}
+11 -8
View File
@@ -4,7 +4,8 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Data, Option } from '@polkadot/types';
import type { AccountId, IdentityInfoAdditional, Registration } from '@polkadot/types/interfaces';
import type { AccountId } from '@polkadot/types/interfaces';
import type { PalletIdentityIdentityInfo, PalletIdentityRegistration } from '@polkadot/types/lookup';
import type { ITuple } from '@polkadot/types/types';
import type { DeriveAccountRegistration, DeriveHasIdentity } from '../types';
@@ -14,6 +15,8 @@ import { isHex, u8aToString } from '@polkadot/util';
import { memo } from '../util';
type IdentityInfoAdditional = PalletIdentityIdentityInfo['additional'][0];
const UNDEF_HEX = { toHex: () => undefined };
function dataAsString (data: Data): string | undefined {
@@ -37,7 +40,7 @@ function extractOther (additional: IdentityInfoAdditional[]): Record<string, str
}, {});
}
function extractIdentity (identityOfOpt?: Option<Registration>, superOf?: [AccountId, Data]): DeriveAccountRegistration {
function extractIdentity (identityOfOpt?: Option<PalletIdentityRegistration>, superOf?: [AccountId, Data]): DeriveAccountRegistration {
if (!identityOfOpt?.isSome) {
return { judgements: [] };
}
@@ -61,7 +64,7 @@ function extractIdentity (identityOfOpt?: Option<Registration>, superOf?: [Accou
};
}
function getParent (api: ApiInterfaceRx, identityOfOpt: Option<Registration> | undefined, superOfOpt: Option<ITuple<[AccountId, Data]>> | undefined): Observable<[Option<Registration> | undefined, [AccountId, Data] | undefined]> {
function getParent (api: ApiInterfaceRx, identityOfOpt: Option<PalletIdentityRegistration> | undefined, superOfOpt: Option<ITuple<[AccountId, Data]>> | undefined): Observable<[Option<PalletIdentityRegistration> | undefined, [AccountId, Data] | undefined]> {
if (identityOfOpt?.isSome) {
// this identity has something set
return of([identityOfOpt, undefined]);
@@ -70,7 +73,7 @@ function getParent (api: ApiInterfaceRx, identityOfOpt: Option<Registration> | u
// we have a super
return combineLatest([
api.query.identity.identityOf<Option<Registration>>(superOf[0]),
api.query.identity.identityOf(superOf[0]),
of(superOf)
]);
}
@@ -79,9 +82,9 @@ function getParent (api: ApiInterfaceRx, identityOfOpt: Option<Registration> | u
return of([undefined, undefined]);
}
function getBase (api: ApiInterfaceRx, accountId?: AccountId | Uint8Array | string): Observable<[Option<Registration> | undefined, Option<ITuple<[AccountId, Data]>> | undefined]> {
function getBase (api: ApiInterfaceRx, accountId?: AccountId | Uint8Array | string): Observable<[Option<PalletIdentityRegistration> | undefined, Option<ITuple<[AccountId, Data]>> | undefined]> {
return accountId && api.query.identity?.identityOf
? api.queryMulti<[Option<Registration>, Option<ITuple<[AccountId, Data]>>]>([
? api.queryMulti<[Option<PalletIdentityRegistration>, Option<ITuple<[AccountId, Data]>>]>([
[api.query.identity.identityOf, accountId],
[api.query.identity.superOf, accountId]
])
@@ -113,8 +116,8 @@ export function hasIdentityMulti (instanceId: string, api: ApiInterfaceRx): (acc
return memo(instanceId, (accountIds: (AccountId | Uint8Array | string)[]): Observable<DeriveHasIdentity[]> =>
api.query.identity?.identityOf
? combineLatest([
api.query.identity.identityOf.multi<Option<Registration>>(accountIds),
api.query.identity.superOf.multi<Option<ITuple<[AccountId, Data]>>>(accountIds)
api.query.identity.identityOf.multi(accountIds),
api.query.identity.superOf.multi(accountIds)
]).pipe(
map(([identities, supers]) =>
identities.map((identityOfOpt, index): DeriveHasIdentity => {
+1 -1
View File
@@ -16,7 +16,7 @@ function queryAccounts (api: ApiInterfaceRx): Observable<AccountIndexes> {
map((entries): AccountIndexes =>
entries.reduce((indexes: AccountIndexes, [key, idOpt]): AccountIndexes => {
if (idOpt.isSome) {
indexes[idOpt.unwrap()[0].toString()] = key.args[0];
indexes[idOpt.unwrap()[0].toString()] = api.registry.createType('AccountIndex', key.args[0]);
}
return indexes;
+63 -33
View File
@@ -4,24 +4,25 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx, QueryableStorageMultiArg } from '@polkadot/api/types';
import type { Option, Vec } from '@polkadot/types';
import type { AccountId, AccountIndex, Address, Balance, BalanceLock, BalanceLockTo212, BlockNumber, VestingInfo, VestingSchedule } from '@polkadot/types/interfaces';
import type { DeriveBalancesAccount, DeriveBalancesAccountData, DeriveBalancesAll, DeriveBalancesAllAccountData } from '../types';
import type { AccountId, AccountIndex, Address, Balance, BalanceLockTo212, BlockNumber, VestingSchedule } from '@polkadot/types/interfaces';
import type { PalletBalancesBalanceLock, PalletVestingVestingInfo } from '@polkadot/types/lookup';
import type { DeriveBalancesAccount, DeriveBalancesAccountData, DeriveBalancesAll, DeriveBalancesAllAccountData, DeriveBalancesAllVesting } from '../types';
import { combineLatest, map, of, switchMap } from 'rxjs';
import { BN, bnMax, isFunction } from '@polkadot/util';
import { BN, BN_ZERO, bnMax, bnMin, isFunction } from '@polkadot/util';
import { memo } from '../util';
type BalanceLocksEntry = Vec<BalanceLock | BalanceLockTo212>;
type BalanceLocksEntry = Vec<PalletBalancesBalanceLock | BalanceLockTo212>;
type BalanceLocks = BalanceLocksEntry[];
type ResultBalance = [VestingInfo | null, ((BalanceLock | BalanceLockTo212)[])[]];
type ResultBalance = [PalletVestingVestingInfo[] | null, ((PalletBalancesBalanceLock | BalanceLockTo212)[])[]];
type Result = [DeriveBalancesAccount, BlockNumber, ResultBalance];
interface AllLocked {
allLocked: boolean,
lockedBalance: Balance,
lockedBreakdown: (BalanceLock | BalanceLockTo212)[],
lockedBreakdown: (PalletBalancesBalanceLock | BalanceLockTo212)[],
vestingLocked: Balance
}
@@ -33,9 +34,9 @@ type DeriveCustomLocks = ApiInterfaceRx['derive'] & {
const VESTING_ID = '0x76657374696e6720';
function calcLocked (api: ApiInterfaceRx, bestNumber: BlockNumber, locks: (BalanceLock | BalanceLockTo212)[]): AllLocked {
function calcLocked (api: ApiInterfaceRx, bestNumber: BlockNumber, locks: (PalletBalancesBalanceLock | BalanceLockTo212)[]): AllLocked {
let lockedBalance = api.registry.createType('Balance');
let lockedBreakdown: (BalanceLock | BalanceLockTo212)[] = [];
let lockedBreakdown: (PalletBalancesBalanceLock | BalanceLockTo212)[] = [];
let vestingLocked = api.registry.createType('Balance');
let allLocked = false;
@@ -56,7 +57,7 @@ function calcLocked (api: ApiInterfaceRx, bestNumber: BlockNumber, locks: (Balan
return { allLocked, lockedBalance, lockedBreakdown, vestingLocked };
}
function calcShared (api: ApiInterfaceRx, bestNumber: BlockNumber, data: DeriveBalancesAccountData, locks: (BalanceLock | BalanceLockTo212)[]): DeriveBalancesAllAccountData {
function calcShared (api: ApiInterfaceRx, bestNumber: BlockNumber, data: DeriveBalancesAccountData, locks: (PalletBalancesBalanceLock | BalanceLockTo212)[]): DeriveBalancesAllAccountData {
const { allLocked, lockedBalance, lockedBreakdown, vestingLocked } = calcLocked(api, bestNumber, locks);
return {
@@ -68,35 +69,54 @@ function calcShared (api: ApiInterfaceRx, bestNumber: BlockNumber, data: DeriveB
};
}
function calcBalances (api: ApiInterfaceRx, [data, bestNumber, [vesting, allLocks]]: Result): DeriveBalancesAll {
const shared = calcShared(api, bestNumber, data, allLocks[0]);
function calcVesting (bestNumber: BlockNumber, shared: DeriveBalancesAllAccountData, _vesting: PalletVestingVestingInfo[] | null): DeriveBalancesAllVesting {
// Calculate the vesting balances,
// - offset = balance locked at startingBlock
// - perBlock is the unlock amount
const emptyVest = api.registry.createType('VestingInfo');
const { locked: vestingTotal, perBlock, startingBlock } = vesting || emptyVest;
const isStarted = bestNumber.gt(startingBlock);
const vestedNow = isStarted ? perBlock.mul(bestNumber.sub(startingBlock)) : new BN(0);
const vestedBalance = vestedNow.gt(vestingTotal) ? vestingTotal : api.registry.createType('Balance', vestedNow);
const isVesting = isStarted && !shared.vestingLocked.isZero();
const vesting = _vesting || [];
const isVesting = !shared.vestingLocked.isZero();
const vestedBalances = vesting.map(({ locked, perBlock, startingBlock }) =>
bestNumber.gt(startingBlock)
? bnMin(locked, perBlock.mul(bestNumber.sub(startingBlock)))
: BN_ZERO
);
const vestedBalance = vestedBalances.reduce<BN>((all, value) => all.iadd(value), new BN(0));
const vestingTotal = vesting.reduce<BN>((all, { locked }) => all.iadd(locked), new BN(0));
return {
isVesting,
vestedBalance,
vestedClaimable: isVesting ? shared.vestingLocked.sub(vestingTotal.sub(vestedBalance)) : BN_ZERO,
vesting: vesting
.map(({ locked, perBlock, startingBlock }, index) => ({
endBlock: locked.div(perBlock).iadd(startingBlock),
locked,
perBlock,
startingBlock,
vested: vestedBalances[index]
}))
.filter(({ locked }) => !locked.isZero()),
vestingTotal
};
}
function calcBalances (api: ApiInterfaceRx, [data, bestNumber, [vesting, allLocks]]: Result): DeriveBalancesAll {
const shared = calcShared(api, bestNumber, data, allLocks[0]);
return {
...shared,
...calcVesting(bestNumber, shared, vesting),
accountId: data.accountId,
accountNonce: data.accountNonce,
additional: allLocks.filter((_, index) => index !== 0).map((l, index) => calcShared(api, bestNumber, data.additional[index], l)),
isVesting,
vestedBalance,
vestedClaimable: api.registry.createType('Balance', isVesting ? shared.vestingLocked.sub(vestingTotal.sub(vestedBalance)) : 0),
vestingEndBlock: api.registry.createType('BlockNumber', isVesting ? vestingTotal.div(perBlock).add(startingBlock) : 0),
vestingPerBlock: perBlock,
vestingTotal
additional: allLocks
.filter((_, index) => index !== 0)
.map((l, index) => calcShared(api, bestNumber, data.additional[index], l))
};
}
// old
function queryOld (api: ApiInterfaceRx, accountId: AccountId): Observable<ResultBalance> {
return api.queryMulti<[Vec<BalanceLock>, Option<VestingSchedule>]>([
return api.queryMulti<[Vec<PalletBalancesBalanceLock>, Option<VestingSchedule>]>([
[api.query.balances.locks, accountId],
[api.query.balances.vesting, accountId]
]).pipe(
@@ -106,10 +126,15 @@ function queryOld (api: ApiInterfaceRx, accountId: AccountId): Observable<Result
if (optVesting.isSome) {
const { offset: locked, perBlock, startingBlock } = optVesting.unwrap();
vestingNew = api.registry.createType('VestingInfo', { locked, perBlock, startingBlock });
vestingNew = api.registry.createType<PalletVestingVestingInfo>('VestingInfo', { locked, perBlock, startingBlock });
}
return [vestingNew, [locks]];
return [
vestingNew
? [vestingNew]
: null,
[locks]
];
})
);
}
@@ -126,20 +151,25 @@ function queryCurrent (api: ApiInterfaceRx, accountId: AccountId, balanceInstanc
return (
api.query.vesting?.vesting
? api.queryMulti<[Option<VestingInfo>, ...BalanceLocks]>([[api.query.vesting.vesting, accountId], ...queries])
? api.queryMulti<[Option<PalletVestingVestingInfo> | Option<Vec<PalletVestingVestingInfo>>, ...BalanceLocks]>([[api.query.vesting.vesting, accountId], ...queries])
// TODO We need to check module instances here as well, not only the balances module
: queries.length
? api.queryMulti<[...(Vec<BalanceLock>)[]]>(queries).pipe(
map((r): [Option<VestingInfo>, ...BalanceLocks] => [api.registry.createType('Option<VestingInfo>'), ...r])
? api.queryMulti<[...(Vec<PalletBalancesBalanceLock>)[]]>(queries).pipe(
map((r): [Option<PalletVestingVestingInfo>, ...BalanceLocks] => [api.registry.createType('Option<VestingInfo>'), ...r])
)
: of([api.registry.createType('Option<VestingInfo>')] as [Option<VestingInfo>])
: of([api.registry.createType('Option<VestingInfo>')] as [Option<PalletVestingVestingInfo>])
).pipe(
map(([opt, ...locks]): ResultBalance => {
let offset = -1;
const vesting = opt.unwrapOr(null);
return [
opt.unwrapOr(null),
lockEmpty.map((e) => e ? api.registry.createType('Vec<BalanceLock>') : locks[++offset])
vesting
? Array.isArray(vesting)
? vesting
: [vesting]
: null,
lockEmpty.map((e) => e ? api.registry.createType<Vec<PalletBalancesBalanceLock>>('Vec<BalanceLock>') : locks[++offset])
];
})
);
+49
View File
@@ -0,0 +1,49 @@
// Copyright 2017-2021 @polkadot/api-derive authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { AccountId, Balance, BalanceLockTo212, Index } from '@polkadot/types/interfaces';
import type { PalletBalancesBalanceLock } from '@polkadot/types/lookup';
import type { BN } from '@polkadot/util';
export interface DeriveBalancesAccountData {
freeBalance: Balance;
frozenFee: Balance;
frozenMisc: Balance;
reservedBalance: Balance;
votingBalance: Balance;
}
export interface DeriveBalancesAccount extends DeriveBalancesAccountData {
accountId: AccountId;
accountNonce: Index;
additional: DeriveBalancesAccountData[];
}
export interface DeriveBalancesAllAccountData extends DeriveBalancesAccountData {
availableBalance: Balance;
lockedBalance: Balance;
lockedBreakdown: (PalletBalancesBalanceLock | BalanceLockTo212)[];
vestingLocked: Balance;
}
export interface DeriveBalancesVesting {
startingBlock: BN;
endBlock: BN;
perBlock: BN;
locked: BN;
vested: BN;
}
export interface DeriveBalancesAllVesting {
isVesting: boolean;
vestedBalance: BN;
vestedClaimable: BN;
vesting: DeriveBalancesVesting[];
vestingTotal: BN;
}
export interface DeriveBalancesAll extends DeriveBalancesAccount, DeriveBalancesAllAccountData, DeriveBalancesAllVesting {
additional: DeriveBalancesAllAccountData[];
}
export type DeriveBalancesMap = Record<string, DeriveBalancesAll>;
+5 -4
View File
@@ -4,7 +4,8 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Bytes, Option } from '@polkadot/types';
import type { Bounty, BountyIndex, ProposalIndex } from '@polkadot/types/interfaces';
import type { BountyIndex, ProposalIndex } from '@polkadot/types/interfaces';
import type { PalletBountiesBounty } from '@polkadot/types/lookup';
import type { DeriveBounties, DeriveCollectiveProposal } from '../types';
import { combineLatest, map, of, switchMap } from 'rxjs';
@@ -12,7 +13,7 @@ import { combineLatest, map, of, switchMap } from 'rxjs';
import { memo } from '../util';
import { filterBountiesProposals } from './helpers/filterBountyProposals';
type Result = [Option<Bounty>[], Option<Bytes>[], BountyIndex[], DeriveCollectiveProposal[]];
type Result = [Option<PalletBountiesBounty>[], Option<Bytes>[], BountyIndex[], DeriveCollectiveProposal[]];
function parseResult ([maybeBounties, maybeDescriptions, ids, bountyProposals]: Result): DeriveBounties {
const bounties: DeriveBounties = [];
@@ -53,8 +54,8 @@ export function bounties (instanceId: string, api: ApiInterfaceRx): () => Observ
const ids = keys.map(({ args: [id] }) => id);
return combineLatest([
bountyBase.bounties.multi<Option<Bounty>>(ids),
bountyBase.bountyDescriptions.multi<Option<Bytes>>(ids),
bountyBase.bounties.multi(ids),
bountyBase.bountyDescriptions.multi(ids),
of(ids),
of(filterBountiesProposals(api, proposals))
]);
+13 -10
View File
@@ -5,7 +5,7 @@ import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { SignedBlockExtended } from '../type/types';
import { catchError, combineLatest, map, of } from 'rxjs';
import { catchError, combineLatest, map, of, switchMap } from 'rxjs';
import { createSignedBlockExtended } from '../type';
import { memo } from '../util';
@@ -24,15 +24,18 @@ import { memo } from '../util';
* ```
*/
export function getBlock (instanceId: string, api: ApiInterfaceRx): (hash: Uint8Array | string) => Observable<SignedBlockExtended | undefined> {
return memo(instanceId, (hash: Uint8Array | string): Observable<SignedBlockExtended | undefined> =>
combineLatest([
api.rpc.chain.getBlock(hash),
api.query.system.events.at(hash),
api.query.session
? api.query.session.validators.at(hash)
: of([])
]).pipe(
map(([signedBlock, events, validators]): SignedBlockExtended =>
return memo(instanceId, (blockHash: Uint8Array | string): Observable<SignedBlockExtended | undefined> =>
api.queryAt(blockHash).pipe(
switchMap((queryAt) =>
combineLatest([
api.rpc.chain.getBlock(blockHash),
queryAt.system.events(),
queryAt.session
? queryAt.session.validators()
: of([])
])
),
map(([signedBlock, events, validators]) =>
createSignedBlockExtended(api.registry, signedBlock, events, validators)
),
catchError((): Observable<undefined> =>
+12 -8
View File
@@ -3,9 +3,10 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { AccountId } from '@polkadot/types/interfaces';
import type { HeaderExtended } from '../type/types';
import { catchError, combineLatest, map, of } from 'rxjs';
import { catchError, combineLatest, map, of, switchMap } from 'rxjs';
import { createHeaderExtended } from '../type';
import { memo } from '../util';
@@ -26,13 +27,16 @@ import { memo } from '../util';
*/
export function getHeader (instanceId: string, api: ApiInterfaceRx): (hash: Uint8Array | string) => Observable<HeaderExtended | undefined> {
return memo(instanceId, (hash: Uint8Array | string): Observable<HeaderExtended | undefined> =>
combineLatest([
api.rpc.chain.getHeader(hash),
api.query.session
? api.query.session.validators.at(hash)
: of([])
]).pipe(
map(([header, validators]): HeaderExtended =>
api.queryAt(hash).pipe(
switchMap((queryAt) =>
combineLatest([
api.rpc.chain.getHeader(hash),
queryAt.session
? queryAt.session.validators()
: of([] as AccountId[])
])
),
map(([header, validators]) =>
createHeaderExtended(header.registry, header, validators)
),
catchError((): Observable<undefined> =>
@@ -3,9 +3,7 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Vec } from '@polkadot/types';
import type { EventRecord, SignedBlock } from '@polkadot/types/interfaces';
import type { HeaderExtended, SignedBlockExtended } from '../type/types';
import type { SignedBlockExtended } from '../type/types';
import { combineLatest, map, of, switchMap } from 'rxjs';
@@ -19,16 +17,21 @@ import { memo } from '../util';
export function subscribeNewBlocks (instanceId: string, api: ApiInterfaceRx): () => Observable<SignedBlockExtended> {
return memo(instanceId, (): Observable<SignedBlockExtended> =>
api.derive.chain.subscribeNewHeads().pipe(
switchMap((header): Observable<[SignedBlock, Vec<EventRecord>, HeaderExtended]> => {
switchMap((header) => {
const blockHash = header.createdAtHash || header.hash;
return combineLatest(
api.rpc.chain.getBlock(blockHash),
api.query.system.events.at(blockHash),
of(header)
// we get the block first, setting up the registry
return api.queryAt(blockHash).pipe(
switchMap((queryAt) =>
combineLatest([
of(header),
api.rpc.chain.getBlock(blockHash),
queryAt.system.events()
])
)
);
}),
map(([block, events, header]) =>
map(([header, block, events]) =>
createSignedBlockExtended(block.registry, block, events, header.validators)
)
)
@@ -40,9 +40,6 @@ function _proposalsFrom (instanceId: string, api: ApiInterfaceRx, section: strin
// however we have had cases on Edgeware where the indices have moved around after an
// upgrade, which results in invalid on-chain data
combineLatest(hashes.map((hash) =>
// this should simply be api.query[section].proposalOf.multi<Option<Proposal>>(hashes),
// however we have had cases on Edgeware where the indices have moved around after an
// upgrade, which results in invalid on-chain data
api.query[section].proposalOf<Option<Proposal>>(hash).pipe(
catchError(() => of(null))
)
+4 -3
View File
@@ -4,7 +4,8 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx, QueryableModuleStorage } from '@polkadot/api/types';
import type { Vec } from '@polkadot/types';
import type { AccountId, Balance, Voter } from '@polkadot/types/interfaces';
import type { AccountId, Balance } from '@polkadot/types/interfaces';
import type { PalletElectionsPhragmenVoter } from '@polkadot/types/lookup';
import type { ITuple } from '@polkadot/types/types';
import type { DeriveCouncilVote, DeriveCouncilVotes } from '../types';
@@ -13,9 +14,9 @@ import { combineLatest, map, of } from 'rxjs';
import { memo } from '../util';
// Voter is current tuple is 2.x-era
type VoteEntry = Voter | ITuple<[Balance, Vec<AccountId>]>;
type VoteEntry = PalletElectionsPhragmenVoter | ITuple<[Balance, Vec<AccountId>]>;
function isVoter (value: VoteEntry): value is Voter {
function isVoter (value: VoteEntry): value is PalletElectionsPhragmenVoter {
return !Array.isArray(value);
}
@@ -4,7 +4,8 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Option } from '@polkadot/types';
import type { FundInfo, ParaId } from '@polkadot/types/interfaces';
import type { PolkadotRuntimeCommonCrowdloanFundInfo } from '@polkadot/types/lookup';
import type { BN } from '@polkadot/util';
import { map } from 'rxjs';
@@ -13,7 +14,7 @@ import { blake2AsU8a } from '@polkadot/util-crypto';
import { memo } from '../util';
function createChildKey ({ trieIndex }: FundInfo): string {
function createChildKey ({ trieIndex }: PolkadotRuntimeCommonCrowdloanFundInfo): string {
return u8aToHex(
u8aConcat(
':child_storage:default:',
@@ -24,9 +25,9 @@ function createChildKey ({ trieIndex }: FundInfo): string {
);
}
export function childKey (instanceId: string, api: ApiInterfaceRx): (paraId: string | number | ParaId) => Observable<string | null> {
return memo(instanceId, (paraId: string | number | ParaId): Observable<string | null> =>
api.query.crowdloan.funds<Option<FundInfo>>(paraId).pipe(
export function childKey (instanceId: string, api: ApiInterfaceRx): (paraId: string | number | BN) => Observable<string | null> {
return memo(instanceId, (paraId: string | number | BN): Observable<string | null> =>
api.query.crowdloan.funds<Option<PolkadotRuntimeCommonCrowdloanFundInfo>>(paraId).pipe(
map((optInfo) =>
optInfo.isSome
? createChildKey(optInfo.unwrap())
@@ -4,7 +4,7 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { StorageKey } from '@polkadot/types';
import type { ParaId } from '@polkadot/types/interfaces';
import type { BN } from '@polkadot/util';
import type { DeriveContributions } from '../types';
import { BehaviorSubject, combineLatest, EMPTY, map, of, startWith, switchMap, tap, toArray } from 'rxjs';
@@ -22,7 +22,7 @@ interface Changes {
const PAGE_SIZE_K = 1000; // limit aligned with the 1k on the node (trie lookups are heavy)
function _getUpdates (api: ApiInterfaceRx, paraId: string | number | ParaId): Observable<Changes> {
function _getUpdates (api: ApiInterfaceRx, paraId: string | number | BN): Observable<Changes> {
let added: string[] = [];
let removed: string[] = [];
@@ -43,7 +43,7 @@ function _getUpdates (api: ApiInterfaceRx, paraId: string | number | ParaId): Ob
);
}
function _eventTriggerAll (api: ApiInterfaceRx, paraId: string | number | ParaId): Observable<string> {
function _eventTriggerAll (api: ApiInterfaceRx, paraId: string | number | BN): Observable<string> {
return api.query.system.events().pipe(
switchMap((events): Observable<string> => {
const items = events.filter(({ event: { data: [eventParaId], method, section } }) =>
@@ -79,12 +79,10 @@ function _getKeysPaged (api: ApiInterfaceRx, childKey: string): Observable<Stora
);
}
function _getAll (api: ApiInterfaceRx, paraId: string | number | ParaId, childKey: string): Observable<string[]> {
function _getAll (api: ApiInterfaceRx, paraId: string | number | BN, childKey: string): Observable<string[]> {
return _eventTriggerAll(api, paraId).pipe(
switchMap(() =>
// FIXME Needs testing and being enabled
// eslint-disable-next-line no-constant-condition
isFunction(api.rpc.childstate.getKeysPaged) && false
isFunction(api.rpc.childstate.getKeysPaged)
? _getKeysPaged(api, childKey)
: api.rpc.childstate.getKeys(childKey, '0x')
),
@@ -94,7 +92,7 @@ function _getAll (api: ApiInterfaceRx, paraId: string | number | ParaId, childKe
);
}
function _contributions (api: ApiInterfaceRx, paraId: string | number | ParaId, childKey: string): Observable<DeriveContributions> {
function _contributions (api: ApiInterfaceRx, paraId: string | number | BN, childKey: string): Observable<DeriveContributions> {
return combineLatest([
_getAll(api, paraId, childKey),
_getUpdates(api, paraId)
@@ -122,8 +120,8 @@ function _contributions (api: ApiInterfaceRx, paraId: string | number | ParaId,
);
}
export function contributions (instanceId: string, api: ApiInterfaceRx): (paraId: string | number | ParaId) => Observable<DeriveContributions> {
return memo(instanceId, (paraId: string | number | ParaId): Observable<DeriveContributions> =>
export function contributions (instanceId: string, api: ApiInterfaceRx): (paraId: string | number | BN) => Observable<DeriveContributions> {
return memo(instanceId, (paraId: string | number | BN): Observable<DeriveContributions> =>
api.derive.crowdloan.childKey(paraId).pipe(
switchMap((childKey) =>
childKey
@@ -3,7 +3,7 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { ParaId } from '@polkadot/types/interfaces';
import type { BN } from '@polkadot/util';
import type { DeriveOwnContributions } from '../types';
import { combineLatest, EMPTY, map, of, startWith, switchMap } from 'rxjs';
@@ -30,7 +30,7 @@ function _getValues (api: ApiInterfaceRx, childKey: string, keys: string[]): Obs
);
}
function _watchOwnChanges (api: ApiInterfaceRx, paraId: string | number | ParaId, childkey: string, keys: string[]): Observable<DeriveOwnContributions> {
function _watchOwnChanges (api: ApiInterfaceRx, paraId: string | number | BN, childkey: string, keys: string[]): Observable<DeriveOwnContributions> {
return api.query.system.events().pipe(
switchMap((events): Observable<DeriveOwnContributions> => {
const changes = extractContributed(paraId, events);
@@ -47,7 +47,7 @@ function _watchOwnChanges (api: ApiInterfaceRx, paraId: string | number | ParaId
);
}
function _contributions (api: ApiInterfaceRx, paraId: string | number | ParaId, childKey: string, keys: string[]): Observable<DeriveOwnContributions> {
function _contributions (api: ApiInterfaceRx, paraId: string | number | BN, childKey: string, keys: string[]): Observable<DeriveOwnContributions> {
return combineLatest([
_getValues(api, childKey, keys),
_watchOwnChanges(api, paraId, childKey, keys)
@@ -59,8 +59,8 @@ function _contributions (api: ApiInterfaceRx, paraId: string | number | ParaId,
);
}
export function ownContributions (instanceId: string, api: ApiInterfaceRx): (paraId: string | number | ParaId, keys: string[]) => Observable<DeriveOwnContributions> {
return memo(instanceId, (paraId: string | number | ParaId, keys: string[]): Observable<DeriveOwnContributions> =>
export function ownContributions (instanceId: string, api: ApiInterfaceRx): (paraId: string | number | BN, keys: string[]) => Observable<DeriveOwnContributions> {
return memo(instanceId, (paraId: string | number | BN, keys: string[]): Observable<DeriveOwnContributions> =>
api.derive.crowdloan.childKey(paraId).pipe(
switchMap((childKey) =>
childKey && keys.length
+3 -2
View File
@@ -2,7 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
import type { Vec } from '@polkadot/types';
import type { EventRecord, ParaId } from '@polkadot/types/interfaces';
import type { EventRecord } from '@polkadot/types/interfaces';
import type { BN } from '@polkadot/util';
interface Changes {
added: string[];
@@ -10,7 +11,7 @@ interface Changes {
removed: string[];
}
export function extractContributed (paraId: string | number | ParaId, events: Vec<EventRecord>): Changes {
export function extractContributed (paraId: string | number | BN, events: Vec<EventRecord>): Changes {
const added: string[] = [];
const removed: string[] = [];
@@ -3,8 +3,9 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Option, u64, Vec } from '@polkadot/types';
import type { BlockNumber, Hash, ReferendumIndex, Scheduled } from '@polkadot/types/interfaces';
import type { Option, Vec } from '@polkadot/types';
import type { BlockNumber, Hash, ReferendumIndex } from '@polkadot/types/interfaces';
import type { PalletSchedulerScheduledV2 } from '@polkadot/types/lookup';
import type { ITuple } from '@polkadot/types/types';
import type { DeriveDispatch, DeriveProposalImage } from '../types';
@@ -42,7 +43,7 @@ function queryQueue (api: ApiInterfaceRx): Observable<DeriveDispatch[]> {
);
}
function schedulerEntries (api: ApiInterfaceRx): Observable<[BlockNumber[], (Option<Scheduled>[] | null)[]]> {
function schedulerEntries (api: ApiInterfaceRx): Observable<[BlockNumber[], (Option<PalletSchedulerScheduledV2>[] | null)[]]> {
// We don't get entries, but rather we get the keys (triggered via finished referendums) and
// the subscribe to those keys - this means we pickup when the schedulers actually executes
// at a block, the entry for that block will become empty
@@ -56,11 +57,11 @@ function schedulerEntries (api: ApiInterfaceRx): Observable<[BlockNumber[], (Opt
return blockNumbers.length
? combineLatest([
of(blockNumbers),
// this should simply be api.query.scheduler.agenda.multi<Vec<Option<Scheduled>>>,
// this should simply be api.query.scheduler.agenda.multi,
// however we have had cases on Darwinia where the indices have moved around after an
// upgrade, which results in invalid on-chain data
combineLatest(blockNumbers.map((blockNumber) =>
api.query.scheduler.agenda<Vec<Option<Scheduled>>>(blockNumber).pipe(
api.query.scheduler.agenda(blockNumber).pipe(
// this does create an issue since it discards all at that block
catchError(() => of(null))
)
@@ -86,7 +87,7 @@ function queryScheduler (api: ApiInterfaceRx): Observable<DeriveDispatch[]> {
const id = scheduled.maybeId.unwrap().toHex();
if (id.startsWith(DEMOCRACY_ID)) {
const [, index] = api.registry.createType<ITuple<[u64, ReferendumIndex]>>('(u64, ReferendumIndex)', id);
const [, index] = api.registry.createType('(u64, ReferendumIndex)', id);
const imageHash = scheduled.call.args[0] as Hash;
result.push({ at, imageHash, index });
+11 -6
View File
@@ -3,8 +3,8 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Option } from '@polkadot/types';
import type { AccountId, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, Vote, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces';
import type { AccountId, ReferendumInfoTo239, Vote } from '@polkadot/types/interfaces';
import type { PalletDemocracyReferendumInfo, PalletDemocracyVoteVoting } from '@polkadot/types/lookup';
import type { BN } from '@polkadot/util';
import type { DeriveDemocracyLock } from '../types';
@@ -14,6 +14,11 @@ import { BN_ZERO, isUndefined } from '@polkadot/util';
import { memo } from '../util';
type ReferendumInfoFinished = PalletDemocracyReferendumInfo['asFinished'];
type VotingDelegating = PalletDemocracyVoteVoting['asDelegating'];
type VotingDirect = PalletDemocracyVoteVoting['asDirect'];
type VotingDirectVote = VotingDirect['votes'][0];
const LOCKUPS = [0, 1, 2, 4, 8, 16, 32];
function parseEnd (api: ApiInterfaceRx, vote: Vote, { approved, end }: ReferendumInfoFinished): [BN, BN] {
@@ -25,7 +30,7 @@ function parseEnd (api: ApiInterfaceRx, vote: Vote, { approved, end }: Referendu
];
}
function parseLock (api: ApiInterfaceRx, [referendumId, accountVote]: VotingDirectVote, referendum: ReferendumInfo): DeriveDemocracyLock {
function parseLock (api: ApiInterfaceRx, [referendumId, accountVote]: VotingDirectVote, referendum: PalletDemocracyReferendumInfo): DeriveDemocracyLock {
const { balance, vote } = accountVote.asStandard;
const [referendumEnd, unlockAt] = referendum.isFinished
? parseEnd(api, vote, referendum.asFinished)
@@ -57,13 +62,13 @@ function directLocks (api: ApiInterfaceRx, { votes }: VotingDirect): Observable<
return of([]);
}
return api.query.democracy.referendumInfoOf.multi<Option<ReferendumInfo | ReferendumInfoTo239>>(votes.map(([referendumId]) => referendumId)).pipe(
return api.query.democracy.referendumInfoOf.multi(votes.map(([referendumId]) => referendumId)).pipe(
map((referendums) =>
votes
.map((vote, index): [VotingDirectVote, ReferendumInfo | ReferendumInfoTo239 | null] =>
.map((vote, index): [VotingDirectVote, PalletDemocracyReferendumInfo | ReferendumInfoTo239 | null] =>
[vote, referendums[index].unwrapOr(null)]
)
.filter((item): item is [VotingDirectVote, ReferendumInfo] =>
.filter((item): item is [VotingDirectVote, PalletDemocracyReferendumInfo] =>
!!item[1] && isUndefined((item[1] as ReferendumInfoTo239).end) && item[0][1].isStandard
)
.map(([directVote, referendum]) =>
@@ -4,7 +4,8 @@
import type { Observable } from 'rxjs';
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Option } from '@polkadot/types';
import type { Hash, VoteThreshold } from '@polkadot/types/interfaces';
import type { H256 } from '@polkadot/types/interfaces';
import type { PalletDemocracyVoteThreshold } from '@polkadot/types/lookup';
import type { ITuple } from '@polkadot/types/types';
import type { DeriveProposalExternal } from '../types';
@@ -12,7 +13,7 @@ import { map, of, switchMap } from 'rxjs';
import { memo } from '../util';
function withImage (api: ApiInterfaceRx, nextOpt: Option<ITuple<[Hash, VoteThreshold]>>): Observable<DeriveProposalExternal | null> {
function withImage (api: ApiInterfaceRx, nextOpt: Option<ITuple<[H256, PalletDemocracyVoteThreshold]>>): Observable<DeriveProposalExternal | null> {
if (nextOpt.isNone) {
return of(null);
}
@@ -31,7 +32,7 @@ function withImage (api: ApiInterfaceRx, nextOpt: Option<ITuple<[Hash, VoteThres
export function nextExternal (instanceId: string, api: ApiInterfaceRx): () => Observable<DeriveProposalExternal | null> {
return memo(instanceId, (): Observable<DeriveProposalExternal | null> =>
api.query.democracy?.nextExternal
? api.query.democracy.nextExternal<Option<ITuple<[Hash, VoteThreshold]>>>().pipe(
? api.query.democracy.nextExternal().pipe(
switchMap((nextOpt) => withImage(api, nextOpt))
)
: of(null)

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