@polkadot-api/ink-contracts 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/dynamic-builders.mjs +24 -56
- package/dist/esm/dynamic-builders.mjs.map +1 -1
- package/dist/esm/get-lookup.mjs +114 -2
- package/dist/esm/get-lookup.mjs.map +1 -1
- package/dist/esm/ink-client.mjs +6 -8
- package/dist/esm/ink-client.mjs.map +1 -1
- package/dist/index.d.ts +28 -12
- package/dist/index.js +141 -63
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,57 +1,21 @@
|
|
|
1
1
|
import { getLookupCodecBuilder } from '@polkadot-api/metadata-builders';
|
|
2
2
|
import { Variant, Binary } from '@polkadot-api/substrate-bindings';
|
|
3
|
-
import {
|
|
3
|
+
import { _void, Struct, Tuple, Bytes, enhanceCodec } from 'scale-ts';
|
|
4
4
|
|
|
5
5
|
const getInkDynamicBuilder = (metadataLookup) => {
|
|
6
6
|
const { metadata } = metadataLookup;
|
|
7
7
|
const buildDefinition = getLookupCodecBuilder(metadataLookup);
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
if ("array" in node) {
|
|
19
|
-
return Vector(buildLayout(node.array.layout), node.array.len);
|
|
20
|
-
}
|
|
21
|
-
if ("struct" in node) {
|
|
22
|
-
return Struct(
|
|
23
|
-
Object.fromEntries(
|
|
24
|
-
node.struct.fields.map((field) => [
|
|
25
|
-
field.name,
|
|
26
|
-
buildLayout(field.layout)
|
|
27
|
-
])
|
|
28
|
-
)
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
const variants = Object.values(node.enum.variants);
|
|
32
|
-
if (node.enum.name === "Option" && variants.length === 2 && variants[0].name === "None" && variants[1].name === "Some") {
|
|
33
|
-
const inner = variants[1].fields.length === 1 ? buildLayout(variants[1].fields[0].layout) : Tuple(...variants[1].fields.map((v) => buildLayout(v.layout)));
|
|
34
|
-
return Option(inner);
|
|
35
|
-
}
|
|
36
|
-
return Enum(
|
|
37
|
-
Object.fromEntries(
|
|
38
|
-
Object.values(node.enum.variants).map((variant) => [
|
|
39
|
-
variant.name,
|
|
40
|
-
Struct(
|
|
41
|
-
Object.fromEntries(
|
|
42
|
-
variant.fields.map((field) => [
|
|
43
|
-
field.name,
|
|
44
|
-
buildLayout(field.layout)
|
|
45
|
-
])
|
|
46
|
-
)
|
|
47
|
-
)
|
|
48
|
-
])
|
|
49
|
-
)
|
|
50
|
-
);
|
|
8
|
+
const buildStorage = (name = "") => {
|
|
9
|
+
const storageEntry = metadataLookup.storage[name];
|
|
10
|
+
if (!storageEntry)
|
|
11
|
+
throw new Error(`Storage entry ${name ? name : "{root}"} not found`);
|
|
12
|
+
const keyCodec = storageEntry.key == null ? _void : buildDefinition(storageEntry.key);
|
|
13
|
+
return {
|
|
14
|
+
key: prependBytes(keyCodec, storageEntry.keyPrefix),
|
|
15
|
+
value: buildDefinition(storageEntry.typeId)
|
|
16
|
+
};
|
|
51
17
|
};
|
|
52
|
-
const buildStorageRoot = () => buildLayout(metadata.storage);
|
|
53
18
|
const buildCallable = (callable) => {
|
|
54
|
-
const selectorBytes = Binary.fromHex(callable.selector).asBytes();
|
|
55
19
|
const argsCodec = Struct(
|
|
56
20
|
Object.fromEntries(
|
|
57
21
|
callable.args.map((param) => [
|
|
@@ -60,16 +24,8 @@ const getInkDynamicBuilder = (metadataLookup) => {
|
|
|
60
24
|
])
|
|
61
25
|
)
|
|
62
26
|
);
|
|
63
|
-
const callCodec = Tuple(Bytes(4), argsCodec);
|
|
64
27
|
return {
|
|
65
|
-
call:
|
|
66
|
-
callCodec,
|
|
67
|
-
(value) => [
|
|
68
|
-
selectorBytes,
|
|
69
|
-
value
|
|
70
|
-
],
|
|
71
|
-
([, value]) => value
|
|
72
|
-
),
|
|
28
|
+
call: prependBytes(argsCodec, callable.selector),
|
|
73
29
|
value: buildDefinition(callable.returnType.type)
|
|
74
30
|
};
|
|
75
31
|
};
|
|
@@ -105,10 +61,22 @@ const getInkDynamicBuilder = (metadataLookup) => {
|
|
|
105
61
|
return {
|
|
106
62
|
buildConstructor,
|
|
107
63
|
buildMessage,
|
|
108
|
-
|
|
64
|
+
buildStorage,
|
|
109
65
|
buildEvent
|
|
110
66
|
};
|
|
111
67
|
};
|
|
68
|
+
const prependBytes = (codec, hex) => {
|
|
69
|
+
const bytes = Binary.fromHex(hex).asBytes();
|
|
70
|
+
const wrappedCodec = Tuple(Bytes(bytes.length), codec);
|
|
71
|
+
return enhanceCodec(
|
|
72
|
+
wrappedCodec,
|
|
73
|
+
(value) => [
|
|
74
|
+
bytes,
|
|
75
|
+
value
|
|
76
|
+
],
|
|
77
|
+
([, value]) => value
|
|
78
|
+
);
|
|
79
|
+
};
|
|
112
80
|
|
|
113
81
|
export { getInkDynamicBuilder };
|
|
114
82
|
//# sourceMappingURL=dynamic-builders.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-builders.mjs","sources":["../../src/dynamic-builders.ts"],"sourcesContent":["import { getLookupCodecBuilder } from \"@polkadot-api/metadata-builders\"\nimport { Binary, Variant } from \"@polkadot-api/substrate-bindings\"\nimport {\n Bytes,\n Codec,\n CodecType,\n enhanceCodec,\n
|
|
1
|
+
{"version":3,"file":"dynamic-builders.mjs","sources":["../../src/dynamic-builders.ts"],"sourcesContent":["import { getLookupCodecBuilder } from \"@polkadot-api/metadata-builders\"\nimport { Binary, Variant } from \"@polkadot-api/substrate-bindings\"\nimport {\n _void,\n Bytes,\n Codec,\n CodecType,\n enhanceCodec,\n StringRecord,\n Struct,\n Tuple,\n} from \"scale-ts\"\nimport { InkMetadataLookup } from \"./get-lookup\"\nimport { MessageParamSpec, TypeSpec } from \"./metadata-types\"\n\nexport const getInkDynamicBuilder = (metadataLookup: InkMetadataLookup) => {\n const { metadata } = metadataLookup\n\n const buildDefinition = getLookupCodecBuilder(metadataLookup)\n\n const buildStorage = (name = \"\") => {\n const storageEntry = metadataLookup.storage[name]\n if (!storageEntry)\n throw new Error(`Storage entry ${name ? name : \"{root}\"} not found`)\n\n const keyCodec =\n storageEntry.key == null ? _void : buildDefinition(storageEntry.key)\n return {\n key: prependBytes(keyCodec, storageEntry.keyPrefix),\n value: buildDefinition(storageEntry.typeId),\n }\n }\n\n const buildCallable = (callable: {\n selector: string\n args: Array<MessageParamSpec>\n returnType: TypeSpec\n }) => {\n const argsCodec = Struct(\n Object.fromEntries(\n callable.args.map((param) => [\n param.label,\n buildDefinition(param.type.type),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n\n return {\n call: prependBytes(argsCodec, callable.selector),\n value: buildDefinition(callable.returnType.type),\n }\n }\n\n const buildConstructor = (label: string) => {\n const constr = metadata.spec.constructors.find((c) => c.label === label)\n if (!constr) {\n throw new Error(`Constructor ${label} not found`)\n }\n\n return buildCallable(constr)\n }\n\n const buildMessage = (label: string) => {\n const message = metadata.spec.messages.find((c) => c.label === label)\n if (!message) {\n throw new Error(`Message ${label} not found`)\n }\n\n return buildCallable(message)\n }\n\n const buildEvent = () =>\n Variant(\n Object.fromEntries(\n metadata.spec.events.map((evt) => [\n evt.label,\n Struct(\n Object.fromEntries(\n evt.args.map((param) => [\n param.label,\n buildDefinition(param.type.type),\n ]),\n ) as StringRecord<Codec<any>>,\n ),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n\n return {\n buildConstructor,\n buildMessage,\n buildStorage,\n buildEvent,\n }\n}\n\nexport type InkDynamicBuilder = ReturnType<typeof getInkDynamicBuilder>\n\nconst prependBytes = <T>(codec: Codec<T>, hex: string) => {\n const bytes = Binary.fromHex(hex).asBytes()\n const wrappedCodec = Tuple(Bytes(bytes.length), codec)\n return enhanceCodec(\n wrappedCodec,\n (value: CodecType<typeof codec>): CodecType<typeof wrappedCodec> => [\n bytes,\n value,\n ],\n ([, value]) => value,\n )\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/get-lookup.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { denormalizeLookup } from '@polkadot-api/metadata-builders';
|
|
2
|
-
import { v14Lookup } from '@polkadot-api/substrate-bindings';
|
|
2
|
+
import { v14Lookup, Binary } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
import { pjsTypes } from './metadata-pjs-types.mjs';
|
|
4
4
|
|
|
5
5
|
const getInkLookup = (metadata) => {
|
|
@@ -10,9 +10,121 @@ const getInkLookup = (metadata) => {
|
|
|
10
10
|
if (accountIdEntry) {
|
|
11
11
|
accountIdEntry.path = ["AccountId32"];
|
|
12
12
|
}
|
|
13
|
+
const storage = getStorageLayout(metadata, decoded);
|
|
13
14
|
const getLookupEntryDef = denormalizeLookup(decoded);
|
|
14
|
-
return Object.assign(getLookupEntryDef, {
|
|
15
|
+
return Object.assign(getLookupEntryDef, {
|
|
16
|
+
metadata,
|
|
17
|
+
lookup: decoded,
|
|
18
|
+
storage
|
|
19
|
+
});
|
|
15
20
|
};
|
|
21
|
+
function getStorageLayout(metadata, lookup) {
|
|
22
|
+
const result = {};
|
|
23
|
+
const readLayout = (node, path = []) => {
|
|
24
|
+
function addType(def) {
|
|
25
|
+
const id = lookup.length;
|
|
26
|
+
lookup[id] = {
|
|
27
|
+
id,
|
|
28
|
+
docs: [],
|
|
29
|
+
def,
|
|
30
|
+
params: [],
|
|
31
|
+
path: []
|
|
32
|
+
};
|
|
33
|
+
return id;
|
|
34
|
+
}
|
|
35
|
+
if ("root" in node) {
|
|
36
|
+
const keyPrefix = Number(metadata.version) === 4 ? Binary.fromBytes(
|
|
37
|
+
Binary.fromHex(node.root.root_key).asBytes().reverse()
|
|
38
|
+
).asHex() : node.root.root_key;
|
|
39
|
+
const typeId = readLayout(node.root.layout, path);
|
|
40
|
+
if (node.root.ty != null) {
|
|
41
|
+
let resolveType2 = function(id, path2) {
|
|
42
|
+
const type = metadata.types[id].type;
|
|
43
|
+
const fields = "composite" in type.def ? new Map(
|
|
44
|
+
(type.def.composite.fields ?? []).map((v) => [
|
|
45
|
+
v.name,
|
|
46
|
+
v.type
|
|
47
|
+
])
|
|
48
|
+
) : null;
|
|
49
|
+
const params = new Map(
|
|
50
|
+
(type.params ?? []).map((v) => [v.name, v.type])
|
|
51
|
+
);
|
|
52
|
+
if (params.size === 2 && params.has("V") && fields && fields.size === 2 && fields.has("len") && fields.has("elements")) {
|
|
53
|
+
resolveType2(fields.get("len"), [...path2, "len"]);
|
|
54
|
+
resolveType2(fields.get("elements"), path2);
|
|
55
|
+
return;
|
|
56
|
+
} else if (params.size === 3 && params.has("K") && params.has("V")) {
|
|
57
|
+
result[path2.join(".")] = {
|
|
58
|
+
keyPrefix,
|
|
59
|
+
key: params.get("K"),
|
|
60
|
+
typeId: params.get("V")
|
|
61
|
+
};
|
|
62
|
+
} else if (params.size === 2 && params.has("V")) {
|
|
63
|
+
result[path2.join(".")] = {
|
|
64
|
+
keyPrefix,
|
|
65
|
+
key: null,
|
|
66
|
+
typeId: params.get("V")
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
resolveType2(node.root.ty, path);
|
|
71
|
+
}
|
|
72
|
+
if (!result[path.join(".")]) {
|
|
73
|
+
result[path.join(".")] = {
|
|
74
|
+
keyPrefix,
|
|
75
|
+
key: null,
|
|
76
|
+
typeId
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if ("leaf" in node) {
|
|
82
|
+
return node.leaf.ty;
|
|
83
|
+
}
|
|
84
|
+
if ("hash" in node) {
|
|
85
|
+
throw new Error("HashLayout not implemented");
|
|
86
|
+
}
|
|
87
|
+
if ("array" in node) {
|
|
88
|
+
const inner2 = readLayout(node.array.layout, path);
|
|
89
|
+
return inner2 == null ? null : addType({
|
|
90
|
+
tag: "array",
|
|
91
|
+
value: {
|
|
92
|
+
len: node.array.len,
|
|
93
|
+
type: inner2
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if ("struct" in node) {
|
|
98
|
+
const inner2 = node.struct.fields.map((field) => ({
|
|
99
|
+
name: field.name,
|
|
100
|
+
type: readLayout(field.layout, [...path, field.name]),
|
|
101
|
+
typeName: void 0,
|
|
102
|
+
docs: []
|
|
103
|
+
})).filter((field) => field.type != null);
|
|
104
|
+
return addType({
|
|
105
|
+
tag: "composite",
|
|
106
|
+
value: inner2
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
const inner = Object.values(node.enum.variants).map((variant, index) => ({
|
|
110
|
+
name: variant.name,
|
|
111
|
+
fields: variant.fields.map((field) => ({
|
|
112
|
+
name: field.name,
|
|
113
|
+
type: readLayout(field.layout, [...path, variant.name, field.name]),
|
|
114
|
+
typeName: void 0,
|
|
115
|
+
docs: []
|
|
116
|
+
})).filter((v) => v.type !== null),
|
|
117
|
+
index,
|
|
118
|
+
docs: []
|
|
119
|
+
}));
|
|
120
|
+
return addType({
|
|
121
|
+
tag: "variant",
|
|
122
|
+
value: inner
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
readLayout(metadata.storage);
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
16
128
|
|
|
17
129
|
export { getInkLookup };
|
|
18
130
|
//# sourceMappingURL=get-lookup.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-lookup.mjs","sources":["../../src/get-lookup.ts"],"sourcesContent":["import { denormalizeLookup, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { v14Lookup } from \"@polkadot-api/substrate-bindings\"\nimport { InkMetadata } from \"./metadata-types\"\nimport { pjsTypes } from \"./metadata-pjs-types\"\n\nexport interface InkMetadataLookup {\n (id: number): LookupEntry\n metadata: InkMetadata\n}\n\nexport const getInkLookup = (metadata: InkMetadata) => {\n // We can reuse dynamic-builder's lookup if we encode and re-decode the type\n // into V14Lookup, because both v14 metadata lookup and ink types use scale-info\n const encoded = pjsTypes.enc(metadata.types)\n const decoded = v14Lookup.dec(encoded)\n\n // Signal the lookup the AccountId type\n const accountTypeId = metadata.spec.environment.accountId.type\n const accountIdEntry = decoded.find((e) => e.id === accountTypeId)\n if (accountIdEntry) {\n accountIdEntry.path = [\"AccountId32\"]\n }\n\n const getLookupEntryDef = denormalizeLookup(decoded)\n\n return Object.assign(getLookupEntryDef, { metadata })\n}\n"],"names":[],"mappings":";;;;AAUa,MAAA,YAAA,GAAe,CAAC,QAA0B,KAAA;AAGrD,EAAA,MAAM,OAAU,GAAA,QAAA,CAAS,GAAI,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAGrC,EAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,IAAA,CAAA;AAC1D,EAAA,MAAM,iBAAiB,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,aAAa,CAAA,CAAA;AACjE,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAe,cAAA,CAAA,IAAA,GAAO,CAAC,aAAa,CAAA,CAAA;AAAA,GACtC;AAEA,EAAM,MAAA,iBAAA,GAAoB,kBAAkB,OAAO,CAAA,CAAA;AAEnD,EAAA,OAAO,MAAO,CAAA,MAAA,CAAO,iBAAmB,EAAA,EAAE,UAAU,CAAA,CAAA;AACtD;;;;"}
|
|
1
|
+
{"version":3,"file":"get-lookup.mjs","sources":["../../src/get-lookup.ts"],"sourcesContent":["import { denormalizeLookup, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { Binary, V14Lookup, v14Lookup } from \"@polkadot-api/substrate-bindings\"\nimport { InkMetadata, Layout } from \"./metadata-types\"\nimport { pjsTypes } from \"./metadata-pjs-types\"\n\nexport interface InkMetadataLookup {\n (id: number): LookupEntry\n metadata: InkMetadata\n storage: StorageLayout\n}\n\nexport interface StorageEntryPoint {\n keyPrefix: string\n key: number | null\n typeId: number\n}\n\nexport type StorageLayout = Record<string, StorageEntryPoint>\n\nexport const getInkLookup = (metadata: InkMetadata): InkMetadataLookup => {\n // We can reuse dynamic-builder's lookup if we encode and re-decode the type\n // into V14Lookup, because both v14 metadata lookup and ink types use scale-info\n const encoded = pjsTypes.enc(metadata.types)\n const decoded = v14Lookup.dec(encoded)\n\n // Signal the lookup the AccountId type\n const accountTypeId = metadata.spec.environment.accountId.type\n const accountIdEntry = decoded.find((e) => e.id === accountTypeId)\n if (accountIdEntry) {\n accountIdEntry.path = [\"AccountId32\"]\n }\n\n const storage = getStorageLayout(metadata, decoded)\n const getLookupEntryDef = denormalizeLookup(decoded)\n\n return Object.assign(getLookupEntryDef, {\n metadata,\n lookup: decoded,\n storage,\n })\n}\n\nfunction getStorageLayout(metadata: InkMetadata, lookup: V14Lookup) {\n const result: StorageLayout = {}\n\n const readLayout = (node: Layout, path: string[] = []): number | null => {\n function addType(def: V14Lookup[number][\"def\"]) {\n const id = lookup.length\n lookup[id] = {\n id,\n docs: [],\n def,\n params: [],\n path: [],\n }\n return id\n }\n\n if (\"root\" in node) {\n // On version 4-, the keys in the storage were in big-endian.\n // For version 5+, the keys in storage are in scale, which is little-endian.\n // https://use.ink/faq/migrating-from-ink-4-to-5#metadata-storage-keys-encoding-change\n // https://github.com/use-ink/ink/pull/2048\n const keyPrefix =\n Number(metadata.version) === 4\n ? Binary.fromBytes(\n Binary.fromHex(node.root.root_key).asBytes().reverse(),\n ).asHex()\n : node.root.root_key\n\n const typeId = readLayout(node.root.layout, path)!\n if (node.root.ty != null) {\n function resolveType(id: number, path: string[]) {\n const type = metadata.types[id].type\n\n // A vector internally uses a Mapping, but we have to get it\n const fields =\n \"composite\" in type.def\n ? new Map(\n (type.def.composite.fields ?? []).map((v) => [\n v.name,\n v.type,\n ]),\n )\n : null\n const params = new Map(\n (type.params ?? []).map((v) => [v.name, v.type]),\n )\n\n if (\n params.size === 2 &&\n params.has(\"V\") &&\n fields &&\n fields.size === 2 &&\n fields.has(\"len\") &&\n fields.has(\"elements\")\n ) {\n // Vectors have length and elements as different entry points\n resolveType(fields.get(\"len\")!, [...path, \"len\"])\n resolveType(fields.get(\"elements\")!, path)\n return\n } else if (params.size === 3 && params.has(\"K\") && params.has(\"V\")) {\n // Mapping\n result[path.join(\".\")] = {\n keyPrefix,\n key: params.get(\"K\")!,\n typeId: params.get(\"V\")!,\n }\n } else if (params.size === 2 && params.has(\"V\")) {\n // Lazy\n result[path.join(\".\")] = {\n keyPrefix,\n key: null,\n typeId: params.get(\"V\")!,\n }\n }\n }\n resolveType(node.root.ty, path)\n }\n\n if (!result[path.join(\".\")]) {\n result[path.join(\".\")] = {\n keyPrefix,\n key: null,\n typeId,\n }\n }\n\n // Anyone addressing this node will encounter an empty type\n return null\n }\n if (\"leaf\" in node) {\n return node.leaf.ty\n }\n if (\"hash\" in node) {\n throw new Error(\"HashLayout not implemented\")\n }\n if (\"array\" in node) {\n const inner = readLayout(node.array.layout, path)\n\n return inner == null\n ? null\n : addType({\n tag: \"array\",\n value: {\n len: node.array.len,\n type: inner,\n },\n })\n }\n if (\"struct\" in node) {\n const inner = node.struct.fields\n .map((field) => ({\n name: field.name,\n type: readLayout(field.layout, [...path, field.name])!,\n typeName: undefined,\n docs: [],\n }))\n .filter((field) => field.type != null)\n\n return addType({\n tag: \"composite\",\n value: inner,\n })\n }\n\n const inner = Object.values(node.enum.variants).map((variant, index) => ({\n name: variant.name,\n fields: variant.fields\n .map((field) => ({\n name: field.name,\n type: readLayout(field.layout, [...path, variant.name, field.name])!,\n typeName: undefined,\n docs: [],\n }))\n .filter((v) => v.type !== null),\n index,\n docs: [],\n }))\n\n return addType({\n tag: \"variant\",\n value: inner,\n })\n }\n readLayout(metadata.storage)\n\n return result\n}\n"],"names":["resolveType","path","inner"],"mappings":"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"}
|
package/dist/esm/ink-client.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Binary } from '@polkadot-api/substrate-bindings';
|
|
2
|
-
import { getInkLookup } from './get-lookup.mjs';
|
|
3
2
|
import { getInkDynamicBuilder } from './dynamic-builders.mjs';
|
|
3
|
+
import { getInkLookup } from './get-lookup.mjs';
|
|
4
4
|
|
|
5
5
|
const getInkClient = (inkContract) => {
|
|
6
6
|
const lookup = getInkLookup(inkContract.metadata);
|
|
@@ -8,7 +8,7 @@ const getInkClient = (inkContract) => {
|
|
|
8
8
|
return {
|
|
9
9
|
constructor: buildCallable(builder.buildConstructor),
|
|
10
10
|
message: buildCallable(builder.buildMessage),
|
|
11
|
-
storage: buildStorage(
|
|
11
|
+
storage: buildStorage(builder.buildStorage),
|
|
12
12
|
event: buildEvent(builder.buildEvent)
|
|
13
13
|
};
|
|
14
14
|
};
|
|
@@ -19,13 +19,11 @@ const buildCallable = (builder) => (label) => {
|
|
|
19
19
|
decode: (response) => codecs.value.dec(response.data.asBytes())
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
-
const buildStorage = (
|
|
23
|
-
const
|
|
24
|
-
const metadataRootKey = Binary.fromHex(metadata.storage.root.root_key);
|
|
25
|
-
const rootKey = Number(metadata.version) === 4 ? Binary.fromBytes(metadataRootKey.asBytes().reverse()) : metadataRootKey;
|
|
22
|
+
const buildStorage = (builder) => (label) => {
|
|
23
|
+
const codecs = builder(label);
|
|
26
24
|
return {
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
encode: (key) => Binary.fromBytes(codecs.key.enc(key)),
|
|
26
|
+
decode: (response) => codecs.value.dec(response.asBytes())
|
|
29
27
|
};
|
|
30
28
|
};
|
|
31
29
|
const buildEvent = (decoder) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ink-client.mjs","sources":["../../src/ink-client.ts"],"sourcesContent":["import { Binary } from \"@polkadot-api/substrate-bindings\"\nimport {
|
|
1
|
+
{"version":3,"file":"ink-client.mjs","sources":["../../src/ink-client.ts"],"sourcesContent":["import { Binary } from \"@polkadot-api/substrate-bindings\"\nimport { getInkDynamicBuilder, InkDynamicBuilder } from \"./dynamic-builders\"\nimport { getInkLookup } from \"./get-lookup\"\nimport {\n Event,\n InkCallableDescriptor,\n InkDescriptors,\n InkStorageDescriptor,\n} from \"./ink-descriptors\"\n\nexport type InkCallableInterface<T extends InkCallableDescriptor> = <\n L extends string & keyof T,\n>(\n label: L,\n) => {\n encode: {} extends T[L][\"message\"]\n ? (value?: T[L][\"message\"]) => Binary\n : (value: T[L][\"message\"]) => Binary\n decode: (value: { data: Binary }) => T[L][\"response\"]\n}\n\nexport type InkStorageInterface<S extends InkStorageDescriptor> =\n (\"\" extends keyof S\n ? () => {\n encode: S[\"\"][\"key\"] extends undefined\n ? (key?: undefined) => Binary\n : (key: S[\"\"][\"key\"]) => Binary\n decode: (data: Binary) => S[\"\"][\"value\"]\n }\n : unknown) &\n (<L extends string & keyof S>(\n label: L,\n ) => {\n encode: S[L][\"key\"] extends undefined\n ? (key?: undefined) => Binary\n : (key: S[L][\"key\"]) => Binary\n decode: (data: Binary) => S[L][\"value\"]\n })\n\nexport type GenericEvent =\n | {\n type: \"Contracts\"\n value:\n | {\n type: \"ContractEmitted\"\n value: {\n contract: string\n data: Binary\n }\n }\n | { type: string; value: unknown }\n }\n | { type: string; value: unknown }\nexport interface InkEventInterface<E> {\n decode: (value: { data: Binary }) => E\n filter: (\n address: string,\n events?: Array<GenericEvent | { event: GenericEvent }>,\n ) => E[]\n}\n\nexport interface InkClient<\n D extends InkDescriptors<\n InkStorageDescriptor,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n> {\n constructor: InkCallableInterface<D[\"__types\"][\"constructors\"]>\n message: InkCallableInterface<D[\"__types\"][\"messages\"]>\n storage: InkStorageInterface<D[\"__types\"][\"storage\"]>\n event: InkEventInterface<D[\"__types\"][\"event\"]>\n}\n\nexport const getInkClient = <\n D extends InkDescriptors<\n InkStorageDescriptor,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n>(\n inkContract: D,\n): InkClient<D> => {\n const lookup = getInkLookup(inkContract.metadata)\n const builder = getInkDynamicBuilder(lookup)\n\n return {\n constructor: buildCallable(builder.buildConstructor),\n message: buildCallable(builder.buildMessage),\n storage: buildStorage(builder.buildStorage),\n event: buildEvent(builder.buildEvent),\n }\n}\n\nconst buildCallable =\n <T extends InkCallableDescriptor>(\n builder:\n | InkDynamicBuilder[\"buildConstructor\"]\n | InkDynamicBuilder[\"buildMessage\"],\n ): InkCallableInterface<T> =>\n <L extends string & keyof T>(label: L) => {\n const codecs = builder(label)\n\n return {\n encode: (value?: T[L][\"message\"]) =>\n Binary.fromBytes(codecs.call.enc(value || {})),\n decode: (response) => codecs.value.dec(response.data.asBytes()),\n }\n }\n\nconst buildStorage =\n <S extends InkStorageDescriptor>(\n builder: InkDynamicBuilder[\"buildStorage\"],\n ): InkStorageInterface<S> =>\n <L extends string & keyof S>(label?: L) => {\n const codecs = builder(label)\n\n return {\n encode: (key?: S[L][\"key\"]) =>\n Binary.fromBytes(codecs.key.enc(key as any)),\n decode: (response: Binary) => codecs.value.dec(response.asBytes()),\n }\n }\n\nconst buildEvent = <E extends Event>(\n decoder: InkDynamicBuilder[\"buildEvent\"],\n): InkEventInterface<E> => {\n const decode: InkEventInterface<E>[\"decode\"] = (value) =>\n decoder().dec(value.data.asBytes()) as E\n\n return {\n decode,\n filter: (address, events = []) =>\n events\n .map((v) => (\"event\" in v ? v.event : v))\n .filter(\n (v: any) =>\n v.type === \"Contracts\" &&\n v.value.type === \"ContractEmitted\" &&\n v.value.value.contract === address,\n )\n .map((v: any) => {\n try {\n return decode(v.value.value)\n } catch (ex) {\n console.error(\n `Contract ${address} emitted an incompatible event`,\n v.value.value,\n )\n throw ex\n }\n }),\n }\n}\n"],"names":[],"mappings":";;;;AA2Ea,MAAA,YAAA,GAAe,CAQ1B,WACiB,KAAA;AACjB,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AAChD,EAAM,MAAA,OAAA,GAAU,qBAAqB,MAAM,CAAA,CAAA;AAE3C,EAAO,OAAA;AAAA,IACL,WAAA,EAAa,aAAc,CAAA,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IACnD,OAAA,EAAS,aAAc,CAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,IAC3C,OAAA,EAAS,YAAa,CAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,IAC1C,KAAA,EAAO,UAAW,CAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,GACtC,CAAA;AACF,EAAA;AAEA,MAAM,aACJ,GAAA,CACE,OAIF,KAAA,CAA6B,KAAa,KAAA;AACxC,EAAM,MAAA,MAAA,GAAS,QAAQ,KAAK,CAAA,CAAA;AAE5B,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KACP,MAAO,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,KAAA,IAAS,EAAE,CAAC,CAAA;AAAA,IAC/C,MAAA,EAAQ,CAAC,QAAa,KAAA,MAAA,CAAO,MAAM,GAAI,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,CAAA;AAAA,GAChE,CAAA;AACF,CAAA,CAAA;AAEF,MAAM,YACJ,GAAA,CACE,OAEF,KAAA,CAA6B,KAAc,KAAA;AACzC,EAAM,MAAA,MAAA,GAAS,QAAQ,KAAK,CAAA,CAAA;AAE5B,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,CAAC,GACP,KAAA,MAAA,CAAO,UAAU,MAAO,CAAA,GAAA,CAAI,GAAI,CAAA,GAAU,CAAC,CAAA;AAAA,IAC7C,MAAA,EAAQ,CAAC,QAAqB,KAAA,MAAA,CAAO,MAAM,GAAI,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA,GACnE,CAAA;AACF,CAAA,CAAA;AAEF,MAAM,UAAA,GAAa,CACjB,OACyB,KAAA;AACzB,EAAM,MAAA,MAAA,GAAyC,CAAC,KAC9C,KAAA,OAAA,GAAU,GAAI,CAAA,KAAA,CAAM,IAAK,CAAA,OAAA,EAAS,CAAA,CAAA;AAEpC,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,MAAQ,EAAA,CAAC,OAAS,EAAA,MAAA,GAAS,EACzB,KAAA,MAAA,CACG,GAAI,CAAA,CAAC,MAAO,OAAW,IAAA,CAAA,GAAI,CAAE,CAAA,KAAA,GAAQ,CAAE,CACvC,CAAA,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAE,CAAA,IAAA,KAAS,WACX,IAAA,CAAA,CAAE,KAAM,CAAA,IAAA,KAAS,iBACjB,IAAA,CAAA,CAAE,KAAM,CAAA,KAAA,CAAM,QAAa,KAAA,OAAA;AAAA,KAC/B,CACC,GAAI,CAAA,CAAC,CAAW,KAAA;AACf,MAAI,IAAA;AACF,QAAO,OAAA,MAAA,CAAO,CAAE,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,eACpB,EAAI,EAAA;AACX,QAAQ,OAAA,CAAA,KAAA;AAAA,UACN,YAAY,OAAO,CAAA,8BAAA,CAAA;AAAA,UACnB,EAAE,KAAM,CAAA,KAAA;AAAA,SACV,CAAA;AACA,QAAM,MAAA,EAAA,CAAA;AAAA,OACR;AAAA,KACD,CAAA;AAAA,GACP,CAAA;AACF,CAAA;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -163,6 +163,7 @@ interface RootLayout {
|
|
|
163
163
|
root: {
|
|
164
164
|
root_key: string;
|
|
165
165
|
layout: Layout;
|
|
166
|
+
ty?: number;
|
|
166
167
|
};
|
|
167
168
|
}
|
|
168
169
|
interface HashLayout {
|
|
@@ -207,10 +208,15 @@ interface FieldLayout {
|
|
|
207
208
|
interface InkMetadataLookup {
|
|
208
209
|
(id: number): LookupEntry;
|
|
209
210
|
metadata: InkMetadata;
|
|
211
|
+
storage: StorageLayout;
|
|
210
212
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
213
|
+
interface StorageEntryPoint {
|
|
214
|
+
keyPrefix: string;
|
|
215
|
+
key: number | null;
|
|
216
|
+
typeId: number;
|
|
217
|
+
}
|
|
218
|
+
type StorageLayout = Record<string, StorageEntryPoint>;
|
|
219
|
+
declare const getInkLookup: (metadata: InkMetadata) => InkMetadataLookup;
|
|
214
220
|
|
|
215
221
|
declare const getInkDynamicBuilder: (metadataLookup: InkMetadataLookup) => {
|
|
216
222
|
buildConstructor: (label: string) => {
|
|
@@ -229,7 +235,10 @@ declare const getInkDynamicBuilder: (metadataLookup: InkMetadataLookup) => {
|
|
|
229
235
|
}>;
|
|
230
236
|
value: Codec<any>;
|
|
231
237
|
};
|
|
232
|
-
|
|
238
|
+
buildStorage: (name?: string) => {
|
|
239
|
+
key: Codec<undefined>;
|
|
240
|
+
value: Codec<any>;
|
|
241
|
+
};
|
|
233
242
|
buildEvent: () => Codec<{
|
|
234
243
|
type: string;
|
|
235
244
|
value: any;
|
|
@@ -241,7 +250,7 @@ type Event = {
|
|
|
241
250
|
type: string;
|
|
242
251
|
value: unknown;
|
|
243
252
|
};
|
|
244
|
-
interface InkDescriptors<S, M extends InkCallableDescriptor, C extends InkCallableDescriptor, E extends Event> {
|
|
253
|
+
interface InkDescriptors<S extends InkStorageDescriptor, M extends InkCallableDescriptor, C extends InkCallableDescriptor, E extends Event> {
|
|
245
254
|
metadata: InkMetadata;
|
|
246
255
|
__types: {
|
|
247
256
|
storage: S;
|
|
@@ -254,6 +263,10 @@ type InkCallableDescriptor = Record<string, {
|
|
|
254
263
|
message: StringRecord<unknown>;
|
|
255
264
|
response: StringRecord<unknown>;
|
|
256
265
|
}>;
|
|
266
|
+
type InkStorageDescriptor = Record<string, {
|
|
267
|
+
key: unknown;
|
|
268
|
+
value: unknown;
|
|
269
|
+
}>;
|
|
257
270
|
|
|
258
271
|
type InkCallableInterface<T extends InkCallableDescriptor> = <L extends string & keyof T>(label: L) => {
|
|
259
272
|
encode: {} extends T[L]["message"] ? (value?: T[L]["message"]) => Binary : (value: T[L]["message"]) => Binary;
|
|
@@ -261,10 +274,13 @@ type InkCallableInterface<T extends InkCallableDescriptor> = <L extends string &
|
|
|
261
274
|
data: Binary;
|
|
262
275
|
}) => T[L]["response"];
|
|
263
276
|
};
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
}
|
|
277
|
+
type InkStorageInterface<S extends InkStorageDescriptor> = ("" extends keyof S ? () => {
|
|
278
|
+
encode: S[""]["key"] extends undefined ? (key?: undefined) => Binary : (key: S[""]["key"]) => Binary;
|
|
279
|
+
decode: (data: Binary) => S[""]["value"];
|
|
280
|
+
} : unknown) & (<L extends string & keyof S>(label: L) => {
|
|
281
|
+
encode: S[L]["key"] extends undefined ? (key?: undefined) => Binary : (key: S[L]["key"]) => Binary;
|
|
282
|
+
decode: (data: Binary) => S[L]["value"];
|
|
283
|
+
});
|
|
268
284
|
type GenericEvent = {
|
|
269
285
|
type: "Contracts";
|
|
270
286
|
value: {
|
|
@@ -289,12 +305,12 @@ interface InkEventInterface<E> {
|
|
|
289
305
|
event: GenericEvent;
|
|
290
306
|
}>) => E[];
|
|
291
307
|
}
|
|
292
|
-
interface InkClient<D extends InkDescriptors<
|
|
308
|
+
interface InkClient<D extends InkDescriptors<InkStorageDescriptor, InkCallableDescriptor, InkCallableDescriptor, Event>> {
|
|
293
309
|
constructor: InkCallableInterface<D["__types"]["constructors"]>;
|
|
294
310
|
message: InkCallableInterface<D["__types"]["messages"]>;
|
|
295
311
|
storage: InkStorageInterface<D["__types"]["storage"]>;
|
|
296
312
|
event: InkEventInterface<D["__types"]["event"]>;
|
|
297
313
|
}
|
|
298
|
-
declare const getInkClient: <D extends InkDescriptors<
|
|
314
|
+
declare const getInkClient: <D extends InkDescriptors<InkStorageDescriptor, InkCallableDescriptor, InkCallableDescriptor, Event>>(inkContract: D) => InkClient<D>;
|
|
299
315
|
|
|
300
|
-
export { type ArrayLayout, type EnumLayout, type Event, type FieldLayout, type GenericEvent, type HashLayout, type InkCallableDescriptor, type InkCallableInterface, type InkClient, type InkDescriptors, type InkDynamicBuilder, type InkEventInterface, type InkMetadata, type InkMetadataLookup, type InkStorageInterface, type Layout, type LeafLayout, type MessageParamSpec, type RootLayout, type StructLayout, type TypeSpec, getInkClient, getInkDynamicBuilder, getInkLookup };
|
|
316
|
+
export { type ArrayLayout, type EnumLayout, type Event, type FieldLayout, type GenericEvent, type HashLayout, type InkCallableDescriptor, type InkCallableInterface, type InkClient, type InkDescriptors, type InkDynamicBuilder, type InkEventInterface, type InkMetadata, type InkMetadataLookup, type InkStorageDescriptor, type InkStorageInterface, type Layout, type LeafLayout, type MessageParamSpec, type RootLayout, type StorageEntryPoint, type StorageLayout, type StructLayout, type TypeSpec, getInkClient, getInkDynamicBuilder, getInkLookup };
|
package/dist/index.js
CHANGED
|
@@ -7,53 +7,17 @@ var scaleTs = require('scale-ts');
|
|
|
7
7
|
const getInkDynamicBuilder = (metadataLookup) => {
|
|
8
8
|
const { metadata } = metadataLookup;
|
|
9
9
|
const buildDefinition = metadataBuilders.getLookupCodecBuilder(metadataLookup);
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
if ("array" in node) {
|
|
21
|
-
return scaleTs.Vector(buildLayout(node.array.layout), node.array.len);
|
|
22
|
-
}
|
|
23
|
-
if ("struct" in node) {
|
|
24
|
-
return scaleTs.Struct(
|
|
25
|
-
Object.fromEntries(
|
|
26
|
-
node.struct.fields.map((field) => [
|
|
27
|
-
field.name,
|
|
28
|
-
buildLayout(field.layout)
|
|
29
|
-
])
|
|
30
|
-
)
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
const variants = Object.values(node.enum.variants);
|
|
34
|
-
if (node.enum.name === "Option" && variants.length === 2 && variants[0].name === "None" && variants[1].name === "Some") {
|
|
35
|
-
const inner = variants[1].fields.length === 1 ? buildLayout(variants[1].fields[0].layout) : scaleTs.Tuple(...variants[1].fields.map((v) => buildLayout(v.layout)));
|
|
36
|
-
return scaleTs.Option(inner);
|
|
37
|
-
}
|
|
38
|
-
return scaleTs.Enum(
|
|
39
|
-
Object.fromEntries(
|
|
40
|
-
Object.values(node.enum.variants).map((variant) => [
|
|
41
|
-
variant.name,
|
|
42
|
-
scaleTs.Struct(
|
|
43
|
-
Object.fromEntries(
|
|
44
|
-
variant.fields.map((field) => [
|
|
45
|
-
field.name,
|
|
46
|
-
buildLayout(field.layout)
|
|
47
|
-
])
|
|
48
|
-
)
|
|
49
|
-
)
|
|
50
|
-
])
|
|
51
|
-
)
|
|
52
|
-
);
|
|
10
|
+
const buildStorage = (name = "") => {
|
|
11
|
+
const storageEntry = metadataLookup.storage[name];
|
|
12
|
+
if (!storageEntry)
|
|
13
|
+
throw new Error(`Storage entry ${name ? name : "{root}"} not found`);
|
|
14
|
+
const keyCodec = storageEntry.key == null ? scaleTs._void : buildDefinition(storageEntry.key);
|
|
15
|
+
return {
|
|
16
|
+
key: prependBytes(keyCodec, storageEntry.keyPrefix),
|
|
17
|
+
value: buildDefinition(storageEntry.typeId)
|
|
18
|
+
};
|
|
53
19
|
};
|
|
54
|
-
const buildStorageRoot = () => buildLayout(metadata.storage);
|
|
55
20
|
const buildCallable = (callable) => {
|
|
56
|
-
const selectorBytes = substrateBindings.Binary.fromHex(callable.selector).asBytes();
|
|
57
21
|
const argsCodec = scaleTs.Struct(
|
|
58
22
|
Object.fromEntries(
|
|
59
23
|
callable.args.map((param) => [
|
|
@@ -62,16 +26,8 @@ const getInkDynamicBuilder = (metadataLookup) => {
|
|
|
62
26
|
])
|
|
63
27
|
)
|
|
64
28
|
);
|
|
65
|
-
const callCodec = scaleTs.Tuple(scaleTs.Bytes(4), argsCodec);
|
|
66
29
|
return {
|
|
67
|
-
call:
|
|
68
|
-
callCodec,
|
|
69
|
-
(value) => [
|
|
70
|
-
selectorBytes,
|
|
71
|
-
value
|
|
72
|
-
],
|
|
73
|
-
([, value]) => value
|
|
74
|
-
),
|
|
30
|
+
call: prependBytes(argsCodec, callable.selector),
|
|
75
31
|
value: buildDefinition(callable.returnType.type)
|
|
76
32
|
};
|
|
77
33
|
};
|
|
@@ -107,10 +63,22 @@ const getInkDynamicBuilder = (metadataLookup) => {
|
|
|
107
63
|
return {
|
|
108
64
|
buildConstructor,
|
|
109
65
|
buildMessage,
|
|
110
|
-
|
|
66
|
+
buildStorage,
|
|
111
67
|
buildEvent
|
|
112
68
|
};
|
|
113
69
|
};
|
|
70
|
+
const prependBytes = (codec, hex) => {
|
|
71
|
+
const bytes = substrateBindings.Binary.fromHex(hex).asBytes();
|
|
72
|
+
const wrappedCodec = scaleTs.Tuple(scaleTs.Bytes(bytes.length), codec);
|
|
73
|
+
return scaleTs.enhanceCodec(
|
|
74
|
+
wrappedCodec,
|
|
75
|
+
(value) => [
|
|
76
|
+
bytes,
|
|
77
|
+
value
|
|
78
|
+
],
|
|
79
|
+
([, value]) => value
|
|
80
|
+
);
|
|
81
|
+
};
|
|
114
82
|
|
|
115
83
|
const Variant = (inner) => scaleTs.enhanceCodec(
|
|
116
84
|
scaleTs.Enum(inner),
|
|
@@ -237,9 +205,121 @@ const getInkLookup = (metadata) => {
|
|
|
237
205
|
if (accountIdEntry) {
|
|
238
206
|
accountIdEntry.path = ["AccountId32"];
|
|
239
207
|
}
|
|
208
|
+
const storage = getStorageLayout(metadata, decoded);
|
|
240
209
|
const getLookupEntryDef = metadataBuilders.denormalizeLookup(decoded);
|
|
241
|
-
return Object.assign(getLookupEntryDef, {
|
|
210
|
+
return Object.assign(getLookupEntryDef, {
|
|
211
|
+
metadata,
|
|
212
|
+
lookup: decoded,
|
|
213
|
+
storage
|
|
214
|
+
});
|
|
242
215
|
};
|
|
216
|
+
function getStorageLayout(metadata, lookup) {
|
|
217
|
+
const result = {};
|
|
218
|
+
const readLayout = (node, path = []) => {
|
|
219
|
+
function addType(def) {
|
|
220
|
+
const id = lookup.length;
|
|
221
|
+
lookup[id] = {
|
|
222
|
+
id,
|
|
223
|
+
docs: [],
|
|
224
|
+
def,
|
|
225
|
+
params: [],
|
|
226
|
+
path: []
|
|
227
|
+
};
|
|
228
|
+
return id;
|
|
229
|
+
}
|
|
230
|
+
if ("root" in node) {
|
|
231
|
+
const keyPrefix = Number(metadata.version) === 4 ? substrateBindings.Binary.fromBytes(
|
|
232
|
+
substrateBindings.Binary.fromHex(node.root.root_key).asBytes().reverse()
|
|
233
|
+
).asHex() : node.root.root_key;
|
|
234
|
+
const typeId = readLayout(node.root.layout, path);
|
|
235
|
+
if (node.root.ty != null) {
|
|
236
|
+
let resolveType2 = function(id, path2) {
|
|
237
|
+
const type = metadata.types[id].type;
|
|
238
|
+
const fields = "composite" in type.def ? new Map(
|
|
239
|
+
(type.def.composite.fields ?? []).map((v) => [
|
|
240
|
+
v.name,
|
|
241
|
+
v.type
|
|
242
|
+
])
|
|
243
|
+
) : null;
|
|
244
|
+
const params = new Map(
|
|
245
|
+
(type.params ?? []).map((v) => [v.name, v.type])
|
|
246
|
+
);
|
|
247
|
+
if (params.size === 2 && params.has("V") && fields && fields.size === 2 && fields.has("len") && fields.has("elements")) {
|
|
248
|
+
resolveType2(fields.get("len"), [...path2, "len"]);
|
|
249
|
+
resolveType2(fields.get("elements"), path2);
|
|
250
|
+
return;
|
|
251
|
+
} else if (params.size === 3 && params.has("K") && params.has("V")) {
|
|
252
|
+
result[path2.join(".")] = {
|
|
253
|
+
keyPrefix,
|
|
254
|
+
key: params.get("K"),
|
|
255
|
+
typeId: params.get("V")
|
|
256
|
+
};
|
|
257
|
+
} else if (params.size === 2 && params.has("V")) {
|
|
258
|
+
result[path2.join(".")] = {
|
|
259
|
+
keyPrefix,
|
|
260
|
+
key: null,
|
|
261
|
+
typeId: params.get("V")
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
resolveType2(node.root.ty, path);
|
|
266
|
+
}
|
|
267
|
+
if (!result[path.join(".")]) {
|
|
268
|
+
result[path.join(".")] = {
|
|
269
|
+
keyPrefix,
|
|
270
|
+
key: null,
|
|
271
|
+
typeId
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
if ("leaf" in node) {
|
|
277
|
+
return node.leaf.ty;
|
|
278
|
+
}
|
|
279
|
+
if ("hash" in node) {
|
|
280
|
+
throw new Error("HashLayout not implemented");
|
|
281
|
+
}
|
|
282
|
+
if ("array" in node) {
|
|
283
|
+
const inner2 = readLayout(node.array.layout, path);
|
|
284
|
+
return inner2 == null ? null : addType({
|
|
285
|
+
tag: "array",
|
|
286
|
+
value: {
|
|
287
|
+
len: node.array.len,
|
|
288
|
+
type: inner2
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
if ("struct" in node) {
|
|
293
|
+
const inner2 = node.struct.fields.map((field) => ({
|
|
294
|
+
name: field.name,
|
|
295
|
+
type: readLayout(field.layout, [...path, field.name]),
|
|
296
|
+
typeName: void 0,
|
|
297
|
+
docs: []
|
|
298
|
+
})).filter((field) => field.type != null);
|
|
299
|
+
return addType({
|
|
300
|
+
tag: "composite",
|
|
301
|
+
value: inner2
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
const inner = Object.values(node.enum.variants).map((variant, index) => ({
|
|
305
|
+
name: variant.name,
|
|
306
|
+
fields: variant.fields.map((field) => ({
|
|
307
|
+
name: field.name,
|
|
308
|
+
type: readLayout(field.layout, [...path, variant.name, field.name]),
|
|
309
|
+
typeName: void 0,
|
|
310
|
+
docs: []
|
|
311
|
+
})).filter((v) => v.type !== null),
|
|
312
|
+
index,
|
|
313
|
+
docs: []
|
|
314
|
+
}));
|
|
315
|
+
return addType({
|
|
316
|
+
tag: "variant",
|
|
317
|
+
value: inner
|
|
318
|
+
});
|
|
319
|
+
};
|
|
320
|
+
readLayout(metadata.storage);
|
|
321
|
+
return result;
|
|
322
|
+
}
|
|
243
323
|
|
|
244
324
|
const getInkClient = (inkContract) => {
|
|
245
325
|
const lookup = getInkLookup(inkContract.metadata);
|
|
@@ -247,7 +327,7 @@ const getInkClient = (inkContract) => {
|
|
|
247
327
|
return {
|
|
248
328
|
constructor: buildCallable(builder.buildConstructor),
|
|
249
329
|
message: buildCallable(builder.buildMessage),
|
|
250
|
-
storage: buildStorage(
|
|
330
|
+
storage: buildStorage(builder.buildStorage),
|
|
251
331
|
event: buildEvent(builder.buildEvent)
|
|
252
332
|
};
|
|
253
333
|
};
|
|
@@ -258,13 +338,11 @@ const buildCallable = (builder) => (label) => {
|
|
|
258
338
|
decode: (response) => codecs.value.dec(response.data.asBytes())
|
|
259
339
|
};
|
|
260
340
|
};
|
|
261
|
-
const buildStorage = (
|
|
262
|
-
const
|
|
263
|
-
const metadataRootKey = substrateBindings.Binary.fromHex(metadata.storage.root.root_key);
|
|
264
|
-
const rootKey = Number(metadata.version) === 4 ? substrateBindings.Binary.fromBytes(metadataRootKey.asBytes().reverse()) : metadataRootKey;
|
|
341
|
+
const buildStorage = (builder) => (label) => {
|
|
342
|
+
const codecs = builder(label);
|
|
265
343
|
return {
|
|
266
|
-
|
|
267
|
-
|
|
344
|
+
encode: (key) => substrateBindings.Binary.fromBytes(codecs.key.enc(key)),
|
|
345
|
+
decode: (response) => codecs.value.dec(response.asBytes())
|
|
268
346
|
};
|
|
269
347
|
};
|
|
270
348
|
const buildEvent = (decoder) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/dynamic-builders.ts","../src/metadata-pjs-types.ts","../src/get-lookup.ts","../src/ink-client.ts"],"sourcesContent":["import { getLookupCodecBuilder } from \"@polkadot-api/metadata-builders\"\nimport { Binary, Variant } from \"@polkadot-api/substrate-bindings\"\nimport {\n Bytes,\n Codec,\n CodecType,\n enhanceCodec,\n Enum,\n Option,\n StringRecord,\n Struct,\n Tuple,\n Vector,\n} from \"scale-ts\"\nimport { InkMetadataLookup } from \"./get-lookup\"\nimport { Layout, MessageParamSpec, TypeSpec } from \"./metadata-types\"\n\nexport const getInkDynamicBuilder = (metadataLookup: InkMetadataLookup) => {\n const { metadata } = metadataLookup\n\n const buildDefinition = getLookupCodecBuilder(metadataLookup)\n\n const buildLayout = (node: Layout): Codec<any> => {\n if (\"root\" in node) {\n return buildLayout(node.root.layout)\n }\n if (\"leaf\" in node) {\n return buildDefinition(node.leaf.ty)\n }\n if (\"hash\" in node) {\n throw new Error(\"HashLayout not implemented\")\n }\n if (\"array\" in node) {\n return Vector(buildLayout(node.array.layout), node.array.len)\n }\n if (\"struct\" in node) {\n return Struct(\n Object.fromEntries(\n node.struct.fields.map((field) => [\n field.name,\n buildLayout(field.layout),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n }\n\n const variants = Object.values(node.enum.variants)\n if (\n node.enum.name === \"Option\" &&\n variants.length === 2 &&\n variants[0].name === \"None\" &&\n variants[1].name === \"Some\"\n ) {\n const inner =\n variants[1].fields.length === 1\n ? buildLayout(variants[1].fields[0].layout)\n : Tuple(...variants[1].fields.map((v) => buildLayout(v.layout)))\n return Option(inner)\n }\n\n return Enum(\n Object.fromEntries(\n Object.values(node.enum.variants).map((variant) => [\n variant.name,\n Struct(\n Object.fromEntries(\n variant.fields.map((field) => [\n field.name,\n buildLayout(field.layout),\n ]),\n ) as StringRecord<Codec<any>>,\n ),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n }\n const buildStorageRoot = () => buildLayout(metadata.storage)\n\n const buildCallable = (callable: {\n selector: string\n args: Array<MessageParamSpec>\n returnType: TypeSpec\n }) => {\n const selectorBytes = Binary.fromHex(callable.selector).asBytes()\n const argsCodec = Struct(\n Object.fromEntries(\n callable.args.map((param) => [\n param.label,\n buildDefinition(param.type.type),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n const callCodec = Tuple(Bytes(4), argsCodec)\n\n return {\n call: enhanceCodec(\n callCodec,\n (value: CodecType<typeof argsCodec>): CodecType<typeof callCodec> => [\n selectorBytes,\n value,\n ],\n ([, value]) => value,\n ),\n value: buildDefinition(callable.returnType.type),\n }\n }\n\n const buildConstructor = (label: string) => {\n const constr = metadata.spec.constructors.find((c) => c.label === label)\n if (!constr) {\n throw new Error(`Constructor ${label} not found`)\n }\n\n return buildCallable(constr)\n }\n\n const buildMessage = (label: string) => {\n const message = metadata.spec.messages.find((c) => c.label === label)\n if (!message) {\n throw new Error(`Message ${label} not found`)\n }\n\n return buildCallable(message)\n }\n\n const buildEvent = () =>\n Variant(\n Object.fromEntries(\n metadata.spec.events.map((evt) => [\n evt.label,\n Struct(\n Object.fromEntries(\n evt.args.map((param) => [\n param.label,\n buildDefinition(param.type.type),\n ]),\n ) as StringRecord<Codec<any>>,\n ),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n\n return {\n buildConstructor,\n buildMessage,\n buildStorageRoot,\n buildEvent,\n }\n}\n\nexport type InkDynamicBuilder = ReturnType<typeof getInkDynamicBuilder>\n","import { compactNumber } from \"@polkadot-api/substrate-bindings\"\nimport {\n _void,\n CodecType,\n str,\n Struct,\n u32,\n u8,\n Vector,\n Option,\n enhanceCodec,\n Enum,\n StringRecord,\n Codec,\n} from \"scale-ts\"\n\ntype PjsVariant<O extends StringRecord<Codec<any>>> = {\n [K in keyof O]: {\n [KK in K]: CodecType<O[K]>\n }\n}[keyof O]\nconst Variant = <O extends StringRecord<Codec<any>>>(inner: O) =>\n enhanceCodec(\n Enum(inner),\n (value: PjsVariant<O>) => {\n if (typeof value === \"string\") {\n return {\n tag: value,\n value: undefined,\n } as any\n }\n const [tag, val] = Object.entries(value)[0]\n\n return {\n tag: tag as keyof O,\n value: val,\n }\n },\n (value) => {\n return {\n [value.tag]: value.value,\n } as PjsVariant<O>\n },\n )\n\n// Seems like pjs can omit empty vectors\nconst PjsVector = <T>(inner: Codec<T>, size?: number) =>\n enhanceCodec(\n Vector(inner, size),\n (value: T[] | undefined) => value ?? [],\n (v) => v,\n )\n\nconst oStr = Option(str)\nconst docs = PjsVector(str)\n\nconst primitive = Variant({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\n\nconst fields = PjsVector(\n Struct({\n name: oStr,\n type: compactNumber,\n typeName: oStr,\n docs,\n }),\n)\n\nconst arr = Struct({\n len: u32,\n type: compactNumber,\n})\n\nconst bitSequence = Struct({\n bitStoreType: compactNumber,\n bitOrderType: compactNumber,\n})\n\nconst variants = PjsVector(\n Struct({\n name: str,\n fields,\n index: u8,\n docs,\n }),\n)\n\nconst def = Variant({\n composite: Struct({\n fields,\n }),\n variant: Struct({\n variants,\n }),\n sequence: Struct({\n type: compactNumber,\n }),\n array: arr,\n tuple: Vector(compactNumber),\n primitive,\n compact: compactNumber,\n bitSequence,\n})\n\nconst param = Struct({\n name: str,\n type: Option(compactNumber),\n})\nconst params = PjsVector(param)\n\nconst metadataEntry = Struct({\n id: compactNumber,\n path: docs,\n params,\n def,\n docs,\n})\n\nconst entry = enhanceCodec(\n metadataEntry,\n (value: {\n id: number\n type: {\n def: CodecType<typeof def>\n path: CodecType<typeof docs>\n params?: Array<{ name: string; type: number | undefined }>\n }\n }) => ({\n id: value.id,\n path: value.type.path,\n params: value.type.params ?? [],\n def: value.type.def,\n docs: [],\n }),\n (value) => ({\n id: value.id,\n type: {\n def: value.def,\n path: value.path,\n params: value.params,\n },\n }),\n)\n\nexport const pjsTypes = PjsVector(entry)\nexport type PjsTypes = CodecType<typeof pjsTypes>\n","import { denormalizeLookup, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { v14Lookup } from \"@polkadot-api/substrate-bindings\"\nimport { InkMetadata } from \"./metadata-types\"\nimport { pjsTypes } from \"./metadata-pjs-types\"\n\nexport interface InkMetadataLookup {\n (id: number): LookupEntry\n metadata: InkMetadata\n}\n\nexport const getInkLookup = (metadata: InkMetadata) => {\n // We can reuse dynamic-builder's lookup if we encode and re-decode the type\n // into V14Lookup, because both v14 metadata lookup and ink types use scale-info\n const encoded = pjsTypes.enc(metadata.types)\n const decoded = v14Lookup.dec(encoded)\n\n // Signal the lookup the AccountId type\n const accountTypeId = metadata.spec.environment.accountId.type\n const accountIdEntry = decoded.find((e) => e.id === accountTypeId)\n if (accountIdEntry) {\n accountIdEntry.path = [\"AccountId32\"]\n }\n\n const getLookupEntryDef = denormalizeLookup(decoded)\n\n return Object.assign(getLookupEntryDef, { metadata })\n}\n","import { Binary } from \"@polkadot-api/substrate-bindings\"\nimport { InkCallableDescriptor, InkDescriptors, Event } from \"./ink-descriptors\"\nimport { getInkLookup, InkMetadataLookup } from \"./get-lookup\"\nimport { getInkDynamicBuilder, InkDynamicBuilder } from \"./dynamic-builders\"\n\nexport type InkCallableInterface<T extends InkCallableDescriptor> = <\n L extends string & keyof T,\n>(\n label: L,\n) => {\n encode: {} extends T[L][\"message\"]\n ? (value?: T[L][\"message\"]) => Binary\n : (value: T[L][\"message\"]) => Binary\n decode: (value: { data: Binary }) => T[L][\"response\"]\n}\n\nexport interface InkStorageInterface<S> {\n rootKey: Binary\n decodeRoot: (rootStorage: Binary) => S\n}\n\nexport type GenericEvent =\n | {\n type: \"Contracts\"\n value:\n | {\n type: \"ContractEmitted\"\n value: {\n contract: string\n data: Binary\n }\n }\n | { type: string; value: unknown }\n }\n | { type: string; value: unknown }\nexport interface InkEventInterface<E> {\n decode: (value: { data: Binary }) => E\n filter: (\n address: string,\n events?: Array<GenericEvent | { event: GenericEvent }>,\n ) => E[]\n}\n\nexport interface InkClient<\n D extends InkDescriptors<\n unknown,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n> {\n constructor: InkCallableInterface<D[\"__types\"][\"constructors\"]>\n message: InkCallableInterface<D[\"__types\"][\"messages\"]>\n storage: InkStorageInterface<D[\"__types\"][\"storage\"]>\n event: InkEventInterface<D[\"__types\"][\"event\"]>\n}\n\nexport const getInkClient = <\n D extends InkDescriptors<\n unknown,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n>(\n inkContract: D,\n): InkClient<D> => {\n const lookup = getInkLookup(inkContract.metadata)\n const builder = getInkDynamicBuilder(lookup)\n\n return {\n constructor: buildCallable(builder.buildConstructor),\n message: buildCallable(builder.buildMessage),\n storage: buildStorage(lookup, builder.buildStorageRoot),\n event: buildEvent(builder.buildEvent),\n }\n}\n\nconst buildCallable =\n <T extends InkCallableDescriptor>(\n builder:\n | InkDynamicBuilder[\"buildConstructor\"]\n | InkDynamicBuilder[\"buildMessage\"],\n ): InkCallableInterface<T> =>\n <L extends string & keyof T>(label: L) => {\n const codecs = builder(label)\n\n return {\n encode: (value?: T[L][\"message\"]) =>\n Binary.fromBytes(codecs.call.enc(value || {})),\n decode: (response) => codecs.value.dec(response.data.asBytes()),\n }\n }\n\nconst buildStorage = <S>(\n lookup: InkMetadataLookup,\n builder: InkDynamicBuilder[\"buildStorageRoot\"],\n): InkStorageInterface<S> => {\n const { metadata } = lookup\n const metadataRootKey = Binary.fromHex(metadata.storage.root.root_key)\n // On version 4-, the keys in the storage were in big-endian.\n // For version 5+, the keys in storage are in scale, which is little-endian.\n // https://use.ink/faq/migrating-from-ink-4-to-5#metadata-storage-keys-encoding-change\n // https://github.com/use-ink/ink/pull/2048\n const rootKey =\n Number(metadata.version) === 4\n ? Binary.fromBytes(metadataRootKey.asBytes().reverse())\n : metadataRootKey\n return {\n rootKey,\n decodeRoot: (rootStorage) => builder().dec(rootStorage.asBytes()),\n }\n}\n\nconst buildEvent = <E extends Event>(\n decoder: InkDynamicBuilder[\"buildEvent\"],\n): InkEventInterface<E> => {\n const decode: InkEventInterface<E>[\"decode\"] = (value) =>\n decoder().dec(value.data.asBytes()) as E\n\n return {\n decode,\n filter: (address, events = []) =>\n events\n .map((v) => (\"event\" in v ? v.event : v))\n .filter(\n (v: any) =>\n v.type === \"Contracts\" &&\n v.value.type === \"ContractEmitted\" &&\n v.value.value.contract === address,\n )\n .map((v: any) => {\n try {\n return decode(v.value.value)\n } catch (ex) {\n console.error(\n `Contract ${address} emitted an incompatible event`,\n v.value.value,\n )\n throw ex\n }\n }),\n }\n}\n"],"names":["getLookupCodecBuilder","Vector","Struct","Tuple","Option","Enum","Binary","Bytes","enhanceCodec","Variant","str","_void","compactNumber","u32","u8","v14Lookup","denormalizeLookup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/dynamic-builders.ts","../src/metadata-pjs-types.ts","../src/get-lookup.ts","../src/ink-client.ts"],"sourcesContent":["import { getLookupCodecBuilder } from \"@polkadot-api/metadata-builders\"\nimport { Binary, Variant } from \"@polkadot-api/substrate-bindings\"\nimport {\n _void,\n Bytes,\n Codec,\n CodecType,\n enhanceCodec,\n StringRecord,\n Struct,\n Tuple,\n} from \"scale-ts\"\nimport { InkMetadataLookup } from \"./get-lookup\"\nimport { MessageParamSpec, TypeSpec } from \"./metadata-types\"\n\nexport const getInkDynamicBuilder = (metadataLookup: InkMetadataLookup) => {\n const { metadata } = metadataLookup\n\n const buildDefinition = getLookupCodecBuilder(metadataLookup)\n\n const buildStorage = (name = \"\") => {\n const storageEntry = metadataLookup.storage[name]\n if (!storageEntry)\n throw new Error(`Storage entry ${name ? name : \"{root}\"} not found`)\n\n const keyCodec =\n storageEntry.key == null ? _void : buildDefinition(storageEntry.key)\n return {\n key: prependBytes(keyCodec, storageEntry.keyPrefix),\n value: buildDefinition(storageEntry.typeId),\n }\n }\n\n const buildCallable = (callable: {\n selector: string\n args: Array<MessageParamSpec>\n returnType: TypeSpec\n }) => {\n const argsCodec = Struct(\n Object.fromEntries(\n callable.args.map((param) => [\n param.label,\n buildDefinition(param.type.type),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n\n return {\n call: prependBytes(argsCodec, callable.selector),\n value: buildDefinition(callable.returnType.type),\n }\n }\n\n const buildConstructor = (label: string) => {\n const constr = metadata.spec.constructors.find((c) => c.label === label)\n if (!constr) {\n throw new Error(`Constructor ${label} not found`)\n }\n\n return buildCallable(constr)\n }\n\n const buildMessage = (label: string) => {\n const message = metadata.spec.messages.find((c) => c.label === label)\n if (!message) {\n throw new Error(`Message ${label} not found`)\n }\n\n return buildCallable(message)\n }\n\n const buildEvent = () =>\n Variant(\n Object.fromEntries(\n metadata.spec.events.map((evt) => [\n evt.label,\n Struct(\n Object.fromEntries(\n evt.args.map((param) => [\n param.label,\n buildDefinition(param.type.type),\n ]),\n ) as StringRecord<Codec<any>>,\n ),\n ]),\n ) as StringRecord<Codec<any>>,\n )\n\n return {\n buildConstructor,\n buildMessage,\n buildStorage,\n buildEvent,\n }\n}\n\nexport type InkDynamicBuilder = ReturnType<typeof getInkDynamicBuilder>\n\nconst prependBytes = <T>(codec: Codec<T>, hex: string) => {\n const bytes = Binary.fromHex(hex).asBytes()\n const wrappedCodec = Tuple(Bytes(bytes.length), codec)\n return enhanceCodec(\n wrappedCodec,\n (value: CodecType<typeof codec>): CodecType<typeof wrappedCodec> => [\n bytes,\n value,\n ],\n ([, value]) => value,\n )\n}\n","import { compactNumber } from \"@polkadot-api/substrate-bindings\"\nimport {\n _void,\n CodecType,\n str,\n Struct,\n u32,\n u8,\n Vector,\n Option,\n enhanceCodec,\n Enum,\n StringRecord,\n Codec,\n} from \"scale-ts\"\n\ntype PjsVariant<O extends StringRecord<Codec<any>>> = {\n [K in keyof O]: {\n [KK in K]: CodecType<O[K]>\n }\n}[keyof O]\nconst Variant = <O extends StringRecord<Codec<any>>>(inner: O) =>\n enhanceCodec(\n Enum(inner),\n (value: PjsVariant<O>) => {\n if (typeof value === \"string\") {\n return {\n tag: value,\n value: undefined,\n } as any\n }\n const [tag, val] = Object.entries(value)[0]\n\n return {\n tag: tag as keyof O,\n value: val,\n }\n },\n (value) => {\n return {\n [value.tag]: value.value,\n } as PjsVariant<O>\n },\n )\n\n// Seems like pjs can omit empty vectors\nconst PjsVector = <T>(inner: Codec<T>, size?: number) =>\n enhanceCodec(\n Vector(inner, size),\n (value: T[] | undefined) => value ?? [],\n (v) => v,\n )\n\nconst oStr = Option(str)\nconst docs = PjsVector(str)\n\nconst primitive = Variant({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\n\nconst fields = PjsVector(\n Struct({\n name: oStr,\n type: compactNumber,\n typeName: oStr,\n docs,\n }),\n)\n\nconst arr = Struct({\n len: u32,\n type: compactNumber,\n})\n\nconst bitSequence = Struct({\n bitStoreType: compactNumber,\n bitOrderType: compactNumber,\n})\n\nconst variants = PjsVector(\n Struct({\n name: str,\n fields,\n index: u8,\n docs,\n }),\n)\n\nconst def = Variant({\n composite: Struct({\n fields,\n }),\n variant: Struct({\n variants,\n }),\n sequence: Struct({\n type: compactNumber,\n }),\n array: arr,\n tuple: Vector(compactNumber),\n primitive,\n compact: compactNumber,\n bitSequence,\n})\n\nconst param = Struct({\n name: str,\n type: Option(compactNumber),\n})\nconst params = PjsVector(param)\n\nconst metadataEntry = Struct({\n id: compactNumber,\n path: docs,\n params,\n def,\n docs,\n})\n\nconst entry = enhanceCodec(\n metadataEntry,\n (value: {\n id: number\n type: {\n def: CodecType<typeof def>\n path: CodecType<typeof docs>\n params?: Array<{ name: string; type: number | undefined }>\n }\n }) => ({\n id: value.id,\n path: value.type.path,\n params: value.type.params ?? [],\n def: value.type.def,\n docs: [],\n }),\n (value) => ({\n id: value.id,\n type: {\n def: value.def,\n path: value.path,\n params: value.params,\n },\n }),\n)\n\nexport const pjsTypes = PjsVector(entry)\nexport type PjsTypes = CodecType<typeof pjsTypes>\n","import { denormalizeLookup, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { Binary, V14Lookup, v14Lookup } from \"@polkadot-api/substrate-bindings\"\nimport { InkMetadata, Layout } from \"./metadata-types\"\nimport { pjsTypes } from \"./metadata-pjs-types\"\n\nexport interface InkMetadataLookup {\n (id: number): LookupEntry\n metadata: InkMetadata\n storage: StorageLayout\n}\n\nexport interface StorageEntryPoint {\n keyPrefix: string\n key: number | null\n typeId: number\n}\n\nexport type StorageLayout = Record<string, StorageEntryPoint>\n\nexport const getInkLookup = (metadata: InkMetadata): InkMetadataLookup => {\n // We can reuse dynamic-builder's lookup if we encode and re-decode the type\n // into V14Lookup, because both v14 metadata lookup and ink types use scale-info\n const encoded = pjsTypes.enc(metadata.types)\n const decoded = v14Lookup.dec(encoded)\n\n // Signal the lookup the AccountId type\n const accountTypeId = metadata.spec.environment.accountId.type\n const accountIdEntry = decoded.find((e) => e.id === accountTypeId)\n if (accountIdEntry) {\n accountIdEntry.path = [\"AccountId32\"]\n }\n\n const storage = getStorageLayout(metadata, decoded)\n const getLookupEntryDef = denormalizeLookup(decoded)\n\n return Object.assign(getLookupEntryDef, {\n metadata,\n lookup: decoded,\n storage,\n })\n}\n\nfunction getStorageLayout(metadata: InkMetadata, lookup: V14Lookup) {\n const result: StorageLayout = {}\n\n const readLayout = (node: Layout, path: string[] = []): number | null => {\n function addType(def: V14Lookup[number][\"def\"]) {\n const id = lookup.length\n lookup[id] = {\n id,\n docs: [],\n def,\n params: [],\n path: [],\n }\n return id\n }\n\n if (\"root\" in node) {\n // On version 4-, the keys in the storage were in big-endian.\n // For version 5+, the keys in storage are in scale, which is little-endian.\n // https://use.ink/faq/migrating-from-ink-4-to-5#metadata-storage-keys-encoding-change\n // https://github.com/use-ink/ink/pull/2048\n const keyPrefix =\n Number(metadata.version) === 4\n ? Binary.fromBytes(\n Binary.fromHex(node.root.root_key).asBytes().reverse(),\n ).asHex()\n : node.root.root_key\n\n const typeId = readLayout(node.root.layout, path)!\n if (node.root.ty != null) {\n function resolveType(id: number, path: string[]) {\n const type = metadata.types[id].type\n\n // A vector internally uses a Mapping, but we have to get it\n const fields =\n \"composite\" in type.def\n ? new Map(\n (type.def.composite.fields ?? []).map((v) => [\n v.name,\n v.type,\n ]),\n )\n : null\n const params = new Map(\n (type.params ?? []).map((v) => [v.name, v.type]),\n )\n\n if (\n params.size === 2 &&\n params.has(\"V\") &&\n fields &&\n fields.size === 2 &&\n fields.has(\"len\") &&\n fields.has(\"elements\")\n ) {\n // Vectors have length and elements as different entry points\n resolveType(fields.get(\"len\")!, [...path, \"len\"])\n resolveType(fields.get(\"elements\")!, path)\n return\n } else if (params.size === 3 && params.has(\"K\") && params.has(\"V\")) {\n // Mapping\n result[path.join(\".\")] = {\n keyPrefix,\n key: params.get(\"K\")!,\n typeId: params.get(\"V\")!,\n }\n } else if (params.size === 2 && params.has(\"V\")) {\n // Lazy\n result[path.join(\".\")] = {\n keyPrefix,\n key: null,\n typeId: params.get(\"V\")!,\n }\n }\n }\n resolveType(node.root.ty, path)\n }\n\n if (!result[path.join(\".\")]) {\n result[path.join(\".\")] = {\n keyPrefix,\n key: null,\n typeId,\n }\n }\n\n // Anyone addressing this node will encounter an empty type\n return null\n }\n if (\"leaf\" in node) {\n return node.leaf.ty\n }\n if (\"hash\" in node) {\n throw new Error(\"HashLayout not implemented\")\n }\n if (\"array\" in node) {\n const inner = readLayout(node.array.layout, path)\n\n return inner == null\n ? null\n : addType({\n tag: \"array\",\n value: {\n len: node.array.len,\n type: inner,\n },\n })\n }\n if (\"struct\" in node) {\n const inner = node.struct.fields\n .map((field) => ({\n name: field.name,\n type: readLayout(field.layout, [...path, field.name])!,\n typeName: undefined,\n docs: [],\n }))\n .filter((field) => field.type != null)\n\n return addType({\n tag: \"composite\",\n value: inner,\n })\n }\n\n const inner = Object.values(node.enum.variants).map((variant, index) => ({\n name: variant.name,\n fields: variant.fields\n .map((field) => ({\n name: field.name,\n type: readLayout(field.layout, [...path, variant.name, field.name])!,\n typeName: undefined,\n docs: [],\n }))\n .filter((v) => v.type !== null),\n index,\n docs: [],\n }))\n\n return addType({\n tag: \"variant\",\n value: inner,\n })\n }\n readLayout(metadata.storage)\n\n return result\n}\n","import { Binary } from \"@polkadot-api/substrate-bindings\"\nimport { getInkDynamicBuilder, InkDynamicBuilder } from \"./dynamic-builders\"\nimport { getInkLookup } from \"./get-lookup\"\nimport {\n Event,\n InkCallableDescriptor,\n InkDescriptors,\n InkStorageDescriptor,\n} from \"./ink-descriptors\"\n\nexport type InkCallableInterface<T extends InkCallableDescriptor> = <\n L extends string & keyof T,\n>(\n label: L,\n) => {\n encode: {} extends T[L][\"message\"]\n ? (value?: T[L][\"message\"]) => Binary\n : (value: T[L][\"message\"]) => Binary\n decode: (value: { data: Binary }) => T[L][\"response\"]\n}\n\nexport type InkStorageInterface<S extends InkStorageDescriptor> =\n (\"\" extends keyof S\n ? () => {\n encode: S[\"\"][\"key\"] extends undefined\n ? (key?: undefined) => Binary\n : (key: S[\"\"][\"key\"]) => Binary\n decode: (data: Binary) => S[\"\"][\"value\"]\n }\n : unknown) &\n (<L extends string & keyof S>(\n label: L,\n ) => {\n encode: S[L][\"key\"] extends undefined\n ? (key?: undefined) => Binary\n : (key: S[L][\"key\"]) => Binary\n decode: (data: Binary) => S[L][\"value\"]\n })\n\nexport type GenericEvent =\n | {\n type: \"Contracts\"\n value:\n | {\n type: \"ContractEmitted\"\n value: {\n contract: string\n data: Binary\n }\n }\n | { type: string; value: unknown }\n }\n | { type: string; value: unknown }\nexport interface InkEventInterface<E> {\n decode: (value: { data: Binary }) => E\n filter: (\n address: string,\n events?: Array<GenericEvent | { event: GenericEvent }>,\n ) => E[]\n}\n\nexport interface InkClient<\n D extends InkDescriptors<\n InkStorageDescriptor,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n> {\n constructor: InkCallableInterface<D[\"__types\"][\"constructors\"]>\n message: InkCallableInterface<D[\"__types\"][\"messages\"]>\n storage: InkStorageInterface<D[\"__types\"][\"storage\"]>\n event: InkEventInterface<D[\"__types\"][\"event\"]>\n}\n\nexport const getInkClient = <\n D extends InkDescriptors<\n InkStorageDescriptor,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n>(\n inkContract: D,\n): InkClient<D> => {\n const lookup = getInkLookup(inkContract.metadata)\n const builder = getInkDynamicBuilder(lookup)\n\n return {\n constructor: buildCallable(builder.buildConstructor),\n message: buildCallable(builder.buildMessage),\n storage: buildStorage(builder.buildStorage),\n event: buildEvent(builder.buildEvent),\n }\n}\n\nconst buildCallable =\n <T extends InkCallableDescriptor>(\n builder:\n | InkDynamicBuilder[\"buildConstructor\"]\n | InkDynamicBuilder[\"buildMessage\"],\n ): InkCallableInterface<T> =>\n <L extends string & keyof T>(label: L) => {\n const codecs = builder(label)\n\n return {\n encode: (value?: T[L][\"message\"]) =>\n Binary.fromBytes(codecs.call.enc(value || {})),\n decode: (response) => codecs.value.dec(response.data.asBytes()),\n }\n }\n\nconst buildStorage =\n <S extends InkStorageDescriptor>(\n builder: InkDynamicBuilder[\"buildStorage\"],\n ): InkStorageInterface<S> =>\n <L extends string & keyof S>(label?: L) => {\n const codecs = builder(label)\n\n return {\n encode: (key?: S[L][\"key\"]) =>\n Binary.fromBytes(codecs.key.enc(key as any)),\n decode: (response: Binary) => codecs.value.dec(response.asBytes()),\n }\n }\n\nconst buildEvent = <E extends Event>(\n decoder: InkDynamicBuilder[\"buildEvent\"],\n): InkEventInterface<E> => {\n const decode: InkEventInterface<E>[\"decode\"] = (value) =>\n decoder().dec(value.data.asBytes()) as E\n\n return {\n decode,\n filter: (address, events = []) =>\n events\n .map((v) => (\"event\" in v ? v.event : v))\n .filter(\n (v: any) =>\n v.type === \"Contracts\" &&\n v.value.type === \"ContractEmitted\" &&\n v.value.value.contract === address,\n )\n .map((v: any) => {\n try {\n return decode(v.value.value)\n } catch (ex) {\n console.error(\n `Contract ${address} emitted an incompatible event`,\n v.value.value,\n )\n throw ex\n }\n }),\n }\n}\n"],"names":["getLookupCodecBuilder","_void","Struct","Variant","Binary","Tuple","Bytes","enhanceCodec","Enum","Vector","Option","str","compactNumber","u32","u8","v14Lookup","denormalizeLookup","resolveType","path","inner"],"mappings":";;;;;;AAea,MAAA,oBAAA,GAAuB,CAAC,cAAsC,KAAA;AACzE,EAAM,MAAA,EAAE,UAAa,GAAA,cAAA,CAAA;AAErB,EAAM,MAAA,eAAA,GAAkBA,uCAAsB,cAAc,CAAA,CAAA;AAE5D,EAAM,MAAA,YAAA,GAAe,CAAC,IAAA,GAAO,EAAO,KAAA;AAClC,IAAM,MAAA,YAAA,GAAe,cAAe,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAChD,IAAA,IAAI,CAAC,YAAA;AACH,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,cAAA,EAAiB,IAAO,GAAA,IAAA,GAAO,QAAQ,CAAY,UAAA,CAAA,CAAA,CAAA;AAErE,IAAA,MAAM,WACJ,YAAa,CAAA,GAAA,IAAO,OAAOC,aAAQ,GAAA,eAAA,CAAgB,aAAa,GAAG,CAAA,CAAA;AACrE,IAAO,OAAA;AAAA,MACL,GAAK,EAAA,YAAA,CAAa,QAAU,EAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MAClD,KAAA,EAAO,eAAgB,CAAA,YAAA,CAAa,MAAM,CAAA;AAAA,KAC5C,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,QAIjB,KAAA;AACJ,IAAA,MAAM,SAAY,GAAAC,cAAA;AAAA,MAChB,MAAO,CAAA,WAAA;AAAA,QACL,QAAS,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AAAA,UAC3B,KAAM,CAAA,KAAA;AAAA,UACN,eAAA,CAAgB,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,SAChC,CAAA;AAAA,OACH;AAAA,KACF,CAAA;AAEA,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,YAAA,CAAa,SAAW,EAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC/C,KAAO,EAAA,eAAA,CAAgB,QAAS,CAAA,UAAA,CAAW,IAAI,CAAA;AAAA,KACjD,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,KAAkB,KAAA;AAC1C,IAAM,MAAA,MAAA,GAAS,SAAS,IAAK,CAAA,YAAA,CAAa,KAAK,CAAC,CAAA,KAAM,CAAE,CAAA,KAAA,KAAU,KAAK,CAAA,CAAA;AACvE,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAe,YAAA,EAAA,KAAK,CAAY,UAAA,CAAA,CAAA,CAAA;AAAA,KAClD;AAEA,IAAA,OAAO,cAAc,MAAM,CAAA,CAAA;AAAA,GAC7B,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,KAAkB,KAAA;AACtC,IAAM,MAAA,OAAA,GAAU,SAAS,IAAK,CAAA,QAAA,CAAS,KAAK,CAAC,CAAA,KAAM,CAAE,CAAA,KAAA,KAAU,KAAK,CAAA,CAAA;AACpE,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAW,QAAA,EAAA,KAAK,CAAY,UAAA,CAAA,CAAA,CAAA;AAAA,KAC9C;AAEA,IAAA,OAAO,cAAc,OAAO,CAAA,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAA,MAAM,aAAa,MACjBC,yBAAA;AAAA,IACE,MAAO,CAAA,WAAA;AAAA,MACL,QAAS,CAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA;AAAA,QAChC,GAAI,CAAA,KAAA;AAAA,QACJD,cAAA;AAAA,UACE,MAAO,CAAA,WAAA;AAAA,YACL,GAAI,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AAAA,cACtB,KAAM,CAAA,KAAA;AAAA,cACN,eAAA,CAAgB,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,aAChC,CAAA;AAAA,WACH;AAAA,SACF;AAAA,OACD,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEF,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF,EAAA;AAIA,MAAM,YAAA,GAAe,CAAI,KAAA,EAAiB,GAAgB,KAAA;AACxD,EAAA,MAAM,KAAQ,GAAAE,wBAAA,CAAO,OAAQ,CAAA,GAAG,EAAE,OAAQ,EAAA,CAAA;AAC1C,EAAA,MAAM,eAAeC,aAAM,CAAAC,aAAA,CAAM,KAAM,CAAA,MAAM,GAAG,KAAK,CAAA,CAAA;AACrD,EAAO,OAAAC,oBAAA;AAAA,IACL,YAAA;AAAA,IACA,CAAC,KAAmE,KAAA;AAAA,MAClE,KAAA;AAAA,MACA,KAAA;AAAA,KACF;AAAA,IACA,CAAC,GAAG,KAAK,CAAM,KAAA,KAAA;AAAA,GACjB,CAAA;AACF,CAAA;;ACxFA,MAAM,OAAA,GAAU,CAAqC,KACnD,KAAAA,oBAAA;AAAA,EACEC,aAAK,KAAK,CAAA;AAAA,EACV,CAAC,KAAyB,KAAA;AACxB,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAO,OAAA;AAAA,QACL,GAAK,EAAA,KAAA;AAAA,QACL,KAAO,EAAA,KAAA,CAAA;AAAA,OACT,CAAA;AAAA,KACF;AACA,IAAM,MAAA,CAAC,KAAK,GAAG,CAAA,GAAI,OAAO,OAAQ,CAAA,KAAK,EAAE,CAAC,CAAA,CAAA;AAE1C,IAAO,OAAA;AAAA,MACL,GAAA;AAAA,MACA,KAAO,EAAA,GAAA;AAAA,KACT,CAAA;AAAA,GACF;AAAA,EACA,CAAC,KAAU,KAAA;AACT,IAAO,OAAA;AAAA,MACL,CAAC,KAAA,CAAM,GAAG,GAAG,KAAM,CAAA,KAAA;AAAA,KACrB,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAGF,MAAM,SAAA,GAAY,CAAI,KAAA,EAAiB,IACrC,KAAAD,oBAAA;AAAA,EACEE,cAAA,CAAO,OAAO,IAAI,CAAA;AAAA,EAClB,CAAC,KAA2B,KAAA,KAAA,IAAS,EAAC;AAAA,EACtC,CAAC,CAAM,KAAA,CAAA;AACT,CAAA,CAAA;AAEF,MAAM,IAAA,GAAOC,eAAOC,WAAG,CAAA,CAAA;AACvB,MAAM,IAAA,GAAO,UAAUA,WAAG,CAAA,CAAA;AAE1B,MAAM,YAAY,OAAQ,CAAA;AAAA,EACxB,IAAM,EAAAV,aAAA;AAAA,EACN,IAAM,EAAAA,aAAA;AAAA,EACN,GAAK,EAAAA,aAAA;AAAA,EACL,EAAI,EAAAA,aAAA;AAAA,EACJ,GAAK,EAAAA,aAAA;AAAA,EACL,GAAK,EAAAA,aAAA;AAAA,EACL,GAAK,EAAAA,aAAA;AAAA,EACL,IAAM,EAAAA,aAAA;AAAA,EACN,IAAM,EAAAA,aAAA;AAAA,EACN,EAAI,EAAAA,aAAA;AAAA,EACJ,GAAK,EAAAA,aAAA;AAAA,EACL,GAAK,EAAAA,aAAA;AAAA,EACL,GAAK,EAAAA,aAAA;AAAA,EACL,IAAM,EAAAA,aAAA;AAAA,EACN,IAAM,EAAAA,aAAA;AACR,CAAC,CAAA,CAAA;AAED,MAAM,MAAS,GAAA,SAAA;AAAA,EACbC,cAAO,CAAA;AAAA,IACL,IAAM,EAAA,IAAA;AAAA,IACN,IAAM,EAAAU,+BAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,IACV,IAAA;AAAA,GACD,CAAA;AACH,CAAA,CAAA;AAEA,MAAM,MAAMV,cAAO,CAAA;AAAA,EACjB,GAAK,EAAAW,WAAA;AAAA,EACL,IAAM,EAAAD,+BAAA;AACR,CAAC,CAAA,CAAA;AAED,MAAM,cAAcV,cAAO,CAAA;AAAA,EACzB,YAAc,EAAAU,+BAAA;AAAA,EACd,YAAc,EAAAA,+BAAA;AAChB,CAAC,CAAA,CAAA;AAED,MAAM,QAAW,GAAA,SAAA;AAAA,EACfV,cAAO,CAAA;AAAA,IACL,IAAM,EAAAS,WAAA;AAAA,IACN,MAAA;AAAA,IACA,KAAO,EAAAG,UAAA;AAAA,IACP,IAAA;AAAA,GACD,CAAA;AACH,CAAA,CAAA;AAEA,MAAM,MAAM,OAAQ,CAAA;AAAA,EAClB,WAAWZ,cAAO,CAAA;AAAA,IAChB,MAAA;AAAA,GACD,CAAA;AAAA,EACD,SAASA,cAAO,CAAA;AAAA,IACd,QAAA;AAAA,GACD,CAAA;AAAA,EACD,UAAUA,cAAO,CAAA;AAAA,IACf,IAAM,EAAAU,+BAAA;AAAA,GACP,CAAA;AAAA,EACD,KAAO,EAAA,GAAA;AAAA,EACP,KAAA,EAAOH,eAAOG,+BAAa,CAAA;AAAA,EAC3B,SAAA;AAAA,EACA,OAAS,EAAAA,+BAAA;AAAA,EACT,WAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,QAAQV,cAAO,CAAA;AAAA,EACnB,IAAM,EAAAS,WAAA;AAAA,EACN,IAAA,EAAMD,eAAOE,+BAAa,CAAA;AAC5B,CAAC,CAAA,CAAA;AACD,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA,CAAA;AAE9B,MAAM,gBAAgBV,cAAO,CAAA;AAAA,EAC3B,EAAI,EAAAU,+BAAA;AAAA,EACJ,IAAM,EAAA,IAAA;AAAA,EACN,MAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,KAAQ,GAAAL,oBAAA;AAAA,EACZ,aAAA;AAAA,EACA,CAAC,KAOM,MAAA;AAAA,IACL,IAAI,KAAM,CAAA,EAAA;AAAA,IACV,IAAA,EAAM,MAAM,IAAK,CAAA,IAAA;AAAA,IACjB,MAAQ,EAAA,KAAA,CAAM,IAAK,CAAA,MAAA,IAAU,EAAC;AAAA,IAC9B,GAAA,EAAK,MAAM,IAAK,CAAA,GAAA;AAAA,IAChB,MAAM,EAAC;AAAA,GACT,CAAA;AAAA,EACA,CAAC,KAAW,MAAA;AAAA,IACV,IAAI,KAAM,CAAA,EAAA;AAAA,IACV,IAAM,EAAA;AAAA,MACJ,KAAK,KAAM,CAAA,GAAA;AAAA,MACX,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,QAAQ,KAAM,CAAA,MAAA;AAAA,KAChB;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEa,MAAA,QAAA,GAAW,UAAU,KAAK,CAAA;;AC5I1B,MAAA,YAAA,GAAe,CAAC,QAA6C,KAAA;AAGxE,EAAA,MAAM,OAAU,GAAA,QAAA,CAAS,GAAI,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,OAAA,GAAUQ,2BAAU,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAGrC,EAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,IAAA,CAAA;AAC1D,EAAA,MAAM,iBAAiB,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,aAAa,CAAA,CAAA;AACjE,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAe,cAAA,CAAA,IAAA,GAAO,CAAC,aAAa,CAAA,CAAA;AAAA,GACtC;AAEA,EAAM,MAAA,OAAA,GAAU,gBAAiB,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAClD,EAAM,MAAA,iBAAA,GAAoBC,mCAAkB,OAAO,CAAA,CAAA;AAEnD,EAAO,OAAA,MAAA,CAAO,OAAO,iBAAmB,EAAA;AAAA,IACtC,QAAA;AAAA,IACA,MAAQ,EAAA,OAAA;AAAA,IACR,OAAA;AAAA,GACD,CAAA,CAAA;AACH,EAAA;AAEA,SAAS,gBAAA,CAAiB,UAAuB,MAAmB,EAAA;AAClE,EAAA,MAAM,SAAwB,EAAC,CAAA;AAE/B,EAAA,MAAM,UAAa,GAAA,CAAC,IAAc,EAAA,IAAA,GAAiB,EAAsB,KAAA;AACvE,IAAA,SAAS,QAAQ,GAA+B,EAAA;AAC9C,MAAA,MAAM,KAAK,MAAO,CAAA,MAAA,CAAA;AAClB,MAAA,MAAA,CAAO,EAAE,CAAI,GAAA;AAAA,QACX,EAAA;AAAA,QACA,MAAM,EAAC;AAAA,QACP,GAAA;AAAA,QACA,QAAQ,EAAC;AAAA,QACT,MAAM,EAAC;AAAA,OACT,CAAA;AACA,MAAO,OAAA,EAAA,CAAA;AAAA,KACT;AAEA,IAAA,IAAI,UAAU,IAAM,EAAA;AAKlB,MAAA,MAAM,YACJ,MAAO,CAAA,QAAA,CAAS,OAAO,CAAA,KAAM,IACzBZ,wBAAO,CAAA,SAAA;AAAA,QACLA,wBAAA,CAAO,QAAQ,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAE,CAAA,OAAA,GAAU,OAAQ,EAAA;AAAA,OACrD,CAAA,KAAA,EACF,GAAA,IAAA,CAAK,IAAK,CAAA,QAAA,CAAA;AAEhB,MAAA,MAAM,MAAS,GAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAK,QAAQ,IAAI,CAAA,CAAA;AAChD,MAAI,IAAA,IAAA,CAAK,IAAK,CAAA,EAAA,IAAM,IAAM,EAAA;AACxB,QAASa,IAAAA,YAAAA,GAAT,SAAqB,EAAA,EAAYC,KAAgB,EAAA;AAC/C,UAAA,MAAM,IAAO,GAAA,QAAA,CAAS,KAAM,CAAA,EAAE,CAAE,CAAA,IAAA,CAAA;AAGhC,UAAA,MAAM,MACJ,GAAA,WAAA,IAAe,IAAK,CAAA,GAAA,GAChB,IAAI,GAAA;AAAA,YACD,CAAA,IAAA,CAAK,IAAI,SAAU,CAAA,MAAA,IAAU,EAAI,EAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AAAA,cAC3C,CAAE,CAAA,IAAA;AAAA,cACF,CAAE,CAAA,IAAA;AAAA,aACH,CAAA;AAAA,WAEH,GAAA,IAAA,CAAA;AACN,UAAA,MAAM,SAAS,IAAI,GAAA;AAAA,YAAA,CAChB,IAAK,CAAA,MAAA,IAAU,EAAC,EAAG,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,CAAE,CAAA,IAAA,EAAM,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,WACjD,CAAA;AAEA,UAAA,IACE,OAAO,IAAS,KAAA,CAAA,IAChB,OAAO,GAAI,CAAA,GAAG,KACd,MACA,IAAA,MAAA,CAAO,IAAS,KAAA,CAAA,IAChB,OAAO,GAAI,CAAA,KAAK,KAChB,MAAO,CAAA,GAAA,CAAI,UAAU,CACrB,EAAA;AAEA,YAAAD,YAAAA,CAAY,OAAO,GAAI,CAAA,KAAK,GAAI,CAAC,GAAGC,KAAM,EAAA,KAAK,CAAC,CAAA,CAAA;AAChD,YAAAD,YAAY,CAAA,MAAA,CAAO,GAAI,CAAA,UAAU,GAAIC,KAAI,CAAA,CAAA;AACzC,YAAA,OAAA;AAAA,WACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,CAAK,IAAA,MAAA,CAAO,GAAI,CAAA,GAAG,CAAK,IAAA,MAAA,CAAO,GAAI,CAAA,GAAG,CAAG,EAAA;AAElE,YAAA,MAAA,CAAOA,KAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAI,GAAA;AAAA,cACvB,SAAA;AAAA,cACA,GAAA,EAAK,MAAO,CAAA,GAAA,CAAI,GAAG,CAAA;AAAA,cACnB,MAAA,EAAQ,MAAO,CAAA,GAAA,CAAI,GAAG,CAAA;AAAA,aACxB,CAAA;AAAA,qBACS,MAAO,CAAA,IAAA,KAAS,KAAK,MAAO,CAAA,GAAA,CAAI,GAAG,CAAG,EAAA;AAE/C,YAAA,MAAA,CAAOA,KAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAI,GAAA;AAAA,cACvB,SAAA;AAAA,cACA,GAAK,EAAA,IAAA;AAAA,cACL,MAAA,EAAQ,MAAO,CAAA,GAAA,CAAI,GAAG,CAAA;AAAA,aACxB,CAAA;AAAA,WACF;AAAA,SACF,CAAA;AACA,QAAAD,YAAY,CAAA,IAAA,CAAK,IAAK,CAAA,EAAA,EAAI,IAAI,CAAA,CAAA;AAAA,OAChC;AAEA,MAAA,IAAI,CAAC,MAAO,CAAA,IAAA,CAAK,IAAK,CAAA,GAAG,CAAC,CAAG,EAAA;AAC3B,QAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAI,GAAA;AAAA,UACvB,SAAA;AAAA,UACA,GAAK,EAAA,IAAA;AAAA,UACL,MAAA;AAAA,SACF,CAAA;AAAA,OACF;AAGA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AACA,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAA,OAAO,KAAK,IAAK,CAAA,EAAA,CAAA;AAAA,KACnB;AACA,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAM,MAAA,IAAI,MAAM,4BAA4B,CAAA,CAAA;AAAA,KAC9C;AACA,IAAA,IAAI,WAAW,IAAM,EAAA;AACnB,MAAA,MAAME,MAAQ,GAAA,UAAA,CAAW,IAAK,CAAA,KAAA,CAAM,QAAQ,IAAI,CAAA,CAAA;AAEhD,MAAOA,OAAAA,MAAAA,IAAS,IACZ,GAAA,IAAA,GACA,OAAQ,CAAA;AAAA,QACN,GAAK,EAAA,OAAA;AAAA,QACL,KAAO,EAAA;AAAA,UACL,GAAA,EAAK,KAAK,KAAM,CAAA,GAAA;AAAA,UAChB,IAAMA,EAAAA,MAAAA;AAAA,SACR;AAAA,OACD,CAAA,CAAA;AAAA,KACP;AACA,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAMA,SAAQ,IAAK,CAAA,MAAA,CAAO,MACvB,CAAA,GAAA,CAAI,CAAC,KAAW,MAAA;AAAA,QACf,MAAM,KAAM,CAAA,IAAA;AAAA,QACZ,IAAA,EAAM,WAAW,KAAM,CAAA,MAAA,EAAQ,CAAC,GAAG,IAAA,EAAM,KAAM,CAAA,IAAI,CAAC,CAAA;AAAA,QACpD,QAAU,EAAA,KAAA,CAAA;AAAA,QACV,MAAM,EAAC;AAAA,QACP,CACD,CAAA,MAAA,CAAO,CAAC,KAAU,KAAA,KAAA,CAAM,QAAQ,IAAI,CAAA,CAAA;AAEvC,MAAA,OAAO,OAAQ,CAAA;AAAA,QACb,GAAK,EAAA,WAAA;AAAA,QACL,KAAOA,EAAAA,MAAAA;AAAA,OACR,CAAA,CAAA;AAAA,KACH;AAEA,IAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAE,CAAA,GAAA,CAAI,CAAC,OAAA,EAAS,KAAW,MAAA;AAAA,MACvE,MAAM,OAAQ,CAAA,IAAA;AAAA,MACd,MAAQ,EAAA,OAAA,CAAQ,MACb,CAAA,GAAA,CAAI,CAAC,KAAW,MAAA;AAAA,QACf,MAAM,KAAM,CAAA,IAAA;AAAA,QACZ,IAAA,EAAM,UAAW,CAAA,KAAA,CAAM,MAAQ,EAAA,CAAC,GAAG,IAAA,EAAM,OAAQ,CAAA,IAAA,EAAM,KAAM,CAAA,IAAI,CAAC,CAAA;AAAA,QAClE,QAAU,EAAA,KAAA,CAAA;AAAA,QACV,MAAM,EAAC;AAAA,QACP,CACD,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,IAAI,CAAA;AAAA,MAChC,KAAA;AAAA,MACA,MAAM,EAAC;AAAA,KACP,CAAA,CAAA,CAAA;AAEF,IAAA,OAAO,OAAQ,CAAA;AAAA,MACb,GAAK,EAAA,SAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH,CAAA;AACA,EAAA,UAAA,CAAW,SAAS,OAAO,CAAA,CAAA;AAE3B,EAAO,OAAA,MAAA,CAAA;AACT;;ACjHa,MAAA,YAAA,GAAe,CAQ1B,WACiB,KAAA;AACjB,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AAChD,EAAM,MAAA,OAAA,GAAU,qBAAqB,MAAM,CAAA,CAAA;AAE3C,EAAO,OAAA;AAAA,IACL,WAAA,EAAa,aAAc,CAAA,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IACnD,OAAA,EAAS,aAAc,CAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,IAC3C,OAAA,EAAS,YAAa,CAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,IAC1C,KAAA,EAAO,UAAW,CAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,GACtC,CAAA;AACF,EAAA;AAEA,MAAM,aACJ,GAAA,CACE,OAIF,KAAA,CAA6B,KAAa,KAAA;AACxC,EAAM,MAAA,MAAA,GAAS,QAAQ,KAAK,CAAA,CAAA;AAE5B,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KACPf,wBAAO,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,KAAA,IAAS,EAAE,CAAC,CAAA;AAAA,IAC/C,MAAA,EAAQ,CAAC,QAAa,KAAA,MAAA,CAAO,MAAM,GAAI,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,CAAA;AAAA,GAChE,CAAA;AACF,CAAA,CAAA;AAEF,MAAM,YACJ,GAAA,CACE,OAEF,KAAA,CAA6B,KAAc,KAAA;AACzC,EAAM,MAAA,MAAA,GAAS,QAAQ,KAAK,CAAA,CAAA;AAE5B,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,CAAC,GACP,KAAAA,wBAAA,CAAO,UAAU,MAAO,CAAA,GAAA,CAAI,GAAI,CAAA,GAAU,CAAC,CAAA;AAAA,IAC7C,MAAA,EAAQ,CAAC,QAAqB,KAAA,MAAA,CAAO,MAAM,GAAI,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA,GACnE,CAAA;AACF,CAAA,CAAA;AAEF,MAAM,UAAA,GAAa,CACjB,OACyB,KAAA;AACzB,EAAM,MAAA,MAAA,GAAyC,CAAC,KAC9C,KAAA,OAAA,GAAU,GAAI,CAAA,KAAA,CAAM,IAAK,CAAA,OAAA,EAAS,CAAA,CAAA;AAEpC,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,MAAQ,EAAA,CAAC,OAAS,EAAA,MAAA,GAAS,EACzB,KAAA,MAAA,CACG,GAAI,CAAA,CAAC,MAAO,OAAW,IAAA,CAAA,GAAI,CAAE,CAAA,KAAA,GAAQ,CAAE,CACvC,CAAA,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAE,CAAA,IAAA,KAAS,WACX,IAAA,CAAA,CAAE,KAAM,CAAA,IAAA,KAAS,iBACjB,IAAA,CAAA,CAAE,KAAM,CAAA,KAAA,CAAM,QAAa,KAAA,OAAA;AAAA,KAC/B,CACC,GAAI,CAAA,CAAC,CAAW,KAAA;AACf,MAAI,IAAA;AACF,QAAO,OAAA,MAAA,CAAO,CAAE,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,eACpB,EAAI,EAAA;AACX,QAAQ,OAAA,CAAA,KAAA;AAAA,UACN,YAAY,OAAO,CAAA,8BAAA,CAAA;AAAA,UACnB,EAAE,KAAM,CAAA,KAAA;AAAA,SACV,CAAA;AACA,QAAM,MAAA,EAAA,CAAA;AAAA,OACR;AAAA,KACD,CAAA;AAAA,GACP,CAAA;AACF,CAAA;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/ink-contracts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"scale-ts": "^1.6.0",
|
|
39
|
-
"@polkadot-api/metadata-builders": "0.
|
|
40
|
-
"@polkadot-api/
|
|
41
|
-
"@polkadot-api/
|
|
39
|
+
"@polkadot-api/metadata-builders": "0.9.0",
|
|
40
|
+
"@polkadot-api/utils": "0.1.2",
|
|
41
|
+
"@polkadot-api/substrate-bindings": "0.9.2"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build-core": "tsc --noEmit && rollup -c ../../rollup.config.js",
|