@xyo-network/crypto-contract-function-read-plugin 2.77.17 → 2.77.19

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.
Files changed (69) hide show
  1. package/dist/browser/CryptoContractDiviner.d.cts +11 -9
  2. package/dist/browser/CryptoContractDiviner.d.cts.map +1 -1
  3. package/dist/browser/CryptoContractDiviner.d.mts +11 -9
  4. package/dist/browser/CryptoContractDiviner.d.mts.map +1 -1
  5. package/dist/browser/CryptoContractDiviner.d.ts +11 -9
  6. package/dist/browser/CryptoContractDiviner.d.ts.map +1 -1
  7. package/dist/browser/Witness.d.cts.map +1 -1
  8. package/dist/browser/Witness.d.mts.map +1 -1
  9. package/dist/browser/Witness.d.ts.map +1 -1
  10. package/dist/browser/index.cjs +39 -58
  11. package/dist/browser/index.cjs.map +1 -1
  12. package/dist/browser/index.d.cts +0 -2
  13. package/dist/browser/index.d.cts.map +1 -1
  14. package/dist/browser/index.d.mts +0 -2
  15. package/dist/browser/index.d.mts.map +1 -1
  16. package/dist/browser/index.d.ts +0 -2
  17. package/dist/browser/index.d.ts.map +1 -1
  18. package/dist/browser/index.js +39 -58
  19. package/dist/browser/index.js.map +1 -1
  20. package/dist/node/CryptoContractDiviner.d.cts +11 -9
  21. package/dist/node/CryptoContractDiviner.d.cts.map +1 -1
  22. package/dist/node/CryptoContractDiviner.d.mts +11 -9
  23. package/dist/node/CryptoContractDiviner.d.mts.map +1 -1
  24. package/dist/node/CryptoContractDiviner.d.ts +11 -9
  25. package/dist/node/CryptoContractDiviner.d.ts.map +1 -1
  26. package/dist/node/Witness.d.cts.map +1 -1
  27. package/dist/node/Witness.d.mts.map +1 -1
  28. package/dist/node/Witness.d.ts.map +1 -1
  29. package/dist/node/index.d.cts +0 -2
  30. package/dist/node/index.d.cts.map +1 -1
  31. package/dist/node/index.d.mts +0 -2
  32. package/dist/node/index.d.mts.map +1 -1
  33. package/dist/node/index.d.ts +0 -2
  34. package/dist/node/index.d.ts.map +1 -1
  35. package/dist/node/index.js +40 -65
  36. package/dist/node/index.js.map +1 -1
  37. package/dist/node/index.mjs +39 -58
  38. package/dist/node/index.mjs.map +1 -1
  39. package/package.json +14 -14
  40. package/src/CryptoContractDiviner.ts +26 -28
  41. package/src/Erc721Sentinel.json +88 -6
  42. package/src/Witness.ts +31 -22
  43. package/src/index.ts +0 -2
  44. package/dist/browser/Erc1155Diviner.d.cts +0 -17
  45. package/dist/browser/Erc1155Diviner.d.cts.map +0 -1
  46. package/dist/browser/Erc1155Diviner.d.mts +0 -17
  47. package/dist/browser/Erc1155Diviner.d.mts.map +0 -1
  48. package/dist/browser/Erc1155Diviner.d.ts +0 -17
  49. package/dist/browser/Erc1155Diviner.d.ts.map +0 -1
  50. package/dist/browser/Erc721Diviner.d.cts +0 -19
  51. package/dist/browser/Erc721Diviner.d.cts.map +0 -1
  52. package/dist/browser/Erc721Diviner.d.mts +0 -19
  53. package/dist/browser/Erc721Diviner.d.mts.map +0 -1
  54. package/dist/browser/Erc721Diviner.d.ts +0 -19
  55. package/dist/browser/Erc721Diviner.d.ts.map +0 -1
  56. package/dist/node/Erc1155Diviner.d.cts +0 -17
  57. package/dist/node/Erc1155Diviner.d.cts.map +0 -1
  58. package/dist/node/Erc1155Diviner.d.mts +0 -17
  59. package/dist/node/Erc1155Diviner.d.mts.map +0 -1
  60. package/dist/node/Erc1155Diviner.d.ts +0 -17
  61. package/dist/node/Erc1155Diviner.d.ts.map +0 -1
  62. package/dist/node/Erc721Diviner.d.cts +0 -19
  63. package/dist/node/Erc721Diviner.d.cts.map +0 -1
  64. package/dist/node/Erc721Diviner.d.mts +0 -19
  65. package/dist/node/Erc721Diviner.d.mts.map +0 -1
  66. package/dist/node/Erc721Diviner.d.ts +0 -19
  67. package/dist/node/Erc721Diviner.d.ts.map +0 -1
  68. package/src/Erc1155Diviner.ts +0 -37
  69. package/src/Erc721Diviner.ts +0 -41
