@polkadot-api/ink-contracts 0.6.4-canary.ca9c4a7 → 0.6.4-rc.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/ink-client.js.map +1 -1
- package/package.json +4 -4
package/dist/ink-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ink-client.js","sources":["../src/ink-client.ts"],"sourcesContent":["import { HexString } from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { getInkDynamicBuilder, InkDynamicBuilder } from \"./dynamic-builders\"\nimport { getInkLookup, InkMetadataLookup } from \"./get-lookup\"\nimport {\n Event,\n InkCallableDescriptor,\n InkDescriptors,\n InkStorageDescriptor,\n} from \"./ink-descriptors\"\nimport { ConstructorSpec, EventSpecV5, MessageSpec } from \"./metadata-types\"\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\"]) => Uint8Array\n : (value: T[L][\"message\"]) => Uint8Array\n decode: (value: { data: Uint8Array }) => T[L][\"response\"]\n attributes: {\n payable: boolean\n default: boolean\n mutates: boolean\n }\n}\n\nexport type InkStorageInterface<S extends InkStorageDescriptor> =\n (\"\" extends keyof S\n ? () => {\n encode: S[\"\"][\"key\"] extends undefined\n ? (key?: undefined) => Uint8Array\n : (key: S[\"\"][\"key\"]) => Uint8Array\n decode: (data: Uint8Array) => 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) => Uint8Array\n : (key: S[L][\"key\"]) => Uint8Array\n decode: (data: Uint8Array) => 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: Uint8Array\n }\n }\n | { type: string; value: unknown }\n }\n | { type: string; value: unknown }\nexport interface InkEventInterface<E> {\n decode: (value: { data: Uint8Array }, signatureTopic?: string) => E\n filter: (\n address: string,\n events?: Array<{ event: GenericEvent; topics: HexString[] }>,\n ) => E[]\n}\n\ntype HasDefault<T> = \"default\" extends keyof T\n ? T[\"default\"] extends true\n ? true\n : false\n : false\ntype GetDefault<M> = keyof {\n [K in keyof M as HasDefault<M[K]> extends true ? K : never]: true\n}\n\n// T can be the default message or `never`.\n// Typescript doesn't like doing `extends never` (it works for the \"false\" case, but for the other it will always give back never)\n// One way of running around it is by checking whether an empty object extends an object with that key.\ntype WrapDefault<T extends string> = {} extends {\n [K in T]: K\n}\n ? string | undefined\n : T\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 defaultConstructor: WrapDefault<GetDefault<D[\"__types\"][\"constructors\"]>>\n message: InkCallableInterface<D[\"__types\"][\"messages\"]>\n defaultMessage: WrapDefault<GetDefault<D[\"__types\"][\"messages\"]>>\n storage: InkStorageInterface<D[\"__types\"][\"storage\"]>\n event: InkEventInterface<D[\"__types\"][\"event\"]>\n}\n\nconst createInkClient = <\n D extends InkDescriptors<\n InkStorageDescriptor,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n>(\n inkContract: D,\n): InkClient<D> => {\n if (!inkContract.metadata) {\n throw new Error(\"Ink client needs the contract metadata\")\n }\n\n const lookup = getInkLookup(inkContract.metadata)\n const builder = getInkDynamicBuilder(lookup)\n\n const constructorCodec = buildCallable(builder.buildConstructor)\n const messageCodec = buildCallable(builder.buildMessage)\n\n const findConstructor = (label: string) => {\n const result = lookup.metadata.spec.constructors.find(\n (c) => c.label === label,\n )\n if (!result) {\n throw new Error(`Constructor ${label} not found`)\n }\n return result\n }\n const findMessage = (label: string) => {\n const result = lookup.metadata.spec.messages.find((c) => c.label === label)\n if (!result) {\n throw new Error(`Message ${label} not found`)\n }\n return result\n }\n\n const defaultConstructor: any = lookup.metadata.spec.constructors.find(\n (c) => c.default,\n )?.label\n const defaultMessage: any = lookup.metadata.spec.messages.find(\n (c) => c.default,\n )?.label\n\n return {\n constructor: (label) => ({\n attributes: getAttributes(findConstructor(label)),\n ...constructorCodec(label),\n }),\n defaultConstructor,\n message: (label) => ({\n attributes: getAttributes(findMessage(label)),\n ...messageCodec(label),\n }),\n defaultMessage,\n storage: buildStorage(builder.buildStorage),\n event:\n Number(lookup.metadata.version) === 4\n ? buildEventV4(builder.buildEvents)\n : buildEventV5(lookup, builder.buildEvent),\n }\n}\n\nconst inkClientCache = new WeakMap<\n InkDescriptors<any, any, any, any>,\n InkClient<any>\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 cached = inkClientCache.get(inkContract)\n if (cached) return cached\n\n const client = createInkClient(inkContract)\n inkClientCache.set(inkContract, client)\n return client\n}\n\nconst getAttributes = (spec: ConstructorSpec | MessageSpec) => ({\n payable: spec.payable,\n default: spec.default,\n mutates: \"mutates\" in spec ? spec.mutates : true,\n})\n\nconst buildCallable =\n <T extends InkCallableDescriptor>(\n builder:\n | InkDynamicBuilder[\"buildConstructor\"]\n | InkDynamicBuilder[\"buildMessage\"],\n ) =>\n <L extends string & keyof T>(label: L) => {\n const codecs = builder(label)\n\n return {\n encode: (value?: T[L][\"message\"]) => codecs.call.enc(value || {}),\n decode: (response: { data: Uint8Array }) =>\n codecs.value.dec(response.data),\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\"]) => codecs.key.enc(key as any),\n decode: (response: Uint8Array) => codecs.value.dec(response),\n }\n }\n\nconst buildEventV4 = <E extends Event>(\n eventsDecoder: InkDynamicBuilder[\"buildEvents\"],\n): InkEventInterface<E> => {\n const decode: InkEventInterface<E>[\"decode\"] = (value) => {\n return eventsDecoder().dec(value.data) as E\n }\n const filter: InkEventInterface<E>[\"filter\"] = (address, events = []) => {\n const contractEvents = 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 return contractEvents.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 return { decode, filter }\n}\n\nconst buildEventV5 = <E extends Event>(\n lookup: InkMetadataLookup,\n eventDecoder: InkDynamicBuilder[\"buildEvent\"],\n): InkEventInterface<E> => {\n const metadataEventTopics = new Set(\n lookup.metadata.spec.events\n .map((evt) => (evt as EventSpecV5).signature_topic)\n .filter((v) => v != null),\n )\n const hasAnonymousEvents = lookup.metadata.spec.events.some(\n (evt) => (evt as EventSpecV5).signature_topic == null,\n )\n\n const decode: InkEventInterface<E>[\"decode\"] = (value, signatureTopic) => {\n if (signatureTopic != null) {\n if (!metadataEventTopics.has(signatureTopic)) {\n throw new Error(`Event with signature topic ${value} not found`)\n }\n return eventDecoder(signatureTopic)!.dec(value.data) as E\n }\n if (!hasAnonymousEvents) {\n throw new Error(\"Event signature topic required\")\n }\n return eventDecoder(undefined)!.dec(value.data) as E\n }\n const filter: InkEventInterface<E>[\"filter\"] = (address, events = []) => {\n const addrEq = (a: string | Uint8Array) =>\n (typeof a === \"string\" ? a : toHex(a)) === address\n\n const contractEvents = events.filter(\n (v) =>\n (v.event.type === \"Contracts\" || v.event.type === \"Revive\") &&\n (v.event.value as any).type === \"ContractEmitted\" &&\n addrEq((v.event.value as any).value.contract),\n )\n\n return contractEvents\n .map((v) => {\n const eventTopics = [\n ...v.topics,\n ...(((v.event.value as any)?.value?.topics ?? []) as HexString[]),\n ]\n const suitableTopic = eventTopics.find((topic) =>\n metadataEventTopics.has(topic),\n )\n try {\n return decode((v.event.value as any).value, suitableTopic)\n } catch (ex) {\n return null\n }\n })\n .filter((v) => v !== null)\n }\n\n return {\n decode,\n filter,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ink-client.js","sources":["../src/ink-client.ts"],"sourcesContent":["import { HexString } from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { getInkDynamicBuilder, InkDynamicBuilder } from \"./dynamic-builders\"\nimport { getInkLookup, InkMetadataLookup } from \"./get-lookup\"\nimport {\n Event,\n InkCallableDescriptor,\n InkDescriptors,\n InkStorageDescriptor,\n} from \"./ink-descriptors\"\nimport { ConstructorSpec, EventSpecV5, MessageSpec } from \"./metadata-types\"\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\"]) => Uint8Array\n : (value: T[L][\"message\"]) => Uint8Array\n decode: (value: { data: Uint8Array }) => T[L][\"response\"]\n attributes: {\n payable: boolean\n default: boolean\n mutates: boolean\n }\n}\n\nexport type InkStorageInterface<S extends InkStorageDescriptor> =\n (\"\" extends keyof S\n ? () => {\n encode: S[\"\"][\"key\"] extends undefined\n ? (key?: undefined) => Uint8Array\n : (key: S[\"\"][\"key\"]) => Uint8Array\n decode: (data: Uint8Array) => 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) => Uint8Array\n : (key: S[L][\"key\"]) => Uint8Array\n decode: (data: Uint8Array) => 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: Uint8Array\n }\n }\n | { type: string; value: unknown }\n }\n | { type: string; value: unknown }\nexport interface InkEventInterface<E> {\n decode: (value: { data: Uint8Array }, signatureTopic?: string) => E\n filter: (\n address: string,\n events?: Array<{ event: GenericEvent; topics: HexString[] }>,\n ) => E[]\n}\n\ntype HasDefault<T> = \"default\" extends keyof T\n ? T[\"default\"] extends true\n ? true\n : false\n : false\ntype GetDefault<M> = keyof {\n [K in keyof M as HasDefault<M[K]> extends true ? K : never]: true\n}\n\n// T can be the default message or `never`.\n// Typescript doesn't like doing `extends never` (it works for the \"false\" case, but for the other it will always give back never)\n// One way of running around it is by checking whether an empty object extends an object with that key.\ntype WrapDefault<T extends string> = {} extends {\n [K in T]: K\n}\n ? string | undefined\n : T\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 defaultConstructor: WrapDefault<GetDefault<D[\"__types\"][\"constructors\"]>>\n message: InkCallableInterface<D[\"__types\"][\"messages\"]>\n defaultMessage: WrapDefault<GetDefault<D[\"__types\"][\"messages\"]>>\n storage: InkStorageInterface<D[\"__types\"][\"storage\"]>\n event: InkEventInterface<D[\"__types\"][\"event\"]>\n}\n\nconst createInkClient = <\n D extends InkDescriptors<\n InkStorageDescriptor,\n InkCallableDescriptor,\n InkCallableDescriptor,\n Event\n >,\n>(\n inkContract: D,\n): InkClient<D> => {\n if (!inkContract.metadata) {\n throw new Error(\"Ink client needs the contract metadata\")\n }\n\n const lookup = getInkLookup(inkContract.metadata)\n const builder = getInkDynamicBuilder(lookup)\n\n const constructorCodec = buildCallable(builder.buildConstructor)\n const messageCodec = buildCallable(builder.buildMessage)\n\n const findConstructor = (label: string) => {\n const result = lookup.metadata.spec.constructors.find(\n (c) => c.label === label,\n )\n if (!result) {\n throw new Error(`Constructor ${label} not found`)\n }\n return result\n }\n const findMessage = (label: string) => {\n const result = lookup.metadata.spec.messages.find((c) => c.label === label)\n if (!result) {\n throw new Error(`Message ${label} not found`)\n }\n return result\n }\n\n const defaultConstructor: any = lookup.metadata.spec.constructors.find(\n (c) => c.default,\n )?.label\n const defaultMessage: any = lookup.metadata.spec.messages.find(\n (c) => c.default,\n )?.label\n\n return {\n constructor: (label) => ({\n attributes: getAttributes(findConstructor(label)),\n ...constructorCodec(label),\n }),\n defaultConstructor,\n message: (label) => ({\n attributes: getAttributes(findMessage(label)),\n ...messageCodec(label),\n }),\n defaultMessage,\n storage: buildStorage(builder.buildStorage),\n event:\n Number(lookup.metadata.version) === 4\n ? buildEventV4(builder.buildEvents)\n : buildEventV5(lookup, builder.buildEvent),\n }\n}\n\nconst inkClientCache = new WeakMap<\n InkDescriptors<any, any, any, any>,\n InkClient<any>\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 cached = inkClientCache.get(inkContract)\n if (cached) return cached\n\n const client = createInkClient(inkContract)\n inkClientCache.set(inkContract, client)\n return client\n}\n\nconst getAttributes = (spec: ConstructorSpec | MessageSpec) => ({\n payable: spec.payable,\n default: spec.default,\n mutates: \"mutates\" in spec ? spec.mutates : true,\n})\n\nconst buildCallable =\n <T extends InkCallableDescriptor>(\n builder:\n InkDynamicBuilder[\"buildConstructor\"] | InkDynamicBuilder[\"buildMessage\"],\n ) =>\n <L extends string & keyof T>(label: L) => {\n const codecs = builder(label)\n\n return {\n encode: (value?: T[L][\"message\"]) => codecs.call.enc(value || {}),\n decode: (response: { data: Uint8Array }) =>\n codecs.value.dec(response.data),\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\"]) => codecs.key.enc(key as any),\n decode: (response: Uint8Array) => codecs.value.dec(response),\n }\n }\n\nconst buildEventV4 = <E extends Event>(\n eventsDecoder: InkDynamicBuilder[\"buildEvents\"],\n): InkEventInterface<E> => {\n const decode: InkEventInterface<E>[\"decode\"] = (value) => {\n return eventsDecoder().dec(value.data) as E\n }\n const filter: InkEventInterface<E>[\"filter\"] = (address, events = []) => {\n const contractEvents = 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 return contractEvents.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 return { decode, filter }\n}\n\nconst buildEventV5 = <E extends Event>(\n lookup: InkMetadataLookup,\n eventDecoder: InkDynamicBuilder[\"buildEvent\"],\n): InkEventInterface<E> => {\n const metadataEventTopics = new Set(\n lookup.metadata.spec.events\n .map((evt) => (evt as EventSpecV5).signature_topic)\n .filter((v) => v != null),\n )\n const hasAnonymousEvents = lookup.metadata.spec.events.some(\n (evt) => (evt as EventSpecV5).signature_topic == null,\n )\n\n const decode: InkEventInterface<E>[\"decode\"] = (value, signatureTopic) => {\n if (signatureTopic != null) {\n if (!metadataEventTopics.has(signatureTopic)) {\n throw new Error(`Event with signature topic ${value} not found`)\n }\n return eventDecoder(signatureTopic)!.dec(value.data) as E\n }\n if (!hasAnonymousEvents) {\n throw new Error(\"Event signature topic required\")\n }\n return eventDecoder(undefined)!.dec(value.data) as E\n }\n const filter: InkEventInterface<E>[\"filter\"] = (address, events = []) => {\n const addrEq = (a: string | Uint8Array) =>\n (typeof a === \"string\" ? a : toHex(a)) === address\n\n const contractEvents = events.filter(\n (v) =>\n (v.event.type === \"Contracts\" || v.event.type === \"Revive\") &&\n (v.event.value as any).type === \"ContractEmitted\" &&\n addrEq((v.event.value as any).value.contract),\n )\n\n return contractEvents\n .map((v) => {\n const eventTopics = [\n ...v.topics,\n ...(((v.event.value as any)?.value?.topics ?? []) as HexString[]),\n ]\n const suitableTopic = eventTopics.find((topic) =>\n metadataEventTopics.has(topic),\n )\n try {\n return decode((v.event.value as any).value, suitableTopic)\n } catch (ex) {\n return null\n }\n })\n .filter((v) => v !== null)\n }\n\n return {\n decode,\n filter,\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/ink-contracts",
|
|
3
|
-
"version": "0.6.4-
|
|
3
|
+
"version": "0.6.4-rc.1",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"dist"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@polkadot-api/metadata-builders": "0.14.4-
|
|
29
|
-
"@polkadot-api/substrate-bindings": "0.
|
|
30
|
-
"@polkadot-api/utils": "0.4.
|
|
28
|
+
"@polkadot-api/metadata-builders": "0.14.4-rc.1",
|
|
29
|
+
"@polkadot-api/substrate-bindings": "0.21.0-rc.1",
|
|
30
|
+
"@polkadot-api/utils": "0.4.0"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build-core": "tsc --noEmit && rollup -c ../../rollup.config.js",
|