@@ -18,26 +18,35 @@ var CryptoContractFunctionReadWitness = class extends AbstractWitness {
18
18
  static configSchemas = [CryptoContractFunctionReadWitnessConfigSchema];
19
19
  async observeHandler(inPayloads = []) {
20
20
  await this.started("throw");
21
- const observations = await Promise.all(
22
- inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {
23
- const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload };
24
- const { address, functionName, params } = fullCallPayload;
25
- const validatedAddress = assertEx(address, "Missing address");
26
- const contract = this.params.factory(validatedAddress);
27
- const func = assertEx(contract.callStatic[assertEx(functionName, "missing functionName")], `functionName [${functionName}] not found`);
28
- const rawResult = await func(...params ?? []);
29
- const result = BigNumber.isBigNumber(rawResult) ? { type: "BigNumber", value: rawResult.toHexString() } : { value: rawResult };
30
- const observation = {
31
- address: validatedAddress,
32
- call: await PayloadHasher.hashAsync(fullCallPayload),
33
- chainId: (await contract.provider.getNetwork()).chainId,
34
- result,
35
- schema: CryptoContractFunctionCallResultSchema
36
- };
37
- return observation;
38
- })
39
- );
40
- return observations.flat();
21
+ try {
22
+ const observations = await Promise.all(
23
+ inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {
24
+ const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload };
25
+ const { address, functionName, params } = fullCallPayload;
26
+ const validatedAddress = assertEx(address, "Missing address");
27
+ const validatedFunctionName = assertEx(functionName, "Missing functionName");
28
+ const contract = this.params.factory(validatedAddress);
29
+ const func = assertEx(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`);
30
+ const rawResult = await func(...params ?? []);
31
+ const result = BigNumber.isBigNumber(rawResult) ? { type: "BigNumber", value: rawResult.toHexString() } : { value: rawResult };
32
+ const observation = {
33
+ address: validatedAddress,
34
+ call: await PayloadHasher.hashAsync(fullCallPayload),
35
+ chainId: (await contract.provider.getNetwork()).chainId,
36
+ functionName: validatedFunctionName,
37
+ params,
38
+ result,
39
+ schema: CryptoContractFunctionCallResultSchema
40
+ };
41
+ return observation;
42
+ })
43
+ );
44
+ return observations.flat();
45
+ } catch (ex) {
46
+ const error = ex;
47
+ console.log(`Error [${this.config.name}]: ${error.message}`);
48
+ }
49
+ return [];
41
50
  }
42
51
  };
43
52
 
@@ -90,7 +99,8 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner
90
99
  contractInfoRequiredFields(callResults) {
91
100
  return {
92
101
  address: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "address"), "Mismatched address"),
93
- chainId: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "chainId"), "Mismatched chainId")
102
+ chainId: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "chainId"), "Mismatched chainId"),
103
+ schema: ContractInfoSchema
94
104
  };
95
105
  }
96
106
  async divineHandler(inPayloads = []) {
@@ -106,43 +116,20 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner
106
116
  const result = await Promise.all(
107
117
  addresses.map(async (address) => {
108
118
  const foundCallResults = callResults.filter((callResult) => callResult.address === address);
109
- return {
110
- ...await this.reduceResults(address, foundCallResults),
119
+ const info = {
120
+ ...{ results: await this.reduceResults(foundCallResults) },
111
121
  ...this.contractInfoRequiredFields(foundCallResults)
112
122
  };
123
+ return info;
113
124
  })
114
125
  );
115
126
  return result;
116
127
  }
117
- };
118
-
119
- // src/Erc721Diviner.ts
120
- var CryptoContractErc721DivinerConfigSchema = "network.xyo.crypto.contract.erc721.info.diviner.config";
121
- var Erc721ContractInfoSchema = "network.xyo.crypto.contract.erc721.info";
122
- var CryptoContractErc721Diviner = class _CryptoContractErc721Diviner extends CryptoContractDiviner {
123
- static configSchemas = [CryptoContractErc721DivinerConfigSchema];
124
- async reduceResults(address, callResults) {
125
- const name = await _CryptoContractErc721Diviner.findCallResult(address, "name", [], callResults);
126
- const symbol = await _CryptoContractErc721Diviner.findCallResult(address, "symbol", [], callResults);
127
- return {
128
- name,
129
- schema: Erc721ContractInfoSchema,
130
- symbol
131
- };
132
- }
133
- };
134
-
135
- // src/Erc1155Diviner.ts
136
- var CryptoContractErc1155DivinerConfigSchema = "network.xyo.crypto.contract.erc1155.info.diviner.config";
137
- var Erc1155ContractInfoSchema = "network.xyo.crypto.contract.erc1155.info";
138
- var CryptoContractErc1155Diviner = class _CryptoContractErc1155Diviner extends CryptoContractDiviner {
139
- static configSchemas = [CryptoContractErc1155DivinerConfigSchema];
140
- async reduceResults(address, callResults) {
141
- const uri = await _CryptoContractErc1155Diviner.findCallResult(address, "uri", [], callResults);
142
- return {
143
- schema: Erc1155ContractInfoSchema,
144
- uri
145
- };
128
+ reduceResults(callResults) {
129
+ return callResults.reduce((prev, callResult) => {
130
+ prev[callResult.functionName] = callResult.result;
131
+ return prev;
132
+ }, {});
146
133
  }
147
134
  };
148
135
 
@@ -152,14 +139,8 @@ export {
152
139
  ContractInfoSchema,
153
140
  CryptoContractDiviner,
154
141
  CryptoContractDivinerConfigSchema,
155
- CryptoContractErc1155Diviner,
156
- CryptoContractErc1155DivinerConfigSchema,
157
- CryptoContractErc721Diviner,
158
- CryptoContractErc721DivinerConfigSchema,
159
142
  CryptoContractFunctionReadWitness,
160
143
  CryptoContractFunctionReadWitnessPlugin,
161
- Erc1155ContractInfoSchema,
162
- Erc721ContractInfoSchema,
163
144
  src_default as default
164
145
  };
165
146
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Witness.ts","../../src/CryptoContractDiviner.ts","../../src/Erc721Diviner.ts","../../src/Erc1155Diviner.ts","../../src/index.ts"],"sourcesContent":["import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { BigNumber, Contract } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams<TContract extends Contract> = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n factory: (address: string) => TContract\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TContract extends Contract = Contract,\n TParams extends CryptoContractFunctionReadWitnessParams<TContract> = CryptoContractFunctionReadWitnessParams<TContract>,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall<keyof TContract['callStatic']>, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n protected override async observeHandler(\n inPayloads: CryptoContractFunctionCall<keyof TContract['callStatic']>[] = [],\n ): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {\n const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload }\n const { address, functionName, params } = fullCallPayload\n const validatedAddress = assertEx(address, 'Missing address')\n const contract = this.params.factory(validatedAddress)\n const func = assertEx(contract.callStatic[assertEx(functionName, 'missing functionName')], `functionName [${functionName}] not found`)\n const rawResult = await func(...(params ?? []))\n const result: CryptoContractFunctionCallResult['result'] = BigNumber.isBigNumber(rawResult)\n ? { type: 'BigNumber', value: rawResult.toHexString() }\n : { value: rawResult }\n const observation: CryptoContractFunctionCallResult = {\n address: validatedAddress,\n call: await PayloadHasher.hashAsync(fullCallPayload),\n chainId: (await contract.provider.getNetwork()).chainId,\n result,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }),\n )\n\n return observations.flat()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'\nexport type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema\n\nexport type CryptoContractDivinerConfig = DivinerConfig\nexport type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>\n\nexport const ContractInfoSchema = 'network.xyo.crypto.contract.info'\nexport type ContractInfoSchema = typeof ContractInfoSchema\n\nexport type OmittedContractInfo<TFields extends object | Payload | null = null, TSchema extends string | null = null> = Omit<\n ContractInfo<TFields, TSchema extends null ? (TFields extends Payload ? TFields['schema'] : never) : TSchema>,\n 'address' | 'chainId'\n>\n\nexport type ContractInfo<TFields extends object | null = null, TSchema extends string = ContractInfoSchema> = Payload<\n TFields extends null\n ? object\n : TFields & {\n address: string\n chainId: string\n },\n TSchema\n>\n\nexport abstract class CryptoContractDiviner<\n TContractInfo extends Payload<Omit<ContractInfo, 'schema'>> = ContractInfo,\n TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n\n protected static async findCallResult<TResult = string>(\n address: string,\n functionName: string,\n params: unknown[],\n payloads: CryptoContractFunctionCallResult[],\n ): Promise<TResult | undefined> {\n const callHash = await this.generateCallHash(address, functionName, params)\n const foundPayload = payloads.find((payload) => payload.call === callHash)\n return foundPayload?.result.value as TResult | undefined\n }\n\n protected static async generateCallHash(address: string, functionName: string, params: unknown[]) {\n const callPayload: CryptoContractFunctionCall = {\n address,\n functionName,\n params,\n schema: CryptoContractFunctionCallSchema,\n }\n return await PayloadHasher.hashAsync(callPayload)\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T) {\n const expectedValue = objs.at(0)?.[field] as R\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): Promisable<Omit<ContractInfo, 'schema'>> {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<TContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n return {\n ...(await this.reduceResults(address, foundCallResults)),\n ...this.contractInfoRequiredFields(foundCallResults),\n } as TContractInfo\n }),\n )\n\n return result\n }\n\n protected abstract reduceResults(\n address: string,\n callResults: CryptoContractFunctionCallResult[],\n ): Promisable<Omit<TContractInfo, 'address' | 'chainId'>>\n}\n","import { CryptoContractFunctionCallResult } from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\n\nimport { ContractInfo, CryptoContractDiviner, OmittedContractInfo } from './CryptoContractDiviner'\n\nexport const CryptoContractErc721DivinerConfigSchema = 'network.xyo.crypto.contract.erc721.info.diviner.config'\nexport type CryptoContractErc721DivinerConfigSchema = typeof CryptoContractErc721DivinerConfigSchema\n\nexport type CryptoContractErc721DivinerConfig = DivinerConfig\nexport type CryptoContractErc721DivinerParams = DivinerParams<CryptoContractErc721DivinerConfig>\n\nexport const Erc721ContractInfoSchema = 'network.xyo.crypto.contract.erc721.info'\nexport type Erc721ContractInfoSchema = typeof Erc721ContractInfoSchema\n\nexport type Erc721ContractInfo = ContractInfo<\n {\n name?: string\n symbol?: string\n totalSupply?: string\n },\n Erc721ContractInfoSchema\n>\n\nexport class CryptoContractErc721Diviner<\n TParams extends CryptoContractErc721DivinerParams = CryptoContractErc721DivinerParams,\n> extends CryptoContractDiviner<Erc721ContractInfo, TParams> {\n static override configSchemas = [CryptoContractErc721DivinerConfigSchema]\n\n protected override async reduceResults(\n address: string,\n callResults: CryptoContractFunctionCallResult[],\n ): Promise<OmittedContractInfo<Erc721ContractInfo>> {\n const name = await CryptoContractErc721Diviner.findCallResult(address, 'name', [], callResults)\n const symbol = await CryptoContractErc721Diviner.findCallResult(address, 'symbol', [], callResults)\n return {\n name,\n schema: Erc721ContractInfoSchema,\n symbol,\n }\n }\n}\n","import { CryptoContractFunctionCallResult } from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\n\nimport { ContractInfo, CryptoContractDiviner, OmittedContractInfo } from './CryptoContractDiviner'\n\nexport const CryptoContractErc1155DivinerConfigSchema = 'network.xyo.crypto.contract.erc1155.info.diviner.config'\nexport type CryptoContractErc1155DivinerConfigSchema = typeof CryptoContractErc1155DivinerConfigSchema\n\nexport type CryptoContractErc1155DivinerConfig = DivinerConfig\nexport type CryptoContractErc1155DivinerParams = DivinerParams<CryptoContractErc1155DivinerConfig>\n\nexport const Erc1155ContractInfoSchema = 'network.xyo.crypto.contract.erc1155.info'\nexport type Erc1155ContractInfoSchema = typeof Erc1155ContractInfoSchema\n\nexport type Erc1155ContractInfo = ContractInfo<\n {\n uri?: string\n },\n Erc1155ContractInfoSchema\n>\n\nexport class CryptoContractErc1155Diviner<\n TParams extends CryptoContractErc1155DivinerParams = CryptoContractErc1155DivinerParams,\n> extends CryptoContractDiviner<Erc1155ContractInfo, TParams> {\n static override configSchemas = [CryptoContractErc1155DivinerConfigSchema]\n\n protected override async reduceResults(\n address: string,\n callResults: CryptoContractFunctionCallResult[],\n ): Promise<OmittedContractInfo<Erc1155ContractInfo>> {\n const uri = await CryptoContractErc1155Diviner.findCallResult(address, 'uri', [], callResults)\n return {\n schema: Erc1155ContractInfoSchema,\n uri,\n }\n }\n}\n","import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './CryptoContractDiviner'\nexport * from './Erc721Diviner'\nexport * from './Erc1155Diviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n"],"mappings":"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","names":["assertEx","CryptoContractFunctionCallResultSchema","CryptoContractFunctionCallSchema","PayloadHasher","isPayloadOfSchemaType","result"]}
1
+ {"version":3,"sources":["../../src/Plugin.ts","../../src/Witness.ts","../../src/CryptoContractDiviner.ts","../../src/index.ts"],"sourcesContent":["import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { BigNumber, Contract } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams<TContract extends Contract> = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n factory: (address: string) => TContract\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TContract extends Contract = Contract,\n TParams extends CryptoContractFunctionReadWitnessParams<TContract> = CryptoContractFunctionReadWitnessParams<TContract>,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall<keyof TContract['callStatic']>, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n protected override async observeHandler(\n inPayloads: CryptoContractFunctionCall<keyof TContract['callStatic']>[] = [],\n ): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {\n const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload }\n const { address, functionName, params } = fullCallPayload\n const validatedAddress = assertEx(address, 'Missing address')\n const validatedFunctionName = assertEx(functionName, 'Missing functionName')\n const contract = this.params.factory(validatedAddress)\n const func = assertEx(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`)\n const rawResult = await func(...(params ?? []))\n const result: CryptoContractFunctionCallResult['result'] = BigNumber.isBigNumber(rawResult)\n ? { type: 'BigNumber', value: rawResult.toHexString() }\n : { value: rawResult }\n const observation: CryptoContractFunctionCallResult = {\n address: validatedAddress,\n call: await PayloadHasher.hashAsync(fullCallPayload),\n chainId: (await contract.provider.getNetwork()).chainId,\n functionName: validatedFunctionName,\n params,\n result,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n }\n\n return []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n ContractFunctionResult,\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'\nexport type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema\n\nexport type CryptoContractDivinerConfig = DivinerConfig<{\n schema: CryptoContractDivinerConfigSchema\n}>\nexport type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>\n\nexport const ContractInfoSchema = 'network.xyo.crypto.contract.info'\nexport type ContractInfoSchema = typeof ContractInfoSchema\n\nexport type ContractInfo = Payload<\n {\n address: string\n chainId: string\n results?: Record<string, ContractFunctionResult>\n },\n ContractInfoSchema\n>\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n\n protected static async findCallResult<TResult = string>(\n address: string,\n functionName: string,\n params: unknown[],\n payloads: CryptoContractFunctionCallResult[],\n ): Promise<TResult | undefined> {\n const callHash = await this.generateCallHash(address, functionName, params)\n const foundPayload = payloads.find((payload) => payload.call === callHash)\n return foundPayload?.result.value as TResult | undefined\n }\n\n protected static async generateCallHash(address: string, functionName: string, params: unknown[]) {\n const callPayload: CryptoContractFunctionCall = {\n address,\n functionName,\n params,\n schema: CryptoContractFunctionCallSchema,\n }\n return await PayloadHasher.hashAsync(callPayload)\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, ContractFunctionResult>>((prev, callResult) => {\n prev[callResult.functionName] = callResult.result\n return prev\n }, {})\n }\n}\n","import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './CryptoContractDiviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n"],"mappings":"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","names":["assertEx","CryptoContractFunctionCallResultSchema","CryptoContractFunctionCallSchema","PayloadHasher","isPayloadOfSchemaType","result"]}
package/package.json CHANGED
@@ -12,26 +12,26 @@
12
12
  "dependencies": {
13
13
  "@xylabs/assert": "^2.13.3",
14
14
  "@xylabs/promise": "^2.13.3",
15
- "@xyo-network/abstract-diviner": "~2.77.17",
16
- "@xyo-network/abstract-witness": "~2.77.17",
17
- "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.77.17",
18
- "@xyo-network/crypto-nft-payload-plugin": "~2.77.17",
19
- "@xyo-network/diviner-model": "~2.77.17",
20
- "@xyo-network/hash": "~2.77.17",
21
- "@xyo-network/module-model": "~2.77.17",
22
- "@xyo-network/payload-model": "~2.77.17",
23
- "@xyo-network/payloadset-plugin": "~2.77.17",
24
- "@xyo-network/witness-model": "~2.77.17"
15
+ "@xyo-network/abstract-diviner": "~2.77.19",
16
+ "@xyo-network/abstract-witness": "~2.77.19",
17
+ "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.77.19",
18
+ "@xyo-network/crypto-nft-payload-plugin": "~2.77.19",
19
+ "@xyo-network/diviner-model": "~2.77.19",
20
+ "@xyo-network/hash": "~2.77.19",
21
+ "@xyo-network/module-model": "~2.77.19",
22
+ "@xyo-network/payload-model": "~2.77.19",
23
+ "@xyo-network/payloadset-plugin": "~2.77.19",
24
+ "@xyo-network/witness-model": "~2.77.19"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@ethersproject/providers": "^5.7.2",
28
28
  "@xylabs/jest-helpers": "^2.13.3",
29
29
  "@xylabs/ts-scripts-yarn3": "^3.1.13",
30
30
  "@xylabs/tsconfig": "^3.1.13",
31
- "@xyo-network/account": "~2.77.17",
32
- "@xyo-network/manifest": "~2.77.17",
31
+ "@xyo-network/account": "~2.77.19",
32
+ "@xyo-network/manifest": "~2.77.19",
33
33
  "@xyo-network/open-zeppelin-typechain": "^2.2.11",
34
- "@xyo-network/sentinel-model": "~2.77.17",
34
+ "@xyo-network/sentinel-model": "~2.77.19",
35
35
  "ethers": "^5.7.2",
36
36
  "jest": "^29.7.0",
37
37
  "typescript": "^5.2.2"
@@ -76,5 +76,5 @@
76
76
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
77
77
  },
78
78
  "sideEffects": false,
79
- "version": "2.77.17"
79
+ "version": "2.77.19"
80
80
  }
@@ -2,6 +2,7 @@ import { assertEx } from '@xylabs/assert'
2
2
  import { Promisable } from '@xylabs/promise'
3
3
  import { AbstractDiviner } from '@xyo-network/abstract-diviner'
4
4
  import {
5
+ ContractFunctionResult,
5
6
  CryptoContractFunctionCall,
6
7
  CryptoContractFunctionCallResult,
7
8
  CryptoContractFunctionCallResultSchema,
@@ -16,31 +17,24 @@ export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPa
16
17
  export const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'
17
18
  export type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema
18
19
 
19
- export type CryptoContractDivinerConfig = DivinerConfig
20
+ export type CryptoContractDivinerConfig = DivinerConfig<{
21
+ schema: CryptoContractDivinerConfigSchema
22
+ }>
20
23
  export type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>
21
24
 
22
25
  export const ContractInfoSchema = 'network.xyo.crypto.contract.info'
23
26
  export type ContractInfoSchema = typeof ContractInfoSchema
24
27
 
25
- export type OmittedContractInfo<TFields extends object | Payload | null = null, TSchema extends string | null = null> = Omit<
26
- ContractInfo<TFields, TSchema extends null ? (TFields extends Payload ? TFields['schema'] : never) : TSchema>,
27
- 'address' | 'chainId'
28
+ export type ContractInfo = Payload<
29
+ {
30
+ address: string
31
+ chainId: string
32
+ results?: Record<string, ContractFunctionResult>
33
+ },
34
+ ContractInfoSchema
28
35
  >
29
36
 
30
- export type ContractInfo<TFields extends object | null = null, TSchema extends string = ContractInfoSchema> = Payload<
31
- TFields extends null
32
- ? object
33
- : TFields & {
34
- address: string
35
- chainId: string
36
- },
37
- TSchema
38
- >
39
-
40
- export abstract class CryptoContractDiviner<
41
- TContractInfo extends Payload<Omit<ContractInfo, 'schema'>> = ContractInfo,
42
- TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams,
43
- > extends AbstractDiviner<TParams> {
37
+ export class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {
44
38
  static override configSchemas = [CryptoContractDivinerConfigSchema]
45
39
 
46
40
  protected static async findCallResult<TResult = string>(
@@ -64,7 +58,7 @@ export abstract class CryptoContractDiviner<
64
58
  return await PayloadHasher.hashAsync(callPayload)
65
59
  }
66
60
 
67
- protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T) {
61
+ protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {
68
62
  const expectedValue = objs.at(0)?.[field] as R
69
63
  const didNotMatch = objs.reduce((prev, obj) => {
70
64
  return prev || obj[field] !== expectedValue
@@ -72,14 +66,15 @@ export abstract class CryptoContractDiviner<
72
66
  return didNotMatch ? undefined : expectedValue
73
67
  }
74
68
 
75
- protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): Promisable<Omit<ContractInfo, 'schema'>> {
69
+ protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): ContractInfo {
76
70
  return {
77
71
  address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),
78
72
  chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),
73
+ schema: ContractInfoSchema,
79
74
  }
80
75
  }
81
76
 
82
- protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<TContractInfo[]> {
77
+ protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {
83
78
  const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))
84
79
  const addresses = Object.keys(
85
80
  callResults.reduce<Record<string, boolean>>((prev, result) => {
@@ -92,18 +87,21 @@ export abstract class CryptoContractDiviner<
92
87
  const result = await Promise.all(
93
88
  addresses.map(async (address) => {
94
89
  const foundCallResults = callResults.filter((callResult) => callResult.address === address)
95
- return {
96
- ...(await this.reduceResults(address, foundCallResults)),
90
+ const info: ContractInfo = {
91
+ ...{ results: await this.reduceResults(foundCallResults) },
97
92
  ...this.contractInfoRequiredFields(foundCallResults),
98
- } as TContractInfo
93
+ }
94
+ return info
99
95
  }),
100
96
  )
101
97
 
102
98
  return result
103
99
  }
104
100
 
105
- protected abstract reduceResults(
106
- address: string,
107
- callResults: CryptoContractFunctionCallResult[],
108
- ): Promisable<Omit<TContractInfo, 'address' | 'chainId'>>
101
+ protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {
102
+ return callResults.reduce<Record<string, ContractFunctionResult>>((prev, callResult) => {
103
+ prev[callResult.functionName] = callResult.result
104
+ return prev
105
+ }, {})
106
+ }
109
107
  }
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "config": {
6
6
  "accountPath": "m/44'/60'/1'/0'/0'",
7
- "name": "Erc721Info",
7
+ "name": "NftInfo",
8
8
  "schema": "network.xyo.node.config"
9
9
  },
10
10
  "modules": {
@@ -42,12 +42,40 @@
42
42
  {
43
43
  "config": {
44
44
  "accountPath": "m/44'/60'/1'/1'/2'",
45
+ "call": {
46
+ "functionName": "tokenURI"
47
+ },
48
+ "labels": {
49
+ "network.xyo.crypto.contract.interface": "Erc721"
50
+ },
51
+ "language": "javascript",
52
+ "name": "Erc721TokenURIWitness",
53
+ "schema": "network.xyo.crypto.contract.function.read.config"
54
+ }
55
+ },
56
+ {
57
+ "config": {
58
+ "accountPath": "m/44'/60'/1'/1'/3'",
59
+ "call": {
60
+ "functionName": "ownerOf"
61
+ },
62
+ "labels": {
63
+ "network.xyo.crypto.contract.interface": "Erc721"
64
+ },
65
+ "language": "javascript",
66
+ "name": "Erc721OwnerOfWitness",
67
+ "schema": "network.xyo.crypto.contract.function.read.config"
68
+ }
69
+ },
70
+ {
71
+ "config": {
72
+ "accountPath": "m/44'/60'/1'/1'/4'",
45
73
  "call": {
46
74
  "functionName": "totalSupply",
47
75
  "params": []
48
76
  },
49
77
  "labels": {
50
- "network.xyo.crypto.contract.interface": "Erc721"
78
+ "network.xyo.crypto.contract.interface": "Erc721Enumerable"
51
79
  },
52
80
  "language": "javascript",
53
81
  "name": "Erc721TotalSupplyWitness",
@@ -56,7 +84,21 @@
56
84
  },
57
85
  {
58
86
  "config": {
59
- "accountPath": "m/44'/60'/1'/1'/3'",
87
+ "accountPath": "m/44'/60'/1'/1'/5'",
88
+ "call": {
89
+ "functionName": "tokenByIndex"
90
+ },
91
+ "labels": {
92
+ "network.xyo.crypto.contract.interface": "Erc721Enumerable"
93
+ },
94
+ "language": "javascript",
95
+ "name": "Erc721TokenByIndexWitness",
96
+ "schema": "network.xyo.crypto.contract.function.read.config"
97
+ }
98
+ },
99
+ {
100
+ "config": {
101
+ "accountPath": "m/44'/60'/1'/1'/8'",
60
102
  "call": {
61
103
  "functionName": "uri",
62
104
  "params": []
@@ -74,7 +116,7 @@
74
116
  "accountPath": "m/44'/60'/1'/2'/0'",
75
117
  "language": "javascript",
76
118
  "name": "Erc721ContractInfoDiviner",
77
- "schema": "network.xyo.crypto.contract.erc721.info.diviner.config"
119
+ "schema": "network.xyo.crypto.contract.diviner.config"
78
120
  }
79
121
  },
80
122
  {
@@ -82,14 +124,14 @@
82
124
  "accountPath": "m/44'/60'/1'/2'/1'",
83
125
  "language": "javascript",
84
126
  "name": "Erc1155ContractInfoDiviner",
85
- "schema": "network.xyo.crypto.contract.erc1155.info.diviner.config"
127
+ "schema": "network.xyo.crypto.contract.diviner.config"
86
128
  }
87
129
  },
88
130
  {
89
131
  "config": {
90
132
  "accountPath": "m/44'/60'/1'/3'/0'",
91
133
  "language": "javascript",
92
- "name": "Erc721InfoSentinel",
134
+ "name": "NftInfoSentinel",
93
135
  "schema": "network.xyo.sentinel.config",
94
136
  "synchronous": "true",
95
137
  "tasks": [
@@ -125,6 +167,46 @@
125
167
  }
126
168
  ]
127
169
  }
170
+ },
171
+ {
172
+ "config": {
173
+ "accountPath": "m/44'/60'/1'/3'/1'",
174
+ "language": "javascript",
175
+ "name": "NftTokenInfoSentinel",
176
+ "schema": "network.xyo.sentinel.config",
177
+ "synchronous": "true",
178
+ "tasks": [
179
+ {
180
+ "input": true,
181
+ "module": "Erc721NameWitness"
182
+ },
183
+ {
184
+ "input": true,
185
+ "module": "Erc721SymbolWitness"
186
+ },
187
+ {
188
+ "input": true,
189
+ "module": "Erc721TotalSupplyWitness"
190
+ },
191
+ {
192
+ "input": true,
193
+ "module": "Erc1155UriWitness"
194
+ },
195
+ {
196
+ "input": [
197
+ "Erc721TokenURIWitness",
198
+ "Erc721OwnerOfWitness"
199
+ ],
200
+ "module": "Erc721TokenContractInfoDiviner"
201
+ },
202
+ {
203
+ "input": [
204
+ "Erc1155UriWitness"
205
+ ],
206
+ "module": "Erc1155TokenContractInfoDiviner"
207
+ }
208
+ ]
209
+ }
128
210
  }
129
211
  ]
130
212
  }
package/src/Witness.ts CHANGED
@@ -31,28 +31,37 @@ export class CryptoContractFunctionReadWitness<
31
31
  inPayloads: CryptoContractFunctionCall<keyof TContract['callStatic']>[] = [],
32
32
  ): Promise<CryptoContractFunctionCallResult[]> {
33
33
  await this.started('throw')
34
- const observations = await Promise.all(
35
- inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {
36
- const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload }
37
- const { address, functionName, params } = fullCallPayload
38
- const validatedAddress = assertEx(address, 'Missing address')
39
- const contract = this.params.factory(validatedAddress)
40
- const func = assertEx(contract.callStatic[assertEx(functionName, 'missing functionName')], `functionName [${functionName}] not found`)
41
- const rawResult = await func(...(params ?? []))
42
- const result: CryptoContractFunctionCallResult['result'] = BigNumber.isBigNumber(rawResult)
43
- ? { type: 'BigNumber', value: rawResult.toHexString() }
44
- : { value: rawResult }
45
- const observation: CryptoContractFunctionCallResult = {
46
- address: validatedAddress,
47
- call: await PayloadHasher.hashAsync(fullCallPayload),
48
- chainId: (await contract.provider.getNetwork()).chainId,
49
- result,
50
- schema: CryptoContractFunctionCallResultSchema,
51
- }
52
- return observation
53
- }),
54
- )
34
+ try {
35
+ const observations = await Promise.all(
36
+ inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {
37
+ const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload }
38
+ const { address, functionName, params } = fullCallPayload
39
+ const validatedAddress = assertEx(address, 'Missing address')
40
+ const validatedFunctionName = assertEx(functionName, 'Missing functionName')
41
+ const contract = this.params.factory(validatedAddress)
42
+ const func = assertEx(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`)
43
+ const rawResult = await func(...(params ?? []))
44
+ const result: CryptoContractFunctionCallResult['result'] = BigNumber.isBigNumber(rawResult)
45
+ ? { type: 'BigNumber', value: rawResult.toHexString() }
46
+ : { value: rawResult }
47
+ const observation: CryptoContractFunctionCallResult = {
48
+ address: validatedAddress,
49
+ call: await PayloadHasher.hashAsync(fullCallPayload),
50
+ chainId: (await contract.provider.getNetwork()).chainId,
51
+ functionName: validatedFunctionName,
52
+ params,
53
+ result,
54
+ schema: CryptoContractFunctionCallResultSchema,
55
+ }
56
+ return observation
57
+ }),
58
+ )
59
+ return observations.flat()
60
+ } catch (ex) {
61
+ const error = ex as Error
62
+ console.log(`Error [${this.config.name}]: ${error.message}`)
63
+ }
55
64
 
56
- return observations.flat()
65
+ return []
57
66
  }
58
67
  }
package/src/index.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'
2
2
 
3
3
  export * from './CryptoContractDiviner'
4
- export * from './Erc721Diviner'
5
- export * from './Erc1155Diviner'
6
4
  export * from './Witness'
7
5
 
8
6
  export { CryptoContractFunctionReadWitnessPlugin }
@@ -1,17 +0,0 @@
1
- import { CryptoContractFunctionCallResult } from '@xyo-network/crypto-contract-function-read-payload-plugin';
2
- import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
3
- import { ContractInfo, CryptoContractDiviner, OmittedContractInfo } from './CryptoContractDiviner';
4
- export declare const CryptoContractErc1155DivinerConfigSchema = "network.xyo.crypto.contract.erc1155.info.diviner.config";
5
- export type CryptoContractErc1155DivinerConfigSchema = typeof CryptoContractErc1155DivinerConfigSchema;
6
- export type CryptoContractErc1155DivinerConfig = DivinerConfig;
7
- export type CryptoContractErc1155DivinerParams = DivinerParams<CryptoContractErc1155DivinerConfig>;
8
- export declare const Erc1155ContractInfoSchema = "network.xyo.crypto.contract.erc1155.info";
9
- export type Erc1155ContractInfoSchema = typeof Erc1155ContractInfoSchema;
10
- export type Erc1155ContractInfo = ContractInfo<{
11
- uri?: string;
12
- }, Erc1155ContractInfoSchema>;
13
- export declare class CryptoContractErc1155Diviner<TParams extends CryptoContractErc1155DivinerParams = CryptoContractErc1155DivinerParams> extends CryptoContractDiviner<Erc1155ContractInfo, TParams> {
14
- static configSchemas: string[];
15
- protected reduceResults(address: string, callResults: CryptoContractFunctionCallResult[]): Promise<OmittedContractInfo<Erc1155ContractInfo>>;
16
- }
17
- //# sourceMappingURL=Erc1155Diviner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Erc1155Diviner.d.ts","sourceRoot":"","sources":["../../src/Erc1155Diviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,2DAA2D,CAAA;AAC5G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEzE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAElG,eAAO,MAAM,wCAAwC,4DAA4D,CAAA;AACjH,MAAM,MAAM,wCAAwC,GAAG,OAAO,wCAAwC,CAAA;AAEtG,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAA;AAC9D,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAC,kCAAkC,CAAC,CAAA;AAElG,eAAO,MAAM,yBAAyB,6CAA6C,CAAA;AACnF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAA;AAExE,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAC5C;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,EACD,yBAAyB,CAC1B,CAAA;AAED,qBAAa,4BAA4B,CACvC,OAAO,SAAS,kCAAkC,GAAG,kCAAkC,CACvF,SAAQ,qBAAqB,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC3D,OAAgB,aAAa,WAA6C;cAEjD,aAAa,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,gCAAgC,EAAE,GAC9C,OAAO,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;CAOrD"}
@@ -1,17 +0,0 @@
1
- import { CryptoContractFunctionCallResult } from '@xyo-network/crypto-contract-function-read-payload-plugin';
2
- import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
3
- import { ContractInfo, CryptoContractDiviner, OmittedContractInfo } from './CryptoContractDiviner';
4
- export declare const CryptoContractErc1155DivinerConfigSchema = "network.xyo.crypto.contract.erc1155.info.diviner.config";
5
- export type CryptoContractErc1155DivinerConfigSchema = typeof CryptoContractErc1155DivinerConfigSchema;
6
- export type CryptoContractErc1155DivinerConfig = DivinerConfig;
7
- export type CryptoContractErc1155DivinerParams = DivinerParams<CryptoContractErc1155DivinerConfig>;
8
- export declare const Erc1155ContractInfoSchema = "network.xyo.crypto.contract.erc1155.info";
9
- export type Erc1155ContractInfoSchema = typeof Erc1155ContractInfoSchema;
10
- export type Erc1155ContractInfo = ContractInfo<{
11
- uri?: string;
12
- }, Erc1155ContractInfoSchema>;
13
- export declare class CryptoContractErc1155Diviner<TParams extends CryptoContractErc1155DivinerParams = CryptoContractErc1155DivinerParams> extends CryptoContractDiviner<Erc1155ContractInfo, TParams> {
14
- static configSchemas: string[];
15
- protected reduceResults(address: string, callResults: CryptoContractFunctionCallResult[]): Promise<OmittedContractInfo<Erc1155ContractInfo>>;
16
- }
17
- //# sourceMappingURL=Erc1155Diviner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Erc1155Diviner.d.ts","sourceRoot":"","sources":["../../src/Erc1155Diviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,2DAA2D,CAAA;AAC5G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEzE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAElG,eAAO,MAAM,wCAAwC,4DAA4D,CAAA;AACjH,MAAM,MAAM,wCAAwC,GAAG,OAAO,wCAAwC,CAAA;AAEtG,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAA;AAC9D,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAC,kCAAkC,CAAC,CAAA;AAElG,eAAO,MAAM,yBAAyB,6CAA6C,CAAA;AACnF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAA;AAExE,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAC5C;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,EACD,yBAAyB,CAC1B,CAAA;AAED,qBAAa,4BAA4B,CACvC,OAAO,SAAS,kCAAkC,GAAG,kCAAkC,CACvF,SAAQ,qBAAqB,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC3D,OAAgB,aAAa,WAA6C;cAEjD,aAAa,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,gCAAgC,EAAE,GAC9C,OAAO,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;CAOrD"}
@@ -1,17 +0,0 @@
1
- import { CryptoContractFunctionCallResult } from '@xyo-network/crypto-contract-function-read-payload-plugin';
2
- import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
3
- import { ContractInfo, CryptoContractDiviner, OmittedContractInfo } from './CryptoContractDiviner';
4
- export declare const CryptoContractErc1155DivinerConfigSchema = "network.xyo.crypto.contract.erc1155.info.diviner.config";
5
- export type CryptoContractErc1155DivinerConfigSchema = typeof CryptoContractErc1155DivinerConfigSchema;
6
- export type CryptoContractErc1155DivinerConfig = DivinerConfig;
7
- export type CryptoContractErc1155DivinerParams = DivinerParams<CryptoContractErc1155DivinerConfig>;
8
- export declare const Erc1155ContractInfoSchema = "network.xyo.crypto.contract.erc1155.info";
9
- export type Erc1155ContractInfoSchema = typeof Erc1155ContractInfoSchema;
10
- export type Erc1155ContractInfo = ContractInfo<{
11
- uri?: string;
12
- }, Erc1155ContractInfoSchema>;
13
- export declare class CryptoContractErc1155Diviner<TParams extends CryptoContractErc1155DivinerParams = CryptoContractErc1155DivinerParams> extends CryptoContractDiviner<Erc1155ContractInfo, TParams> {
14
- static configSchemas: string[];
15
- protected reduceResults(address: string, callResults: CryptoContractFunctionCallResult[]): Promise<OmittedContractInfo<Erc1155ContractInfo>>;
16
- }
17
- //# sourceMappingURL=Erc1155Diviner.d.ts.map